使用 LDAP 身份验证处理用户关系 [关闭]

Posted

技术标签:

【中文标题】使用 LDAP 身份验证处理用户关系 [关闭]【英文标题】:Handling user relationship with LDAP authentication [closed] 【发布时间】:2013-06-24 18:51:53 【问题描述】:

我正在设置一个带有 LDAP 身份验证的网络应用程序,但我不太清楚如何处理用户数据库关系(例如,由创建、分配给、批准者、成员)

到目前为止,我想出了以下选项:

    当用户首次登录时,检查用户中是否存在记录 桌子。如果没有,请执行 ldap 查找以检索姓名和电子邮件,然后 创建用户记录。添加用户时会发生同样的事情 到列表或选定。 (可能存储上次 ldap 查找日期和 x 天后刷新登录详情)

    仅使用 cn 创建用户记录,并即时查找姓名和电子邮件

    只需存储 cn 而不是 fk,然后即时查找姓名和电子邮件。

我倾向于选择选项 1,因为它可以简化 ORM 并减少查找次数。另一方面,它似乎有点过度设计。

任何应避免上述选项的替代方案或理由,我们将不胜感激。

【问题讨论】:

您应该将角色放入 LDAP,而不是单独的数据库。这就是 LDAP 的用途。 这与角色无关.. 审批者和成员都是角色。 如果团队由用户维护并且用户选择了批准者,则不会;) 【参考方案1】:

这可能取决于您的用例。

您想了解所有用户(包括尚未登录的用户)吗? 您需要为它们存储自定义属性吗? 是否需要根据用户属性进行关系查询?

只是一些比较:

Linux PAM 使用选项 3 (NSS)。 Liferay 或 Redmine 都使用修改后的选项 1。

事实上,我见过的大多数应用程序都在使用修改后的选项 1。这是因为 LDAP 通常只是支持的 身份验证 选项之一,而且在许多情况下,您希望为每个用户并像与任何其他实体一样使用条目(谈到关系,成员资格,......)。与您的描述的重要区别是:

每次用户登录时刷新用户条目。

请注意,还有第四种可能性——不要直接与 LDAP 集成,而是让IdM system 为您的应用程序提供用户。但是,这需要您的目标环境中存在有效的 IdM。

【讨论】:

感谢您提供的信息,我想我会选择选项 1,在登录时刷新并为所有将使用此机制的系统使用共享用户数据库。没有存储自定义属性的计划,但对用户属性的查询很重要。在某些情况下,我需要尚未登录的用户的详细信息,但我可以轻松满足。

以上是关于使用 LDAP 身份验证处理用户关系 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Security 实现 LDAP 身份验证时出现 Gradle 依赖关系错误

LDAP 身份验证超时

Symfony 身份验证提供程序

使用 Spring Security 的 ldap 身份验证

使用多个后缀值/域对 ldap 用户进行身份验证

LDAP:如何使用连接详细信息验证用户身份