一个简单的单点登录方案
当用户在未登录状态下访问应用程序A时
1.安全拦截机制发现未登录
2.跳转到A的本地的登录代理(Agent A)
3.Agent A再跳转到单点登录服务器的登录界面
4.用户登录
5.登录成功后,单点登录服务器向cookie写入一个token,并且向数据库中加入登录日志,结构为 Token 用户ID 有效期
6.单点登录服务器再跳转到应用程序A的登录代理(Agent A),并传递生成的Token
7.Agent A用Token直接访问数据库中的登录日志,获得用户ID ,并进一步查询得到用户信息,执行本地认证操作,并将Token存储在当前域的cookie中。
当用户再次访问应用程序A时
1.安全拦截器取出Cookie中的Token
2.用Token向SSO服务器查询当前登录是否有效
3.如果登录已经失效,则执行上述上述2-7步操作。
当用户访问应用程序B时:
1.用户访问应用程序B的某个页面,安全拦截机制发现未登录
2.跳转至B的本地代理(Agent B)
3.Agent B再跳转到单点登录服务器
4.单点登录服务器检查cookie中是存在Token
如果有,则:使用此Token查询登录日志看是否已经过期(可以添加缓存功能设置过期时间)。如果存在记录且未过期,则直接跳转到Agent B,并传送Token,Agent B执行前面Agent A第7步操作;如果不存在记录或者已过期,则显示登录界面。
如果Cookie中没有Token,也显示登录界面。
当用户登出系统时
1.通过本地代理Agent跳转到单点登录服务器的登出URL
2.单点登录服务器根据Cookie中的Token使登录状态失效