5

Spring LDAP リファレンス ドキュメントを読みましたが、LDAP サーバーに対するユーザー認証が自動化されているかどうかを判断できませんでした。

「自動化された」とは、ContextSource. つまり、プログラマーが呼び出す必要はありませんLdapTemplate.authenticate(...)。これは「舞台裏」で行われます。

だから私は知りたいです

  1. Spring LDAP 認証が自動の場合
  2. この動作を変更するために設定できるフィールドがある場合

ありがとう、
ktm


編集:私が書いたいくつかのコードのコンテキストでこの質問をします。以下ContextSourceは、ユーザーが選択して使用できる、Bean ファイル内のコンテキスト ソースの 1 つです。これは、実行時に userDn とパスワードを構成するために使用されます (セキュリティ上の理由から)。認証で実行時に収集した userDn/password を LDAP アプリケーションが実際に使用するかどうかを知りたいです。(認証はコードの実行に先行しますか? コードが構成する userDn/password フィールドを無視しますか?)

public class RuntimeContext extends LdapContextSource {

    public RuntimeContext() {
        super();
        if (!resolveAuthInfo()) {
            System.out.println("Failed to resolve auth info. Exiting...");
            System.exit(1);
        }
    }

    public boolean resolveAuthInfo()
    {
        String myUserDn, myPassword;
        try {
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(System.in));
            System.out.print("userDn: ");
            myUserDn = br.readLine();
            System.out.print("password: ");
            myPassword = br.readLine();
        } catch (IOException e) {
            return false;
        }
        super.setUserDn(myUserDn);
        super.setPassword(myPassword);
        return true;
    }
}
4

1 に答える 1

1

認証で実行時に収集した userDn/password を LDAP アプリケーションが実際に使用するかどうかを知りたいです。

http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ldap.html

実行時に収集した userDn とパスワードが使用されます。Bean の構成方法に基づいて、LDAP 認証は Spring の 2 つのパスのいずれかを使用します。

  1. バインド認証 (を使用BindAuthenticator)
  2. パスワードの比較 (を使用PasswordComparisonAuthenticator)

LdapAuthenticationProviderこれらのオーセンティケーターは、セキュリティ名前空間構成でオーセンティケーターとして構成できるのコンテキスト内で呼び出されます。

<authentication-manager alias="authenticationManager">
    <authentication-provider user-service-ref="usernamePasswordUserDetailsService">
        <password-encoder ref="passwordEncoder">
            <salt-source ref="saltSource"/>
        </password-encoder>
    </authentication-provider>
    <authentication-provider ref="ldapAuthenticationProvider"/>
</authentication-manager>

が呼び出された場合UsernamePasswordAuthenticationFilter(/auth/login ページ経由):

<http auto-config="true">
    <form-login login-page="/auth/login"
                login-processing-url="/auth/j_security_check"/>
    <logout invalidate-session="true" logout-url="/auth/logout"/>
</http>

ユーザー名とパスワードを使用してトークンが作成されます。はそのLdapAuthenticationProviderトークン タイプに応答します。

public class LdapAuthenticationProvider implements AuthenticationProvider, MessageSourceAware {

    ...

    public boolean supports(Class<?> authentication) {
        return (UsernamePasswordAuthenticationToken.class.isAssignableFrom(authentication));
    }
}

に保存した情報を使用しLdapContextSourceて認証を行います。

于 2011-06-28T16:58:26.263 に答える