- 介绍 jwt
- 实践
- 定义功能
- 签发接口
- 验证中间件
- 使用
- 总结
- 当前部分的代码
在典型的业务场景中, 认证与鉴权是十分基础的.
对于 API 接口, 通常是在第一次验证之后生成一个带有时效的 token. 接下来的一系列请求都携带这个 token, 服务器会对这个 token 进行验证.
介绍 jwt
JSON Web Tokens(jwt) 是一种用于在两个主体间传递认证消息的方式. 注意, 消息是通过数字签名的, 因此可以被验证和信任, 但却不是加密的.
一个 jwt 由三部分组成:
- Header
- Payload
- Signature
Header 部分通常只有两个字段, 分别定义了签名算法和 token 类型.
{
"alg": "HS256",
"typ": "JWT"
}
Payload 部分是实际负载, 用于声明. 通常存储一些用户 ID 之类的索引数据, 也可以放一些其他有用的信息. 注意, 不要存储机密数据.
jwt 规范也在 Payload 中预定义了推荐字段, 但非强制的, 但很多库都会遵照着实现. 比如 iss 字段定义发布者, exp 定义 token 的过期时间. 更多字段可以在 rfc7519 规范 中查看.
Signature 就是签名了, 大致样式如下:
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(pa