【问题标题】:Unable to exchange OAuth auth code for access token无法为访问令牌交换 OAuth 身份验证代码
【发布时间】:2018-10-22 20:33:30
【问题描述】:

我只是想制作一个简单的应用程序,但我什至无法通过验证用户。我正在使用适用于 Java 的 Google OAuth 客户端库。
这些是我目前正在采取的步骤:

  1. 启动本地 Web 服务器以侦听 OAuth 身份验证后的环回响应。
  2. 生成授权 URL:

    String url = new AuthorizationCodeRequestUrl(AUTH_URL, CLIENT_ID)   
            .setScopes(scopes) // Contains https://www.googleapis.com/auth/drive.readonly
            .setRedirectUri(LOCALHOST + r.getPort()) // Port of local web server
            .build();
    
  3. 使用 URL 验证帐户。
  4. Google 返回验证码。
  5. 交换身份验证码以获取访问令牌。

    TokenResponse token = new AuthorizationCodeTokenRequest(...)
    .setRedirectUri("http://localhost") // <--
    .setClientAuthentication(getClientAuth()) // ClientParametersAuthentication object
    .execute();
    

这是我的问题发生的地方。无论我为redirect_uri 赋予什么价值,我总是得到{"error":"redirect_uri_mismatch","error_description":"Bad Request"} 作为回报。
在 Google 上搜索错误,每个结果都说是因为我发送的 redirect_uri 没有在 API 控制台中注册。
当我下载凭证 json 文件时,redirect_uris 部分包含"urn:ietf:wg:oauth:2.0:oob","http://localhost",但无论我输入什么,它都是相同的错误。

我去项目的凭据部分修复它,但由于这是一个已安装的应用程序,为项目创建凭据给了我 no 选项来设置任何重定向 uri。访问更改的 redirect_uris 的唯一方法是为“Web 应用程序”创建凭据,但这不是 Web 应用程序,我没有可以重定向到的域。

所以我被卡住了,redirect_uri 选项对我不可用,并且我使用的任何值都不起作用,老实说,我不知道还能尝试什么。我可以采取哪些步骤来解决此问题?

【问题讨论】:

    标签: java google-cloud-platform google-oauth google-oauth-java-client


    【解决方案1】:

    事实证明,身份验证码和访问令牌必须使用相同的redirect_uri,即使它不会用于检索访问令牌。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-11
      • 2019-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多