SSO概要
SSO英文全称Single Sign On,即单点登录。在多个用户系统中,用户只需要登录在某个系统上登录一次,那么就可以在所有相互信任的系统上登录。在企业级的应用中,减少了用户的登陆成本,提高了系统的易用性和可用性。
SSO的构成
1、客户端
这里的客户端是接入SSO的系统,我们称之为子系统。
2、认证中心
认证中心的主要工作就是,向子系统提供有效的登录凭证、校验子系统的登陆凭证和协助子系统302重定向。
3、LDAP
LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。它是基于X.500标准的,但是简单多了并且可以根据需要定制。与X.500不同,LDAP支持TCP/IP,这对访问Internet是必须的。LDAP的核心规范在RFC中都有定义,所有与LDAP相关的RFC都可以在LDAPman RFC网页中找到。
本片文章主要介绍SSO的实现,对LDAP不做过多的说明。
4、Session Pool
Session池,用来存储用户的登录信息。用redis或者memcache实现。k-v存储的结构,我们可以将key做Session Key,value则存储用户的一些基础信息,比如:用户名等。
SSO实现图解
流程图
![SSO流程图](https://i-blog.csdnimg.cn/blog_migrate/dc664bfa33cd71215ab38fffc804b09e.png)
时序图
![SSO时序图](https://i-blog.csdnimg.cn/blog_migrate/d944eb357c76c4396983f9572a397881.png)
SSO接入描述
1、子系统配置
子系统需要配置app id和app key,app id和app key需要向SSO认证中心申请。
2、SSO登录校验
为需要登录的页面设置SSO登录校验,登录校验需判断当前子系统有无SSO认证中心下发的ticket,如果有则走API校验ticket的有效性,校验成功进入访问的页面,校验失败则302重定向至SSO登录地址。
如果子系统未发现ticket,则直接302重定向至SSO登录地址(跳转至SSO登录地址需携带参数app_id和jumpto,jumpto一般为子系统要访问的页面地址)。
3、SSO回调
SSO的回调地址,是子系统向认证中心申请的,SSO会根据此地址跳转回相应子系统。
SSO重定向至子系统时,会携带jumpto和code两个参数,jumpto是由子系统带给SSO的地址,code是由SSO生成用于换取ticket的凭证。
子系统的回调地址接收code以后需API请求校验code,校验成功SSO会json返回给子系统ticket和username(登陆用户名)。
子系统拿到ticket和username后自行存储(推荐存储为浏览器cookie),然后子系统根据jumpto跳转至需要访问的页面。
注意:如果子系统没带jumpto给sso,那么sso会默认带上名为index的参数(即jumpto=index),子系统需要根据这个index跳转到自己相应的主页地址。
4、统一退出
子系统退出时,请清除掉已存储的ticket和username,然后携带app id重定向至SSO统一退出地址。