登录&单点登录介绍
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 一样的概念。
登录&单点登录介绍的更多相关文章
- Asp.net中实现同一用户名不能同时登录(单点登录)
Web 项目中经常遇到的问题就是同一用户名多次登录的问题,相应的解决办法也很多,总结起来不外乎这几种解决办法: 将登录后的用户名放到数据库表中: 登录后的用户名放到Session中: 登录后的用户名放 ...
- 轻型目录访问协议 ldap 公司内部网站的登录 单点登录
https://zh.wikipedia.org/wiki/轻型目录访问协议 轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP,/ˈɛ ...
- 一次多个数据库tnsping及登录单点登录需求
[环境介绍] 系统环境:Linux + Oracle 11.2.0.4.0 + python 2.7.10 [背景描述] 需求:因为涉及生产数据库较多,业务夸多个数据库使用.当收到业务有些影响时,数据 ...
- 通过SessionID和用户名来保证同一个用户不能同时登录(单点登录)
可以通过SessionID和用户名来保证同一个用户不能同时登录的问题,下面程序模仿了QQ的登录,当登录后判断当前帐号是否已经登录,如果登录.则踢掉以前登录的用户. 1.通过Application全局变 ...
- JWT&RSA实现单点登录(详细介绍)
今天给大家讲一下基于JWT&RSA的单点登录(Single Sign On,简称SSO)解决方案 概念 首先要了解几个概念 单点登录(Single Sign On) JWT RSA 背景 为什 ...
- 点单登录原理和java实现简单的单点登录
引用自:http://blog.csdn.net/zuoluoboy/article/details/12851725 摘要: 单点登录(SSO)的技术被越来越广泛地应用到各个领域的软件系统当中.本文 ...
- 单点登录系统和CAS的简介
---恢复内容开始--- 什么是单点登录? 单点登录(Single Sign On),简称为SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以 ...
- JEECG 集成KiSSO单点登录实现统一身份认证
JEECG 集成KiSSO单点登录实现统一身份认证 JEECG 如何为其他第三方系统实现统一身份认证服务,实现单点登录? 第三方系统如何对接呢? 今天为大家揭开这层面纱,让大家了解实质,使用它更快速的 ...
- OAuth2.0认证和授权以及单点登录
https://www.cnblogs.com/shizhiyi/p/7754721.html OAuth2.0认证和授权机制讲解 2017-10-30 15:33 by shizhiyi, 2273 ...
随机推荐
- C语言中connst用法
1.const一般用来定义只读变量,这个变量的之只能在初始化时赋值,如果初始化时没有赋值,则默认为0.如果在其他地方试图更改此值,编译会报错.如: 1 #include<stdio.h> ...
- ubuntu安装vmware
安装过程: 首先直接将光盘文件中的tar.gz复制到桌面,解压过程如下 中间遇到的问题: 在执行的过程中一直在回车,需要输入的全为yes,还有一个是what is the location of th ...
- 冲刺随笔——Day_Two
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 团队作业第五次--Alpha冲刺 这个作业的目标 团队进行Alpha冲刺 作业正文 正文 其他参考文献 无 ...
- MySQL——一致性非锁定读(快照读)&MVCC
MySQL--一致性非锁定读(快照读) MySQL数据库中读分为一致性非锁定读.一致性锁定读 一致性非锁定读(快照读),普通的SELECT,通过多版本并发控制(MVCC)实现. 一致性锁定读(当前读) ...
- PyQt(Python+Qt)学习随笔:QTableWidget项编辑方法editItem、openPersistentEditor
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 1.触发编辑项的editItem方法 QTableWidget提供了触发项编辑的方法,调用语法如下: ...
- 使用Fiddle修改请求数据
修改请求数据 以淘宝网为例 命令行中输入bpu 及要拦截的请求地址,如bpu https://s.taobao.com/search 在搜索栏中输入"面包机" 可以看到拦截到的请求 ...
- 性能测试学习之路 (三)jmeter常见性能指标(相关术语、聚合报告 && 服务器性能监控配置 && 图形结果 && 概要报告)
1 性能测试目的 性能测试的目的:验证软件系统是否能够达到用户提出的性能指标,同时发现软件系统中存在的性能瓶颈,以优化软件. 最后起到优化系统的目的性能测试包括如下几个方面: 1.评估系统的能力:测试 ...
- 二分查找——没有想象中的容易(详解各种变式,超深度理解,c++)
int binarySearch(int[] nums, int target) { int left = 0; int right = nums.length - 1; // 注意 while(le ...
- NodeService Ensure that Node.js is installed and can be found in one of the PATH directories
今天发布NodeService到服务器,服务器环境是window server 2012 一直报错: [1] Ensure that Node.js is installed and can be f ...
- 认识css常见的hack
一.认识css hack CSS Hack只要是来解决浏览器局部的兼容性问题,主要是因为每个浏览器对css的解析各不相同,导致输出到页面的效果的差异: 二.css hack的三种常见形式:css属性h ...