从Android获取Google oauth授权令牌 - 返回invalid_scope / Unknown错误

时间:2013-08-21 15:05:16

标签: android oauth-2.0

我尝试使用Google oauth对我的Android应用上的用户进行身份验证。 然后我想将它发送到我的应用服务器,以便它可以随时与Google日历连接。

我试过用      GoogleAuthUtil.getToken(getApplicationContext(), mAccountName, mScope);

关注本文: https://developers.google.com/accounts/docs/CrossClientAuth

当我在范围内使用它时 mScope = "oauth2:https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile"; 我得到一个有效一小时的令牌

但是当我尝试获取授权代码时(因此我可以获得一个有效期较长的刷新令牌,使用 mScope2 ="oauth2:server:client_id:{CLIENT_ID}.apps.googleusercontent.com"+ ":api_scope:https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile";

我收到“invalid_scope”或“Unknown”异常。

我做错了什么?

编辑: 好的,在谷歌API控制台上创建一个新的应用程序并将plus.login添加到范围后,我得到了一个代码,但由于某种原因,我的服务器无法解析此令牌。绑定解析服务器时会收到有关重定向URL的错误。 顺便说一句,当我使用相同的参数进行网络流程时,它可以工作。

3 个答案:

答案 0 :(得分:11)

好的,找到了解决方案,我希望Google能够提供更多关于使用Google Oauth和Android的文档。使用Android和离线令牌时必须了解的一些事项

  1. 创建Google客户端ID时不要在创建Web应用程序之前创建服务应用程序

  2. 您的范围必须包含https://www.googleapis.com/auth/plus.login

  3. 最奇怪的是,为了解析我服务器上的一次性授权代码,我不得不使用Android客户端ID详细信息中的重定向URL(它甚至看起来不像网址)而不是来自Google API控制台上的Web客户端详细信息。

答案 1 :(得分:0)

该范围字符串仅记录在传递给GoogleAuthUtil()时有效,请参阅Android上的http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html。但如果它也适用于iOS,那将会很酷;我们的基础设施有点落后于我们在Android上的位置。

答案 2 :(得分:-1)

您只需按照正确的步骤/格式指定范围即可。在这里找到他们https://developers.google.com/android/guides/http-auth#SpecifyingScopes