【问题标题】:Is it possible to verify LDAP credentials without storing the LDAP password as plain text是否可以在不将 LDAP 密码存储为纯文本的情况下验证 LDAP 凭据
【发布时间】: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


【解决方案1】:

您可以将散列密码存储在 LDAP 目录中。

LDAP 的绑定操作会告诉您提供的凭据是否正确。

如果用户被删除,绑定操作自然会失败,因为将不再有验证凭据的条目。

您可以保存(在您的 Web API 后端)与生成的 API 令牌对应的用户 LDAP DN,并定期检查您的目录以删除每个导致目录中不存在条目的令牌。

【讨论】:

    【解决方案2】:

    在某些系统上,有一些方法可以在文件系统上以加密(非散列)方式存储密码。

    您当然可以编写自己的方法来加密和解密凭据。

    您可以使用操作系统控件限制对凭据位置的访问。

    但一般来说,某处必须有以明文形式存储的凭据。

    面对现实,如果有人对服务器具有“root”访问权限,那么您“可能”无法阻止他们访问 LDAP 数据。

    【讨论】:

      猜你喜欢
      • 2019-08-12
      • 2018-02-14
      • 2020-07-24
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-15
      相关资源
      最近更新 更多