Token的组成部分
token是计算机术语:令牌,令牌是一种能够控制站点占有媒体的特殊帧,以区别数据帧及其他控制帧。token其实说的更通俗点可以叫暗号,在一些数据传输之前,要先进行暗号的核对,不同的暗号被授权不同的数据操作。
使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
1.客户端使用用户名跟密码请求登录
2.服务端收到请求,去验证用户名与密码
3.验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端
4.客户端收到 Token 以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里
5.客户端每次向服务端请求资源的时候需要带着服务端签发的 Token
6.服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据。
为了更好的理解这个token是什么,我们先来看一个token生成后的样子,下面那坨乱糟糟的就是了。
eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ3YW5nIiwiY3JlYXRlZCI6MTQ4OTA3OTk4MTM5MywiZXhwIjoxNDg5Njg0NzgxfQ.RC-BYCe_UZ2URtWddUpWXIp4NMsoeq2O6UF-8tVplqXY1-CI9u1-a-9DAAJGfNWkHE81mpnR3gXzfrBAB3WUAg
但仔细看到的话还是可以看到这个token分成了三部分,每部分用 . 分隔,每段都是用 Base64 编码的。如果我们用一个Base64的解码器的话 ( https://www.base64decode.org/ ),可以看到第一部分 eyJhbGciOiJIUzUxMiJ9 被解析成了:
{"alg":"HS512"
}
这是告诉我们HMAC采用HS512算法对JWT进行的签名。
第二部分 eyJzdWIiOiJ3YW5nIiwiY3JlYXRlZCI6MTQ4OTA3OTk4MTM5MywiZXhwIjoxNDg5Njg0NzgxfQ 被解码之后是
{"sub":"wang","created":1489079981393,"exp":1489684781
}
这段告诉我们这个Token中含有的数据声明(Claim),这个例子里面有三个声明:sub, created 和 exp。在我们这个例子中,分别代表着用户名、创建时间和过期时间,当然你可以把任意数据声明在这里。
看到这里,你可能会想这是个什么鬼token,所有信息都透明啊,安全怎么保障?别急,我们看看token的第三段 RC-BYCe_UZ2URtWddUpWXIp4NMsoeq2O6UF-8tVplqXY1-CI9u1-a-9DAAJGfNWkHE81mpnR3gXzfrBAB3WUAg。同样使用Base64解码之后,咦,这是什么东东
D X �DmYTeȧL�UZcPZ0$gZAY�_7�wY@
最后一段其实是签名,这个签名必须知道秘钥才能计算。这个也是JWT的安全保障。这里提一点注意事项,由于数据声明(Claim)是公开的,千万不要把密码等敏感字段放进去,否则就等于是公开给别人了。
也就是说JWT是由三段组成的,按官方的叫法分别是header(头)、payload(负载)和signature(签名):
header.payload.signature
头中的数据通常包含两部分:一个是我们刚刚看到的 alg,这个词是 algorithm 的缩写,就是指明算法。另一个可以添加的字段是token的类型(按RFC 7519实现的token机制不只JWT一种),但如果我们采用的是JWT的话,指定这个就多余了。
{"alg": "HS512","typ": "JWT"
}
Token的组成部分相关推荐
- 【学习笔记】cookie、session、token和分布式session
文章目录 cookie和Session session和token cookie和token总结 分布式Session cookie和Session 为什么要有session的出现? 答:是由于网络中 ...
- 基于 Token 的身份验证:JSON Web Token
最近了解下基于 Token 的身份验证,跟大伙分享下.很多大型网站也都在用,比如 Facebook,Twitter,Google+,Github 等等, 比起传统的身份验证方法,Token 扩展性更强 ...
- Session/Cookie/Token还傻傻分不清?
Cookie.Session.Token 傻傻分不清 Session/Cookie/Token 还傻傻分不清? 相信项目中用JWT Token的应该不在少数,但是发现网上很多文章对 token 的介绍 ...
- 你管这破玩意儿叫 Token?
关注公众号 前端开发博客,领27本电子书 回复加群,自助秒进前端群 上周我们在团队内部首次采用了 jwt(Json Web Token) token 这种 no-session 的方式来作用户的账号验 ...
- 用户数据表设计借鉴 浅谈数据库用户表结构设计,第三方登录 基于 Token 的身份验证
最近对用户数据表的设计比较感兴趣,看到了两篇比较好的文章. 浅谈数据库用户表结构设计,第三方登录 转载于: https://www.cnblogs.com/jiqing9006/p/5937733.h ...
- 使用Token进行身份验证
一.作为计算机术语时,是"令牌"的意思 token是计算机术语:令牌,令牌是一种能够控制站点占有媒体的特殊帧,以区别数据帧及其他控制帧.token其实说的更通俗点可以叫暗号,在一些 ...
- cookies,session,token都是相对安全,并不能完全防窃取
文章目录 1.cookies的属性 从浏览器上可以看到cookies的属性有这些 Name和Value Domain Path Expires/Max-age Size HttpOnly Secure ...
- 前端非框架类知识点汇总
html单词库 <link rel="stylesheet" href="css文件路径">css引入<iframe src="da ...
- Node.js初学笔记
Node.js初学笔记 Node.js学习笔记,包括原生模块.Express框架.Koa框架的基本使用.以及基于Koa项目的搭建以及Postman接口测试和一些使用技巧. Node.js http模块 ...
- 超低费用将推动BCH在Token系统中脱颖而出
区块链技术激发了许多创新,并以此产生了无数代表数字化资产的Token.在我们所能目及的加密货币中,其中有一大部分都属于Token.现在区块链网络上有很多Token创建系统,如Omni Layer.Co ...
最新文章
- 上升沿判断语句_FPGA入门系列6判断语句
- nginx动态库加载出现is not binary compatible问题
- Shader学习笔记_函数探索_tex2D(sampler2D tex, float2 s)
- [UE4]C++静态加载问题:ConstructorHelpers::FClassFinder()和FObjectFinder()
- DSS流媒体服务器搭建
- 程序语言python如何抓取信息_python中系统信息获取psutil使用详解
- 如何用 GitHub Actions 写出高质量的 Python代码?
- 实验4-1-6 求分数序列前N项和 (15 分)
- Linux下Shell脚本运行程序不输出日志到终端
- 图论500道题--评测平台+算法标签
- “跟着吴恩达老师入门机器学习”学习笔记(二)
- 领睿s1pro的黑苹果EFI及黑苹果教程
- linux怎么使用西部数据,「轉」Linux下西部数据C1门解决方法
- 【书单推荐】西方思想史上占有重要地位的100部思想名著
- nlp自然语言处理_自然语言处理中的偏见nlp是一个危险但可解决的问题
- 揭秘公共WiFi安全黑幕
- android 之输入法
- python与分形0004 - 带刺的圆
- 维度建模的基本概念及过程
- 加速价值释放,助力智能制造跨越“深水区”
热门文章
- java中逗号运算符的含义_逗号运算符什么时候有用?
- 修改植物大战僵尸游戏存档——跳关并快速实现财富自由
- OllyICE 调试的程序无法处理异常 解决方法
- Iphone连接Openwrt的IPSEC服务器
- 怎样写好git comment
- 罗翔陈佩斯:从狂妄到自省
- magisk卸载内置软件_Win10自带软件怎么卸载 Win10自带软件卸载方法【详细教程】...
- 如何解决仓库无线网络覆盖问题?
- 小码哥《恋上数据结构与算法》笔记(十五):哈希表(Hash Table)
- Java中的Stream和方法引用【JDK 1.8之后】