热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SSO单点登录原理与技术

Token(令牌)token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。单点登录原理:当用户第一次登录后,服务器生成一个token并将此token返回

Token(令牌)

token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识。

单点登录原理:

当用户第一次登录后,服务器生成一个token并将此token返回给客户端客户端收到token后把它存储起来,可以放在COOKIE或者Local Storage(本地存储)里。 以后客户端只需带上这个token前来请求数据即可,无需再次带上用户名和密码。

 同域SSO原理分析

实际上,HTTP协议是无状态的,单个系统的会话由服务端Session进行维持,Session保持会话的原理是通过COOKIE把sessionId写入浏览器,每次访问都会自动携带全部Cookie,在服务端读取其中的sessionId进行验证实现会话保持。同域下单点登录其实就是手写token代替sessionId进行会话认证。

token的生成

  token的组成uid(用户唯一的身份标识)、time(当前时间的时间戳)、sign(签名,token的前几位以哈希算法压缩成的一定长度的十六进制字符串。为防止token泄露)

服务端生成token后,将token与user对象存储在Map结构中,token为Key,user对象为value,response.addCOOKIE()生成新的Cookie,名为token,值为token的值。

      技术图片

跨域SSO原理分析

当有多个系统时,认证机制的流程如下:

  1. 提供用户登录界面,供用户进行身份认证
  2. 用户验证通过后,生成新token
  3. 将token<->user 对存入全局MAP中供校验
  4. 将token写入所有域的COOKIE中
  5. 页面重定向回原始请求URL

分析

当系统有多个并且在不同域(domain)时,COOKIE只会作用在当前域下。

token写入所有域的COOKIE中才是解决跨域SSO的核心

    技术图片

COOKIE增删改查

如何读取COOKIE?

通过Servlet中的request对象可以读取到COOKIE数组,然后foreach遍历读取,一般只是获取到nam和value,其他信息写入到浏览器后,浏览器不主动再发回来,读取并无意义。

        COOKIE[] COOKIEs = request.getCOOKIEs();
        if (COOKIEs != null) {
            for (COOKIE COOKIE : COOKIEs) {
                System.out.println(
                        COOKIE.getName() +
                        COOKIE.getValue() +
                        COOKIE.getMaxAge() +
                        COOKIE.getPath() +
                        COOKIE.getDomain() +
                        COOKIE.getSecure() +
                        COOKIE.isHttpOnly()//客户端js是否可以获取
                );
            }
        }

如何写入COOKIE带到浏览器?

新建COOKIE对象设置一系列属性,然后添加到response中去。需要注意的是,当设置path为“/”时,表示所有路径都会被该COOKIE作用到,如果设置为/path1那么由/path2发起请求就不会携带该COOKIE。默认不设置只作用在当前路径下。

        COOKIE COOKIE = new COOKIE("myCOOKIEName","myCOOKIEValue");
        COOKIE.setHttpOnly(false);//Javascript不能处理
        //一个正值表示COOKIE将在经过许多秒之后过期。注意,值是COOKIE过期的最大时间,而不是COOKIE当前的时间。
        //负值表示COOKIE没有持久存储,在Web浏览器退出时将被删除。零值会导致删除COOKIE。
        COOKIE.setMaxAge(-1000);
        COOKIE.setSecure(false);//如果为true,仅支持HTTPS协议
        //COOKIE对指定目录中的所有页面以及该目录子目录中的所有页面都可见。
        COOKIE.setPath("/");
        //COOKIE.setDomain("www.a.com");//默认情况下,COOKIE只返回给发送COOKIE的服务器。
        response.addCOOKIE(COOKIE);

修改COOKIE

修改更新COOKIE时,除了要保证COOKIE的name是相同的,也要保证COOKIE的一系列属性是相同的,否则浏览器会生成新的COOKIE。

删除COOKIE

只需要设置COOKIE的MaxAge为负值,意味着是过去的COOKIE,浏览器就会清除。





参考文献---掘金

SSO单点登录原理与技术


推荐阅读
  • 目录结构如下:Nginx基础知识NginxHTTP服务器的特色及优点Nginx的主要企业功能Nginx作为web服务器的主要应用场景包括:Nginx的安装安装环境 ... [详细]
  • 云计算安全,主要面临哪些威胁?
    云计算是一种新的计算方式,它依托于互联网,以网络技术、分布式计算为基础,实现按需自服务、快速弹性构建、服务可测量等特点的新一代计算方式。然而,任何以互联网为基础的应用都存在着一定危 ... [详细]
  • 在写每日签到的时候,我居然使用的是本地时间被项目经理笑哭了。。。。,如果你在写单机游戏,没有游戏服务器,但又不想使用本地时间,就可以采用下面方法.方法总结:     1.使用 ... [详细]
  • 一、基本Tag1.Tag定义了Item实例,有三个基本的属性来定义一个item实例,大小写敏感。id-每个Item实例的唯一标识type ... [详细]
  • 转载自:http:www.hbtelecom.com.cndetail.asp?news_id78369_______________________________ ... [详细]
  • 接口测试的方式有很多,比如可以用工具(jmeter,postman)之类,也可以自己写代码进行接口测试,工具的使用相对来说都比较简单,重点是要搞清楚项目接口的协议是什么,然后有针对 ... [详细]
  • 作业迁移
    背景:数据库服务器更换,1、数据库迁移(BACKUPRESTORE);2、数据库登录名用户迁移(注意孤立用户);3、作业迁移数据库迁移,备份数据库、拷贝备份文件到新服务器,还原数据 ... [详细]
  • 智能家居巨头 Aqara 基于 KubeSphere 打造物联网微服务平台
    智能家居巨头 Aqara 基于 KubeSphere 打造物联网微服务平台 ... [详细]
  • github:https:github.comfroghuiyolandaIO模型和多线程模型实现多线程设计的几个考虑在我们的设计中,mainre ... [详细]
  • 《每个设计师都应该掌握的50个css代码段》11~20段
    2019独角兽企业重金招聘Python工程师标准11.胶卷边框img.polaroid{background:#000;*Changethistoabackgroundima ... [详细]
  • Spark 贝叶斯分类算法
    一、贝叶斯定理数学基础我们都知道条件概率的数学公式形式为即B发生的条件下A发生的概率等于A和B同时发生的概率除以B发生的概率。根据此公式变换,得到贝叶斯公式:即贝叶斯定律是关于随机 ... [详细]
  • 吴恩达“机器学习”——学习笔记二
    定义一些名词欠拟合(underfitting):数据中的某些成分未被捕获到,比如拟合结果是二次函数,结果才只拟合出了一次函数。过拟合(overfitting):使用过量的特征集合, ... [详细]
  • 前言微服务架构(MicroserviceArchitecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。你可以将其看作是在架构层次而非获取服务 ... [详细]
  • 来自Google的前端工程师-PhilipWalton分享了本身关于怎样成为优异的工程师的一些看法。个人感觉很有代价,所以翻译成中文,轻易人人浏览。程度有限,如翻译不妥的地方请在批 ... [详细]
  • ASP.NET Core WebAPI 开发新建WebAPI项目  转
    转 http:www.cnblogs.comlinezerop5497472.htmlASP.NETCoreWebAPI开发-新建WebAPI项目ASP.NETCoreWebAPI ... [详细]
author-avatar
l佳恒_756
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有