10

我正在开发一个与谷歌应用程序集成的 django 应用程序。我想让用户使用他们的谷歌应用账户(谷歌托管域中的账户,而不是谷歌账户)登录,这样他们就可以访问他们的文档、日历等。

为了做到这一点,我下载并开始使用 django_openid_auth(因此,python-openid)。

首先,为了测试它,我在设置中使用了这个 url:

OPENID_SSO_SERVER_URL = 'https://www.google.com/accounts/o8/id'

有了这个,我设法将用户重定向到谷歌帐户页面登录,然后返回我自己的域,谷歌人员描述的身份验证周期成功完成。但是,登录谷歌帐户对我来说没什么用,因为我希望在其托管域中拥有谷歌应用程序帐户的用户 - 但不是谷歌帐户 - 来登录。为此,我阅读了关于发现的谷歌文章“Discovering OpenID Endpoints for Hosted Domains”,并将上述设置更改为:

OPENID_SSO_SERVER_URL = 'https://www.google.com/accounts/o8/site-xrds?hd=<my-domain>.com'

- 显然,<my-domain>我的实际域名在哪里;)

但后端回复了以下消息:

OpenID 身份验证失败:来自身份 URL 主机的 HTTP 响应状态不是 200。得到状态 404

稍微调试一下,我发现python-openid(版本2.2.4)中的代码是误解了谷歌响应的代码,但我在这里很茫然。

我已经在 socialwok.com 和 puffypoodles.com 看到我自己的域中的身份验证所以我很确定我的谷歌应用域的身份验证周期有效,但不知何故 python-openid 似乎无法完成它(虽然,我重申,它适用于普通的旧谷歌账户)。

我应该尝试修复 python-openid,还是有其他方法可以解决这个问题?有没有人成功地在纯 django 应用程序(而不是谷歌应用程序引擎)中使用谷歌应用程序登录?

4

2 回答 2

8

根据http://groups.google.com/group/google-federated-login-api/web/openid-discovery-for-hosted-domains,谷歌改变了 IdP Discovery 的方式和用户 XRDS 检查一点给Google Apps 用户 openid 采用http://example.com/openid?id=108441225163454056756种格式,无需用户构建自己的 openid 服务器。对于小公司,如果他们使用 Google Apps,人们只需一个域名就可以在他们的域下获得他们的 openid。

这可能是一个好方法,因为人们可以使用他们的 Google Apps 帐户进行身份验证,并且他们仍然可以在自己的域下提供 openid,他们可以在将来更改身份验证后端。它简单且可扩展,但遗憾的是它还没有成为标准。所以,如果你使用像 python-openid 这样的标准库,你会遇到一些问题。

要解决这些问题,您必须自己修补 python-openid 以遵循 Google 的方法。

我之前遇到过同样的问题,我有一个适用于我的 python-openid v2.1.1 的修补版本。

如果您需要,我可以在清理后发布我的代码。这是一个快速补丁,所以不要期望太多:)

于 2010-04-04T16:33:40.403 回答
1

我想你可以试试http://github.com/hudora/django-googleappsauth 但我发现了一些试图修复它们并翻译评论的错误

于 2011-12-08T22:47:28.800 回答