什么是单点登录?
举个例子来说,你有A和B两个系统,登录了A系统,就不再需要登录B系统,直接点击B系统,即可实现单点登录,真正意义上的一处登录,处处登录。
单点使用的授权协议?
一:Oauth2
Oauth2是一个开放标准,也是一个授权框架,允许用户在第三方应用访问存储在其他服务器上的私密资源,而在整个过程不需要提供用户名和密码给到第三方应用。具体请看Oauth2认证详细讲解
二:SAML
提到SAML (Security Assertion Markup Language), 安全断言标记语言,是一个基于XML的开源标准数据格式,它在当事方之间交换身份验证和授权数据,尤其是在身份提供者和服务提供者之间交换具体请看saml2.0概念盲扫
三:CAS
CAS是Central Authentication Service的缩写,中央认证服务,一种独立开放指令协议。是一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,具体请看CAS概念盲扫
四:OIDC
OIDC是Open ID Connect的缩写,同时也是OAuth2和OpenID的组合,既有了OAuth2的授权,也有了OpenID的认证,是一套基于OAuth2的认证+授权协议,用于身份认证,将用户的数据安全的暴露给第三方,具体请看OIDC概念盲扫
单点登录的几种实现方式?
1. Tonken模式
某个模块登录之后,按照规则进行字符串生成,把用户包含在字符串中进行返回
1把token放进cookie中,每次请求都去cookie中查询,判断用户是否登录
2 可以把字符串放在请求的头部,每次请求都会带上head去,从而判断用户是否登录
重定向
转发是服务器行为,重定向是客户端行为
当设置转发后,请求会直接转发至新的地址,重定向会先返回客户端,在由客户端重写发起新的请求取新的地址
ps:设置cookie之后,后台重定向请求时已经带上了cookie
2. Session
主要是session复制,从一个服务复制到另一个服务
ps:session的存在方便了我们的开发,但在一定程度上增加了一些麻烦,比如多机部署时session的丢失
3.cookie和reids
*Cookie是一个是一段不超过4kb的小型文本数据,以key/value的形式存储,保存在用户的地
*Expires属性:设置cookie的生命周期
*Domain属性:设置可以访问的站点或域
1.在一个模块中进行登录,只要首次登录会话不关闭,则生成token存在cookie中,使用(uuid)当key,用户信息(token)当vaule来存储
2.登录时token在cookie中存储一份,在reids中存储一份
3.对拦截器配置策略,路径执行拦截器,和对其他页面访问拦截
4.校验cookie和reids中的token时效性
单点登录实现原理?
***用户登录成功之后,会与sso认证中心及各个子系统建立会话,用户与sso认证中心建立的会话称为全局会话,用户与各个子系统建立的会话称为局部会话,局部会话建立之后,用户访问子系统受保护资源将不再通过sso认证中心,可直接与子系统建立联系。
全局会话与局部会话有如下约束关系
-
局部会话存在,全局会话一定存在;
-
全局会话存在,局部会话不一定存在;
-
全局会话销毁,局部会话必须销毁
注销!
sso认证中心一直监听全局会话的状态,一旦全局会话销毁,监听器将通知所有注册系统执行注销操作