我已经成功地使用OAuth1.0 + OpenID Hybrid协议(protocol)与Google进行身份验证,然后再使用其服务。

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

  • 执行发现
  • 使用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/)将用户重定向到提供程序
  • 一旦用户成功验证并批准了权限请求,应用程序就会使用与上述请求类似的字符串返回到我指定的callbackurl,该字符串类似于我从“openid.ext2.request_token”中提取授权 token ,然后通过传递该 token 来获取访问 token 。

  • 但是,对于特定的用户帐户,Google不会重定向到成功验证和授予权限后的上述结果,而是将其重定向到某个URL https://accounts.google.com/o/openid2/approval?xsrfsign=AC9jObYAAAAATpF6x6S6Ac7MfHaZ,然后返回到我的应用程序,而查询字符串中没有任何参数。

    相同的代码对其他帐户也可以正常工作。我无法确定一个帐户的特殊性(除了我上个月才创建的)。请注意,只有在我将picasa包括在范围内时,才会发生这种情况。如果我排除picasa,则可以。

    请帮忙。

    最佳答案

    能够通过添加request_token请求来解决此问题。奇怪的是,它不需要大多数帐户的请求就可以工作。但是,对于创建的新帐户,我必须在请求中显式设置此参数。设置完此参数后,无需将用户重定向到xsrfsign。URL,我获得了用户详细信息和请求 token 。

    关于oauth - 谷歌混合协议(protocol)身份验证问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7703002/

    10-13 08:59