o身份验证 Asp.net 核心 2.0 Web API:机器对机器



我正在使用 Asp.Net Core 2.0 Web Api,其中一个控制器是使用Quickbooks API的客户CRUD。为了能够连接到此API,我必须通过oAuth 2进行身份验证。我不能要求用户通过他在 quickbooks 上的帐户进行身份验证,使用此 API 的任何人都应该看不到此集成。

我的问题是:如何在核心 2.0 上使用 oAuth 2 进行此机器对机器 Asp.net 身份验证?

我有客户端 ID 和密钥。我什至做了一个调用,实际上向我返回了一个持有者令牌,但是当我尝试使用此令牌时,他们的 API 返回错误 500,这让我认为我为获取令牌所做的是错误的。代码如下:

        var client = new RestClient("https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer");
        var request = new RestRequest(Method.POST);
        request.AddHeader("cache-control", "no-cache");
        request.AddHeader("content-type", "application/x-www-form-urlencoded");
        request.AddParameter("application/x-www-form-urlencoded", "grant_type=client_credentials&client_id=xxxx&client_secret=yyy", ParameterType.RequestBody);            
        IRestResponse response = client.Execute(request);

这是响应:{"token_type":"bearer","access_token":"eyJlbmMiOixxx","expires_in":3600}但正如我所说,这个令牌似乎是无效的。

你可以帮我吗?链接,评论,任何东西都会有用。

我找不到机器对机器的方法。所以我做了一个页面,主用户必须至少授权一次。由于我在 Intuit 社区上找不到任何帮助,所以我发布了它,以便它对其他人有用。

Startup.cs中,方法ConfigureServices

    services                
        .AddOAuth("QuickBooks", options =>
        {
            options.ClientId = Configuration["QuickBooks:ClientId"];
            options.ClientSecret = Configuration["QuickBooks:ClientSecret"];
            options.CallbackPath = new PathString("/QuickBooks/Authorize");
            options.AuthorizationEndpoint = Configuration["QuickBooks:AuthorizationEndpoint"];
            options.TokenEndpoint = Configuration["QuickBooks:TokenEndpoint"];
            options.UserInformationEndpoint = Configuration["QuickBooks:UserInformationEndpoint"];
            options.Scope.Add("com.intuit.quickbooks.accounting");
            options.Scope.Add("com.intuit.quickbooks.payment");
            options.SaveTokens = true;
            options.Events = new OAuthEvents
            {
                OnCreatingTicket = async context =>
                {
                    var resp = JsonConvert.DeserializeObject<QuickbooksAuthSettings>(context.TokenResponse.Response.ToString());
                    resp.AuthorizationCode = context.Request.Query["code"].ToString();
                    resp.RealmId = context.Request.Query["realmId"].ToString();
                    TimeSpan tsAccessToken;
                    if (TimeSpan.TryParse(resp.AccessTokenExpireStr, out tsAccessToken))
                        resp.AccessTokenExpire = DateTime.UtcNow.Add(tsAccessToken);
                    resp.RefreshTokenExpire = DateTime.UtcNow.AddSeconds(Convert.ToInt64(resp.RefreshTokenExpireStr));
                    var opts = new DbContextOptionsBuilder<AppDbContext>();
                    opts.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"));
                    var qbService = new QuickBooksService(this.Configuration, new AppDbContext(opts.Options));
                    qbService.SaveToken(resp);
                }
            };
        });

相关内容

最新更新