如何从java验证用户对Active Directory?

时间:2017-03-30 14:41:38

标签: java spring authentication active-directory

我需要从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验证用户?

1 个答案:

答案 0 :(得分:2)

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

  

18.3.2使用绑定认证

     

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

     

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

     

     

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

您可能需要阅读有关LDAP身份验证的内容(Spring 3.x文档中的第18章)。您可能会发现其他有用的信息。