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

如何在Java中读取LDAP密码策略,java,passwords,ldap,Java,Passwords,Ldap,我可以从LDAP读取用户密码策略吗,比如当它过期时,或者更多的细节,比如密码强度(最小长度等)?我需要这些信息,以便对数据库中的用户使用相同的策略。我的java应用程序要求数据库中的用户必须与域同步。是的,您可以使用JNDI。必须从用户上下文中读取pwdPolicySubentry操作属性的值。这将为您提供pwdPolicy对象的DN,然后将其作为带有属性的上下文进行查找,并获取以“pwd”开头的所有属性。但是,如果用户具有默认密码策略,则必须查看LDAP服务器配置以查找其DN。在OpenLDA

我可以从LDAP读取用户密码策略吗,比如当它过期时,或者更多的细节,比如密码强度(最小长度等)?我需要这些信息,以便对数据库中的用户使用相同的策略。我的java应用程序要求数据库中的用户必须与域同步。

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

它取决于底层LDAP服务器

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

Active Directory还有一个名为
userAccountControl
的用户属性,它是一个位掩码,用于指定各种与帐户相关的状态。例如,如果设置了位24,则表示密码已过期(
userAccountControl&0x800000!=0
)。第2位为“帐户禁用”等。请参阅


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

通常,在这些情况下,至少有三个不同的问题值得关注

帐户状态,包括帐户已锁定、已过期或已禁用等信息。 帐户“状态”通常反映在MMC帐户选项卡上。 我们在wiki上发布了一些关于LDAP值的信息,网址为:

密码状态,即密码已过期

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


-jim

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