目录
一、从Spring Security OAuth2官方文档了解@EnableOAuth2Sso作用
spring-security-oauth2-boot 2.2.0.RELEASE Single Sign On文档地址
先从第一段介绍开始,加上自己的分析:
@EnableOAuth2Sso
是使用在OAuth2 Client角色上的注解,从其包路径也可以看出org.springframework.boot.autoconfigure.security.oauth2.client@EnableOAuth2Sso
单点登录的原理简单来说就是:标注有@EnableOAuth2Sso
的OAuth2 Client应用在通过某种OAuth2授权流程获取访问令牌后(一般是授权码流程),通过访问令牌访问userDetails用户明细这个受保护资源服务,获取用户信息后,将用户信息转换为Spring Security上下文中的认证后凭证Authentication,从而完成标注有@EnableOAuth2Sso
的OAuth2 Client应用自身的登录认证的过程。整个过程是基于OAuth2的SSO单点登录- SSO流程中需要访问的用户信息资源地址,可以通过
security.oauth2.resource.userInfoUri
配置指定 - 最后的通过访问令牌访问受保护资源后,在当前服务创建认证后凭证Authentication(登录态)也可以不通过访问userInfoUri实现,userInfoUri端点是需要用户自己实现。默认情况
security.oauth2.resource.preferTokenInfo=true
,获取用户信息使用的是授权服务器的/check_token
端点,即TokenInfo,根据访问令牌找到在授权服务器关联的授予这个访问令牌的用户信息 Spring Security OAuth2 SSO整个流程实际上是 OAuth2 Client是一个运行在Server上的Webapp的典型场景,很适合使用授权码流程
第二段主要讲了下如何使用@EnableOAuth2Sso
:
使用
@EnableOAuth2Sso
的OAuth2 Client应用可以使用/login
端点用于触发基于OAuth2的SSO流程,这个入口地址也可以通过security.oauth2.sso.login-path
来修改如果针对一些安全访问规则有自己的定制,说白了就是自己实现了Spring Security的
WebSecurityConfigure