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的组成部分相关推荐

  1. 【学习笔记】cookie、session、token和分布式session

    文章目录 cookie和Session session和token cookie和token总结 分布式Session cookie和Session 为什么要有session的出现? 答:是由于网络中 ...

  2. 基于 Token 的身份验证:JSON Web Token

    最近了解下基于 Token 的身份验证,跟大伙分享下.很多大型网站也都在用,比如 Facebook,Twitter,Google+,Github 等等, 比起传统的身份验证方法,Token 扩展性更强 ...

  3. Session/Cookie/Token还傻傻分不清?

    Cookie.Session.Token 傻傻分不清 Session/Cookie/Token 还傻傻分不清? 相信项目中用JWT Token的应该不在少数,但是发现网上很多文章对 token 的介绍 ...

  4. 你管这破玩意儿叫 Token?

    关注公众号 前端开发博客,领27本电子书 回复加群,自助秒进前端群 上周我们在团队内部首次采用了 jwt(Json Web Token) token 这种 no-session 的方式来作用户的账号验 ...

  5. 用户数据表设计借鉴 浅谈数据库用户表结构设计,第三方登录 基于 Token 的身份验证

    最近对用户数据表的设计比较感兴趣,看到了两篇比较好的文章. 浅谈数据库用户表结构设计,第三方登录 转载于: https://www.cnblogs.com/jiqing9006/p/5937733.h ...

  6. 使用Token进行身份验证

    一.作为计算机术语时,是"令牌"的意思 token是计算机术语:令牌,令牌是一种能够控制站点占有媒体的特殊帧,以区别数据帧及其他控制帧.token其实说的更通俗点可以叫暗号,在一些 ...

  7. cookies,session,token都是相对安全,并不能完全防窃取

    文章目录 1.cookies的属性 从浏览器上可以看到cookies的属性有这些 Name和Value Domain Path Expires/Max-age Size HttpOnly Secure ...

  8. 前端非框架类知识点汇总

    html单词库 <link rel="stylesheet" href="css文件路径">css引入<iframe src="da ...

  9. Node.js初学笔记

    Node.js初学笔记 Node.js学习笔记,包括原生模块.Express框架.Koa框架的基本使用.以及基于Koa项目的搭建以及Postman接口测试和一些使用技巧. Node.js http模块 ...

  10. 超低费用将推动BCH在Token系统中脱颖而出

    区块链技术激发了许多创新,并以此产生了无数代表数字化资产的Token.在我们所能目及的加密货币中,其中有一大部分都属于Token.现在区块链网络上有很多Token创建系统,如Omni Layer.Co ...

最新文章

  1. 上升沿判断语句_FPGA入门系列6判断语句
  2. nginx动态库加载出现is not binary compatible问题
  3. Shader学习笔记_函数探索_tex2D(sampler2D tex, float2 s)
  4. [UE4]C++静态加载问题:ConstructorHelpers::FClassFinder()和FObjectFinder()
  5. DSS流媒体服务器搭建
  6. 程序语言python如何抓取信息_python中系统信息获取psutil使用详解
  7. 如何用 GitHub Actions 写出高质量的 Python代码?
  8. 实验4-1-6 求分数序列前N项和 (15 分)
  9. Linux下Shell脚本运行程序不输出日志到终端
  10. 图论500道题--评测平台+算法标签
  11. “跟着吴恩达老师入门机器学习”学习笔记(二)
  12. 领睿s1pro的黑苹果EFI及黑苹果教程
  13. linux怎么使用西部数据,「轉」Linux下西部数据C1门解决方法
  14. 【书单推荐】西方思想史上占有重要地位的100部思想名著
  15. nlp自然语言处理_自然语言处理中的偏见nlp是一个危险但可解决的问题
  16. 揭秘公共WiFi安全黑幕
  17. android 之输入法
  18. python与分形0004 - 带刺的圆
  19. 维度建模的基本概念及过程
  20. 加速价值释放,助力智能制造跨越“深水区”

热门文章

  1. java中逗号运算符的含义_逗号运算符什么时候有用?
  2. 修改植物大战僵尸游戏存档——跳关并快速实现财富自由
  3. OllyICE 调试的程序无法处理异常 解决方法
  4. Iphone连接Openwrt的IPSEC服务器
  5. 怎样写好git comment
  6. 罗翔陈佩斯:从狂妄到自省
  7. magisk卸载内置软件_Win10自带软件怎么卸载 Win10自带软件卸载方法【详细教程】...
  8. 如何解决仓库无线网络覆盖问题?
  9. 小码哥《恋上数据结构与算法》笔记(十五):哈希表(Hash Table)
  10. Java中的Stream和方法引用【JDK 1.8之后】