概念

单点登录(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,从而保持在本站的登录状态。

【Spring Boot&& Spring Cloud系列】单点登录SSO概述的更多相关文章

  1. Spring Boot 集成 JWT 实现单点登录授权

    使用步骤如下:1. 添加Gradle依赖: dependencies { implementation 'com.auth0:java-jwt:3.3.0' implementation('org.s ...

  2. 单点登录SSO:概述与示例

    目录 概述 演示一:零改造实施单点登录 演示二: 单点注销 演示三:集成AD认证 演示四:客户端单点登录 演示五:移动端单点登录 单点登录SSO概述 本系列将由浅入深的,带大家掌握最新单点登录SSO方 ...

  3. [转载]单点登录SSO:概述与示例

    原文地址: https://www.cnblogs.com/baibaomen/p/sso.html 目录 概述 演示一:零改造实施单点登录 演示二: 单点注销 演示三:集成AD认证 演示四:客户端单 ...

  4. SpringCloud微服务实战——搭建企业级开发框架(四十):使用Spring Security OAuth2实现单点登录(SSO)系统

    一.单点登录SSO介绍   目前每家企业或者平台都存在不止一套系统,由于历史原因每套系统采购于不同厂商,所以系统间都是相互独立的,都有自己的用户鉴权认证体系,当用户进行登录系统时,不得不记住每套系统的 ...

  5. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十一):集成 Shiro 框架

    Apache Shiro 优势特点 它是一个功能强大.灵活的,优秀开源的安全框架. 它可以处理身份验证.授权.企业会话管理和加密. 它易于使用和理解,相比Spring Security入门门槛低. 主 ...

  6. Spring Boot + Spring Cloud 实现权限管理系统 (集成 Shiro 框架)

    Apache Shiro 优势特点 它是一个功能强大.灵活的,优秀开源的安全框架. 它可以处理身份验证.授权.企业会话管理和加密. 它易于使用和理解,相比Spring Security入门门槛低. 主 ...

  7. 新书上线:《Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统》,欢迎大家买回去垫椅子垫桌脚

    新书上线 大家好,笔者的新书<Spring Boot+Spring Cloud+Vue+Element项目实战:手把手教你开发权限管理系统>已上线,此书内容充实.材质优良,乃家中必备垫桌脚 ...

  8. spring Boot+spring Cloud实现微服务详细教程第二篇

    上一篇文章已经说明了一下,关于spring boot创建maven项目的简单步骤,相信很多熟悉Maven+Eclipse作为开发常用工具的朋友们都一目了然,这篇文章主要讲解一下,构建spring bo ...

  9. spring Boot+spring Cloud实现微服务详细教程第一篇

    前些天项目组的大佬跟我聊,说项目组想从之前的架构上剥离出来公用的模块做微服务的开发,恰好去年的5/6月份在上家公司学习了国内开源的dubbo+zookeeper实现的微服务的架构.自己平时对微服务的设 ...

随机推荐

  1. 嵌入式开发之视频压缩比---h264、mjpeg、mpeg4

    mjpeg:以hi3519 100v的编码性能,压缩比在20~80,平均1/50 http://blog.csdn.net/mengxihe29/article/details/52584544 ht ...

  2. Java线程创建的两种方式

    java多线程总结一:线程的两种创建方式及优劣比较 (一)---之创建线程的两种方式 java实现多线程的两种方法的比较

  3. 【转】Asp.net MVC 通过自定义ControllerFactory实现构造器注入(重写DefaultControllerFactory)

    [转]Asp.net MVC 通过自定义ControllerFactory实现构造器注入 一.重写ControllerFactory的GetControllerInstance ControllerF ...

  4. spark LinearRegression 预测缺失字段的值

    最近在做金融科技建模的时候,字段里面很多缺少值得时候,模型对于新用户的预测会出现很大的不稳定,即PSI较大的情况. 虽然我们依据字段IV值得大小不断的在调整字段且开发新变量,但是很多IV值很大的字段直 ...

  5. Xcode密钥没有备份或者证书过期,出现Valid Signing错误

    密钥没有备份 或者证书过期,和Xcode 4.4中的证书,出现  Valid Signing 错误时   1.生成私有证书,打开钥匙串,钥匙串访问 – 证书助理 – 从证书颁发机构请求证书…,填入iD ...

  6. mysql初始化时报错bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory的处理

    问题描述: 今天新安装了一个linux虚拟机,然后安装mysql 5.7.21,在进行初始化的时候,报错 bin/mysqld: error : cannot open shared object f ...

  7. iOS UITextField控件总结

    先声明下面总结不是自己写的. 参考网址:http://blog.csdn.net/tskyfree/article/details/8121915 //初始化textfield并设置位置及大小   U ...

  8. Linux命令缩写的全称

    [目录|文件] ls : list(列出目录内容) pwd : print work directory(打印当前目录,现示当前工作目录的绝对路径) cd : change directory(改变目 ...

  9. JAVAWEB开发之Session的追踪创建和销毁、JSP具体解释(指令,标签,内置对象,动作即转发和包括)、JavaBean及内省技术以及EL表达式获取内容的使用

    Session的追踪技术 已知Session是利用cookie机制的server端技术.当client第一次訪问资源时 假设调用request.getSession() 就会在server端创建一个由 ...

  10. ios开发之--两次模态弹出后,怎么返回最上层的页面

    解决方法如下: self.presentingViewController.view.alpha = ;[self.presentingViewController.presentingViewCon ...