COOKIE & SESSION & TOKEN

主要用来跟踪会话,识别用户所用。cookie 是客户端,session 是服务端的。

因为 http 是无状态协议,每一次的访问都不知道之前的状态,只能通过参数的方式来判断识别等。 cookie 也是 http 协议的一个补充。

- 有效期
- 不可跨域名
- 编码(unicode 中文,base64 二进制编码)
- 属性(name,value,maxAge,domain,secure,path,comment,version)

Cookie 使用

  • 直接用户名密码
  • 用户名加密规则
  • 密码加密

Session

  • 服务器端记录客户端状态的机制,使用上比cookie简单,增加了服务器的压力。保存在服务器上,客户端只有sessionId
  • 会话:客户端浏览器和服务器之间的一系列交互的动作成为一个session
  • session 值的是服务器端为客户端所开辟的存储空间,保存的信息就是用于保持状态

Session 的生命周期

  • 为了提高存取速度,服务器一般把 session 存在在内存里。防止内存溢出
  • 只有访问JSP、servlet等程序,才会创建session,只访问html、image等静态资源并不会创建session。另外,可以通过request.getSession(true)强制生成session、
  • session 生成之后,只要用户访问,就会更新session 最后访问时间。
  • 有效期:maxInactiveInterval 属性。也可以通过web.xml 文件中修改。

对浏览器要求

  • 虽然 session 是服务器,对客户端透明,但是正常运行还是需要客户端浏览器的支持。因为 session 需要使用 cookie 作为识别标志。HTTP 协议是无状态的,session 不能依据 HTTP 连接来判断是否是同一客户,因此服务器向客户端浏览器发送一个名为 JsessionId 的Cookie,他的值为该 Session 的id。session 依据该cookie来识别是否为同一用户。
  • 如果浏览器不支持 cookie 那么就不可以使用这种方式了。

Url 地址重写

  • url 地址重写是客户端不支持
  • cookie 的解决方案。url 地址重写的原理就是将该用户 session 的id 信息写入到url 中。

Cookie 和 Session 的异同

  • cookie 客户端,session 服务器
  • cookie 不安全,因为存放在本地
  • 为了减轻服务器压力,使用cookie,设置 session 过期时间
  • 单个cookie 在客户端的限制是3k。

Token

由于session 是文本,请求来的时候,不知道用户名密码是否一致,需要频繁去查询数据库。而 session 是需要存储空间的。给服务器带来了很大的压力。

Token 是服务端生成的一个字符串,以作客户端请求的一个令牌。当客户端第一次访问时,服务端会根据传过来的唯一userId ,加密后生成一个token,然后通过 BASE64 编码一下之后将这个 token 返回给客户端。下次请求只需要携带 Token 即可。服务器收到请求之后,会用同样的算法和秘钥去校验 Token。

Token 登录流程

客户端使用用户名和密码登录
服务端收到请求,去验证用户名和密码
验证成功后,服务端会签发一个 token,再把 token 发送给客户端
客户端收到 Token 以后把它存储起来,比如放在 Cookie
客户端每次请求服务端,携带服务端签发的 token
服务端收到请求,然后验证客户端请求里携带的token,如果验证成功,就像客户端返回请求数据。

单点登录机制

单系统登录机制

  • 1、http 无状态协议,每次请求之间不关联,没有上一次访问的信息。
  • 2、会话机制

    会话机制:启用 cookie & session 分别对应 客户端 & 服务端
    访问Tomcat 服务器时,浏览器中可以看到一个名为 JSESSIONID 的cookie,这就是 tomcat 会话机制维护的 会话 id。
  • 3、登录机制

    底层:会话机制

多系统登录

目前项目发展成为多系统的方式,web系统由单系统发展成多系统组成的应用集群,复杂性应该由系统内部承担,而不是用户,对用户而言,都是一个统一的系统,也就是说,用户访问web系统的所有系统or 模块,应该登录或注销一次就够了。

  • 单系统登录的局限:cookie 共享的实现(cookie的不可跨域性,domain可以解决一定的限制,但是不灵活,也有限制)。

    • 域名统一
    • 各系统使用的技术(至少是web服务器)要相同,不然cookie的key值不同,无法维护会话。
    • cookie 并不安全

单点登录:Single sign on,多系统应用群中登录一个系统,便可以在其他所有系统中得到授权而无需登录,包含单点登录 单点注销两部分。

SSO

基于CAS(central authentication service)

  • 独立认证中心,只有认证中心能接受用户的用户名和密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。

  • 间接授权:通过登录令牌实现,sso认证中心通过之后,创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授权,可以创建局部会话,局部会话和单系统登录的机制相同。

  • 局部会话 & 全局会话:用户通过登录建立和认证中心的会话,称为全局会话;用户得到登录令牌之后和子系统的会话,称为局部会话。全局会话建立了,不一定有局部会话;但有局部会话,一定存在全局会话。

  • 注销:sso 认证中心一直监听全局会话的状态,一旦全局会话销毁,监听器将通知所有注册系统执行注销操作。

Sso 登录的动作流程

1、用户访问子系统,没有登录令牌,访问sso中心,传递子系统url
2、未登录,访问登录页
3、用户名密码,
4、验证通过,建立全局会话,发送令牌。跳转子系统
5、子系统验证令牌,sso 已登录,注册子系统,
6、系统与用户建立局部会话,返回受保护资源
7、用户访问子系统2,没有令牌,访问sso,传递url
8、验证已登录,发送令牌,跳转
9、子系统验证令牌,注册子系统。返回结果

Sso 注销动作流程

1、用户在子系统1注销
2、子系统访问 sso 注销全局会话请求
3、sso 验证令牌有效,销毁全局会话,取出注册系统
3、sso 发送通知,通知各子系统销毁 局部会话
5、子系统接受消息,销毁局部会话
6、sso 引导至登录页面

问题

  • 1、注册系统 和 令牌发放 之间的关系?

    • 注册是 SSOserver 内部保存登录状态的过程。ST 是令牌
  • 2、什么时候需要去 SSO 验证令牌?
    • 登录验证后,先发放令牌,然后浏览器通过令牌访问 子系统时,子系统拿令牌去SSO server 验证。验证成功,注册系统。
  • 3、登录不会通知其他子系统,带着什么东西去SSO 验证?
    • 验证通过 TGC 验证,TGC 中有包含 cookie,可以找到对应注册的系统,如果 TGC 验证成功,即认为登录过,发放ST,重定向到验证ST链接。
  • 4、token & cookie & ST & TGC 之间的关系
    • TGC 是 SSO 全局的登录凭证,如果有 TGC,即保证登录。对应全局会话。
    • ST 是服务凭证,可以通过 TGC 生成对应服务的 ST。对应局部会话。
    • cookie 是浏览器客户端保存状态信息的机制。不同的子系统有不同的 cookie (子系统各自命名 名称即是 token名),SSO server 也有相应的cookie(一般名称为 TGC,JSESSIONID)。
    • token 子系统 SSO client 各自生成,用于方便校验 是否登录。

实现

- SSO 认证中心:sso-server
- 子系统:sso-client 认证中心客户端
- SSO 和 client 之间通过 HttpClient 或 webService 或 RPC、restfulAPI 都可以

系统

- 查看shiro的实现
- https://www.cnblogs.com/ywlaker/p/6113927.html 实现

SSO 名词解释

- TGT ticket granting ticket SSO 为用户签发的登录票据
拥有了TGT,就可以证明在 CAS 登陆过。TGT 封装了cookie 以及 cookie对应的用户信息。用户在 CAS 认证成功后,CAS生成 cookie (TGC),传递给浏览器,同时 CAS 会生成 TGT 对象,放入自己的缓存。把 cookie 值当成 key。 当请求过来时,只需要验证是否有 TGT 即可。 - ST service ticket 服务票据
用户访问service,发现没有ST,会去CAS请求ST,如果带有cookie,则查找TGT,使用此对象生成对应的ST返回给用户,用户凭借ST去访问service。

总结
1、单点登录的重点是全局会话的建立;
2、局部会话还是很重要;可以通过服务本身做session的保存,也可以使用全局的session服务来管理session;
3、单点登出的时候,中心认证系统首先销毁全局会话,然后回调各个子系统进行局部会话的销毁,来达到单点登出的目的;
4、token是为了简化信息的传递,其作用是和 sessionId 一样的概念。

登录&单点登录介绍的更多相关文章

  1. Asp.net中实现同一用户名不能同时登录(单点登录)

    Web 项目中经常遇到的问题就是同一用户名多次登录的问题,相应的解决办法也很多,总结起来不外乎这几种解决办法: 将登录后的用户名放到数据库表中: 登录后的用户名放到Session中: 登录后的用户名放 ...

  2. 轻型目录访问协议 ldap 公司内部网站的登录 单点登录

    https://zh.wikipedia.org/wiki/轻型目录访问协议 轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP,/ˈɛ ...

  3. 一次多个数据库tnsping及登录单点登录需求

    [环境介绍] 系统环境:Linux + Oracle 11.2.0.4.0 + python 2.7.10 [背景描述] 需求:因为涉及生产数据库较多,业务夸多个数据库使用.当收到业务有些影响时,数据 ...

  4. 通过SessionID和用户名来保证同一个用户不能同时登录(单点登录)

    可以通过SessionID和用户名来保证同一个用户不能同时登录的问题,下面程序模仿了QQ的登录,当登录后判断当前帐号是否已经登录,如果登录.则踢掉以前登录的用户. 1.通过Application全局变 ...

  5. JWT&RSA实现单点登录(详细介绍)

    今天给大家讲一下基于JWT&RSA的单点登录(Single Sign On,简称SSO)解决方案 概念 首先要了解几个概念 单点登录(Single Sign On) JWT RSA 背景 为什 ...

  6. 点单登录原理和java实现简单的单点登录

    引用自:http://blog.csdn.net/zuoluoboy/article/details/12851725 摘要: 单点登录(SSO)的技术被越来越广泛地应用到各个领域的软件系统当中.本文 ...

  7. 单点登录系统和CAS的简介

    ---恢复内容开始--- 什么是单点登录? 单点登录(Single Sign On),简称为SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以 ...

  8. JEECG 集成KiSSO单点登录实现统一身份认证

    JEECG 集成KiSSO单点登录实现统一身份认证 JEECG 如何为其他第三方系统实现统一身份认证服务,实现单点登录? 第三方系统如何对接呢? 今天为大家揭开这层面纱,让大家了解实质,使用它更快速的 ...

  9. OAuth2.0认证和授权以及单点登录

    https://www.cnblogs.com/shizhiyi/p/7754721.html OAuth2.0认证和授权机制讲解 2017-10-30 15:33 by shizhiyi, 2273 ...

随机推荐

  1. 利用反射获取对象中的值等于x的字段

    Field[] field = behavior.getClass().getDeclaredFields(); for (int i = 0; i < field.length; i++) { ...

  2. FDR校正

    一.假设检验 假设检验的基本思路是: 设立零假设(null hypothesis)H0,以及与零假设H0相对应的非零假设(alternative hypothesis)H1,在假设H0成立的前提下,计 ...

  3. tomcat安装及环境变量配置

    java环境的配置应该都学过吧,这里简单的讲一下. 下载安装java JDK,注意安装的路径,我们需要进行环境变量的配置. 2 安装完成以后,配置环境变量 环境变量的配置这里就以win7为例:右击计算 ...

  4. 前端静态站点在阿里云自建 K8S DevOps 集群上优雅的进行 CI/CD

    目录 网站 域名 K8S DevOps 集群 私有 Gitlab 使用 Docker 编译站点 * Dockerfile * 构建编译 Image * 测试编译 Image * 推送镜像到 Aliyu ...

  5. 02_启动和销毁Service

    在Application关闭后,Service仍然会运行. package com.example.servdemo; import android.app.Activity; import andr ...

  6. CSP2020复赛游记

    CSP2020复赛游记 由于本蒟蒻侥幸通过PJ和TG的分数线并且侥幸的拿了一等,所以侥幸的来参加复赛 11.04~11.05 期中考,挂 11.06 对答案,炸 11.07 开始了第一次CSP复赛 坐 ...

  7. 第7.13节 案例详解:Python类变量

    第7.13节 案例详解:Python类变量 上节介绍了类变量的定义和使用方法,并举例进行了说明.本节将通过一个更完整的例子来说明. 一.    定义函数dirp def dirp(iter): ret ...

  8. CentOS下安装SublimeText

    1.Install the GPG key: sudo rpm -v --import https://download.sublimetext.com/sublimehq-rpm-pub.gpg 2 ...

  9. Linux使用inode(i节点号)删除文件

    今天学习Linux的时候遇到的知识点,想起了以前一次线下AWD攻防赛的时候的不死马,记录一下 在Linux里面,有的时候我们会遇到奇奇怪怪的文件名,以至于我们删除不了,比如说我们创建了一个叫做&quo ...

  10. 【UV统计】海量数据统计的前世今生

    转载请注明出处 背景 在互联网公司中,每个项目都需要数据统计.分析,便于项目组利用详细数据研究项目的整体情况,进行下一步的调整.在数据统计中,UV统计是最常见的,也是最普遍的.有的场景要求实时性很高, ...