具体原理参照引用部分1,我只是对作者内容的梳理和解析,看完作者的全文后再看我的解析会清楚很多
一、概念
单点登录全称Single Sign On(以下简称SSO),是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分
相比于单系统登录,sso需要一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso认证中心验证用户的用户名密码没问题,创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。这个过程,也就是单点登录的原理.
引用:
1: https://www.cnblogs.com/ywlaker/p/6113927.html
2: https://www.cnblogs.com/sdgf/p/4909166.html
关键问题和答案:
一:
系统1登录成功后,系统2拿什么去取令牌呢?(技术关键是客户端浏览器地址重定向)
访问任意没有登录的子系统时,都会跳转到认证中心,目的只能是:
1、输入用户名、密码登录(未登录)
2、找认证中心拿令牌(已登录)
假设认证中心和系统2的url分别是:sso.com、system2.com,访问system2.com时因未登录而跳转到sso.com,跳转地址:http://sso.com?service=http://system2.com(不需要额外信息),此时,就变成了浏览器与http://sso.com站点之间的会话,这个会话因为系统1登录的原因已经被标记为已登录,所以认证中心取一块令牌,根据service参数回跳,并附上令牌,回跳地址:http://system2.com?token=token
二:
1:子系统保存sessionId和session的关系实现与客户端浏览器的交互
2:子系统保存token(令牌)和session的关系实现与sso的交互
也就是说同一个用户同一个session用token和sessionId标记了两次
三:
sso负责登录认证,而权限管理由子系统来完成(不同子系统同一个用户的权限可能不同)
多个子系统用户信息不统一的情况需要做sso标准用户和子系统用户的关系映射