Google OpenID/联合登录定期失败

Posted

技术标签:

【中文标题】Google OpenID/联合登录定期失败【英文标题】:Google OpenID/federated login periodically fails 【发布时间】:2010-12-04 01:27:01 【问题描述】:

我正在开发一个使用 python-openid 的 Django 应用程序。该应用程序正在我家中的开发服务器上运行。

类似于 *** 的登录机制,我希望用户使用他们的 Google 凭据登录我的网站。

我为此实现的代码可以正常运行几个星期,然后停止工作。我在以下 Google 页面的登录过程中卡住了:https://www.google.com/accounts/o8/ud 并显示此消息:“您请求的页面无效。”它会随机重新开始工作,但每隔几周左右就会失败。

通过雅虎登录工作了几个月,今天已经停止工作,并在此页面上显示以下消息:“此页面已过期,请返回原始页面,请重试”:https://open.login.yahooapis.com/openid/op/auth

这是 LiveHttpHeaders for Google 捕获的请求:

https://www.google.com/accounts/o8/ud

POST /accounts/o8/ud HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.10) Gecko/2009042513 Ubuntu/8.04 (hardy) Firefox/3.0.10
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8    
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://127.0.0.1:8000/users/login/
Content-Length:907
openid.ax.if_available=ext1&openid.mode=checkid_setup&openid.ns=http://specs.openid.net/auth/2.0&openid.realm=http://127.0.0.1:8000/accounts/login/&openid.return_to=http://127.0.0.1:8000/users/login/finish/?janrain_nonce=2009-10-05T19%3A10%3A11ZtioiRm&openid.ax.count.ext1=unlimited&openid.ax.mode=fetch_request&openid.sreg.optional=email&openid.claimed_id=http://specs.openid.net/auth/2.0/identifier_select&openid.ns.sreg=http://openid.net/extensions/sreg/1.1&openid.ns.ax=http://openid.net/srv/ax/1.0&openid.identity=http://specs.openid.net/auth/2.0/identifier_select&openid.assoc_handle=AOQobUcnzec0bpeZRztjqPrr5TQUA0aPL7SIuOPOMgWxex2HRAP09AyJ&openid.ax.required=ext0&openid.ax.type.ext0=http://schema.openid.net/namePerson&openid.ax.type.ext1=http://schema.openid.net/contact/web/default

HTTP/1.x 400 Bad Request
Cache-Control: no-cache, no-store, max-age=0, must-revalidate

我不确定这里发生了什么,希望得到一些帮助。

【问题讨论】:

会失败一次吗?反复一天左右?什么情况下它又开始工作了? 我遇到了像你这样的问题。但有些更糟!我登录用户没有问题,但每隔一天,谷歌提供的身份字符串应该是唯一的变化!所以用户不能再用他们在我网站上的帐户登录。我不知道会发生什么。 【参考方案1】:

您使用的代码似乎生成了错误的 URL 请求。真正的 URL 是https://www.google.com/accounts/o8/id,所以试着把最后的“ud”改成“id”。

希望这会有所帮助!

【讨论】:

【参考方案2】:

您可以构造 uri 并使用 GET 方法将用户重定向到 uri。如果你做 POST 谷歌期望一些我认为没有提到文档的标题。检查sample 请求。我尝试使用不带 python-openid 的 GET 它运行良好。

【讨论】:

【参考方案3】:

您可以查看内部的redirect_uristate,看看它们是否匹配。我记得以前有时会遇到 state 与 Google 登录不匹配的问题。

顺便说一句,如果您使用 Django,我建议您使用 social-app-django,它目前处于活动状态并支持多个社交登录选项(如果您考虑添加更多社交登录提供程序)。

【讨论】:

以上是关于Google OpenID/联合登录定期失败的主要内容,如果未能解决你的问题,请参考以下文章

托管应用程序的 Google 联合登录 (OpenID+Oauth) - 更改端点?

联合 google 登录问题(aws 放大和反应原生)

仅向 Google 网站登录请求“openid”范围

Google 登录或 OpenID Connect

OpenId + 记住我/保持登录状态

设置 Google OpenId 登录