惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

宝玉的分享
宝玉的分享
J
Java Code Geeks
S
SegmentFault 最新的问题
L
LangChain Blog
M
MIT News - Artificial intelligence
Stack Overflow Blog
Stack Overflow Blog
IT之家
IT之家
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
雷峰网
雷峰网
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Cloudflare Blog
MongoDB | Blog
MongoDB | Blog
Microsoft Security Blog
Microsoft Security Blog
腾讯CDC
H
Help Net Security
阮一峰的网络日志
阮一峰的网络日志
Jina AI
Jina AI
N
Netflix TechBlog - Medium
A
About on SuperTechFans
博客园 - 叶小钗
美团技术团队
人人都是产品经理
人人都是产品经理
D
DataBreaches.Net

See you soon

哟,好久不见,无线打印 | See you soon 试试将文章版本化管理吧 | See you soon 使用 Quadlet 将 Podman 中的 Postgres 当作 systemd 服务运行 | See you soon 大他者,那个无时无刻都在盯着你的东西 | See you soon Laws of Software Engineering,软件工程定律 | See you soon 浅记多因素身份认证 | See you soon Linux 内核中的度量单位 | See you soon 重置 GPG 智能密钥 | See you soon 向 NAS 引入 samba | See you soon 无法重复键入的 Fcitx5 | See you soon ZFS 降级事故 | See you soon 记被 XanMod Kernel 和 AppArmor 联合坑的一次踩坑 | See you soon agent 的 skill 与 toolcall | See you soon 记一次服务器被挂恶意挖矿二进制 | See you soon 活着的 Arc | See you soon 令 acme.sh 使用 Cloudflare 的 DNS API 签发与续签证书 | See you soon 于 Tokio 中卸载 CPU Bound 任务 | See you soon 如我所见,梦破碎的时候 | See you soon 74LS 家族手册 | See you soon JDK Projects 备忘录 | See you soon 关于历史 | See you soon 用 curl 下载 OnePlus 的 ROM | See you soon 实用命令切片 | See you soon 再见,Oh My Zsh。 | See you soon 你不应该复用 strings.Builder | See you soon 博客的明日 | See you soon 被 AppArmor 击杀的 Dockge | See you soon AI 时代的自我 | See you soon 支持删除的布隆过滤器 | See you soon 基于栈的虚拟机与基于寄存器的虚拟机 | See you soon
JWT 小册 | See you soon
Krysztal Huang · 2024-02-21 · via See you soon

JWT(JSON Web Token) 是一种分布式、跨域的单点登录方式,他开销很小而且天然支持分布式。

十分实用呐!1

结构

JWT 以 . 作为分割,储存以下内容

  • Header:标识 JWT 的基本信息,比如算法等
  • Payload:负载,在这里会承载 JWT 的基础要素
  • Signature:签名,当 JWT 被恶意修改时将会无法验证,此时判定 JWT 失效

举个例子,典型的 JWT 应该是长成下面这样子

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

这里的字段是相对固定的:算法和 Token 类型

举个例子,使用 HS256 的算法的 JWT 的 Header 应该是如下样式

{

"alg": "HS256",

"typ": "JWT"

}

Payload

常见的 Payload 字段有 7 个,所有的字段名都尽可能缩减为 3 个字母

如下表格即是 7 个标准 Payload 字段的定义以及是否可选

字段名备注是否可选
exp过期时间
iss发布者
sub主题
aud接收者
nbf在此之前不生效
iat发布时间
jtiJWT 的 ID

除此之外还有很多其他的常用字段2

Signature

对于一串 Payload,我们使用密钥计算出他的签名,若是 Payload 被篡改那么签名也会不一致

如果签名不一致,那么就可以认为 Token 被篡改了

签名算法

一般情况下使用 HMAC 足矣,但是有些为了特别安全的情况可以使用 RSA 或者 ECDSA

传输与储存方式

JWT 可以储存在 HTTP 请求的 Header 里,这是最方便的:

Authorization: Bearer <token>

当然,HTTP 是明文传输这是十分不安全的,所以应该是有加密层的传输最好。

除此之外,也可以填入在请求体的某个字段里,不过这不是推荐的方式:

  1. 看看 jwt.io

  2. Wikipedia JWT