1. 什么是单点登录
2. 单点登录的流程
3. 细节展示
1. 什么是单点登录
单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统(例如淘宝、天猫之间的关系)。简而言之,多个系统,统一登陆。
单点登录主要强调的是登录以后,各个系统间数据共享问题。
2. 单点登录的流程
创建用户会话:(userid)
1.将用户会话信息存在redis当中
key: redis_user_token:userId value: uuid.trim();
2.将用户token添加到用户信息多对象中返回前端;
user{"id": xxxx,"name":xxxx,......."token":xxxxxx}
创建用户全局门票:(token=uuid)
将用户门票信息存在redis当中
key: redis_user_ticket:token value: userid;
创建用户临时门票:
将用户门票信息存在redis当中
key: redis_temp_ticket:token value: userid experies:600;
判定流程:
1. 初次访问
1. 到sso系统中验证,(跨域)从cookie(sso)中查找全局门票,没有就需要登录;
2. 登录后
1.创建全局门票存在redis中;
2.创建临时门票存在redis中;
3.创建用户会话,并添加门票信息,存在redis中;
3.重定向: 携带临时门票(?temp_tickrt=的形式拼接在url中)返回 returnUrl;
4.在returnUrl中校验临时票据;
1. 校验临时门票(redis),正确后需要销毁临时;
2. 验证全局门票(redis)是否有效
3. 验证用户会话(redis)是否存在,存在则回传(加入cookie(原网站)中);
2.再次登登录
1. 到sso系统中验证,(跨域)从cookie(sso)中验证;
1. 验证全局门票(redis)是否有效
2. 验证用户会话(redis)是否存在,存在则回传创建临时门票返回;
2.在returnUrl中校验临时票据;
1. 校验临时门票(redis),正确后需要销毁临时;
2. 验证全局门票(redis)是否有效
3. 验证用户会话(redis)是否存在,存在则回传(加入cookie(原网站)中);
总结:除了第一次登录时,需要创建全局门票、临时门票,保存用户会话;
不管是第一次登录还是第几次登录都要验证临时、全局门票、用户会话;
每次通过一个临时票据来进行传递验证;