0

我正在尝试使用 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,并且在尝试太多后失败。

4

0 回答 0