好久没更博文了,刚好有点时间写点东西。
最近刚给公司的几个项目整合了单点登录功能,给很多没做过的小伙伴提供点思路,说不定啥时候就用上了是吧
什么是单点登录?
一个企业可能有多个站点,在其中某个站点登录后,访问其他站点的隐私信息的时候,不需要再次登录即可访问,避免多个项目多次登录,提升用户体验,这就是单点登录
做单点登录要面对哪些问题
基于web应用,我们实现客户端和服务端交互的时候常用cookie和session,后端session共享实现的方式有很多,比如redis,这比较好处理,我们也不在这里赘述。单点登录要面对的主要问题的cookie不能跨域。
比如www.A.com下的cookie名为cookie_a ,在我们访问www.B.com的时候,请求头是不会携带上cookie_a的,这就是主要的问题。
我们在A系统登录过后,A站点下的cookie保存着一个token,但是访问B站点的时候,我们无法向服务端发送A站点下的token,所以还需要再次登录。
那么如果要实现单点登录,关键点在于几个站点之间,传递token
怎么实现单点登录
我们的大致思路是用一个统一的SSO会话管理服务器,所有业务系统的登录、退出,都由这个SSO服务器来完成。登录后生成token ,把token传递给业务系统,业务系统拿到URL中的token后,保存到cookie。
这个SSO服务器还需要有token检验的功能,这点我们后面细说,这里我用简单的代码给大家演示一下,重在思路。
比如说我们现在有两个业务系统要做单点登录,分别是会员系统 和 订单系统,域名分别是http://ucenter:991 和 http://order:992/
我们建立一台SSO服务器,域名为http://sso:994
假如我们现在没有登录,然后我们访问会员系统的个人主页:http://ucenter:991/main.php
这个时候没有回话,需要跳转去SSO服务器登录,登录页面是htt