Google+登录redirect_uri_mismatch错误

时间:2013-12-06 15:41:48

标签: android ruby-on-rails google-plus

我正在尝试在我的系统中实现一次性代码登录流程。 申请包含两部分: 1)Android应用程序,它要求Google+提供一次性授权代码 2)Rails服务器从请求头中的android应用程序接收一次性代码,并尝试从Google +交换access_tokenid_token的代码

问题是,如果我在浏览器中使用JavaScript登录按钮获得一次性代码,那么一切运行良好,但是当Android应用程序获得一次性代码然后发送到我的服务器时,该代码无效。

我总是

"error" : "redirect_uri_mismatch"

我的服务器设置如下:

{ "web":
 { "client_id": "MY_REGISTERED_WEB_APP_CLIENT_ID",
   "client_secret": "MY_CLIENT_SECRET",
    "redirect_uris": ["postmessage"],
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://accounts.google.com/o/oauth2/token"
  }
}

现在,我如何从Android应用程序请求一次性代码: 我使用与我的服务器上相同的MY_REGISTERED_WEB_APP_CLIENT_ID来请求一次性代码。我不知道,也许我必须在Android上使用另一个客户端ID,这对应于我的Android应用程序?但所有找到的文档和文章都指向已注册 网络应用client_id

或者我的rails服务器可能不是针对网络配置的,而是针对在Google控制台应用中注册的已安装类型?

现在关于redirect_uris。 我尝试在Google控制台中设置多个redirect_uris

  • 空场
  • http://localhost:5000
  • https://localhost:5000
  • http://my.deployment.url/auth2callback

Google控制台中的网络来源设置为   - http://my.deployment.url   - http://localhost:5000

无法弄清楚我做错了什么。 实际上我不明白为什么我需要设置这个redirect_uris值,因为我不希望收到来自Google的回调,我只想获得access_token并使用它来访问Google +。

2 个答案:

答案 0 :(得分:2)

这种情况正在发生,因为您的Android应用程序用于创建初始登录流的redirect_uri与服务器在尝试为access_token进行代码扩展时使用的redirect_uri不同。用户返回的redirect_uri和令牌交换中使用的redirect_uri必须匹配。

答案 1 :(得分:1)

在这种情况下,正确redirect_uri"urn:ietf:wg:oauth:2.0:oob"