无法为访问令牌交换OAuth身份验证代码

时间:2018-05-12 17:37:17

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

我只是想制作一个简单的应用,但我甚至无法通过验证用户身份。我正在使用Google OAuth Client Library for Java 这些是我目前正在采取的步骤:

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

    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. 使用网址验证帐户。
  4. Google会返回身份验证码。
  5. 交换访问令牌的验证码。

    TokenResponse token = new AuthorizationCodeTokenRequest(...)
    .setRedirectUri("http://localhost") // <--
    .setClientAuthentication(getClientAuth()) // ClientParametersAuthentication object
    .execute();
    
  6. 这是我的问题发生的地方。无论我为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",但无论我输入什么,它都会出现同样的错误。

    我转到项目的Credentials部分来修复它,但由于这是一个已安装的应用程序,因此为项目创建凭据会为我提供 no 选项来设置任何重定向uris。访问更改redirect_uris的唯一方法是为&#34; Web应用程序创建凭据,&#34;但这不是一个网络应用程序,我没有一个可以重定向到的域名。

    所以我被卡住了,redirect_uri选项对我来说无法使用,我使用的价值也没有用,老实说,我不知道还有什么可以尝试。我可以采取哪些措施来解决这个问题?

1 个答案:

答案 0 :(得分:1)

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