我正在开发一个与谷歌应用程序集成的 Django 应用程序。我想让用户使用他们的 google apps 帐户登录(google 托管域中的帐户,不是 google 帐户),这样他们就可以访问他们的文档、日历等等。
为了做到这一点,我下载并开始使用 django_openid_auth(因此,python-openid)。
首先,为了测试它,我在我的设置中使用了这个 url:
OPENID_SSO_SERVER_URL = 'https://www.google.com/accounts/o8/id'
然后我设法将用户重定向到 google 帐户页面进行登录,然后返回到我自己的域,使用 authentication cycle谷歌人描述的成功完成。但是,登录谷歌帐户对我来说没什么用,因为我希望在其托管域中拥有谷歌应用程序帐户但没有谷歌帐户的用户可以登录。 为此,我阅读了关于发现的谷歌文章“发现托管域的 OpenID 端点”,并将上述设置更改为:
OPENID_SSO_SERVER_URL = 'https://www.google.com/accounts/o8/site-xrds?hd=<my-domain>.com'
-显然,<my-domain>
是我的实际域名 ;)
但是后端响应如下消息:
OpenID authentication failed: HTTP Response status from identity URL host is not 200. Got status 404
稍微调试一下,我设法发现 python-openid(版本 2.2.4)中的代码是错误解释来自 google 的响应的代码,但我在这里很茫然。
我已经在 socialwok.com 和 puffypoodles.com 上看到我自己的域中的身份验证工作所以我很确定我的谷歌应用程序域的身份验证周期有效,但不知何故 python-openid 似乎无法完成它(不过,我重申,它适用于普通的旧 Google 帐户)。
我应该尝试修复 python-openid,还是有其他方法可以解决这个问题?有没有人成功地在纯 django 应用程序中使用谷歌应用程序登录(不在谷歌应用程序引擎中)?
最佳答案
根据 http://groups.google.com/group/google-federated-login-api/web/openid-discovery-for-hosted-domains , Google 稍微改变了 IdP Discovery 和用户 XRDS 检查的方式,以在 http://example.com/openid?id=108441225163454056756 中为 Google Apps 用户提供 openid一种格式,无需用户构建自己的 openid 服务器。对于小型公司,如果他们使用 Google Apps,人们只需一个域名就可以在他们的域下获得他们的 openid。
这可能是一个很好的方法,因为人们可以使用他们的 Google Apps 帐户进行身份验证,并且他们仍然可以在他们自己的域下提供 openids,他们可以在将来更改身份验证后端。它简单且可扩展,但遗憾的是它还没有成为标准。所以,如果你使用像 python-openid 这样的标准库,你会遇到一些问题。
要解决这些问题,您必须自己修补 python-openid 以遵循 Google 的方法。
我之前遇到过同样的问题,我有一个适合我的 python-openid v2.1.1 补丁版本。
如果您需要,我可以在清理后发布我的代码。这是一个快速补丁,所以不要期望太多:)
关于python - 在 Django 中登录 Google 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2313573/