如何在Java中读取LDAP密码策略

我可以从LDAP读取用户密码策略,比如它何时到期或更多详细信息,如密码强度(最小长度等)? 我需要这些信息,因此我可以为保存在我的数据库中的用户使用相同的策略。 我的java应用程序要求数据库中的用户必须与域同​​步。

如果您想通过LDAP查询获取密码策略,请尝试此操作

您当前域中没有PSO政策

String searchDomain= "DC=company,DC=ORG"; String ldapQuery = "(&(objectClass=domainDNS))"; String ldapAttribute = "maxPwdAge"; 

如果您使用PSO策略,请尝试使用此代码

 String domainLookupString = "CN=UsersPSO,CN=Password Settings Container,CN=System,DC=company,DC=ORG"; String ldapFilterString = "(&(objectClass=msDS-PasswordSettings))"; String ldapAttribute = "msDS-MaximumPasswordAge" 

通常,在这些情况下至少有三件不同的事情需要关注。

帐户状态,包括帐户锁定,已过期或已停用等信息。 帐户“状态”通常反映在MMC帐户标签上。 我们在维基上提供了有关LDAP值的一些信息:

http://ldapwiki.willeke.com/wiki/Active%20Directory%20Account%20Lockout和http://ldapwiki.willeke.com/wiki/MMC%20Account%20Tab

密码状态,是密码已过期。

不幸的是,反映这些条件状态的属性并未实时反映在AD中。 有些仅在用户尝试进行身份validation时更新。 (成功或不成功)。

-Jim

是的,你可以和JNDI一起。 您必须从用户的Context中读取pwdPolicySubentry操作属性的值。 这将为您提供pwdPolicy对象的DN,然后将其作为具有属性的Context查找,并获取以“pwd”开头的所有属性。 但是,如果用户具有默认密码策略,则必须查看LDAP服务器配置以查找其DN。 在OpenLDAP中,这是在’overlay ppolicy’指令块的ppolicy_default行中的slapd.conf中。

它取决于底层LDAP服务器。

例如,如果您使用的是Microsoft Active Directory,则用户条目将具有名为accountExpires的属性,该属性是帐户过期的日期。

Active Directory还有一个名为userAccountControl的用户属性,它是一个指定各种帐户相关状态的位掩码。 例如,如果设置了位24,则表示密码已过期( userAccountControl & 0x800000 != 0 )。 位2是“帐户禁用”等。有关详细信息,请访问http://support.microsoft.com/kb/305144 。

对于其他LDAP服务器(OpenLDAP,ApacheDS等),您必须查看文档。