这篇文章是3篇系列文章的最后一部分,该系列文章探讨了如何为基于Spring Boot 2的应用程序启用OAuth2提供程序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/uaaspring:security:oauth2:client:registration:uaa:client-id: client1client-secret: client1authorizationGrantType: authorization_coderedirect_uri_template: "{baseUrl}/login/oauth2/code/{registrationId}"scope: resource.read,resource.write,openid,profileclientName: oauth2-sample-clientprovider:uaa:token-uri: ${uaa-base-url}/oauth/tokenauthorization-uri: ${uaa-base-url}/oauth/authorizeuser-info-uri: ${uaa-base-url}/userinfojwk-set-uri: ${uaa-base-url}/token_keysuserNameAttribute: user_name
如果要依靠Spring Boot 2自动配置支持来实现对本机OAuth2的支持,并实现应用程序的启动,那么在访问应用程序时将看到以下页面:
请注意,此登录页面是由Spring Security OAuth2创建的默认页面,默认情况下会显示注册列表。
单击“ oauth2-sample-client”,将显示身份提供者(在这种情况下,UAA)的登录页面:
对于基于OpenID Connect的流程,应用程序将获得ID令牌以及我正在解码并呈现在页面上的Access令牌:
客制化
我要进行的快速自定义之一是在访问通过“ / secured” uri模式指定的任何受保护页面时重定向到UAA,以下是一组应启用此配置的配置:
package sample.oauth2.configimport 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