转载自 JSON Web Token (JWT),服务端信息传输安全解决方案

JWT介绍

JSON Web Token(JWT)是一种开放标准(RFC 7519),它定义了一种紧凑独立的基于JSON对象在各方之间安全地传输信息的方式。这些信息可以被验证和信任,因为它是数字签名的。JWTs可以使用一个密钥(HMAC算法),或使用RSA的公钥/私钥密钥对对信息进行签名。

让我们进一步解释这个定义的一些概念。

  • 紧凑

由于其较小的体积,JWTs可以通过URL、POST参数或HTTP头部参数进行传递,体积小也意味着其传输速度会相当快。

  • 独立

有效负载包含了所需要的关于用户的所有信息,避免了多次查询数据库的需要。

JWT的应用场景

  • 认证

这是使用JWT最常见的场景,一旦用户登录后,每个后续的请求都会包含JWT token,允许用户访问该token所允许的路由、服务、资源等。如单点登录是目前广泛使用JWT的一项功能,因为它的开销很小,而且在不同的域名中很容易使用。

  • 信息交换

JWT是一种在多方之间传递数据比较好的方式,因为JWT能使用签名,能确保发送者是谁,也可以验证传递过来的的信息是否被篡改。

JWT的结构

JWT由以下三部分组成:

  1. Header(头部)

  2. Payload(载荷)

  3. Signature(签名)

因此,JWT通常看起来如下。

xxxxx.yyyyy.zzzzz

Header

header通常由两个部分组成:token类型(即JWT)和正在使用的散列算法,如HMAC SHA256或RSA。

如:

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

这个JSON经过Base64编码后形成JWT的第一部分。

Payload

载荷包含了对实体的申明,用户和一些其他元信息。申明以下三种。

  1. 注册的申明

  2. 公开的申明

  3. 私有的申明

如:

{"sub": "1234567890","name": "John Doe","admin": true
}

这个JSON经过Base64编码后形成JWT的第二部分。

Signature

签名用于验证JWT的发送者是谁,并确保消息在过程中不会被篡改。

创建签名部分,你需要用到编码后的header、编码后的payload、密钥、在header中指定的算法。

如下使用HMAC SHA256算法创建签名的方式:

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

讲完了上面3个部门,最后就是由这3部分组成了。每个部分经过base64编码后,以.分隔。它能很容易的在HTML和HTTP环境中传递,也比像类似xml标准格式这样的更紧凑。

如果想使用JWT并将这些概念应用到实践中,您可以使用官网首页下面的调试器来解码、验证和生成JWTs。

JWT的工作原理

在身份验证中,当用户成功地使用他们的凭证登录时,将返回一个JWT的token,并且必须在本地保存(通常在本地保存,但也可以使用cookie),而不是在服务器中创建会话并返回cookie的传统方法。

当用户想要访问受保护的路由或资源时,用户代理应该发送token,通常是在使用Bearer模式的Authorization头参数中。标题的内容应该如下所示:

Authorization: Bearer <token>

这是一个无状态的身份验证机制,因为用户状态永远不会保存在服务器内存中。服务器的受保护路由将在授权头中检查有效的JWT,如果它存在,用户将被允许访问受保护的资源。由于JWTs是独立的,所以所有必要的信息都在那里,减少了多次查询数据库的需求。

这使得完全可以依赖无状态的数据api,甚至向下游服务发出请求。哪个域名api服务并不重要,因为CORS攻击不会成为一个问题,因为它不使用cookie。

工作流程如下:

JWT的优点

  • 因为JSON数据格式的通用性,所以JWT是可以跨语言的,主流语言都可以支持。

  • payload部分可以存储其他业务逻辑所必要的非敏感信息。

  • JWT构成简单,字节占用很小,所以非常便于传输的。

  • 不需要在服务端保存会话信息,易于应用的扩展和安全等。

JWT的使用注意

  1. 不要在payload存放敏感信息,因为该部分是可解密的。

  2. 保存好secret私钥十分重要。

  3. 尽量使用https协议

JWT参考网站

官网:https://jwt.io/

官方介绍:https://jwt.io/introduction/

支持类库:https://jwt.io/#libraries-io

RFC 7519规范:https://tools.ietf.org/html/rfc7519

明天带来JWT的Java实战。

JSON Web Token (JWT),服务端信息传输安全解决方案相关推荐

  1. Json web token (JWT) golang实现

    Json web token (JWT) eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG ...

  2. JSON Web Token (JWT)生成Token及解密实战

    转载自 JSON Web Token (JWT)生成Token及解密实战 昨天讲解了JWT的介绍.应用场景.优点及注意事项等,今天来个JWT具体的使用实践吧. 从JWT官网支持的类库来看,jjwt是J ...

  3. php jwt token 解析,JSON Web Token(JWT)入坑详解

    JSON Web Token(JWT)入坑详解 龙行    PHP    2019-6-17    1651    0评论 /** JWT生成类 **/ class Jwt { private $al ...

  4. (json web token)JWT攻击

    前记 最近国赛+校赛遇到两次json web token的题,发现自己做的并不算顺畅,于是有了这篇学习文章. 为什么要使用Json Web Token Json Web Token简称jwt 顾名思义 ...

  5. JSON Web Token (JWT)笔记(token实现单点登录功能)

    文章目录 前情提要 cookie(储存在用户本地终端上的数据) Cookie特点: session(web服务端内存) cookie和session 单点登录(只登录一次,可使用账号下全部服务)三种方 ...

  6. JSON Web Token(JWT)对比Opaque Token

    身份验证通常用来验证某人或某事是否如它所说的那样是谁或者是什么. 身份验证技术通过测试查看用户的凭据是否与经过身份验证的用户数据库或服务器中的凭据相匹配,从而提供设备访问控制. 基于token的身份验 ...

  7. jwttoken解码_使用 JSON WEB TOKEN (jwt) 验证

    一.什么JSON Web Tokens? JSON Web Tokens是一种开放的行业标准  RFC 7519方法,用于在双方之间安全地表示索赔. JWT.IO允许您解码,验证和生成JWT.其中.J ...

  8. 用户登入身份验证,手机app登入身份验证,TokenAuth身份验证,JSON Web Token(JWT)身份验证

                                                                        JJWT身份验证 1.pom依赖: <dependency ...

  9. jwt如何防止token被窃取_在吗?认识一下JWT(JSON Web Token)?

    什么是JSON Web Token ? 官网介绍: JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间安全地将信息作为JSON对象 ...

最新文章

  1. Java项目:学生信息管理系统(java+SSM+JSP+layui+maven+mysql)
  2. 一个小灯泡引发大论战:千万粉丝科普up主翻车,伊朗“唐马儒”、李永乐等下场,30万公里导线引百万网友围观...
  3. php和python哪个工资高-python和php哪个更有前景
  4. Fabric--简单的资产Chaincode
  5. python中def fun(a、b=200)_python中的函数的参数和可变参数
  6. overflow超出显示_实现:超过N行折叠并显示“...查看全部”【功能】
  7. 基于 xilinx vivado 的PCIE ip核设置与例程代码详解
  8. java图形化界面设置焦点_如何在更新窗口时防止Java图形程序窃取焦点?
  9. php 缩略图 等比例 不失真,PHP自适应宽高度等比例缩略图函数 (无裁切)
  10. linux网络服务偶尔失效,判断linux下的网络服务是否正常启动
  11. 峰Redis学习(6)Redis 数据结构(sorted-set的操作)
  12. 有人提到田英章欧体田字格范本,说两句。
  13. C++语音信号时域分析
  14. 电脑Tab键有什么用
  15. geoserver中sld设置
  16. 一个img文件-实验吧
  17. 运用Python 模拟太阳-地球-月亮运动模型
  18. uni-app实现仿微信前端(二)
  19. flappybird原理解析 JQuery版本
  20. 【MATLAB图像处理】傅里叶变换--幅度谱、相位谱、逆变换

热门文章

  1. [Redis6]配置文件详解
  2. [Java基础]反射获取成员方法并使用练习
  3. 洛谷 P1596 [USACO10OCT]Lake Counting S-dfs
  4. 高等数学上-赵立军-北京大学出版社-题解-练习5.4
  5. [蓝桥杯2019初赛]矩形切割-找规律
  6. matlab 传感器的迟滞,MATLAB PI迟滞模型问题
  7. 英雄会在线编程题目(请大家不吝赐教)
  8. LG P4899 [IOI2018] werewolf 狼人(kruskal重构树,二维数点)
  9. CF1543C. Need for Pink Slips
  10. Game of Swapping Numbers