个人随笔
目录
单点登录SSO的使用和注意事项
2020-09-11 22:48:06

多个系统的情况下,我们希望用户在一个系统登录,然后在同一个浏览器中访问别的系统(当然也是同一个平台的),比如新浪微博和新浪博客,域名都不同,但是我们登录了新浪微博,只需要刷新新浪博客,状态就会变成已登录,这样子就实现了单点登录。
实现单点登录的方式有多种,这里列举一下我自己的实现原理。

一、同一域名下不同项目的单点登录
这个实现起来很好办,用户cookie即可,因为cookie是共享的,这里不做分析。

二、同一父域名下,不同项目的单点登录
这个其实跟第一种没两样,只不过指定cookie的时候需要设置路径为父域名,比如cookie.setPath(.forever.cn);这样子也可以实现cookie共享。

上面的两种情况都不通用,下面我将要实现一种完全通用的单点登录,介绍原理以及实现方法以及遇到的困难

三、通用的单点登录,不管域名相不相同都可以。

原理:有一个检验中心,负责所有系统的注册登录以及注销。
1、假设用A,B两个系统,校验中心为C。当用户访问A 的时候,检查session中是否有token(可以自己定义),若是有token,表明用户登录成功,若是没有token,则重定向到校验中心C的登录页面,参数将A的地址带上。
2、在校验中心的登录页面,用户输入用户名和密码,点击登录按钮,异步调用注册中心的登录方法,若是用户名和密码正确,则表明用户登录成功,此时生成一个token,值应该为一串比较难以仿造的数字,建议UUID。叫token放到内存中,建议放到redis中,设定过期时间(当然测试的时候也可以放到application中)。返回token到页面。
3、此时,token标识就已经拿到了,唯一需要的是叫该token标识放到A,B的session中,当然也就表明A,B中都需要有addSession的异步方法。在注册中心中保存着系统中所有平台的addSesssion方法。因为不能直接ajax跨域访问,并且需要A,B中都有session,所以这里可以用一个

 1504

啊!这个可能是世界上最丑的留言输入框功能~


当然,也是最丑的留言列表

有疑问发邮件到 : suibibk@qq.com 侵权立删
Copyright : 个人随笔   备案号 : 粤ICP备18099399号-2