Отключить перенаправление на oauth2/authorization/{registrationId} в клиентском потоке oauth2 в Spring Cloud Gateway

Можно ли отключить перенаправление на oauth2/authorization/{registrationId} в потоке клиента oauth2? У меня есть следующие свойства для потока oauth2 в Spring Cloud Gateway, но нигде я не указал URL-адрес oauth2/authorization/{registrationId}:

         security:
    oauth2:
      client:
        registration:
          smart_hub_client:
            provider: wso2is
            client-id: someid
            client-secret: somesecret
            authorization-grant-type: authorization_code
            redirect-uri: "{baseUrl}/redirect_uri"
            scope: sso,openid
        provider:
          wso2is:
            authorization-uri: https://authserver/oauth2/authorize?loginPage=login.jsp
            token-uri: https://authserver.com/oauth2/token
            user-info-uri: https://authserver/oauth2/userinfo
            user-name-attribute: sub
            jwk-set-uri: https://authserver.com/oauth2/jwks

URL-адрес запроса со снимка экрана находится здесь: https: // myscgapp / oauth2 / authorization / smart_hub_client

ОБНОВЛЕНИЕ: я обновил conf для моего примера. Основная проблема - у меня цикл перенаправления. Может быть, отключение https: // myscgapp / oauth2 / authorization / smart_hub_client может помочь? Или первопричина в другом?

У меня такой цикл перенаправления:

1 ответ

В OAuth2AuthorizationRequestRedirectFilter использует OAuth2AuthorizationRequestResolverдля инициирования потока предоставления кода авторизации путем перенаправления пользовательского агента конечного пользователя на конечную точку авторизации сервера авторизации.
Реализация по умолчанию DefaultOAuth2AuthorizationRequestResolver соответствует пути (по умолчанию) /oauth2/authorization/{registrationId}.

Вы можете настроить это, указав собственный ServerOAuth2AuthorizationRequestResolver.

В приведенном ниже примере преобразователь будет соответствовать пути /auth/custom/sso/{registrationId} вместо /oauth2/authorization/{registrationId}.

@EnableWebFluxSecurity
public class SecurityConfig {

    @Autowired
    private ReactiveClientRegistrationRepository clientRegistrationRepository;

    @Bean
    SecurityWebFilterChain configure(ServerHttpSecurity http) {
        http
            .authorizeExchange(exchanges ->
                exchanges
                    .anyExchange().authenticated()
            )
            .oauth2Login(oauth2Login ->
                oauth2Login
                    .authorizationRequestResolver(getAuthorizationRequestResolver()));
        return http.build();
    }

    private ServerOAuth2AuthorizationRequestResolver getAuthorizationRequestResolver() {
        return new DefaultServerOAuth2AuthorizationRequestResolver(
                this.clientRegistrationRepository,
                new PathPatternParserServerWebExchangeMatcher(
                        "/auth/custom/sso/{registrationId}"));

    }
}