2 u013853282 u013853282 于 2017.08.30 11:28 提问

两个完全独立的系统可以做单点登录吗

目前有两个各自独立的项目网盘和论坛,现在要实现实现单点登录,但是两个系统的用户结构不同,可以做单点登录吗

2个回答

wzk1986618
wzk1986618   2017.08.30 14:59

楼主说是可以实现的,不过登录之后由于用户库不一样会有无权限的问题,具体 分析一下

要实现单点
1,通过分布式缓存做到session共享(如redis),即:两个系统共享登录的session信息。
2,前台请求将sessionId写入请求的header里边。sessionid存储的cookie中
3,这样当登录了一个系统之后,后台保存了登录信息到redis里边,而且登录校验的时候后台先通过请求的sessionid上redis里边查询
是否已经有登录信息了。如果有则获取登录信息,如果没有再校验用户名密码登录。
4,此时登录另外一个系统,从cookie中获取sessionid传到后台校验。
5,问题:两个系统必须是同源的,因为cookie不能非同源访问。即:必须是一个顶级域名下得二级域名

如果两个系统是完全独立的,这个时候就要借助另外一个用户中心的系统来实现,实现原理跟上面描述的一样。

其实即使这样实现了,还是无法做到权限共享,因为一个系统在A登录,但是在B中无此用户,登录之后A再B系统里边没有任何权限。
所以另外一种实现方式比较简单粗暴。那就是定时同步两个系统的用户。
1,定时同步两个系统的用户
2,在两个系统分别加上登录另外一个系统的一个单点连接,连接中带着用户名和密码(当然要加密)
3,点击后则跳转到另外一个系统,因为带着用户名和密码,所以后台接收到之后直接过个校验。
以上是完全独立的两个系统实现单点的一种方案。很多erp就是这么实现的

qq_40024253
qq_40024253   2017.08.30 12:19

你这个和如今的两大社交软件qq微信的问题是一样的,可以认为假如在qq中已经注册帐号,那么我们可以在微信中同样使用qq登录,不过是存在一个权限问题的。
1.新建一张中间表,只在中间表存放用户名、密码、来源(来自那个系统)、是否锁定等信息。当用户登录时,首先检索中间表,如果中间表成功,则验证成功,并更加登录系统不同,去加载权限信息等等。如果中间表检索失败,则依次去检索当前登录系统的数据库,和另一个系统,如果成功则停止检索,并加载相因系统的信息。如果不成功,则提示用户注册。

我也是个菜鸟。。。

Csdn user default icon
上传中...
上传图片
插入图片