LDAPAPIは初めてです。LDAPサーバーに接続してユーザーを検索できます。LDAP APIを使用してユーザー名/パスワードでユーザーを認証するにはどうすればよいですか?に認証方法が表示されませんDirContext
。
ユーザーを認証するには次のことを行う必要がありますか?
- ユーザーのパスワードをSECURITY_CREDENTIALSとして渡します
- LDAP接続を確立します
- 指定されたユーザー名を検索します
これはLDAPでの認証を意味しますか?
LDAPAPIは初めてです。LDAPサーバーに接続してユーザーを検索できます。LDAP APIを使用してユーザー名/パスワードでユーザーを認証するにはどうすればよいですか?に認証方法が表示されませんDirContext
。
ユーザーを認証するには次のことを行う必要がありますか?
これはLDAPでの認証を意味しますか?
クライアントが LDAP ディレクトリ サーバーに接続すると、接続認証状態が に設定されanonymous
ます。LDAP クライアントは BIND 要求を使用して、接続の承認状態を変更します。各 BIND 要求は接続許可状態をanonymous
に変更し、成功した各 BIND 要求は接続の許可状態を、成功した BIND 要求に関連付けられた許可状態、つまりユーザーの許可状態に変更します。失敗した BIND 要求は、接続をanonymous
状態のままにします。
クライアントはBindRequest
(単純な BIND 要求または SASL バインド要求の形式のいずれか) を構築して LDAP ディレクトリ サーバーに送信し、サーバーからの応答 (BIND 応答に付随する応答制御を含む) を解釈します。BIND 応答の結果コード 0 は、LDAP ディレクトリ サーバーが資格情報と一致し、ユーザーが認証されたことを示します。
ユーザーの識別名がわかっている場合は、識別名から BIND 要求を作成できます。不明な場合、LDAP クライアントは検索要求を作成し、それをサーバーに送信して、応答を解釈する必要があります。識別名は、少なくとも 1 つのエントリを返す成功した検索応答に常に含まれます。次に、検索応答で返された識別を使用して、上記のように BIND 要求を作成します。
最も単純なケースでは:
// exception handling is not shown
final String dn = ....;
final byte[] password = ....;
final BindRequest bindRequest = new SimpleBindRequest(dn,password);
final LDAPConnection ldapConnection = new LDAPConnection(hostname,port);
final BindResult bindResult = ldapConnection.bind(bindRequest);
final ResultCode resultCode = bindResult.getResultCode();
if(resultCode.equals(ResultCode.SUCCESS))
{
// user is authenticated
}
ldapConnection.close();
Java を使用している場合は、UnboundID LDAP SDKを使用する必要があります(新しいコードには JNDI を使用しないでください)。
JAASを試すことができます。この目的のために、JDK にはcom.sun.security.auth.module.LdapLoginModuleがあります。私はそれを試してみましたが、うまくいきます。