请求具有无效的身份验证凭证.预期的OAuth 2访问令牌,登录cookie或其他有效的身份验证凭据



我在.NET Core 2.2 Framework的顶部编写了一个带有C#的控制台应用程序。

我正在尝试使用我的应用程序连接Google我的业务API来创建帖子。

但是,每次我尝试调用REST API时,我都会收到以下错误

请求具有无效的身份验证凭证。预期的Oauth 2 访问令牌,登录cookie或其他有效的身份验证凭据。 看 https://developers.google.com/indistity/sign-in/web/devconsole-project。

代码以前有效,但出于某种奇怪的原因,它停止了!

以下是我获得身份验证令牌的示例,然后致电API获取Google帐户列表。

var credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(new ClientSecrets
{
    ClientId = "Client ID",
    ClientSecret = "Client Secret",
}, new[] { "https://www.googleapis.com/auth/plus.business.manage" }, "google username", CancellationToken.None);
using (var client = new HttpClient())
{   
    //client.DefaultRequestHeaders.Clear();
    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", credential.Token.AccessToken);
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    var c = await client.GetAsync("https://mybusiness.googleapis.com/v4/accounts");
    var accountContentss = await c.Content.ReadAsStringAsync();
    c.EnsureSuccessStatusCode();
    var accountContent = await c.Content.ReadAsStringAsync();
}

我能够在没有问题的情况下进行身份验证并获得访问令牌。但是,由于某种原因,对API的第二个呼叫失败。

如何正确致电Google API?在Accestoken旁边,还有其他内容应该在标题中传递吗?

事实证明, GoogleWebAuthorizationBroker.AuthorizeAsync()正在返回过期的令牌!如果API返回一条消息,说令牌已过期!

要解决问题,而不是手动访问AccessToken(即credential.Token.AccessToken(,我使用了await Credential.GetAccessTokenForRequestAsync()方法来获取访问令牌。

Credential.GetAccessTokenForRequestAsync()方法随时返回有效的令牌。换句话说,如果令牌已过期,它会使用刷新式来生成新的。否则,它返回现有的非预期令牌。

我将我的授权标题更改为此

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", await Credential.GetAccessTokenForRequestAsync());

最新更新