单点登录:在多个系统中,只需要登录一次就可以实现进入关联系统免登陆直接进入
核心:cookie-redis缓存模拟cookie-session
流程
1.用户首次登录系统A,系统A获取用户cookie相应标识,请求用户中心(一般写在拦截器里面,前置增强)
2.用户中心根据标识,在redis中为找到对应的值,表明该用户未在其他关联系统登录,或登录已经过期,响应系统A并使用户跳转登录页面
3.用户在登录页面填写信息后提交,用户中心判断用户是否存在以及信息是否正确,若flase,给予提示
4.在3判断为true之后,生成uuid或类似其他唯一标识(即token),存入cookie(key="标识符" value=uuid) redis(key=uuid value=用户基本信息 最好为json) 同时设置过期时间
5.完成4后 cookie随响应返回客户端,同时用户登录系统A
6.若此时用户在同一终端打开系统B链接,系统B会与系统A一样从cookie中取出uuid ,请求用户中心并根据uuid 从redis中取值,若uuid 或对应redis值为空,说明登录状态过去,重新登录,反之 取出用户信息后,响应系统B,然后用户成功登录系统B
以上就是一个简单的单点登录系统,网上的其它原理介绍大同小异,只有有的会在此基础上加上用户权限管理(能跳转哪些系统,以及显示系统的哪些页面及按钮)
当然以上步骤还不能在正式运营环境中运行,因为存在cookie的安全性问题,如果cookie被盗,则在缓存过期前可以直接登录用户账号,十分危险。一般换需要在服务端加上验证(比如:首次登录后保存ip地址,每次用cookie取缓存中的用户信息时,比较当前ip与缓存中ip是否一致,不一致则强制退出,清空缓存重新登录 也可以使用用户登录时的私密信息生成签名以表示当前唯一的合法登录状态 每次取值前对比)