连接Django项目到Google应用账户的openid/oauth库有哪些?

30

我正在开发一项内部 Django 项目(不使用 GAE),为一个使用 Google 应用程序进行登录的公司工作。因此,我希望我的用户能够使用他们的 Google 账户登录到我的 Django 项目中。OpenID 似乎是合适的选择,虽然 OAuth 也可能可行。

我看到有很多类似命名的库可以将 Django 的认证系统连接到外部登录系统:

下面是我想要执行的集成操作:让用户使用他们的 Google 帐户登录,而不是本地 Django 系统。对于像管理系统这样的东西,仍然使用 Django 的权限模型。所以我认为这意味着第一次我们没有见过的新帐户登录时自动在 Django 中创建一个新的用户记录。

有使用过这些项目经验的人能告诉我哪个是最好的选择吗?或者如果您尝试过它们,可以提供哪些最活跃/功能最强大的建议?谢谢!


Google已经弃用了他们的OpenID支持,大部分答案不再适用(或将在2015年4月停止使用)。请参考这个问题:https://dev59.com/_IXca4cB1Zd3GeqPHFuc - DS.
5个回答

17
我终于搞定了这个问题,所以我会回答自己的问题,因为这里之前的答案虽然有帮助,但并没有讲述全部故事。 django-openid-auth 实际上非常容易设置和使用。README 文件非常清晰。如果你只想使用标准的 Google 帐户(即 @gmail.com 地址),那么你可以在 settings.py 中进行配置:
OPENID_SSO_SERVER_URL = 'https://www.google.com/accounts/o8/id'

但是,如果您想使用“Google应用程序”帐户,即在您自己公司域中托管的Gmail,则更加复杂。我从这个问题获取了详细信息。要使用您的Google应用程序帐户,请配置您的settings.py:

OPENID_SSO_SERVER_URL = 'https://www.google.com/accounts/o8/site-xrds?hd=example.com'
# replace example.com with your hosted google apps domain

在未来,这可能会起作用,但今天可能不会。问题出在django-openid-auth所依赖的python-openid上。标准构建的python-openid不理解谷歌正在使用的某些协议扩展。(为什么谷歌需要扩展协议?请参阅http://groups.google.com/group/google-federated-login-api/web/openid-discovery-for-hosted-domains并回报。祝你好运。)因此,您需要使用adieu的python-openid补丁,可以在此处找到: http://github.com/adieu/python-openid 将其安装到现有的python-openid上。现在应该可以工作了。 OPENID_USE_AS_ADMIN_LOGIN设置要小心,因为它要求您拥有一个openid用户帐户,该帐户是“staff”或“superuser”,才能使用管理员,否则默认情况下不会发生。因此,您需要执行两个步骤:启用openid,使用您的openid登录以在django中创建帐户,然后使用您的旧管理员帐户将自己的openid帐户标记为超级用户,然后禁用非openid管理员访问。
还有一件事:在此之前,您的域管理员可能需要启用域的openid登录才能使其正常工作。控制权在http://www.google.com/a/cpanel/example.com/SetupIdp

3

我曾使用过django-openid-auth。它很好用,可以在首次登录时创建用户账户。你也可以在Django管理面板中将OpenID登录与用户账户关联。


1

我知道这是一个晚回答,但我正在做类似的事情,我刚刚发现了django-socialregistration。它基本上可以实现OAuth、OpenID、Facebook Connect等功能。与其他一些选项不同的是,它似乎在积极开发,并被许多项目使用。


0
我喜欢Django socialregistration,因为它让我很容易地连接Google账户、Facebook、Yahoo和其他OpenID网站。您只需要将提供者链接放置在类似以下的位置即可:

<a href="/socialregistration/openid/redirect/?openid_provider={{ 'http://yahoo.com'|urlencode }}"><img src="{{MEDIA_URL}}/images/yahoo.png"/></a>


0

它们几乎都是相同的。我喜欢django-authopenid。它有很棒的文档,而且非常容易使用。它会完全按照你的要求执行,并比我尝试过的其他唯一选择django-openid做得更好。

希望对你有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接