单点登录sso原理及代码实现

什么是单点登录

一个账户在多个系统上实现单一用户的登录

为什么用单点登录

单点登录可以做到在不记录用户密码的情况下,实现不同系统之间的资源共享,自动登录不安全,单点登录,一处登录,处处都可用,不用做多余的登录操作
引用一个很经典的案例

比如现在有OA系统、门户系统、人力资源管理系统、档案管理系统、生产管理系统、xx系统等,这么多个系统在一个公司里面,如果一个用户需要使用这么多个系统,那每天都要登录N多系统,太浪费时间了(其他还有统一用户、统一权限的问题,这里先不谈这个)所以单点登录就是,如果用户在门户系统登录了,那么他打开OA系统、生产管理系统的时候就不用再登录了,因为他已经在门户系统登录过一次

单点登录的原理

单点登录sso原理及代码实现_第1张图片
图片好像有点小,以下是过程

1、用户访问系统1的受保护资源,系统1发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数
2、sso认证中心发现用户未登录,将用户引导至登录页面
3、用户输入用户名密码提交登录申请
4、sso认证中心校验用户信息,创建用户与sso认证中心之间的会话,称为全局会话,同时创建授权令牌
5、sso认证中心带着令牌跳转会最初的请求地址(系统1)
6、系统1拿到令牌,去sso认证中心校验令牌是否有效
7、sso认证中心校验令牌,返回有效,注册系统1
8、系统1使用该令牌创建与用户的会话,称为局部会话,返回受保护资源
9、用户访问系统2的受保护资源
10、系统2发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数
11、sso认证中心发现用户已登录,跳转回系统2的地址,并附上令牌
12、系统2拿到令牌,去sso认证中心校验令牌是否有效
13、sso认证中心校验令牌,返回有效,注册系统2
14、系统2使用该令牌创建与用户的局部会话,返回受保护资源

用户登录成功之后,会与sso认证中心及各个子系统建立会话,用户与sso认证中心建立的会话称为全局会话,用户与各个子系统建立的会话称为局部会话,局部会话建立之后,用户访问子系统受保护资源将不再通过sso认证中心,全局会话与局部会话有如下约束关系
1、局部会话存在,全局会话一定存在
2、全局会话存在,局部会话不一定存在
3、全局会话销毁,局部会话必须销毁
单点登录sso原理及代码实现_第2张图片

单点登录实现过程

sso-client
拦截子系统未登录用户请求,跳转至sso认证中心
接收并存储sso认证中心发送的令牌
与sso-server通信,校验令牌的有效性
建立局部会话
拦截用户注销请求,向sso认证中心发送注销请求
接收sso认证中心发出的注销请求,销毁局部会话

sso-server
验证用户的登录信息
创建全局会话
创建授权令牌
与sso-client通信发送令牌
校验sso-client令牌有效性
系统注册
接收sso-client注销请求,注销所有会话

数据库就就简单一个用户验证表
单点登录sso原理及代码实现_第3张图片

搭建认证中心

服务端主要代码
单点登录sso原理及代码实现_第4张图片
判断下登录名字是否正确,然后把用户信息写入到redis里
客户端主要代码
单点登录sso原理及代码实现_第5张图片
主要是判断是否登录过,没有就跳转到控制中心去登录
单点登录sso原理及代码实现_第6张图片
跳转的时候带上登录后的跳转链接
单点登录sso原理及代码实现_第7张图片
登录成功后
单点登录sso原理及代码实现_第8张图片
cookies 存在了
判断登录状态是否过期
单点登录sso原理及代码实现_第9张图片
这个就完成了 cookies+redis 单点登录的流程了

你可能感兴趣的:(java)