带有表单登录的 Spring Security OAuth 2

Posted

技术标签:

【中文标题】带有表单登录的 Spring Security OAuth 2【英文标题】:Spring Security OAuth 2 with form login 【发布时间】:2016-01-27 23:31:51 【问题描述】:

我正在尝试将我的 Spring boot 应用程序配置为使用表单登录,并使用 OAuth 2 授权服务器验证凭据(将凭据从表单登录发送到用户授权 URL。

但是,当我使用以下 SecurityConfig 并转到资源时,它不是使用表单登录,而是重定向到授权服务器,询问我的凭据(使用基本身份验证),然后重定向回应用程序本身。

我正在使用以下SecurityConfig

@Configuration
@EnableOAuth2Sso
public class SecurityConfig extends OAuth2SsoConfigurerAdapter 

    @Override
    public void configure(HttpSecurity http) throws Exception 
        http
            .logout()
            .and()
            .antMatcher("/**")
                .authorizeRequests()
                    .anyRequest().authenticated()
                    .and()
                        .csrf()
                        .csrfTokenRepository(csrfTokenRepository()).and()
                        .addFilterAfter(csrfHeaderFilter(), CsrfFilter.class)
            .formLogin();
    

    // CSRF repository + filter

我将formLogin() 提供给configure() 方法,但这似乎不起作用。

以下配置在我的application.yml文件中:

spring:
  oauth2:
    client:
      clientId: test
      clientSecret: secret
      accessTokenUri: http://localhost:8081/uaa/oauth/token
      userAuthorizationUri: http://localhost:8081/uaa/oauth/authorize
      clientAuthenticationScheme: header
    resource:
      userInfoUri: http://localhost:8081/uaa/user

此配置确实有效,因为在重定向之后我获得了授权,但它不是我希望它工作的方式(使用表单登录而不是重定向到 OAuth2 授权服务器)。

【问题讨论】:

【参考方案1】:

使用 SSO,重点是用户使用身份验证服务器(在您的情况下为 localhost:8081)进行身份验证。如果你想要一个表单登录,那就是你需要实现它的地方,而不是在客户端应用程序中。

【讨论】:

以上是关于带有表单登录的 Spring Security OAuth 2的主要内容,如果未能解决你的问题,请参考以下文章

如何使初始登陆页面不是spring security的登录表单?

Spring Boot、Spring Security 和 Thymeleaf:将 CsrfFilter 应用到带有表单的网站

多个WebSecurityConfigurerAdapters:spring security中的JWT认证和表单登录

返回用户名和密码以登录表单grails spring security

一个应用程序中的 Spring Security OAuth2 身份验证和表单登录

带有 Spring Security 的 Spring Boot - 使用 SMS/PIN/TOTP 的两因素身份验证