0

下面的 spring 安全配置给出了一些意想不到的行为。

当向某个(非健康检查)端点(/用户)、在浏览器中以及使用 curl(通过 Windows 上的 git bash)发出请求时,未经身份验证的请求会按预期返回 idp 重定向。

但是,当使用 WebTestClient 时,它会返回401 Unauthorized.www-authenticate: [Basic ...]

在这种情况下对基本身份验证的请求(以及启动时生成的密码)是意外的,因为我已声明通过http.httpBasic().disable().

为什么会有这种反应?有没有更好的方法来覆盖默认的基本身份验证配置?是否按照本文中的建议对这些配置进行了排序?这是在哪里记录的?

  ...env values

  @Bean
  public SecurityWebFilterChain webFilterChain(ServerHttpSecurity http) {
    http.oauth2Client()
      .and()
      .oauth2Login()
      .and()
      .httpBasic()
      .disable()
      .formLogin()
      .disable()
      .csrf()
      .disable()
      .authorizeExchange()
      .pathMatchers("/actuator/health").permitAll()
      .anyExchange().authenticated();
    return http.build();
  }

  @Bean
  ReactiveClientRegistrationRepository getClientRegistrationRepository() {
    ClientRegistration google =
        ClientRegistration.withRegistrationId("google")
            .scope("openid", "profile", "email")
            .clientId(clientId)
            .clientSecret(clientSecret)
            .authorizationUri(authUri)
            .tokenUri(tokenUri)
            .userInfoUri(userInfoUri)
            .redirectUri(redirectUri)
            .jwkSetUri(jwksUri)
            .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
            .userNameAttributeName("name")
            .build();

    return new InMemoryReactiveClientRegistrationRepository(google);
  }

github上的项目:https ://github.com/segevmalool/spring-samples/blob/main/spring-security-webflux-postgres

4

0 回答 0