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_uri
和state
,看看它们是否匹配。我记得以前有时会遇到 state
与 Google 登录不匹配的问题。
顺便说一句,如果您使用 Django,我建议您使用 social-app-django,它目前处于活动状态并支持多个社交登录选项(如果您考虑添加更多社交登录提供程序)。
【讨论】:
以上是关于Google OpenID/联合登录定期失败的主要内容,如果未能解决你的问题,请参考以下文章