这篇文章是3个系列文章的最后一部分,该系列文章探讨了为基于Spring Boot 2的应用程序启用OSO2提供程序SSO的方法。 3个帖子是:
- 引导兼容OpenID Connect的OAuth2授权服务器/ OpenID提供程序的方法
- 与OAuth2授权服务器/ OpenID提供程序集成的旧版Spring Boot / Spring 5方法
- 与OAuth2授权服务器/ OpenID Connect提供商集成的更新的Spring Boot 2 / Spring 5方法–这篇文章
这篇文章将探讨使用Spring Security中的本机OAuth2支持为Spring Boot 2应用程序启用SSO的崭新方法。
该文章再次假定第一篇文章中描述的所有内容均已完成。
Spring Boot 2自动配置
Spring Boot 2为Spring Security中的本机OAuth2支持提供了自动配置(请参见org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientAutoConfiguration类)。
通过以下gradle坐标可用的“ spring-security-oauth2-client”库激活了自动配置:
compile "org.springframework.security:spring-security-oauth2-client"
此自动配置会处理一组属性,对于已启动的UAA身份提供程序,该组属性如下:
uaa-base-url: http://localhost:8080/uaa
spring:
security:
oauth2:
client:
registration:
uaa:
client-id: client1
client-secret: client1
authorizationGrantType: authorization_code
redirect_uri_template: "{baseUrl}/login/oauth2/code/{registrationId}"
scope: resource.read,resource.write,openid,profile
clientName: oauth2-sample-client
provider:
uaa:
token-uri: ${uaa-base-url}/oauth/token
authorization-uri: ${uaa-base-url}/oauth/authorize
user-info-uri: ${uaa-base-url}/userinfo
jwk-set-uri: ${uaa-base-url}/token_keys
userNameAttribute: user_name
如果要依靠Spring Boot 2自动配置支持来实现对本机OAuth2的支持,并实现应用程序的启动,那么在访问应用程序时将看到以下页面:
请注意,此登录页面是由Spring Security OAuth2创建的默认页面,默认情况下会显示注册列表。
单击“ oauth2-sample-client”,将显示身份提供者(在这种情况下,UAA)的登录页面:
对于基于OpenID Connect的流程,应用程序将获得ID令牌以及我正在解码并呈现在页面上的Access令牌:
客制化
我要进行的快速自定义之一是在访问通过“ / secured” uri模式指定的任何受保护页面时重定向到UAA,以下是一组应启用此配置的配置:
package sample.oauth2.config
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
@Configuration
class OAuth2SecurityConfig : WebSecurityConfigurerAdapter() {
override fun configure(web: WebSecurity) {
super.configure(web)
web.ignoring()
.mvcMatchers(
"/favicon.ico",
"/webjars/**",
"/css/**"
)
}
override fun configure(http: HttpSecurity) {
http.csrf().disable()
http.authorizeRequests()
.antMatchers("/secured/**")
.authenticated()
.antMatchers("/", "/custom_login")
.permitAll()
.anyRequest()
.authenticated()
.and()
.oauth2Login()
.loginPage("/custom_login")
}
}
请参阅上面设置为“ / custom_login”的URI,依次将控制权简单地移交给OAuth2控制的端点,这些端点知道设置适当的参数并重定向到UAA:
@Controller
class LoginController {
@RequestMapping("/custom_login")
fun loginPage(): String {
return "redirect:/oauth2/authorization/uaa"
}
}
到此结束对Spring Boo2应用程序中对本机OAuth2支持的探索。
所有示例都可以在我的github存储库中找到 – https://github.com/bijukunjummen/oauth2-boot2
以下参考资料有助于理解OAuth2支持:
1. Spring安全性文档 – https://docs.spring.io/spring-security/site/docs/current/reference/html/
2. Joe Grandja的 Spring One Platform 2017演示文稿 – https://www.youtube.com/watch?v=WhrOCurxFWU
翻译自: https://www.javacodegeeks.com/2018/03/spring-boot-2-native-approach-sso-oauth-2-openid-connect.html