現在、アプリケーションには、認証と承認に LDAP を使用する単一の認証メカニズムがあります。私のセキュリティ設定は次のようになります
@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
.anyRequest().fullyAuthenticated()
.and()
.httpBasic();
}
@Configuration
protected static class AuthenticationConfiguration extends GlobalAuthenticationConfigurerAdapter {
@Value("${ldap-${env}.manager.dn}")
private String managerDn;
@Value("${ldap-${env}.manager.pass}")
private String managerPass;
@Value("${ldap-${env}.server.url}")
private String url;
@Value("${ldap.password.attribute:userPassword}")
private String passwordAttr;
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication().userDnPatterns("uid={0},ou=people").groupSearchBase("ou=groups")
.groupSearchFilter("(member={0})").userSearchBase("ou=people").userSearchFilter("(uid={0})")
.userDetailsContextMapper(new CustomLdapPersonContextMapper())
// .passwordCompare()
// .passwordAttribute(passwordAttr)
// .passwordEncoder(new PlaintextPasswordEncoder())
// .and()
.contextSource().managerDn(managerDn).managerPassword(managerPass).url(url);
}
}
}
ただし、ユーザーがセッション キー サーバーから認証できるセッション トークンを受け取り、有効なトークンがユーザー名を返し、それを使用して LDAP からそのユーザーの認証情報をロードできる場合があります。したがって、セッション トークンが http ヘッダーに存在する場合はトークン認証を実行し、次に ldap ルックアップを実行し、セッション トークンが存在しない場合は現在の認証メカニズムに落ちる必要があります。この 2 番目の認証レイヤーを追加するにはどうすればよいですか。