在Google+ API中同时要求plus.login和userinfo.profile范围权限

时间:2013-09-22 12:29:21

标签: android ios oauth google-plus

我有点困惑。使用Google+ Android SDK将用户登录到我的应用并获取其个人资料详细信息。 https://developers.google.com/+/api/oauth上的手册清楚地说明了

  

您应该请求userinfo.profileplus.meplus.login范围结合使用,因为它们是隐式包含的,会为您的用户创建一个令人困惑的权限对话框。

所以我只询问plus.login范围(和userinfo.email范围,但这没有关系)。尝试通过调用

来调试令牌
  

https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=ACCESS_TOKEN

以下是我的回复:

{
    "issued_to": "534771845378-3668o318pburvuhrukgj7pao3ir****.apps.googleusercontent.com",
    "audience": "534771845378-3668o318pburvuhrukgj7pao****.apps.googleusercontent.com",
    "user_id": "106027222137637*****",
    "scope": "https://www.googleapis.com/auth/plus.login https://www.googleapis.com/auth/userinfo.email",
    "expires_in": 2279,
    "email": "****@****.com",
    "verified_email": true,
    "access_type": "online"
}

以下是我通过调用

尝试获取用户个人资料的响应
  

https://www.googleapis.com/oauth2/v2/userinfo?access_token=ACCESS_TOKEN

{
    "id": "10602722213763777****",
    "email": "****@****.com",
    "verified_email": true,
    "hd": "****.com"
}

显然,您可以看到此响应中没有任何用户个人资料详细信息。

当我添加userinfo.profile范围时,就像谷歌说你不应该一样,我对用户的个人资料详细信息得到了很好的回复。

Google上发生了什么?

3 个答案:

答案 0 :(得分:0)

我不知道为什么,但显然你无法在同一个api电话中收到电子邮件和用户的个人资料。

在询问plus.loginuserinfo.email范围时,您应首先使用访问令牌调用https://www.googleapis.com/oauth2/v2/userinfo端点并获取电子邮件地址。
然后,如果您需要用户的个人资料详细信息,则需要调用https://www.googleapis.com/plus/v1/people/me端点(当然还有访问令牌)。

这使得它不必要地变得复杂,谷歌?

答案 1 :(得分:0)

我发现我使用以下范围获得了电子邮件和个人资料:

'https://www.googleapis.com/auth/plus.login','email','个人资料'

答案 2 :(得分:0)

这很棘手,请使用以下范围

scope = https://www.googleapis.com/auth/userinfo.email+profile

如果需要,请不要忘记upvote。