2011-10-21 8 views
3

LDAPからユーザーパスワードポリシーを読み込みます(有効期限が切れた場合やパスワードの長さなどの詳細など)。これらの情報が必要なので、私のデータベースに保管されているユーザーに同じポリシーを使用することができます。私のJavaアプリケーションでは、データベースのユーザーはドメインと同期する必要があります。JavaでLDAPパスワードポリシーを読むには

答えて

0

はい、JNDIを使用できます。ユーザーのコンテキストからpwdPolicySubentry操作属性の値を読み取る必要があります。これにより、pwdPolicyオブジェクトのDNが得られます。次に、属性を持つコンテキストとして検索し、 'pwd'で始まるすべての属性を取得します。ただし、ユーザーにデフォルトのパスワードポリシーが設定されている場合は、DNを見つけるためにLDAPサーバーの設定を確認する必要があります。 OpenLDAPでは、slapd.confのppolicy_default行の 'overlay ppolicy'ディレクティブブロックにあります。

0

基本的なLDAPサーバーによって異なります。

たとえば、Microsoft Active Directoryを使用している場合、ユーザーエントリの属性はaccountExpiresとなり、アカウントの有効期限が切れます。

Active Directoryには、さまざまなアカウント関連の状態を指定するビットマスクであるuserAccountControlというユーザー属性もあります。たとえば、ビット24が設定されている場合、パスワードが期限切れになったことを意味します(userAccountControl & 0x800000 != 0)。ビット2は「アカウントが無効になっている」などです。詳しくはhttp://support.microsoft.com/kb/305144をご覧ください。

他のLDAPサーバー(OpenLDAP、ApacheDSなど)については、ドキュメントを参照する必要があります。

1

通常、これらの状況で懸念される少なくとも3つの異なるものがあります。

アカウントのステータスには、アカウントのロック、有効期限切れ、無効などの情報が含まれます。 アカウント「ステータス」は、通常、MMCアカウントタブに反映されます。 私たちは、LDAP値についての我々のウィキでいくつかの情報を入れて:

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

パスワードのステータスを、パスワードの有効期限が切れています。

これらの条件のステータスを反映する属性は、ADにリアルタイムで反映されません。一部は、ユーザーが認証しようとしたときにのみ更新されます。 (正常または不成功)。

-jim

4

あなたは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"