2017-08-29 42 views
0

我正在编写一个依赖于LDAP登录的应用程序。当用户使用其有效的LDAP凭证登录到系统时,会授予API令牌用于从该点开始与应用程序进行交互(API驱动的Web应用程序)。但是,应用程序需要进行设置,以便无论何时将用户从LDAP服务器中删除,API密钥也会被撤销。我的计划是设置一个cronjob来定期检查LDAP凭证是否仍然有效。因此,我需要保存这些凭据,以便日后查看。我意识到,这意味着我必须保存用户以纯文本形式提供的密码,否则我将无法将它们发送到LDAP服务器进行验证。是否可以验证LDAP凭证而不将LDAP密码存储为纯文本

我个人对LDAP不太熟悉,所以我想知道是否有任何解决方法。我考虑过存储密码的哈希值,并想知道是否可以通过使用密码散列来验证凭据,而不是密码本身,但后来很快意识到这不会更安全,因为如果数据库会受到影响,密码是否被散列并不重要,如果它们都可以用于验证。这样做的唯一好处是可能难以检查用户是否对其他服务使用相同的密码。

所有的建议表示赞赏。谢谢!

+0

将密码存储为纯文本?真?这怎么是一个选择? –

+0

@TheBeardedLlama那么这就是我想解决的问题:') –

+1

为什么?您不需要再次以用户身份*登录,以确定该用户是否仍然存在。通常情况下,您以LDAP管理员身份登录来执行此类搜索。在当前会话期间是否需要检测用户删除也是有争议的。您可以让它在下次(失败)登录时生效,并且您还可以在删除时过期用户会话,以便他们必须立即尝试重新登录,并且失败。 – EJP

回答

1

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

你当然可以写你自己的方法来加密和解密凭证。

您可以通过使用操作系统控制来限制对凭证位置的访问。

但通常情况下,某处必须存在以明文形式存储的凭证。

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

0

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

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

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

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