PHP成长记(三) —— SSO单点登录/登出

发布时间:2020-06-10 22:01:16 作者:村长爱技术
来源:网络 阅读:10236

      你有没有遇到过公司每一个产品,都要开发一个用户系统,浪费开发成本不说,用户体验还不好,用户要记住每一个产品的用户密码,每个产品都要重复登录,问题重重,要是能登录一次别的一些列产品就都登录了那该多好,SSO(Single Sign On)单点登录,能帮你解决这些问题。

      我在这里来说一下单点登录实现原理,希望能让大家对单点登录更了解,并应用之。我这里以phpCAS的例子来说讲解。

      首先我们想到单点登录可能是通过在根域下设置一个cookie,然后只要在这个域下的都可以共享cookie,这种方式最大的问题就是不能实现跨域(虽然网上有很多跨域的解决方案,比如header方式,但是各个浏览器支持的都不是很好),并且很不安全。所以CAS实现了另一种方式——cas server和cas client分离,也就是说单点登录服务器单独部署,其他client调用它,从而实现单点登录。具体流程如下图

       PHP成长记(三) ——  SSO单点登录/登出


1、浏览器访问单点登录的网站,如果session存在就返回数据,如果不存在就跳转到cas server(一个单独域名的服务)

2、如果有已经登录过,通过检测cookie,cas server就会302跳转通过url返回Ticket(Ticket是随机且唯一)到网站,如果没有登录过,就跳转到cas server登录页面进行登录,登录成功设置cookie,然后302跳转返回Ticket到网站,同时cas server会存储改Ticket、cookie和网站host的对应关系

3、 网站接收到Ticket后通过cas server提供的校验url去校验Ticket,cas server确认后返回成功,网站把当前的sessionid换成Ticket(session_id(Ticket)),然后返回浏览器请求数据

4、当用户再访问网站的时候,就会判断当前session是否登录


       单点登录就说完了,其实没有太复杂的技术,主要是实现的思想,说完单点登录大家一定想知道的是如何单点登出呢?接下来我再分析一下单点登出的原理:

       PHP成长记(三) ——  SSO单点登录/登出

1、用户点击登出,网站先清除当前网站的session信息,然后跳转到cas server退出URL

2、cas server接收到登出请求后删除cookie或session信息,并且通过单点登录时候记录的cookie和host、Ticket对应关系,遍历host给网站发送post登出请求(这里有一个Tip,就是在cas server退出页面通过iframe等方式把向所有host发出退出请求)

3、网站接收到登出请求后,获取Ticket,并且把Ticket换成当前的sessionid,模拟用户登录,然后销毁session完成登出


    以上是本人通过研究phpCAS获得的结论,这个只是最基本的模式,还有很多复杂模式,比如代理模式等等,有经验的朋友欢迎交流!

                                                                                                                                                                                                       谢谢!




推荐阅读:
  1. 怎么在pringboot中使用vue实现一个sso单点登录功能
  2. SpringCloud实现SSO 单点登录的示例代码

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

sso 单点登录 cas

上一篇:10.WinFor练习--自动播放图片小程序

下一篇:Python是什么?Python成为热门语言的原因!

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》