Active Directory (Windows Server 2008 R2) と Java に基づく適切な認証の実装に問題があります。
想定されるフローは、AD でアカウントが無効になっている場合 (プロパティ → アカウント → アカウント オプション → [アカウントが無効になっています] チェックボックス)、次を使用して接続するときに AD から次の例外を取得する必要があるというものですcom.sun.jndi.ldap.LdapCtxFactory
。
[LDAP: error code 49 - 80090308: LdapErr: DSID-0C0903A9, comment: AcceptSecurityContext error, data 533, v1db1
これ533
は、アカウントがロック/無効になっていることを示しています。そして、少なくとも私の開発環境では問題なく動作します。アカウントを有効または無効にすると、すぐに認証結果が変わります。
ただし、顧客のマシンの本番環境では機能しません... InitialContext
(no ) を正常に作成できますが、このバインドが成功し533
た直後に検索操作が終了し、ルックアップを実行するために必要な権限がないというエラーが表示されます。
Active Directory 構成で何を探すべきですか? プーリングもADレプリケーションもありません...
[編集]: Wireshark ダンプ
無効なアカウントにバインドするリクエストは次のとおりです (LDAP プロトコルのみがデコードされます)。
0000 30 50 02 01 01 60 4b 02 01 03 04 3c 43 4e 3d 67 0P...`K....<CN=g
0010 72 7a 65 67 6f 72 7a 20 67 72 7a 79 62 65 6b 2c rzegorz grzybek,
0020 63 6e 3d 75 73 65 72 73 2c 64 63 3d xx xx xx xx cn=users,dc=xxxx
0030 xx xx xx xx xx 2c 64 63 3d xx xx 2c 64 63 3d xx xxxxx,dc=xx,dc=x
0040 xx xx 2c 64 63 3d 70 6c 80 08 xx xx xx xx xx xx xx,dc=pl..xxxxxx
0050 xx xx xx
そして、これが応答です-通常resultCode: success (0)
:
0000 30 84 00 00 00 10 02 01 01 61 84 00 00 00 07 0a 0........a......
0010 01 00 04 00 04 00 ......
無効なパスワードへの応答は次のとおりです。
0000 30 84 00 00 00 68 02 01 01 61 84 00 00 00 5f 0a 0....h...a...._.
0010 01 31 04 00 04 58 38 30 30 39 30 33 30 38 3a 20 .1...X80090308:
0020 4c 64 61 70 45 72 72 3a 20 44 53 49 44 2d 30 43 LdapErr: DSID-0C
0030 30 39 30 33 41 39 2c 20 63 6f 6d 6d 65 6e 74 3a 0903A9, comment:
0040 20 41 63 63 65 70 74 53 65 63 75 72 69 74 79 43 AcceptSecurityC
0050 6f 6e 74 65 78 74 20 65 72 72 6f 72 2c 20 64 61 ontext error, da
0060 74 61 20 35 32 65 2c 20 76 31 64 62 31 00 ta 52e, v1db1.
変更後に正しいパスワードを送信すると、すぐにバインドが成功します。
ちなみに、LDAPS (ポート 636) を使用しても何も変わりません。無効なアカウントにバインドできます。
編集:仮想サーバーで再現された問題
LDAP/AD イベントの詳細なログ記録を有効にしました。
無効なアカウントの場合、LDAP バインドが Active Directory に正しくない場合、単一のイベントが発生します。
An account failed to log on.
Subject:
Security ID: SYSTEM
Account Name: CENTRALA$
Account Domain: XXX
Logon ID: 0x3e7
Logon Type: 3
Account For Which Logon Failed:
Security ID: NULL SID
Account Name: MY_ACTUAL_DOMAIN_NAME_OF_BLOCKED_USER
Account Domain: XXX
無効なアカウントの場合、Active Directoryに正しくLDAP バインドすると、次のイベントが発生します。
1:
The computer attempted to validate the credentials for an account.
Authentication Package: MICROSOFT_AUTHENTICATION_PACKAGE_V1_0
Logon Account: Guest
Source Workstation: CENTRALA
Error Code: 0x0
2:
An account was successfully logged on.
Subject:
Security ID: SYSTEM
Account Name: CENTRALA$
Account Domain: MS
Logon ID: 0x3e7
Logon Type: 3
New Logon:
Security ID: MS\Guest
Account Name: Guest
Account Domain: MS
Logon ID: 0x38cd57
Logon GUID: {00000000-0000-0000-0000-000000000000}
LDAP経由で無効なアカウントに正しくログインすると、Guestアカウントにログインする可能性はありますか??