【问题标题】:How to authenticate user against Active Directory from java?java - 如何从java对Active Directory用户进行身份验证?
【发布时间】:2017-08-24 13:38:00
【问题描述】:

我需要从 java 中针对 Active Directory 对用户进行身份验证。为了了解幕后发生的事情,我从这里开始使用 openldap docker 实例和 spring 教程: https://spring.io/guides/gs/authenticating-ldap/

我从许多调试会话中了解到,Spring 从 ldap 检索密码属性并将其与散列用户密码进行比较,或者它只是通过 uid 和散列密码过滤用户,如果有条目则密码是正确的。

好的,听起来不错。现在我正在尝试对 Active Directory 做同样的事情。问题是当我从中检索用户时,它给了我很多属性,但它没有给我任何看起来像散列密码的属性。所以也许 Active Directory 不允许获取密码属性,我应该按此属性过滤用户。但我不知道它的名字,也不知道从哪里得到它。

所以我的问题是: 1. 我理解的一切正确吗? 2. 我只需要通过 uid 和哈希密码过滤用户吗? 3.如果第二个是正确的,那么用户过滤的查询是什么? 4. 如果第二个不正确,那我理解错了什么?我应该如何从 java 中针对 Active Directory 对用户进行身份验证?

【问题讨论】:

    标签: java spring authentication active-directory


    【解决方案1】:

    我将继续使用 Active Directory 的绑定身份验证方法。我过去使用过这种方法,对 Active Directory(或 ADAM)没有任何问题。对于绑定方案,您只需使用用户提供的用户名和密码,并允许 LDAP 实例执行比较(身份验证)。这是 Spring 文档的参考部分:

    18.3.2 使用绑定身份验证

    这是最常见的 LDAP 身份验证方案。

    这个简单的示例将通过在提供的模式中替换用户登录名并尝试将登录密码绑定为该用户来获取用户的 DN。如果您的所有用户都存储在目录中的单个节点下,这是可以的。如果您希望配置 LDAP 搜索过滤器来定位用户,则可以使用以下内容:

    如果与上面的服务器定义一起使用,这将使用 user-search-filter 属性的值作为过滤器在 DN ou=people,dc=springframework,dc=org 下执行搜索。用户登录名再次替换过滤器名称中的参数。如果未提供 user-search-base,则将从根目录执行搜索。

    您可能想通读有关 LDAP 身份验证的内容(Spring 3.x 文档中的第 18 章)。可能还有其他您觉得有用的信息。

    【讨论】:

    • 感谢您的回答。你能详细说明一下吗?我真的不喜欢ldap。绑定意味着以该用户身份登录?因此,如果我有用户 Bob、他的密码和 Active Directory,我只需在 Active Directory 中使用他的密码登录他,如果成功,那么我检索他的详细信息?我理解正确吗?
    • 我成功了。谢谢。
    • 恭喜!抱歉,我之前没有看到您的评论。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    相关资源
    最近更新 更多