• 【Spring Boot&& Spring Cloud系列】单点登录SSO概述


    概念

    单点登录(Singleton Sign On),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就能访问所有相互信任的应用系统。

    也就是说在一个多系统共存的环境下,用户在一处登录后,就不用在其他系统中登录,也就是用户的一次登录就能得到其他所有系统的信任。单点登录在大型网站中使用非常频繁,例如阿里这里的网站,在网站的背后是成百上千的子系统,用户一次操作或交易可能涉及到几十个子系统的协作,如果每个子系统都需要用户认证,不仅用户操作繁琐,各子系统重复认证授权也十分繁琐,因此实现单点登录说到底就是解决产生和存储信任,再就是其他系统验证信任的有效性。

    实现方案

    方案一、Cookie

    原理:实现一次登录和一次退出,session是保持登录状态关键的东西,客户端持有ID,服务端持有session,两者一起用来保持登录状态。客户端需要用ID来作为凭证,二服务端需要用session来验证ID的有效性。但是不同的服务有自己的Session,因此要想办法让各个server共用session信息

    缺陷:1、Cookie不安全(可以采取Cookie加密提高安全性)

     2、不能跨域免登

    方案二、Token

    原理:将信任关系存储在单独的SS哦系统里,也就是从客户端移到了服务端。

    解决问题:1、如何高效的存储大量临时性的信任数据

    2、如何防止信息传递过程被篡改

    3、如何让SSO系统信任登陆系统和免登系统

    解决方案:1、采用类似memcached的分布式缓存的方案,既能提供可扩展数据量的机制,也能提供高效访问。

     2、采用数字签名(数字证书签名或md5等加密方式),这就需要SS哦系统返回免登URL的时候对需要验证的参数进行加密,并带上token一起返回。最后需免登陆的系统进行验证信任关系的时候,需把这个token传给SSO系统,SSO系统通过对token的验证就可以辨别信息是否被改过

     3、设置白名单,也就是只有白名单上的系统才能请求信任关系,同理只有在白名单上的系统才能被免登陆。

    基本概念:

    1、什么是跨域Web SSO:

    域名通过“.”号切分后,从右往左看,不包含"."的是顶级域名,包含一个"."的是一级域名,包含两个"."的是二级域名,依次类推。

    https://www.baidu.com:com是顶级域名,baidu.com是一级域名,www.baidu.com是二级域名。

    2、浏览器读写cookie的安全性限制:一级或顶级域名不同的网站,无法读取到彼此写的cookie

    一级域名相同,只是二级或更高级域名不同的站点,可以通过设置domain参数共享cookie的读写。这种场景可以选择不跨域的SSO方案

    域名相同,只是https和http协议不同的URL默认cookie可以共享。

    3、http协议是无状态协议,浏览器访问服务器时,要让服务器知道你是谁,只有两种方式:

    1)将信息写入cookie,它会随着每次HTTP请求带到服务端

    2)在URL、表单数据中带上用户信息(也可能在HTTP头部)。这种方式依赖于从特定的网页入口进入,因为只有走特定的入口,才有机会拼装出相应的信息,提交到服务端。

    单点登录的核心步骤:

    1、用户未登录时访问子站一、子站一服务器检测到用户没有登录(没有本站点session,因为没传过来session对应的cookie),于是通知浏览器跳转到SSO服务站点,并在跳转的URL参数中带上当前的页面地址,以便登录后自动跳转回本页。

    2、SSO服务站点检测到用户没有登录,于是显示登录页面

        用户提交登录请求道服务端,服务端验证通过,创建和账号对应的用户登陆凭证(token)

       然后,服务端通知浏览器把该token作为SSO服务站点的cookie存储起来,并跳转回子站一,跳回子站的URL参数中带上这个token

    3、浏览器在写SSO服务站点cookie后,跳转回子站一。

       子站一服务端检测到浏览器请求的URL中带了单点登录的token,于是把这个token发到SSO服务站点验证。

       SSO服务端站点拿token解密出用户账号,把账号信息中允许子站一访问的部分返回给子站一。

          子站一根据返回的信息生成用户在本站的会话,把会话对应cookie写入浏览器,从而完成在本站的登入以及会话保持。之后用户访问再子站一时,都会带上这个cookie,从而保持在本站的登录状态。

  • 相关阅读:
    C 工具库7:local_pool
    进程间传递文件描述符
    ucontext实现的用户级多线程框架
    ucontext实现的用户级多线程框架2(抢先式多线程)
    网络接收缓存的设计
    利用用户级线程提高多线程应用的性能
    死锁检测
    网络服务器发送封包设计
    C 工具库8:map
    ucontext实现的用户级多线程框架3(实现echo服务器)
  • 原文地址:https://www.cnblogs.com/dream-to-pku/p/7447040.html
Copyright © 2020-2023  润新知