在android客户端和rails服务器之间共享google oauth验证码

时间:2014-02-19 22:57:24

标签: google-api google-oauth google-api-ruby-client

我正在尝试通过谷歌+在我们的移动应用程序中设置登录。

所以我们有一个Android客户端,可以获取oauth google api的验证码。

然后将verify_code发送回rails,rails负责获取访问令牌/刷新令牌对,然后与api通话。

我遇到验证verify_code的问题。

起初会返回

{
  "error" : "redirect_uri_mismatch"
}

所以看了一下之后我们似乎不应该为android标记指定redirect_uri但是当我尝试将redirect_uri设置为nil时它会失败

{
  "error" : "invalid_request",
  "error_description" : "Missing parameter: redirect_uri"
}

我也尝试将它设置为空字符串而不是nil并再次获得uri_mismatch。

我尝试使用oauth游乐场获得的验证码进行常规验证,然后从那里开始工作。

一些代码

@authorization = CLIENT_SECRETS.to_authorization
@authorization.clear_credentials!
@authorization.grant_type = 'authorization_code'
@authorization.code = authorization_code
@authorization.redirect_uri = nil
@authorization.fetch_access_token!

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

您发送的重定向URI需要与您在google apis console中设置的URI相匹配。

API& auth - >凭证

答案 1 :(得分:0)

好吧,实际上它有点隐藏,但我找到了它。

因此,您需要将重定向uri设置为凭据中设置的“带外”uri。

urn:ietf:wg:oauth:2.0:oob

客户端实际上并未将其设置为该值,但我认为谷歌默认将其设置为该值。

当前的signet gem不允许将redirect_uri设置为该值,所以我在主repo中添加了一个PR,同时我正在使用我的fork,它工作正常。

https://github.com/google/signet/pull/35