Google OAuth2错误-桌面应用程序不符合

rseugnpd  于 2023-03-22  发布在  Go
关注(0)|答案(1)|浏览(303)

我尝试通过Google OAuth 2.0对我的桌面应用程序进行身份验证。不幸的是,每次调用https://oauth2.googleapis.com/token端点时都会收到以下错误:

{
  "error": "invalid_request",
  "error_description": "You can't sign in to this app because it doesn't comply with Google's OAuth 2.0 policy for keeping apps secure. You can let the app developer know that this app doesn't comply with one or more Google validation rules."
}

根据Google Cloud Console进行项目设置:

***发布状态:**测试中

  • 通过电子邮件添加测试人员
  • 已创建应用类型桌面应用的OAuth客户端ID

我不知道我做错了什么。前几步-打开浏览器并使用帐户登录,即注册测试人员-工作完美。这是通过以下URL完成的:

https://accounts.google.com/o/oauth2/v2/auth/oauthchooseaccount?response_type=code&client_id=<client-id>&redirect_uri=http%3A%2F%2Flocalhost%3A8080&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcloud-platform.read-only&access_type=offline&include_granted_scopes=true&service=lso&o2v=2&flowName=GeneralOAuthFlow

正如您所看到的,我将http://localhost:8080设置为redirect_uri。本地Web服务器正在该端口上运行,最终-在浏览器中登录后-我得到code,但使用必要的表单参数调用https://oauth2.googleapis.com/token端点导致前面提到的400错误。

bq8i3lrv

bq8i3lrv1#

我找到了解决方案。我的桌面应用程序使用Ktor,这是我向https://oauth2.googleapis.com/token发送请求时使用的代码:

val response = client.submitForm(
    url = "https://oauth2.googleapis.com/token",
    formParameters = Parameters.build {
        append("code", <code>)
        append("client_id", <id>)
        append("client_secret", <secret>)
        append("redirect_uri", encodedRedirectUri)
        append("grant_type", "authorization_code")
    },
)

问题是:我的redirect_uri。我传递它已经编码,所以我的http://localhost:8080变成http%253A%252F%252Flocalhost%253A8080而不是http%3A%2F%2Flocalhost%3A8080(双重编码)导致“400 - Bad Request”错误。

相关问题