【问题标题】:Custom authentication in Google App EngineGoogle App Engine 中的自定义身份验证
【发布时间】:2009-06-20 01:56:48
【问题描述】:

有谁知道或知道我可以在某个地方学习如何使用 Python 和 Google App Engine 创建自定义身份验证过程?

我不想使用 Google 帐户进行身份验证,并且希望能够创建自己的用户。

如果不是专门针对 Google App Engine,是否有任何关于如何使用 Python 和 Django 实现身份验证的资源?

【问题讨论】:

    标签: python google-app-engine authentication


    【解决方案1】:

    今天在 Google AppEngine 上更新了 django 1.0。但是您可以像其他任何事情一样进行用户身份验证,因为它是如此庞大,所以您无法真正使用会话。

    http://gaeutilities.appspot.com/ 中有一个会话实用程序

    http://gaeutilities.appspot.com/session

    http://code.google.com/p/gaeutilities/

    或者,

    您必须创建自己的用户表并散列或加密密码,然后可能创建一个仅使用令牌散列或 uuid cookie 来模拟会话的令牌系统(无论如何,会话只是 cookie)。

    我仅使用基本的 google.webapp 请求和响应标头实现了一些。我通常使用 uuids 作为主键作为用户 ID,然后加密用户密码并让他们的电子邮件进行重置。

    如果您想授权用户对数据进行外部访问,您可以查看 OAuth 以进行应用程序访问。

    如果您只想按 id 存储数据并且它更面向消费者,也许只需使用 openid(如 stackoverflow),然后将配置文件数据附加到该标识符,如 django 配置文件 (http://code.google.com/p/openid-selector/)。

    django 1.0 今天刚刚在 GAE 上发布,但我认为存在同样的问题,没有会话,您必须真正创建自己的存储会话数据。

    【讨论】:

    • 哇,听起来很难。我不知道我们不能使用会话。我想我正在寻找某种类型的预制身份验证功能,可以直接放入我的应用程序中。
    • 是的,有了gaeutilities.appspot.com/session 库,您所要做的就是处理用户注册。云几乎没有会话和连接等,任何粘在一台机器上的东西都必须有新的做事方式。
    • 我没有想到(关于会话和云)。谢谢你的链接。
    • 我使用 memcache 和 cookie 创建了自己的会话库。制作身份验证的东西实际上非常简单,我完全从头开始构建它。
    【解决方案2】:

    这是一个开箱即用的解决方案,效果很好: http://code.scotchmedia.com/engineauth/docs/index.html

    它内置了对 Facebook、Google+、Twitter、LinkedIn、GitHub 和 OpenId 的支持(通过 Google App Engine)。

    您只需将用户重定向到/auth/facebook/auth/google 等等(此网址可自定义)。

    它还实现了两个类:UserUserProfile,每个User 都是您应用中的唯一帐户,并且可能与一个或多个UserProfiles 相关——其中一个是唯一@ 的登录策略987654330@必须登录你的应用程序(如果不清楚,那是因为我的英语很糟糕,docs解释得更好)。

    P.S.:文档不是很完整,但代码非常简单、简短且不言自明。此外,还有一个讨论here,其中作者对困惑和初学者的问题提供了各种答案。

    【讨论】:

      【解决方案3】:

      OpenID consumer(优秀的“应用引擎示例”开源项目的一部分)目前可以正常工作(尽管其 README 中的警告是旧的),并且可以让您使用 OpenID 进行用户登录。

      django 的 auth 也可以通过例如this project(至少是users 部分,不一定是groupspermissions,尽管它们可能随时让它们工作)。

      【讨论】:

      • 这很有趣,但我们希望能够自己创建用户并向用户提供用户名/密码。我们不允许外部注册。
      • 为什么不呢?您仍然可以使用 OpenID 进行用户注册 - 只需创建用户并在他们首次使用新的 openid 登录时询问注册信息(但不是用户名/密码)。
      • 我们要控制用户对系统的访问,包括用户名和密码。这就是为什么不使用 open id 的原因。
      【解决方案4】:

      我看到这个弹出在谷歌,每次你搜索“自定义登录在应用引擎”所以 我决定给出一个一直为我服务的答案。 这是示例应用程序 https://github.com/fredrikbonander/Webapp2-Sample-Applications

      这个用途

      1. webapp2(已在 GAE 1.6.2 中)
      2. Jinja2(已在 GAE 1.6.2 中)

      Webapp2 似乎是 GAE 的最佳选择(建立在 webapp 之上,因此是未来的证明),因此使用 GAE 原生支持的框架进行身份验证是一个好主意。有许多 其他框架,但必须在用户部分进行大量黑客攻击才能使其正常工作。对于想要建立一个“稳定”网站的人来说,这样的黑客工作是非常不可取的。

      我还意识到,现在已经有了对 GAE 的 SQL 支持,并且原生支持 django。 我们都知道 django 内置了用户认证系统。虽然,我认为,尤其是在云世界中,NoSQL 才是未来。我相信将来会有一个和 django 一样好的 NoSQL 框架。但这就是我,你的要求可能需要别的东西。

      【讨论】:

        【解决方案5】:

        这是一篇出色且相对较新的博文(2013 年 1 月),标题为 User authentication with webapp2 on Google App Engine,以及相关的 GitHub repo: abahgat/webapp2-user-accounts

        【讨论】:

          【解决方案6】:

          查看app-engine-patch 的 Django(我从您的问题中假设您首选的框架)。它提供对 gae 的身份验证。

          或者,看看web2py。它是一个基于 Python 的框架,适用于 GAE 和关系数据库。它的内置 Auth 对象提供用户、组和权限。

          不过,它并没有提供对 BigTable 的无限制访问权限,而是提供了关系功能的子集(例如,BigTable 不支持 Joins 并且 web2py [还] 不支持 BigTable 模型)。

          Web2py 和 Django 社区正在讨论对 BigTable 的支持。

          【讨论】:

            【解决方案7】:

            我用谷歌搜索了一段时间的应用引擎自定义身份验证系统。我最终决定在应用引擎上运行烧瓶。我使用这个样板在应用程序引擎https://github.com/kamalgill/flask-appengine-template/ 上运行烧瓶和这个烧瓶身份验证扩展http://pypi.python.org/pypi/Flask-Auth/,它带有即插即用的谷歌应用程序引擎支持。我认为 flask 也有一个非常好的 oAuth 库,所以最终添加 facebook 和 twitter 登录会很容易

            【讨论】:

            • 虽然这确实增加了一些信息,但我认为接受的答案是最好的选择。
            【解决方案8】:

            除了所有其他出色的答案之外,我还要补充一点,FacebookTwittergithub 都提供 OAuth 机制,您可以将其用作应用的统包式身份验证支持。

            【讨论】:

              【解决方案9】:

              看看我正在与 coto 合作的这个项目:https://github.com/coto/gae-boilerplate 它包括一个功能齐全的自定义身份验证系统等等。

              【讨论】:

                【解决方案10】:

                另一个选项是Beaker module。 客户端会话的 AES 加密很好。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2014-04-30
                  • 2023-03-25
                  • 1970-01-01
                  • 2017-10-09
                  • 2011-03-05
                  • 1970-01-01
                  • 2011-12-25
                  • 1970-01-01
                  相关资源
                  最近更新 更多