【发布时间】:2011-12-12 08:48:11
【问题描述】:
我可以从 LDAP 中读取用户密码策略,例如它何时过期或密码强度(最小长度等)等更多详细信息?我需要这些信息,以便我可以对保存在我的数据库中的用户使用相同的策略。我的 java 应用程序要求数据库中的用户必须与域同步。
【问题讨论】:
标签: java passwords ldap policy
我可以从 LDAP 中读取用户密码策略,例如它何时过期或密码强度(最小长度等)等更多详细信息?我需要这些信息,以便我可以对保存在我的数据库中的用户使用相同的策略。我的 java 应用程序要求数据库中的用户必须与域同步。
【问题讨论】:
标签: java passwords ldap policy
是的,您可以使用 JNDI。您必须从用户的上下文中读取 pwdPolicySubentry 操作属性的值。这为您提供了 pwdPolicy 对象的 DN,然后您将其作为具有属性的上下文进行查找,并获取以“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 等),您必须查看文档。
【讨论】:
通常,在这些情况下至少存在三个不同的问题。
帐户状态,包括帐户锁定、过期或禁用等信息。 帐户“状态”通常反映在 MMC 帐户选项卡上。 我们将一些关于 LDAP 值的信息放在我们的 wiki 上:
http://ldapwiki.willeke.com/wiki/Active%20Directory%20Account%20Lockout 和 http://ldapwiki.willeke.com/wiki/MMC%20Account%20Tab
密码状态,密码是否过期。
很遗憾,反映这些条件状态的属性不会实时反映在 AD 中。有些仅在用户尝试进行身份验证时更新。 (成功或不成功)。
-吉姆
【讨论】:
如果你想通过 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"
【讨论】: