登录&单点登录介绍
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 ...
随机推荐
- 利用反射获取对象中的值等于x的字段
Field[] field = behavior.getClass().getDeclaredFields(); for (int i = 0; i < field.length; i++) { ...
- FDR校正
一.假设检验 假设检验的基本思路是: 设立零假设(null hypothesis)H0,以及与零假设H0相对应的非零假设(alternative hypothesis)H1,在假设H0成立的前提下,计 ...
- tomcat安装及环境变量配置
java环境的配置应该都学过吧,这里简单的讲一下. 下载安装java JDK,注意安装的路径,我们需要进行环境变量的配置. 2 安装完成以后,配置环境变量 环境变量的配置这里就以win7为例:右击计算 ...
- 前端静态站点在阿里云自建 K8S DevOps 集群上优雅的进行 CI/CD
目录 网站 域名 K8S DevOps 集群 私有 Gitlab 使用 Docker 编译站点 * Dockerfile * 构建编译 Image * 测试编译 Image * 推送镜像到 Aliyu ...
- 02_启动和销毁Service
在Application关闭后,Service仍然会运行. package com.example.servdemo; import android.app.Activity; import andr ...
- CSP2020复赛游记
CSP2020复赛游记 由于本蒟蒻侥幸通过PJ和TG的分数线并且侥幸的拿了一等,所以侥幸的来参加复赛 11.04~11.05 期中考,挂 11.06 对答案,炸 11.07 开始了第一次CSP复赛 坐 ...
- 第7.13节 案例详解:Python类变量
第7.13节 案例详解:Python类变量 上节介绍了类变量的定义和使用方法,并举例进行了说明.本节将通过一个更完整的例子来说明. 一. 定义函数dirp def dirp(iter): ret ...
- CentOS下安装SublimeText
1.Install the GPG key: sudo rpm -v --import https://download.sublimetext.com/sublimehq-rpm-pub.gpg 2 ...
- Linux使用inode(i节点号)删除文件
今天学习Linux的时候遇到的知识点,想起了以前一次线下AWD攻防赛的时候的不死马,记录一下 在Linux里面,有的时候我们会遇到奇奇怪怪的文件名,以至于我们删除不了,比如说我们创建了一个叫做&quo ...
- 【UV统计】海量数据统计的前世今生
转载请注明出处 背景 在互联网公司中,每个项目都需要数据统计.分析,便于项目组利用详细数据研究项目的整体情况,进行下一步的调整.在数据统计中,UV统计是最常见的,也是最普遍的.有的场景要求实时性很高, ...