我正在尝试使用 Oauth oidc 背后的外部 API。我正在使用 webclient 来实现 oidc 流。
进行授权调用并显示登录屏幕,成功授权后,使用重定向 uri 代码,它不会触发访问令牌流,而是会进行太多次授权调用。
我对使用 Oauth 的 webclient 很陌生。如果有人可以帮助我解决这个问题,那就太好了。在此先感谢您的帮助。
下面是我的 Springboot 配置和代码
依赖:spring-boot-starter-oauth2-client spring-boot-starter-webflux spring-boot-starter-security spring-boot-starter-web
**SecurityConfig.java**
@EnableWebFluxSecurity
public class SecurityConfig {
@Bean
public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
http.authorizeExchange()
.anyExchange()
.authenticated()
.and()
.oauth2Login();
return http.build();
}
}
@Bean
WebClient webClient(
ReactiveClientRegistrationRepository clientRegistrations,
ServerOAuth2AuthorizedClientRepository authorizedClients) {
ServerOAuth2AuthorizedClientExchangeFilterFunction oauth =
new ServerOAuth2AuthorizedClientExchangeFilterFunction(
clientRegistrations,
authorizedClients);
oauth.setDefaultOAuth2AuthorizedClient(true);
return WebClient.builder()
.filter(oauth)
.build();
}
**application.properties**
spring.main.web-application-type=reactive
spring.security.oauth2.client.registration.custom.client-id=**********
spring.security.oauth2.client.registration.custom.client-secret=mysecret
spring.security.oauth2.client.registration.custom.scope=openid,profile
spring.security.oauth2.client.registration.custom.authorization-grant-type=authorization_code
spring.security.oauth2.client.registration.custom.redirect-uri=http://localhost:9090/callback
spring.security.oauth2.client.provider.custom.issuer-uri=url of issuer which has all the info for authorization and token endpoints
**Contoller**
@Autowired
private WebClient webClient;
@GetMapping("/auth")
Mono<String> useOauthWithAuthCode() {
Mono<String> retrievedResource = webClient.get()
.uri("http://localhost:8084/**")
.retrieve()
.bodyToMono(String.class);
return retrievedResource.map(string ->
"Oauth: " + string);
}
当我点击 auth 端点时,进行了授权调用,向用户显示了外部提供商的登录屏幕,用户成功通过身份验证,并且在浏览器中看到了带有代码的重定向 uri..但它尝试调用授权调用再次看到太多带有代码的重定向uri,并且在尝试太多后失败。