gpt4 book ai didi

c# - 请求具有无效的身份验证凭据。预期的 OAuth 2 访问 token 、登录 cookie 或其他有效的身份验证凭证

转载 作者:太空宇宙 更新时间:2023-11-03 22:32:24 44 4
gpt4 key购买 nike

我有一个在 .NET Core 2.2 框架之上使用 C# 编写的控制台应用程序。

我正在尝试使用我的应用连接 Google 我的商家 API 以创建 posts .

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

Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.

代码之前可以正常工作,但由于某些奇怪的原因,它停止了!

这是我获取身份验证 token 然后调用 API 获取 Google accounts 列表的示例.

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();
}

我能够毫无问题地进行身份验证并获取访问 token 。但是,由于某种原因,第二次调用 API 失败。

如何正确调用 Google API?除了 AccesToken 之外,是否还有其他内容应该在 header 中传递?

最佳答案

原来是 GoogleWebAuthorizationBroker.AuthorizeAsync() 返回了一个过期的 token !如果 API 返回一条消息说明 token 已过期,那将非常有帮助!

为了解决这个问题,我没有手动访问 AccessToken(即 credential.Token.AccessToken),而是使用了 await Credential.GetAccessTokenForRequestAsync() 方法来获取访问 token 。

Credential.GetAccessTokenForRequestAsync() 方法在任何时候被调用都会返回一个有效的 token 。换句话说,如果 token 过期,它会使用刷新 token 生成一个新 token 。否则,它返回现有的未过期 token 。

我将我的授权 header 更改为此

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

关于c# - 请求具有无效的身份验证凭据。预期的 OAuth 2 访问 token 、登录 cookie 或其他有效的身份验证凭证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56828674/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com