一、JsonWebToken

(一)JsonWebToken是什么?

JSON Web Token 是一个开放标准协议,它定义了一种“紧凑”和“自包含”的方式,它用于各方之间作为JSON对象安全地传输信息。

紧凑:数据量较少,并且能通过url参数,http请求提交的数据以及http header的方式来传递。

自包含:这个串可以包含很多信息,比如用户ID,订单号ID等,如果被其他人拿到该信息,也就可以拿到关键业务信息。

(二)优点:

1. 可以适用于分布式的单点登录场景。

2. 可以使用跨域认证解决方案。

3. jwt实现自动刷新token的方案。

(三)基本原理

1. 客户端使用账号和密码请求登录接口。

2. 登录成功后服务器使用签名密钥生成JWT,并返回JWT给客户端。

3. 客户端再次向服务端请求其他接口时,请求头会带上JWT。

4. 服务器接收到JWT后验证签名的有效性,对客户端做出相应的响应。

(四)基本数据结构

1.基本的JWT的数据结构

如下:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoia29uZ3poaSIsImlhdCI6MTU0Mzc1MzczNX0.h1XmQo017udxlFsH-8US9Lg8dJ0IDsSbRbjEN5Nq0l4

它是由三部分组成的,中间使用 . 分割成三个部分:

Header(头部),

PayLoad(负载),

Signature(签名)

例如:Header.Payload.Signature

(1)Header

Header部分是一个JSON对象,描述JWT的元数据。

{   "typ": "JWT",   "alg": "HS256" }

alg属性表示签名的算法,默认是 HMAC SHA256 (缩写为:HS256);

typ属性表示这个令牌(token)的类型为JWT,最后将上面的JSON对象使用 Base64URL的算法转成字符串。

base64在线调试

http://tool.oschina.net/encrypt?type=3如下所示:

alg 部分表示默认加密的算法是 HMAC SHA256, 当然我们也可以选择下面的加密算法,加密算法有如下:

(2)Payload

Payload部分也是一个JSON对象,用来存放实际需要传递的数据,官方提供了7个字段,如下:

iss(issuer): 签发人
exp (expiration time): 过期时间
sub (subject): 主题
aud (audience): 受众
nbf (Not Before): 生效时间
iat (Issued At): 签发时间
jti (JWT ID): 编号
  • iss(issuer):  签发人
  • exp (expiration time): 过期时间
  • sub (subject): 主题
  • aud (audience):  受众
  • nbf (Not Before): 生效时间
  • iat (Issued At): 签发时间
  • jti (JWT ID): 编号

payload中文含义是载荷,它可以理解为存放有效信息的地方。这些有效信息一般包含如下三个部分:

  • 标准中注册的声明:(如上就是官方提供的7个字段)。
  • 公共的声明:公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息,但是不建议添加敏感信息,因为该部分在客户单可解密。
  • 私有的声明:私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对称解密的,该部分信息可以理解为明文信息。

简单的 payload 如下结构:

{   "sub": '123456',   "name": "liyinchi",   "admin": true }

我们还是使用如上的base64编码,会编码成如下所示:

(3)Signature

Signature 是对前面两部分的签名,防止数据被篡改。

签名原理:Header和payload对应的json结构进行base64 编码之后得到的两个串用英文句点号拼接起来的,然后根据header里面的alg指定的前面算法(默认算法是 HMAC SHA256)生成出来的。

如上header部分使用的是 HS256(即HMAC和SHA256),HMAC是用于生成摘要的,SHA256是用于对摘要进行数字签名的。因此使用HMACSHA256实现signature实现的算法如下:

HMACSHA256(   base64UrlEncode(header) + '.' +    base64UrlEncode(payload),   secret )

如上是 Signature 签名算法,最后一个 secret 是加密的密钥的含义。

因此通过如上的用法我们就可以拿到JWT了。

JWT在线调试工具:

https://jwt.io/

可以快速生成一个JWT,如下HEADER和PLAYLOAD是我前面定义的部分数据

JsonWebToken是什么?相关推荐

  1. 用 Redis 处理 jsonwebtoken 生成的 Token

    2019独角兽企业重金招聘Python工程师标准>>> 作者好牛逼啊,我不懂的他全都懂. Use Redis to revoke Tokens generated from json ...

  2. jsonwebtoken中文文档

    jsonwebtoken 用法 jwt.sign(payload, secretOrPrivateKey, [options, callback]) (异步)如果提供回调,则使用err或JWT 调用回 ...

  3. node jsonwebtoken

    jsonwebtoken是node版本的JWT(JSON Web Tokens)的实现.1.什么是JWT?Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JS ...

  4. jsonwebtoken jwt token 简单加密

    <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactI ...

  5. Express接口案例 使用jsonwebtoken

    一.jsonwebtoken的使用 jsonwebtoken官方文档 const jwt = require('jsonwebtoken') // 以同步的方式,生成jwt // const toke ...

  6. Node中使用token(基于第三方包jsonwebtoken)

    一.jsonwebtoken 用于生成token(加密) > jsonwebtoken 1. 安装 npm i jsonwebtoken --save 2. 使用 2.1 引入 2.2 加密 用 ...

  7. jwt java 项目实例_JWT(JsonWebToken)+SpringMVC项目demo

    [实例简介] JSON Web Token(JWT)是一个非常轻巧的规范.现在免费给大家分享一个JWT(JsonWebToken)+SpringMVC项目的demo! [实例截图] [核心代码] jw ...

  8. io.jsonwebtoken.SignatureException: JWT signature does not match locally computed signature.

    io.jsonwebtoken.SignatureException: JWT signature does not match locally computed signature. JWT val ...

  9. io.jsonwebtoken.ExpiredJwtException jwt令牌过期

    io.jsonwebtoken.ExpiredJwtException: JWT expired at 2020-05-29T10:17:57Z. Current time: 2020-11-20T0 ...

  10. jwt鉴权(react express jsonwebtoken)

    此文记录jwt鉴权(react express jsonwebtoken)思路流程 整个项目可以在https://github.com/furfur-jiang/DevConnector处查看,欢迎s ...

最新文章

  1. python matplotlab.pyplot.grid() 函数
  2. php实现下单成功提示语,推荐10款提示语源码(收藏)汇总
  3. JQuery七个常犯的错误
  4. dos命令安装windows服务
  5. C/C++排序算法(2)希尔排序
  6. crontab 问号_Spring - Quartz - cronExpression中问号(?)的解释
  7. 服务器白屏维修,液晶屏故障汇总及检修方法之一(白屏)
  8. 飞控中的IIR二阶滤波器
  9. Yii Framework 开发教程Zii组件-Tabs示例
  10. 数据结构复习题(一)
  11. mangle和demangle
  12. HTML动态爱心代码
  13. 2019智能手表推荐_2020年买什么智能手表合适?
  14. 计算机毕业设计Python+django大学生闲置二手交易商城平台(源码+系统+mysql数据库+Lw文档)
  15. 中国迟来的电信业重组
  16. java爬取酷狗榜单歌曲信息并存入数据库
  17. STM32F407/以太网/FX3U/PLC/工控板源程序
  18. 慎入坑:腾讯云轻量2核2G3M服务器30元不建议选择
  19. python蓝桥杯真题刷题打卡 | day7
  20. 图解二重积分的对称性

热门文章

  1. 数据结构无向图的操作(C语言)
  2. BlockBank中文社区AMA内容记录
  3. Creo preo MP3全套结构设计和曲面造型
  4. 数独问题流程图_软件工程基础大项目——数独问题
  5. 口腔执业医师资格考试宝典 官方
  6. 小白也能看懂的pytorch——softmax回归
  7. 查看路由器的管理页面地址
  8. (3)自动驾驶仪硬件选项
  9. Vue学习笔记——vuex
  10. 短线牛股技术买点图解 擒牛选股预警 ​通达信选股公式 副图