这篇文章是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,如果访问索引页,则无需任何身份验证即可显示它:
现在,单击以“ / 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