SSO(单点登录)的概念:在一个多系统共存的环境下,用户在一处登录后,就不用再其他系统中登录,也就是用户的一次登录能得到其他所有系统的信任。
SSO(单点登录)的应用场景:单点登录在大型网站使用非常频繁,例如阿里巴巴网站,在网站的背后是成白上千的子系统,用户的一次操作可能涉及到几十个子系统的协作,如果每个子系统都需要用
户验证,不仅用户会疯掉,各系统也会为这种重复授权搞疯。
需要解决的两点:解决如何产生和存储信任,系统如何验证这个信任的有效性(1.存储信任 2.验证信任)
解决方案:
1.以Cookie作为凭证媒介,通过JSONP实现
用户登录父应用系统后,跟Session匹配的Cookie会存到客户端中,当用户登录子应用系统时,授权应用访问父应用提供的JSONP接口,并在请求中
带上父应用系统域名下Cookie,父应用接收到请求,验证用户的登录状态,
如果登录中则返回加密信息,子应用通过解析返回加密信息验证,验证通过则登录成功子应用系统
如果不是登录中则返回重新登录页面
优点:简单方便
缺点:信任全部压在Cookie加密中,如果加密算法泄露了,攻击者可以在本地建立一个实现了登录接口的假冒父应用,通过绑定host来把子应用发起的请求指向本地假冒的父应用
并作出回应通过验证,登录特定用户
2.通过页面重定向的方式
通过父应用和子应用来回重定向进行通信实现信息安全传递。父应用提供一个GET方式登录接口,用户通过子应用重定向连接方式访问这个接口。如果用户还没有登录则返回登录页面,
如果用户登录了则生成加密的Token并且重定向到子应用提供验证Token的接口,通过解密校验后,登录当前用户
优点:较Cookie方式安全些
缺点:不方便
3.使用独立登录系统
把授权的逻辑与用户信息的相关逻辑独立成一个应用(用户中心),用户中心不处理业务逻辑,只是处理用户信息的管理以及授权给第三方应用。第三方应用需要登录的时候把请求转发给用户中心
进行处理,处理完毕后返回凭证,第三方验证凭证,通过后就登录用户
多点登录的概念:同一账号可以在不同终端同时登录,同时收发信息。
多点登录限制(禁止用户多点在线):一个端同一个账号只能登录一个实例,例如一个账号在网站端登录后,后一个人使用这个账号在网站端登录,前一个人会被挤下去并会收到通知“你已在别处登录....”