文章目录
引言
单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指,只需要单一的注销动作,就可以结束对于多个系统的访问权限。
Security OAuth2 单点登录流程示意图
- 访问
client1
client1
将请求导向sso-server
- 同意授权
- 携带授权码
code
返回client1
client1
拿着授权码请求令牌- 返回
JWT
令牌 client1
解析令牌并登录client1
访问client2
client2
将请求导向sso-server
- 同意授权
- 携带授权码
code
返回client2
client2
拿着授权码请求令牌- 返回
JWT
令牌 client2
解析令牌并登录
用户的登录状态是由sso-server
认证中心来保存的,登录界面和账号密码的验证也是sso-server
认证中心来做的(client1
和client2
返回token是不同的,但解析出来的用户信息是同一个用户)。
Security OAuth2 实现单点登录
项目结构
sso-server
认证服务器
@Configuration
@EnableAuthorizationServer
public class SsoAuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {
/**
* 客户端一些配置
* @param clients
* @throws Exception
*/
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory()
.withClient("merryyou1")
.secret("merryyousecrect1")
.authorizedGrantTypes("authorization_code", "refresh_token")
.scopes("all")
.and()
.withClient("merryyou2")
.