Google的UserInfo API是否提供任何保证?

时间:2013-02-25 18:03:19

标签: google-api google-oauth

我们几个月前为我们的网站实施了Google OAuth。到目前为止,两个用户(约100个)拥有不完整的userinfo配置文件。我们使用有效令牌拨打' https://www.googleapis.com/oauth2/v1/userinfo?',响应json仅包含[locale,verified_email,email,id]。

文档(https://developers.google.com/accounts/docs/OAuth2Login#userinfocall)不是明确的,而是我解释它们的方式,

响应应始终包括: [id,email,verified_email,name,given_name,family_name,timezone,gender] 有时还包括: [图片,现场]

有谁知道UserInfo API带来了什么样的保证?我应该拒绝不完整的个人资料吗?有没有其他解释为什么配置文件不完整?

更新3/6/14
我能够复制这个问题。我们将用户发送到谷歌请求,两个范围:

https://www.googleapis.com/auth/userinfo.profile

https://www.googleapis.com/auth/userinfo.email

据我所知谷歌不允许用户挑选他们允许的范围。它全有或全无。但是,我能够从URL中删除userinfo.profile范围并重新加载页面。这导致我使用有效令牌发回,但不是正确的范围。我需要点击tokeninfo端点并确保已经授权正确的范围。

4 个答案:

答案 0 :(得分:0)

你也在使用OpenID吗?我强烈怀疑这些用户实际上没有UserInfo的有效OAuth令牌,而是您获得的数据与较弱的OAuth权限相对应。理想情况下,向这些用户询问您的网站的哪些数据会显示在他们的Google帐户安全页面中,并将其与功能用户的数据进行比较,例如自己。

尝试撤销你的令牌,然后点击终点,看看你得到了什么结果。

答案 1 :(得分:0)

注意:这就是我的想法

我已经和OAuth合作了一段时间,并且在例如Facebook个人资料的情况下遇到过这个问题。说实话,我不明白为什么请求应该返回不完整的数据(假设范围是正确的),除了提供者的实际配置文件是不完整的(尽管你没有意义这个{{ 1}}而没有[locale, verified_email, email, id])。例如,某些配置文件没有配置文件图片e.t.c。

总而言之,我会说:这不是保证(这不仅仅是针对Google的)。我以前写过一个OAuth身份服务器,OAuth什么都不做(除非我错过了)来强制执行你必须通过API公开的数据类型。您应该在存储之前检查数据。

拒绝个人资料部分,我认为这应该是您在应用上设置的标准,例如您不接受没有[firstName, lastName]的个人资料。

答案 2 :(得分:0)

我遇到了同样的问题。对于某些个人资料," userinfo" scope不返回given_name和family_name。直到我找到原因为止,在没有返回任何值时,我使用空格字符串。我不能假设Google让人们创建Google帐户而不提供名字和姓氏的某些值。谷歌API有问题,缓慢和混乱。所以我宁愿假设这是API问题。

答案 3 :(得分:0)

尝试使用v3的userinfo API,它已经非常可靠地返回了given_name

https://www.googleapis.com/oauth2/v3/userinfo