Google Oauth2 出现 invalid_grant 错误问题

问题描述 投票:0回答:2

大家加油, 我们一直在深入阅读关于从 google 交换 access_token 的 google 文档,以便我们的(delphi)桌面应用程序从服务器端与 google 进行 SSO。这是我们首先发送的有效负载:

https://accounts.google.com/o/oauth2/v2/auth?client_id=1000217514248-t1lojs6f8ed7l9ocrpbm98leahtum8n1.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code &状态=E1DF2FBA- 0A66-4D69-B594-5EB8F7828AF7&scope=openid+profile&include_granted_scopes=true&code_challenge=C832DA50-E55A-499D-89B8-493BB4123C94&[电子邮件受保护]

通常在此之后,它会重定向我登录到我们的测试用户,然后根据文档,我们向端点令牌发送 POST 请求,以获取 access_token 和刷新_token...:'https://oauth2. googleapis.com/token 使用以下参数,生成“代码”,我们也将其发送如下:

client_id=1000217514248-t1lojs6f8ed7l9ocrpbm98leahtum8n1.apps.googleusercontent.com
grant_type=authorization_code 
 client_secret=******
code= 4/1AY0e-g4GlavO38PI5Oo3vq04Pc4lMWN77et-02UiVWOsT-IyRQnU1lq19qo
redirect_uri = urn:ietf:wg:oauth:2.0:oob

回应总是

{
  "error_description": "Missing code verifier.", 
  "error": "invalid_grant"
}

我们也尝试发送客户端秘密 ID,这与我们的 code_challenge 有关吗?终点 url 和初始 url 可以吗?我们缺少什么?我们使用 CEF4Delphi 作为“类似浏览器的体验,以便用户输入他们的 google 凭据。我们一直在阅读:https://developers.google.com/identity/protocols/oauth2/web-server#offline 我们还尝试了游乐场:https://developers.google.com/oauthplayground/ 我们在生成“代码”的 Chrome 中发送初始网址,并在 Playground 中插入代码,但仍然遇到缺少代码验证器的相同错误。

谢谢大家

delphi oauth-2.0 google-api google-oauth cef4delphi
2个回答
1
投票

你似乎对很多值进行了 URL 编码,但尽量不要这样做。在开始添加其他内容之前,还可以尝试使用基本调用。它应该可以帮助您找出您发送的额外参数中哪一个导致了您的问题。

https://accounts.google.com/o/oauth2/auth?client_id={clientid}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=profile&response_type=code

还要确保客户端 ID 来自已安装/其他类型的客户端

这也可能有帮助 Google 3 Legged OAuth2 Flow


0
投票

对于已安装的应用程序,代码质询和验证程序是用于通过 PKCE [1] 增强 OAuth 流程安全性的参数。

此处有关于生成代码质询和验证程序的其他文档 [2]。

[1] https://www.rfc-editor.org/rfc/rfc7636

[2] https://developers.google.com/identity/protocols/oauth2/native-app#step1-code-verifier

© www.soinside.com 2019 - 2024. All rights reserved.