Spring Security 通过用户名/密码表单使用OAuth2提供程序进行Spring安全身份验证

cqoc49vn  于 2023-02-08  发布在  Spring
关注(0)|答案(1)|浏览(239)

我正在编写一个使用Spring Security保护的应用程序。
我想实现2个目标:
1.应用程序在后台使用Keycloak作为认证服务器(这是在我的控制下)。
1.我希望用户能够通过应用程序中的默认登录表单登录,这样用户就不需要被转发到Keycloak的身份验证页面。
理想的解决方案是使用

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-oauth2-client</artifactId>
        </dependency>

启用的登录名为:

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

我现在知道如何从Keycloak获取访问令牌,但不知道是否可以使用它在Spring Security中设置OAuth2上下文。我找不到任何如何使用AuthorizationGrantType password执行此操作的示例。

x6492ojm

x6492ojm1#

你指的是"密码授予"流程和it has been deprecated。你不应该使用它(比如真的不应该)。
要对用户进行身份验证,请使用授权代码流(带有重定向到授权服务器的功能)。这样做有以下几个原因:

  • 安全关切
  • 这是(强烈)推荐的方式(因为以上原因)
  • 如果您不使用授权服务器屏幕,那么您可能必须实现用户名/密码表单以外的其他功能(注册、多因素身份验证、配置文件编辑等)

如果你关心的是外观和感觉,考虑定义一个Keycloak主题。这将允许你控制你的用户可以看到的所有Keycloak屏幕。

相关问题