3

Ich habe mehrere Authentifizierungs-Manager in der Anwendung. Ich unterscheide sie nach Bohnennamen. Ein Teil meiner xml Konfiguration oauth Autorisierungsserver im Zusammenhang aussieht und es funktioniert gut:Oauth Authorization Server mit benutzerdefinierten Authentifizierungs-Manager in Java-Konfiguration

<oauth:expression-handler id="oauthExpressionHandler" /> 
<oauth:web-expression-handler id="oauthWebExpressionHandler" /> 

<oauth:authorization-server client-details-service-ref="clientDetails" token-services-ref="tokenServices" user-approval-handler-ref="userApprovalHandler" > 
    <oauth:authorization-code disabled="true" /> 
    <oauth:implicit disabled="false" /> 
    <oauth:refresh-token disabled="false" /> 
    <oauth:client-credentials disabled="false" /> 
    <oauth:password authentication-manager-ref="authenticationManager" /> 
</oauth:authorization-server> 

<oauth:resource-server id="resourceServerFilter" resource-id="resource-id" token-services-ref="tokenServices" /> 

<sec:authentication-manager id="clientAuthenticationManager"> 
    <sec:authentication-provider user-service-ref="clientDetailsUserService" /> 
</sec:authentication-manager> 

<http pattern="/oauth/token" create-session="stateless" authentication-manager-ref="clientAuthenticationManager" 
     xmlns="http://www.springframework.org/schema/security"> 
    <intercept-url pattern="/oauth/token" access="IS_AUTHENTICATED_FULLY" /> 
    <anonymous enabled="false" /> 
    <http-basic entry-point-ref="clientAuthenticationEntryPoint" /> 
    <!-- include this only if you need to authenticate clients via request parameters --> 
    <custom-filter ref="oauthClientCredentialsTokenEndpointFilter" before="BASIC_AUTH_FILTER" /> 
    <access-denied-handler ref="oauthAccessDeniedHandler" /> 
</http> 

Ich versuche, es zu Java-basierter Konfiguration zu bewegen (in einiger SecurityConfig Klasse), ohne Mangel so weit. Ich habe so etwas wie versucht:

@Configuration 
@EnableAuthorizationServer 
protected static class OAuth2AuthConfig extends AuthorizationServerConfigurerAdapter { 

    @Resource(name = "authenticationManager") 
    private AuthenticationManager authenticationManager; 

    @Resource 
    private OAuth2AuthenticationEntryPoint authenticationEntryPoint; 

    @Resource(name = "clientDetails") 
    private ClientDetailsService clientDetailsService; 

    @Resource 
    private TokenStore tokenStore; 

    @Resource 
    private TokenStoreUserApprovalHandler userApprovalHandler; 

    @Override 
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception { 
     security.authenticationEntryPoint(authenticationEntryPoint); 
    } 

    @Override 
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception { 
     endpoints.authenticationManager(authenticationManager) 
       .userApprovalHandler(userApprovalHandler) 
       .tokenStore(tokenStore); 
    } 

    @Override 
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception { 
     clients.withClientDetails(clientDetailsService); 
    } 
} 

@Configuration 
@EnableResourceServer 
protected static class OAuth2ResourceConfig extends ResourceServerConfigurerAdapter { 

    @Resource 
    private DefaultTokenServices tokenServices; 

    @Resource(name = "authenticationManager") 
    private AuthenticationManager authenticationManager; 

    @Override 
    public void configure(ResourceServerSecurityConfigurer resources) { 
     resources.resourceId(RESOURCE_ID).tokenServices(tokenServices).authenticationManager(authenticationManager); 
    } 
} 

jedoch noch über mehrere Authentifizierungs Manager beschwert, obwohl ich ausdrücklich endpoints.authenticationManager(authenticationManager) gesetzt.

Mit einigen Debuggen kann ich sehen, es versucht, es innerhalb der Klasse WebSecurityConfigurerAdapter zu konfigurieren und es trifft mehrere Authentifizierungsmanager innerhalb authenticationManager(). Kann ich es außer Kraft setzen oder was vermisse ich?

Antwort

1
  1. AuthorizationServer - hier ist es eine Möglichkeit, Frühling zu verhindern, auf
    org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter#authenticationManager einfach durch zwingende Methode org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerSecurityConfiguration#configure(org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder) zum Scheitern verurteilt - explanation
  2. ResourceServer - leider gibt es keine Möglichkeit für ähnliche Handhabung entsprechende Problem. Am besten können Sie die Anzahl der Instanzen globaler Authentifizierungsmanager auf genau einen reduzieren.
Verwandte Themen