0

Spring Security を使用してspring-security-ldapおり、Spring Boot アプリケーションでの認証に使用しています。

LdapAuthoritiesPopulatorユーザーの役割を決定するために LDAP サーバーからいくつかのエントリを検索するを実装したいと考えています。これらのエントリはユーザーの下にないため、メソッドにuserData提供されるオブジェクトgetGrantedAuthoritiesでは不十分です。(LDAP サーバーを制御できないため、ロールをユーザー エントリに追加できません)。

呼び出し時にSpring ContextSourceSecurityが作成するauth.ldapAuthentication().contextSource()(下のコードの(1)参照)をLdapAuthoritiesPopulator. しかし、 は のLdapAuthoritiesPopulator前に作成され、はまだ存在しないWebSecurityConfigurerAdapterため、これは機能しません。ContextSource

MyWebSecurityConfigurerAdapterには次のメソッドが含まれています。

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {

    auth.ldapAuthentication()
            .contextSource() // (1)
                .url("ldap://example.org/o=organization")
                .and()
            .ldapAuthoritiesPopulator(ldapAuthoritiesPopulator)
            .userSearchFilter("uid={0}");
}

ldapAuthoritiesPopulatorクラスは現在、単純に追加するダミーの実装ですROLE_USER:

@Component
public class CustomLdapAuthoritiesPopulator implements LdapAuthoritiesPopulator {

    @Override
    public Collection<? extends GrantedAuthority> getGrantedAuthorities(
        DirContextOperations userData, String username) {

        // I want to look up some entries in LDAP here, so I need a ContextSource
        // but I can't inject it because it does not exist when this bean is created

        Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
        authorities.add(new SimpleGrantedAuthority("USER"));
        return authorities;
    }
}
4

1 に答える 1