【问题标题】:Which openid / oauth library to connect a django project to Google Apps Accounts?哪个 openid / oauth 库将 django 项目连接到 Google Apps 帐户?
【发布时间】:2010-06-29 23:14:36
【问题描述】:

我正在为一家使用 Google Apps 登录的公司开发 Intranet django 项目(不使用 GAE)。所以我希望我的用户能够使用他们的谷歌帐户登录来登录我的 django 项目。 OpenID 似乎很合适,虽然也许 Oauth 也可以工作?

我看到很多类似名称的库将 django 的身份验证系统连接到外部登录系统:

以下是我想对集成执行的操作:让用户使用他们的 google 帐户登录,而不是使用原生 django 系统登录。为管理系统之类的东西保留 django 的权限模型。所以我认为这意味着我们在登录之前从未见过的新帐户第一次在 django 中自动创建新用户记录。

任何有使用这些项目经验的人都可以告诉我哪个最有效吗?或者只是建议您尝试过哪些最活跃/最实用?谢谢!

【问题讨论】:

标签: python django openid google-openid


【解决方案1】:

我终于得到了这个工作,所以我会回答我自己的问题,因为这里以前的答案很有帮助,但不能说明整个故事。

django-openid-auth 实际上很容易设置和使用。 README 文件非常清晰。如果您只想使用标准的 google 帐户(即@gmail.com 地址),那么您可以在 settings.py 中配置它:

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

但是,如果您想使用“谷歌应用”帐户,即在您自己公司的域中托管 gmail,那么它会更加复杂。我从this question 获得了我的详细信息。要使用您的 Google Apps 帐户,请将您的 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 的标准构建不理解谷歌正在使用的一些协议扩展。 (为什么 google 需要扩展协议?挖掘 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 用户帐户,即“员工”或“超级用户”来使用管理员,默认情况下不会发生这种情况。所以你需要做一个启用openid的两步过程,使用你的openid登录以在django中创建一个帐户,然后使用你的旧管理员帐户将你自己的openid帐户标记为超级用户,然后禁用非openid管理员访问。

还有一件事:您的域管理员可能需要为您的域启用 openid 登录才能正常工作。控制在http://www.google.com/a/cpanel/example.com/SetupIdp

【讨论】:

    【解决方案2】:

    我用过django-openid-auth。工作正常,第一次签名时可以创建用户帐户。您还可以在 django 管理面板中将 openid 登录与用户帐户相关联。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        我喜欢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>

        【讨论】:

          【解决方案5】:

          它们几乎完全相同。我喜欢django-authopenid。它有很好的文档并且非常易于使用。它会完全按照您的意愿做,并且比 django-openid 做得更好(这是我尝试过的唯一另一个)。

          HTH

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2021-11-26
            • 1970-01-01
            • 1970-01-01
            • 2011-03-06
            • 2016-10-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多