@ -17,20 +17,21 @@ package org.springframework.security.config.annotation.web.configurers.oauth2.cl
@@ -17,20 +17,21 @@ package org.springframework.security.config.annotation.web.configurers.oauth2.cl
import org.springframework.security.config.annotation.web.HttpSecurityBuilder ;
import org.springframework.security.config.annotation.web.configurers.AbstractAuthenticationFilterConfigurer ;
import org.springframework.security.core.authority.mapping.GrantedAuthoritiesMapper ;
import org.springframework.security.jwt.JwtDecoder ;
import org.springframework.security.jwt.nimbus.NimbusJwtDecoderJwkSupport ;
import org.springframework.security.oauth2.client.authentication.AuthorizationCodeAuthenticationProcessingFilter ;
import org.springframework.security.oauth2.client.authentication.AuthorizationCodeAuthenticationProvider ;
import org.springframework.security.oauth2.client.authentication.AuthorizationCodeAuthenticationToken ;
import org.springframework.security.oauth2.client.authentication.AuthorizationGrantTokenExchanger ;
import org.springframework.security.oauth2.client.authentication.jwt.DefaultProviderJwtDecoderRegistry ;
import org.springframework.security.oauth2.client.authentication.jwt.ProviderJwtDecoderRegistry ;
import org.springframework.security.oauth2.client.authentication.nimbus.NimbusAuthorizationCodeTokenExchanger ;
import org.springframework.security.oauth2.client.registration.ClientRegistration ;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository ;
import org.springframework.security.oauth2.client.user.OAuth2UserService ;
import org.springframework.security.oauth2.client.user.nimbus.NimbusOAuth2UserService ;
import org.springframework.security.oauth2.client.authentication.jwt.DefaultProviderJwtDecoderRegistry ;
import org.springframework.security.oauth2.core.provider.DefaultProviderMetadata ;
import org.springframework.security.oauth2.client.authentication.jwt.ProviderJwtDecoderRegistry ;
import org.springframework.security.oauth2.core.provider.ProviderMetadata ;
import org.springframework.security.oauth2.core.user.OAuth2User ;
import org.springframework.security.web.util.matcher.RequestMatcher ;
@ -54,7 +55,7 @@ final class AuthorizationCodeAuthenticationFilterConfigurer<H extends HttpSecuri
@@ -54,7 +55,7 @@ final class AuthorizationCodeAuthenticationFilterConfigurer<H extends HttpSecuri
private OAuth2UserService userInfoService ;
private Map < URI , Class < ? extends OAuth2User > > customUserTypes = new HashMap < > ( ) ;
private Map < URI , String > userNameAttributeNames = new HashMap < > ( ) ;
private GrantedAuthoritiesMapper userAuthoritiesMapper ;
AuthorizationCodeAuthenticationFilterConfigurer ( ) {
super ( new AuthorizationCodeAuthenticationProcessingFilter ( ) , null ) ;
@ -95,6 +96,12 @@ final class AuthorizationCodeAuthenticationFilterConfigurer<H extends HttpSecuri
@@ -95,6 +96,12 @@ final class AuthorizationCodeAuthenticationFilterConfigurer<H extends HttpSecuri
return this ;
}
AuthorizationCodeAuthenticationFilterConfigurer < H > userAuthoritiesMapper ( GrantedAuthoritiesMapper userAuthoritiesMapper ) {
Assert . notNull ( userAuthoritiesMapper , "userAuthoritiesMapper cannot be null" ) ;
this . userAuthoritiesMapper = userAuthoritiesMapper ;
return this ;
}
String getLoginUrl ( ) {
return super . getLoginPage ( ) ;
}
@ -107,6 +114,9 @@ final class AuthorizationCodeAuthenticationFilterConfigurer<H extends HttpSecuri
@@ -107,6 +114,9 @@ final class AuthorizationCodeAuthenticationFilterConfigurer<H extends HttpSecuri
public void init ( H http ) throws Exception {
AuthorizationCodeAuthenticationProvider authenticationProvider = new AuthorizationCodeAuthenticationProvider (
this . getAuthorizationCodeTokenExchanger ( ) , this . getProviderJwtDecoderRegistry ( ) , this . getUserInfoService ( ) ) ;
if ( this . userAuthoritiesMapper ! = null ) {
authenticationProvider . setAuthoritiesMapper ( this . userAuthoritiesMapper ) ;
}
authenticationProvider = this . postProcess ( authenticationProvider ) ;
http . authenticationProvider ( authenticationProvider ) ;
super . init ( http ) ;