2011-10-09 45 views
4

我已经成功使用OAuth1.0 + OpenID混合协议进行谷歌身份验证,之后使用其服务。谷歌混合协议认证问题

但是,我正面临特定用户帐户的错误。 我的电流流动:

  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”的授权令牌,然后通过传递获取访问令牌。

然而,对于特定的用户帐户,而不是通过上面的结果成功认证和权限的授予后的声明,谷歌重定向到某些URL https://accounts.google.com/o/openid2/approval?xsrfsign=AC9jObYAAAAATpF6x6S6Ac7MfHaZ然后回到我的应用程序,而不在查询字符串的任何参数。

相同的代码适用于其他帐户。我无法确定一个账户可以做什么特别的(除了我上个月创建的)。请注意,只有当我在范围中包含Picasa时才会发生这种情况。如果我排除Picasa,则可以使用。

请帮忙。

回答

2

通过添加request_token请求可以解决此问题。奇怪的是,它的工作原理并没有对大多数账户提出这样的要求。但是,对于创建的新帐户,我必须在请求中明确设置此参数。一旦设置了此参数,而不是将用户重定向到xsrfsign .. URL,我就得到了用户详细信息和请求令牌。