下面的 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