Spring授权服务器如何切换为HTTP基本登录?

问题描述 投票:0回答:1

OAuth 2 Spring Authz 服务器(

spring-boot-starter-oauth2-authorization-server
)的最小配置工作正常:

@Configuration
public class SecurityConfig {
    @Bean
    @Order(1)
    public SecurityFilterChain authServer(HttpSecurity http) throws Exception {
        OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
        http.getConfigurer(OAuth2AuthorizationServerConfigurer.class).oidc(Customizer.withDefaults());
        http.exceptionHandling((e) -> e.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login")));
        return http.build();
    }

    @Bean
    @Order(2)
    public SecurityFilterChain defaultChain(HttpSecurity http) throws Exception {
        return http.authorizeHttpRequests((authorize) -> authorize.anyRequest().authenticated())
                .formLogin(Customizer.withDefaults())
                .build();
    }
}

此将未经身份验证的用户重定向到 Spring 的默认登录表单。然而,我想使用 HTTP 基本身份验证来打开浏览器的本机弹出窗口。这是我尝试过的:

@Configuration
public class SecurityConfig {
    @Bean
    @Order(1)
    public SecurityFilterChain authServer(HttpSecurity http) throws Exception {
        OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
        http.getConfigurer(OAuth2AuthorizationServerConfigurer.class).oidc(Customizer.withDefaults());
        http.exceptionHandling((e) -> e.authenticationEntryPoint(new BasicAuthenticationEntryPoint()));
        return http.build();
    }

    @Bean
    @Order(2)
    public SecurityFilterChain defaultChain(HttpSecurity http) throws Exception {
        return http.authorizeHttpRequests((authorize) -> authorize.anyRequest().authenticated())
                .httpBasic(Customizer.withDefaults())
                .formLogin(f -> f.disable())
                .build();
    }
}

这确实会打开基本登录弹出窗口,但它会在登录时一次又一次地重新出现。我做错了什么?

java spring spring-security spring-security-oauth2
1个回答
0
投票

您无法使用基本身份验证针对 OAuth2 授权服务器对用户进行身份验证。

您使用授权代码流程,这将涉及来自该授权服务器的 HTML 表单。

您的第二个安全过滤器链必须配置为 OAuth2 客户端,并启用

oauth2Login
(而不是
httpBasic
formLogin
)、会话和 CSRF 保护。

如果您不喜欢默认值,您应该能够做的是样式或替换 Spring 登录表单(这在您的授权服务器安全过滤器链配置中应该是可能的,但我不是 Spring 专家 -授权服务器,因为我只使用其他 OpenID 提供商)。

© www.soinside.com 2019 - 2024. All rights reserved.