Spring Boot oauth2 динамически добавляет параметры для перенаправления URL

Я использую spring-security-oauth2-client. Redirect-uri в application.properties выглядит так:

Spring.security.oauth2.client.registration.<client>.redirect-uri=https://custom-server.com/auth

Мне нужно динамически добавить некоторую информацию к URL-адресу, например, через параметр пути, вот так: https://custom-server.com/auth?id=123 или https://custom-server.com/auth?id=321

SecurityConfig приведен ниже:

@Configuration
@EnableWebSecurity
public class SecurityConfig {
  @Bean
  public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
    http.csrf()
        .disable()
        .authorizeRequests()
        .antMatchers("/login/auth").authenticated()
        .anyRequest().permitAll()
        .and()
        .oauth2Login();
    return http.build();
  }
}

Можно ли добавить параметры (запрос или путь) к redirect-url в зависимости от условий?

Это вопрос, который вы ищете?

wjans 21.11.2022 19:39

Спасибо, @wjans! Да, я решил эту проблему, внедрив OAuth2AuthorizationRequestResolver.

Mrthesowhat Mrthesowhatov 22.11.2022 07:51
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Интеграция Slack и Spring Boot: как отправлять сообщения из Java-приложений
Интеграция Slack и Spring Boot: как отправлять сообщения из Java-приложений
Как отправлять сообщения в slack с помощью spring boot легко и без зависимостей.
0
2
95
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, как упомянул @wjans, передача параметра в URL-адрес перенаправления возможна путем реализации OAuth2AuthorizationRequestResolver:


    public class CustomOAuth2AuthorizationRequestResolverimplements
        OAuth2AuthorizationRequestResolver {
    
      private static final String CUSTOM_PARAM = "id";
      private final OAuth2AuthorizationRequestResolver oAuth2AuthorizationRequestResolver;
    
      public ConfigurableOAuth2AuthorizationRequestResolver(OAuth2AuthorizationRequestResolver oAuth2AuthorizationRequestResolver) {
        this.oAuth2AuthorizationRequestResolver = oAuth2AuthorizationRequestResolver;
      }
    
      @Override
      public OAuth2AuthorizationRequest resolve(HttpServletRequest request) {
        OAuth2AuthorizationRequest authorizationRequest =
            this.oAuth2AuthorizationRequestResolver.resolve(request);
        return processAdditionalParameters(authorizationRequest);
      }
    
      @Override
      public OAuth2AuthorizationRequest resolve(HttpServletRequest request,
                                                String clientRegistrationId) {
        OAuth2AuthorizationRequest authorizationRequest =
            this.oAuth2AuthorizationRequestResolver.resolve(request, clientRegistrationId);
        return processAdditionalParameters(authorizationRequest);
      }
    
      private OAuth2AuthorizationRequest processAdditionalParameters(OAuth2AuthorizationRequest authorizationRequest) {
        if (authorizationRequest == null) {
          return null;
        }
        String redirectUri = UriComponentsBuilder
            .fromUriString(authorizationRequest.getRedirectUri())
            .queryParam(CUSTOM_PARAM, UUID.randomUUID())
            .build(true).toUriString();
        return OAuth2AuthorizationRequest.from(authorizationRequest)
            .redirectUri(redirectUri)
            .build();
      }
    }

И зарегистрируйте этот преобразователь как:

    @Bean
      public OAuth2AuthorizationRequestResolver authorizationRequestResolver() {
        OAuth2AuthorizationRequestResolver defaultAuthorizationRequestResolver =
            new DefaultOAuth2AuthorizationRequestResolver(
                clientRegistrationRepository(),            
OAuth2AuthorizationRequestRedirectFilter.DEFAULT_AUTHORIZATION_REQUEST_BASE_URI
            );
        return new CustomOAuth2AuthorizationRequestResolver(defaultAuthorizationRequestResolver);
      }
    
      @Bean
      public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            ...
            .oauth2Login()
            .authorizationEndpoint()
            .authorizationRequestResolver(
                authorizationRequestResolver());
    
        return http.build();
      }

Другие вопросы по теме