系统的讲解 - SSO单点登陆

概念

SSO 英文全称 Single Sign On,单点登陆。前端

在多个应用系统中,只须要登陆一次,就能够访问其余相互信任的应用系统。git

好比:淘宝网(www.taobao.com),天猫网(www.tmall.com),聚划算(ju.taobao.com),飞猪网(www.fliggy.com)等,这些都是阿里巴巴集团的网站。在这些网站中,咱们在其中一个网站登陆了,再访问其余的网站时,就无需再进行登陆,这就是 SSO 的主要用途。github

好处

用户角度

用户可以作到一次登陆屡次使用,无需记录多套用户名和密码,省心。redis

系统管理员角度

管理员只需维护好一个统一的帐号中心就能够了,方便。segmentfault

新系统开发角度

新系统开发时只需直接对接统一的帐号中心便可,简化开发流程,省时。后端

技术实现

流程图

clipboard.png

流程介绍

若是没这个介绍,看上图确定是懵懵的。缓存

系统A和系统B都是先后端分离的,好比前端框架用的 React / Vue / Angular,都是经过 NPM 编译后独立部署的,先后端彻底经过HTTP接口的方式进行交互,也有可能先后端项目的域名都不同。安全

SSO认证中心不是先后端分离的,就是前端代码和后端代码部署在一个项目中。前端框架

为何用这两种状况呢?微信

其实就是为了,在流程图上出现这两种状况,这样的清楚了,后期改为任何一种就都清楚了。

试想一下:

三个系统都是先后端分离的状况,流程图应该怎么调整?

三个系统都不是先后端分离的状况,流程图应该怎么调整?

对外接口

系统A和系统B:用户退出接口。

SSO 认证中心:用户退出接口和token验证接口。

登陆

如上述流程图一致。

系统A和系统B:使用token认证登陆。

SSO 认证中心:使用会话认证登陆。

先后端分离项目,登陆使用token进行解决,前端每次请求接口时都必须传递token参数。

退出

clipboard.png

上图,表示的是从某一个系统退出的流程图。

退出,还能够从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权限认证。

推荐阅读

本文欢迎转发,转发请注明做者和出处,谢谢!

clipboard.png