Отключить перенаправление на 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}"));
}
}