这篇文章是3个系列文章中的第二部分,探讨了如何为基于Spring Boot 2的应用程序启用OSO2提供程序SSO。 3个帖子是:

1. 引导兼容OpenID Connect的OAuth2授权服务器/ OpenID提供程序的方法

2.与OAuth2授权服务器/ OpenID提供程序集成的旧版Spring Boot / Spring 5方法–这篇文章

3.与OAuth2授权服务器/ OpenID Connect提供商集成的更新的Spring Boot 2 / Spring 5方法–即将推出

这篇文章将探讨传统的Spring Boot 2 / Spring Security 5方法,以为应用程序启用基于OAuth2的身份验证机制,本文假设所有 遵循了上一篇博客文章中的步骤, UAA已启动并正在运行。

可能想到的一个问题是,为什么我应该在Spring Boot 2 / Spring Security 5的背景下谈论遗留物,而这本来应该是做SSO的新方法! 原因是,随着开发人员我们一直在使用Spring Boot 1.5.x的一种方法(现在认为该方法已被弃用),但是其中的功能尚未完全移植到新方法上(能够启动OAuth2授权服务器以及创建OAuth2资源服务器的能力是示例),在此期间,Spring Security开发人员(感谢 Rob Winch和Joe Grandja )通过spring-security-oauth2-boot项目的形式为传统方法提供了桥梁。

方法

因此,旧方法的外观是什么–在此之前,我已经详细介绍了它,以总结一下它在一个名为@ EnableOAuth2SSO的注释和一组支持该注释的属性的基础上的工作原理,示例安全配置如下所示–

import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@EnableOAuth2Sso
@Configuration
public class OAuth2SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(WebSecurity web) throws Exception {
        super.configure(web);

        web.ignoring()
           .mvcMatchers("/favicon.ico", "/webjars/**", "/css/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();

        http.authorizeRequests()
                .antMatchers("/secured/**")
                    .authenticated()
                .antMatchers("/")
                    .permitAll()
                .anyRequest()
                    .authenticated();
    }

}

指向UAA的一组支持属性如下:

ssoServiceUrl: http://localhost:8080/uaa

security:
  oauth2:
    client:
      client-id: client1
      client-secret: client1
      access-token-uri: ${ssoServiceUrl}/oauth/token
      user-authorization-uri: ${ssoServiceUrl}/oauth/authorize
    resource:
      jwt:
        key-uri: ${ssoServiceUrl}/token_key
      user-info-uri: ${ssoServiceUrl}/userinfo

将spring-security-oauth2-boot项目作为依赖项插入:

compile 'org.springframework.cloud:spring-cloud-starter-oauth2'
compile("org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.0.0.BUILD-SNAPSHOT")

这些注释也适用于Spring Boo2应用程序。 但是请注意,Spring Boot 2支持两个不同的Web框架-Spring Web和Spring Webflux ,此方法可过渡地 引入 Spring Web ,这将Spring Web强制为默认框架

完整示例及其启动方法可在我的github存储库中找到 – https://github.com/bijukunjummen/oauth2-boot2

测试中

任何以“ / secured / **”开头的uri均已启用SSO,如果访问索引页,则无需任何身份验证即可显示它:

springboot oauth2过期时间_mysql

现在,单击以“ / secured / **”开头的uri应该会触发OAuth2 授权代码流 :

springboot oauth2过期时间_linux_02

并应通过UAA向用户显示登录屏幕:

springboot oauth2过期时间_mysql_03

使用之前创建的凭证登录– user1 / user1应该将用户重定向回该应用程序的Spring Boot 2旧版,并显示受保护的页面:

springboot oauth2过期时间_linux_04

这就完成了使用Spring Boot 2进行SSO的遗留方法。请注意,这只是伪身份验证,OAuth2的用途更多是为了授权访问用户资源,而不是在这里使用身份验证。 可以在此处找到澄清这一点的文章。 下一篇有关本机Spring Security 5 / Spring Boot2的文章将提供使用OpenID Connect的更清晰的身份验证机制。

翻译自: https://www.javacodegeeks.com/2018/02/spring-boot-2-applications-oauth-2-legacy-approach.html