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

时间:2011-10-21 07:14:04

标签: java passwords ldap policy

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

4 个答案:

答案 0 :(得分:6)

如果您想通过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"

答案 1 :(得分:1)

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

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

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

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

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

-jim

答案 2 :(得分:0)

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

答案 3 :(得分:0)

它取决于底层LDAP服务器。

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

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

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