一个简单的单点登录构思

来源:互联网 发布:儿童编程软件下载 编辑:程序博客网 时间:2024/05/16 09:25
通过这次跟协同部门(下文用第三方表示)的sso联调,总的来说sso就是要保证客户端与登录用户绑定的唯一性,而这里的客户端指的是单个浏览器(这里或许可以考虑一下升级到机器级别),下面是摸索出来的一个简单方法:

1.客户端在跳转至第三方的站点时,发送一个确认登录状态的请求,sso服务器接收到客户端的请求之后,通过读取浏览器cookie里记录的token-key和ip-key来验证用户的登录状态。确认时先读取cookie里面的ip-key的值来与请求里面获取到的客户端IP来生成一个tmp-key与ip-key进行对比确认。ip-key确认通过后,再读取cookie里面的token-key,以token-key为redis的Key值去获取token,获取到token之后通过AES解密得到memberId信息,如果获得的memberId为有效信息,则认为用户已经登录并返回客户端。

2.客户端在获取到登录成功信息之后,告知第三方服务器用户已经登录。最初的想法是:第三方服务器读取ip-key和token-key的cookie来作为设备信息和用户信息来请求获得详细的用户信息,在联调的过程中发现由于服务器的IP与客户端的IP是不一致的导致设备验证不通过。为了解决这个问题,决定生成一个固定的设备信息给第三方服务器,从而解决了设备验证的问题。

3.sso服务器接收到第三方服务器的用户信息请求之后,验证设备信息以及从redis读取对应的token,通过AES解密得到memberId信息,然后获取对应的详细会员信息并返回给第三方。此处读取会员信息从redis读取可以一定程度上减轻会员信息服务的访问压力。

在总结的时候发现一处缺陷,即保持ip-key的cookie不变,然后修改token-key的cookie亦可以绕过设备绑定的设定,这里想到一个解决方案是可以把登录IP保存到redis-info-value的一个field中。
0 0
原创粉丝点击