这篇文章是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 {@Overridepublic void configure(WebSecurity web) throws Exception {super.configure(web);web.ignoring().mvcMatchers("/favicon.ico", "/webjars/**", "/css/**");}@Overrideprotected void configure(HttpSecurity http) throws Exception {http.csrf().disable();http.authorizeRequests().antMatchers("/secured/**").authenticated().antMatchers("/").permitAll().anyRequest().authenticated();}}
指向UAA的一组支持属性如下:
ssoServiceUrl: http://localhost:8080/uaasecurity:oauth2:client:client-id: client1client-secret: client1access-token-uri: ${ssoServiceUrl}/oauth/tokenuser-authorization-uri: ${ssoServiceUrl}/oauth/authorizeresource:jwt:key-uri: ${ssoServiceUrl}/token_keyuser-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,如果访问索引页,则无需任何身份验证即可显示它:
现在,单击以“ / secured / **”开头的uri应该会触发OAuth2 授权代码流 :
并应通过UAA向用户显示登录屏幕:
使用之前创建的凭证登录– user1 / user1应该将用户重定向回该应用程序的Spring Boot 2旧版,并显示受保护的页面:
这就完成了使用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