Search code examples
springspring-security-oauth2auth0

Customize Spring OAUTH2 authorization request URL


How can I customize the OAUTH2 authorization request URL sent by Spring to my configured Identity provider?


Solution

  • Implement OAuth2AuthorizationRequestResolver

    @Component
    public class CustomAuthorizationRequestResolver implements OAuth2AuthorizationRequestResolver {
    
        private final CustomAuthorizationRequestResolver defaultResolver;
    
        public CustomAuthorizationRequestResolver(OAuth2ClientProperties oauth2ClientProperties){
            ClientRegistration auth0 =
                    OAuth2ClientPropertiesRegistrationAdapter.getClientRegistrations(oauth2ClientProperties).get("auth0");
            InMemoryClientRegistrationRepository clientRegistrationRepository =
                    new InMemoryClientRegistrationRepository(auth0);
            this.defaultResolver = new DefaultOAuth2AuthorizationRequestResolver(clientRegistrationRepository, "/oauth2/authorization");
        }
    
        @Override
        public OAuth2AuthorizationRequest resolve(HttpServletRequest request) {
            OAuth2AuthorizationRequest req = defaultResolver.resolve(request);
            if(req != null){
                req = customizeAuthorizationRequest(req);
            }
            return req;
        }
    
        @Override
        public OAuth2AuthorizationRequest resolve(HttpServletRequest request, String clientRegistrationId) {
            OAuth2AuthorizationRequest req = defaultResolver.resolve(request, clientRegistrationId);
            if(req != null){
                req = customizeAuthorizationRequest(req);
            }
            return req;
        }
    
        // Customize request here
        private OAuth2AuthorizationRequest customizeAuthorizationRequest(OAuth2AuthorizationRequest req) {
            Map<String,Object> extraParams = new HashMap<>(req.getAdditionalParameters());
            extraParams.put("connection", "my-connection-name");
            return OAuth2AuthorizationRequest.from(req).additionalParameters(extraParams).build();
        }
    }
    
    

    Set authorization request resolver on your Spring security configuration:

     @Override
     public void configure(HttpSecurity http) throws Exception {
         http
         ...
          .oauth2Login()
          .authorizationEndpoint()             
          .authorizationRequestResolver(customAuthorizationRequestResolver)
         ...
    }