概念
SSO 英文全称 Single Sign On,单点登陆。
在多个应用系统中,只须要登陆一次,就能够访问其余相互信任的应用系统。
好比:淘宝网(www.taobao.com),天猫网(www.tmall.com),聚划算(ju.taobao.com),飞猪网(www.fliggy.com)等,这些都是阿里巴巴集团的网站。在这些网站中,咱们在其中一个网站登陆了,再访问其余的网站时,就无需再进行登陆,这就是 SSO 的主要用途。
好处
用户角度
用户可以作到一次登陆屡次使用,无需记录多套用户名和密码,省心。
系统管理员角度
管理员只需维护好一个统一的帐号中心就能够了,方便。
新系统开发角度
新系统开发时只需直接对接统一的帐号中心便可,简化开发流程,省时。
技术实现
流程图
流程介绍
若是没这个介绍,看上图确定是懵懵的。
系统A和系统B都是先后端分离的,好比前端框架用的 React / Vue / Angular,都是经过 NPM 编译后独立部署的,先后端彻底经过HTTP接口的方式进行交互,也有可能先后端项目的域名都不同。
SSO认证中心不是先后端分离的,就是前端代码和后端代码部署在一个项目中。
为何用这两种状况呢?
其实就是为了,在流程图上出现这两种状况,这样的清楚了,后期改为任何一种就都清楚了。
试想一下:
三个系统都是先后端分离的状况,流程图应该怎么调整?
三个系统都不是先后端分离的状况,流程图应该怎么调整?
对外接口
系统A和系统B:用户退出接口。
SSO 认证中心:用户退出接口和token验证接口。
登陆
如上述流程图一致。
系统A和系统B:使用token认证登陆。
SSO 认证中心:使用会话认证登陆。
先后端分离项目,登陆使用token进行解决,前端每次请求接口时都必须传递token参数。
退出
上图,表示的是从某一个系统退出的流程图。
退出,还能够从SSO认证中心退出,而后调取各个系统的用户退出接口。
当用户再进行操做的时候,就会跳转到SSO的登陆界面。
Token 生成方式
建立全局会话可使用session,将session存储到redis中。
令牌的生成可使用JWT。
PHP JWT参考地址:https://github.com/lcobucci/jwt
固然还能够自定义token的生成方式。
小结
讲解了什么是SSO,以及SSO的用途与好处,同时根据流程图一步步进行梳理,基本上就能够实现了。
期间遇到任何问题,均可以关注公众号和我进行交流。
扩展
SSO与OAuth的区别
谈到SSO不少人就想到OAuth,也有谈到OAuth想到SSO的,在这里我简单的说一下区别。
通俗的解释,SSO是处理一个公司内的不一样应用系统之间的登陆问题,好比阿里巴巴旗下有不少应用系统,咱们只须要登陆一个系统就能够实现不一样系统之间的跳转。
OAuth是不一样公司遵循的一种受权方案,也是一种受权协议,一般都是由大公司提供,好比腾讯,微博。咱们经常使用的QQ登陆,微博登陆等,使用OAuth的好处是可使用其余第三方帐号进行登陆系统,减小了因用户懒,不肯注册而致使用户流失的风险。
如今一些支付业务也用OAuth,好比微信支付,支付宝支付。
还有一些开放平台也用OAuth,好比百度开放平台,腾讯开放平台。
SSO与RBAC的关系
若是企业有多个管理系统,现由原来的每一个系统都有一个登陆,调整为统一登陆认证。
那么每一个管理系统都有权限控制,吸收统一登陆认证的经验,咱们也能够作一套统一的RBAC权限认证。
前端