【发布时间】:2018-02-06 18:45:30
【问题描述】:
我正在编写一个依赖于 LDAP 登录的应用程序。当用户使用其有效的 LDAP 凭据登录系统时,将授予 API 令牌用于从该点开始与应用程序交互(API 驱动的 Web 应用程序)。但是,需要设置应用程序,以便每当从 LDAP 服务器中删除用户时,API 密钥也会被撤销。我的计划是设置一个 cronjob 来定期检查 LDAP 凭据是否仍然有效。因此,我需要保存这些凭据,以便以后检查它们。不过我意识到,这意味着我必须将用户提供的密码保存为纯文本,否则我将无法将它们发送到 LDAP 服务器进行验证。
我个人对 LDAP 不是很有经验,所以我想知道是否有任何解决方法。我考虑过存储密码的哈希值,并想知道是否有可能通过使用密码的哈希值而不是密码本身来验证凭据,但很快意识到这并不会更安全,因为如果数据库将受到损害,如果密码都可以用于身份验证,则密码是否经过哈希处理并不重要。这样做的唯一好处是检查用户是否对其他服务使用相同的密码可能会更加困难。
感谢所有建议。谢谢!
【问题讨论】:
-
将密码存储为纯文本?真的吗?这怎么可能是一种选择?
-
@TheBeardedLlama 这就是我要解决的问题:')
-
为什么?您无需再次以用户身份 登录即可查看该用户是否仍然存在。通常,您以 LDAP 管理员身份登录以执行此类搜索。您是否需要在用户有当前会话时检测用户删除也是有争议的。您可以让它在他们下次(失败)登录时生效,您也可以在删除时使用户会话过期,以便他们必须立即尝试重新登录,然后失败。
-
我要补充一点,从 LDAP 中删除用户的情况非常罕见。通常的做法是禁用该帐户。但即使这种情况很少见,您也不需要提供太多支持代码的方式来涵盖这种情况发生时用户碰巧登录的更罕见的情况。
-
@EJP 每天都会删除大量 LDAP 条目。删除非活动条目的情况很常见,有时出于合规性要求,包括 PCI 和 SOX 监管目的。
标签: database authentication active-directory ldap