谷歌混合协议身份验证问题

时间:2011-10-09 10:53:49

标签: oauth openid gdata picasa

我已成功使用OAuth1.0 + OpenID混合协议对Google进行身份验证,然后使用其服务。

但是,我面临特定用户帐户的错误。 我目前的流程:

  1. 执行发现

  2. 使用OpenID和OAuth参数将用户重定向到提供商(例如:https://accounts.google.com/o/openid2/auth?https://accounts.google.com/o/openid2/auth?openid.ns=http://specs.openid.net/auth/2.0&openid.claimed_id=http://specs.openid.net/auth/2.0/identifier_select&.....&openid.ns.ext2=http://specs.openid.net/extensions/oauth/1.0&openid.ext2.consumer=mywebsite.com&openid.ext2.scope=https://picasaweb.google.com/data+https://www-opensocial.googleusercontent.com/api/people/+http://www.google.com/m8/feeds/

  3. 一旦用户成功验证并批准了权限请求,应用程序将返回到我指定的callbackurl long,其字符串类似于上述请求,我从“openid.ext2.request_token”中提取授权令牌,然后获取访问令牌通过它。

  4. 但是对于特定用户帐户,在成功进行身份验证和授予权限后,不是按照上述方式传递结果,而是重定向到某个网址https://accounts.google.com/o/openid2/approval?xsrfsign=AC9jObYAAAAATpF6x6S6Ac7MfHaZ,然后返回到我的应用程序,而不在查询字符串中包含任何参数。

    相同的代码适用于其他帐户。我无法确定一个帐户的特殊功能(除了我上个月创建的)。请注意,只有当我在范围内包含picasa时才会发生这种情况。如果我排除picasa,它就可以了。

    请帮忙。

1 个答案:

答案 0 :(得分:1)

能够通过添加request_token请求来解决此问题。奇怪的是,它可以在没有大多数帐户的请求的情况下工作。但是,对于创建的新帐户,我必须在请求中显式设置此参数。一旦设置了此参数,而不是将用户重定向到xsrfsign .. URL,我获得了用户详细信息和请求令牌。