关于 django:为单点登录管理大型用户数据库

关于 django:为单点登录管理大型用户数据库

Managing large user databases for single-signon

您将如何实施具有以下目标的系统:

  • 管理身份验证,
    授权
    数十万现有用户目前与第 3 方 vendor的应用程序紧密集成(我们希望将这些用户分解为我们管理的东西,并让我们的应用程序与之抗衡,再加上我们的第 3 方 vendor与之抗衡)。
  • 管理链接到这些用户的个人资料信息
  • 必须能够从几乎任何平台(Windows、*nix、PHP、ASP/C#、Python/Django 等)上的任意数量的 Web 应用程序访问。

这里有一些示例实现:

  • LDAP/AD 服务器来管理一切。对所有配置文件数据使用自定义架构。一切都可以针对 LDAP/AD 进行身份验证,我们可以将各种 ACL 和配置文件数据存储在自定义模式中。
  • 仅使用 LDAP/AD 进行身份验证,使用某种传统数据库(MSSQL/PostgreSQL/MySQL)或基于文档的数据库(CouchDB、SimpleDB 等)将 LDAP 用户绑定到最强大的配置文件/授权服务器。使用 LDAP 进行授权,然后点击数据库获取更高级的内容。
  • 对所有内容都使用传统数据库(关系或文档)。

这三个是最好的吗?还有其他符合上述目标且更易于实施的解决方案吗?

** 我应该补充一点,几乎所有将对用户数据库进行身份验证的应用程序都在我们的控制之下。唯一的少数外部人员将是我们正在从中删除当前用户数据库的应用程序,也许还有 1 或 2 个其他应用程序。没有什么比需要 openID 服务器更广泛的了。

同样重要的是要知道这些用户中的很多人已经拥有这些帐户 5 到 8 年并且知道他们的登录名和密码等等。


身份验证和授权/配置文件之间存在差异,因此不必强制将两者强制集成到一个工具中。您使用 LDAP 进行身份验证和使用数据库进行授权的第二种解决方案似乎更健壮,因为 LDAP 数据由用户控制,而数据库将由管理员控制。后者可能会随着时间的推移在结构和复杂性上发生变化,但身份验证就是那种身份验证。这些功能的分离将证明更易于管理。


如果您有现有的 ActiveDirectory 基础架构,那将是可行的方法。这对于已经设置了 Windows 服务器进行身份验证的公司尤其有利。如果是这种情况,我倾向于您在"示例实现"中的第一个要点。

否则它将在 AD 和开源 LDAP 选项之间折腾。

为单点登录滚动您自己的身份验证架构可能是不可行的(尤其是考虑到您可能需要做大量的文档和集成工作),并且显然不要将您的身份验证服务器与任何在您的系统上运行的应用程序(因为您希望它能够独立于此类应用程序的负载)。

祝你好运!


我们有大约 10 万用户的不同站点,它们都使用普通数据库。如果大多数应用程序可以访问数据库,您可以使用此解决方案。


仅使用 LDAP/AD 进行身份验证,使用某种传统数据库(MSSQL/PostgreSQL/MySQL)或基于文档的数据库(CouchDB、SimpleDB 等)将 LDAP 用户绑定到最强大的配置文件/授权服务器。使用 LDAP 进行授权,然后点击数据库获取更高级的内容。


您始终可以实现自己的 OpenID 服务器。已经有一个用于 OpenID 的 Python 库,所以它应该相当容易。

当然,您不需要在您的应用程序中接受其他服务器授权的登录。接受仅由您自己的服务器授权的凭据。

编辑:我在 Django 中找到了 OpenID 服务器协议的实现。

Edit2:为您的用户实施 OpenID 有一个明显的优势。他们将能够使用他们的登录名登录 StackOverflow :-)


推荐阅读