gpt4 book ai didi

google-api - 无法刷新访问 token : response is "unauthorized_client"

转载 作者:行者123 更新时间:2023-12-03 13:21:37 25 4
gpt4 key购买 nike

尝试刷新访问 token 时出现错误:

400 Bad Request

{error : "unauthorized_client"}



从 Google token URI:
{
"error" : "invalid_request"
}

我读了这个答案 here和 Google 官方文档(描述了 POST 请求的外观),我看不出有任何区别。

我捕获了我的 POST请求(已删除 secret ):
POST /SHOWMERAWPOST HTTP/1.1
User-Agent: Google-HTTP-Java-Client/1.10.3-beta (gzip)
Pragma: no-cache
Host: requestb.in
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 175
Connection: keep-alive
Cache-Control: no-cache
Accept-Encoding: gzip
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2

grant_type=refresh_token&refresh_token=******&client_id=*******.apps.googleusercontent.com&client_secret=******

发送请求的 Java 代码:
RefreshTokenRequest req = new RefreshTokenRequest(new NetHttpTransport(), new JacksonFactory(), new GenericUrl(
getSecrets().getDetails().getTokenUri()), REFRESH_TOKEN);

req.set("client_id", getSecrets().getDetails().getClientId());
req.set("client_secret", getSecrets().getDetails().getClientSecret());

TokenResponse response = req.execute();

有什么不对的吗?

最佳答案

问题说明

在@MartinV 给出的提示下,我终于能够修复它!因为他的回答并没有很好地解释如何解决它,所以我将其发布在这里。

问题是因为我们都使用 Google's OAuth Playground 生成了刷新 token 。 ,但是当您在第一步中单击“授权 API”时,它会将您带到使用 Playground 应用程序的集中屏幕。之后,您创建的所有 token 只能由 Playground 应用程序使用,但您当然不知道该应用程序的客户端 ID 或客户端密码。

解决方案

解决方案是让 Playground 使用您自己的 Client ID 和 Secret。为此,请单击“设置”按钮:

Playground settings

并输入您的客户 ID 和密码。但是,在你这样做之前,正如它所说的那样,你需要去 Developer's Console ,找到您的 OAuth 2.0 客户端 ID 客户端,对其进行编辑并添加 https://developers.google.com/oauthplayground在授权重定向 URI 下。添加并保存更改后,返回 Playground 并尝试授权 API。就我而言,授权重定向 URI 的更改需要 15 分钟才能生效。

完成后,不要忘记从开发者控制台中删除 Playground URI!

额外

一旦我这样做了,在 Python 中我就这样做了,它起作用了:

access_token = None 
client_id = 'xxxxxxxx.apps.googleusercontent.com'
client_secret = 'xxxxxxxxxxxx'
refresh_token = 'xxxxxxxxxxxx'
token_expiry = None
token_uri = "https://accounts.google.com/o/oauth2/token"
user_agent = 'YourAgent/1.0'

credentials = client.GoogleCredentials(access_token, client_id, client_secret, refresh_token, token_expiry, token_uri, user_agent)

http = credentials.authorize(httplib2.Http())
credentials.refresh(http)

service = build('drive', 'v3', http=http)
req = service.files().list()
resp = req.execute(http=http)

关于google-api - 无法刷新访问 token : response is "unauthorized_client",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13871982/

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