flask JWT教程:Jwt 字符串构成

2023-06-0907:20:31后端程序开发Comments845 views字数 1740阅读模式

下面是一些 JWT 的使用场景:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

1、 授权:这是 JWT 最常的使用场景。一旦用户登录,后续的每个请求都必须携带 JWT ,允许用户携带 Token 访问所有的路由、服务器和资源。单点登录时目前使用最广泛的一个场景,因为它开销小并且能够轻易的实现跨域访问。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

2、信息交换:JWT Token 是一种非常好的可以在各个客户端实现安全的交互数据的方式。因为可以对 JWT 进行签名(例如使用公钥/私钥对进行加密),所以可以确保发生消息的人是我们期待的那个。此外,由于签名是根据 header 与 payload 计算出来的,因此还可以验证内容是否被篡改。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

JWT 构成

JWT 就是一段字符串,由三段信息构成的,将这三段信息文本用 . 链接一起就构成了 Jwt 字符串。它们分别是文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

  • Header
  • Payload
  • Signature

就像这样:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiXHU2YjYzXHU1ZmMzXHU1MTY4XHU2ODA4XHU3ZjE2XHU3YTBiIiwiYWRtaW4iOnRydWV9.Y1H8vDimuq_FHZ7UDOLozAJNLoPTack-ubsxCEDDgBc

第一部分是头部(header):文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9

第二部分是载荷(payload):文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

eyJuYW1lIjoiXHU2YjYzXHU1ZmMzXHU1MTY4XHU2ODA4XHU3ZjE2XHU3YTBiIiwiYWRtaW4iOnRydWV9

第三部分是签证(signature):文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

Y1H8vDimuq_FHZ7UDOLozAJNLoPTack-ubsxCEDDgBc

header

报头通常由两部分组成: 令牌的类型(即 JWT)和所使用的签名算法(如 HMAC、SHA256或 RSA)。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

例如:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

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

jwt 的头部承载两部分信息:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

  • typ 字段是声明类型,这里是 jwt
  • alg 字段是加密的算法,通常直接使用 HMAC 、HA256

将头部进行 base64 编码构成了第一部分文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

payload

荷载是存放有效信息的地方,这些有效信息包含三个部分:注册的声明(Registered claims)、公共的声明(Public claims)、 私有的声明(Private claims)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

1、注册声明 :这是一组预先定义的声明,不是强制性的,而是推荐的,它们提供了一套易于使用的、可共用的声明。其中就有 iss(issuer 发行人),exp(expiration 过期时间),sub(subject 主题),aud(audience 受众),以及 其他的 。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

2、公共声明:使用 JWT 的人可以随意定义这些声明。但是为了避免冲突应该在 互联网 JWT 注册表 中定义它们,或者可以定义为包含抗冲突名称的 URI。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

3、私有声明:这些是为了在同意使用这些声明的当事人之间共享信息而提出的,既不是注册声明的也不是公共声明。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

定义一个 payload :文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

payload = {    "name": "正心全栈编程",    "admin": True}

将其进行 base64 编码,就能得到 JWT 的第二部分。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

signature

要创建 signature 部分,需要先获取 header、payload、secret(秘钥)、header 中指定的算法(alh),然后对其进行签名。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

例如,如果想使用 HMAC SHA256 算法签名将按以下方式创建:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

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

JWT 的第三部分是一个签证信息,这个签证信息由三部分组成:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

  • header (base64后的)
  • payload (base64后的)
  • secret

这个部分需要 base64 加密后的 header 和 base64 加密后的 payload 使用 . 连接组成的字符串,然后通过 header 中声明的加密方式进行加盐 secret 组合加密,然后就构成了 jwt 的第三部分。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

将这三部分用 . 连接成一个完整的字符串构成了最终的 jwt。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

注意:可以在 https://jwt.io/#debugger-io 验证生成的 JWT Token文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/46153.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/46153.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定