0

LDAPAPIは初めてです。LDAPサーバーに接続してユーザーを検索できます。LDAP APIを使用してユーザー名/パスワードでユーザーを認証するにはどうすればよいですか?に認証方法が表示されませんDirContext
ユーザーを認証するには次のことを行う必要がありますか?

  1. ユーザーのパスワードをSECURITY_CREDENTIALSとして渡します
  2. LDAP接続を確立します
  3. 指定されたユーザー名を検索します

これはLDAPでの認証を意味しますか?

4

2 に答える 2

3

クライアントが 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 を使用しないでください)。

こちらもご覧ください

于 2012-08-27T18:53:53.733 に答える
2

JAASを試すことができます。この目的のために、JDK にはcom.sun.security.auth.module.LdapLoginModuleがあります。私はそれを試してみましたが、うまくいきます。

于 2012-08-27T17:27:25.277 に答える