【发布时间】:2023-03-11 12:25:01
【问题描述】:
我正在尝试了解 JWT 令牌的使用,但我在理论部分迷失了方向。
我有一些关于 JWT Tokens 结构的问题,为了让这个问题成为一种新用户的文档,提供逻辑顺序,我会在下面用 粗体写出来,只要我列出了一个示例 JWT 内容。
我也会在问题的最后总结一下
“经典”JWT 令牌的组成如下:
[标题].[有效负载].[签名]
详细说明:
标题
{
"alg": "HS256",
"typ": "JWT"
}
其中包含以下字段:
- ALG = 加密算法(使用默认的 HS256 即可)
- TYP = 只是告诉它是 JWT
有效负载
{
"sub": "1234567890",
"name": "MrJohnDoe",
"iat": 1516239022
}
- SUB = 是一个可选参数。这是令牌的主题。 (学分:见@cassiomolin 回答)
根据:Where to store user id in jwt,看来你可以用它来存储你的用户ID。
- NAME = 用户名
- IAT = 令牌创建日期和时间,以 unix 时间戳表示。 (感谢下面 cmets 中的 @jps 和 @JeanRostan)
签名
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret
)
- SECRET = 服务器已知的唯一密钥。不要与当前用户密码混淆,永远不要使用它! (感谢下面 cmets 中的@jps)
【问题讨论】:
-
iat 是一个 unix 时间戳,它表示自 1970 年 1 月 1 日 00:00:00 UTC (en.wikipedia.org/wiki/Unix_time) 以来经过的秒数,因此它是一个指示令牌何时不会出现的日期不再有效。 JWT 令牌上的 wiki 页面最有可能回答您的问题:en.wikipedia.org/wiki/JSON_Web_Token#Standard_fields
-
阅读here 了解时间戳格式。 IAT 在创建令牌时的时间戳发布。过期时间在 exp 声明中。
-
secret 是用于签名的密钥。并且您不应该使用用户密码。秘密应该只在服务器端知道。
-
@Deadpool 你的意思是 iat 和 exp?这只是两种不同的说法,一种是关于创造的时间,另一种是关于它生命的终结
-
主题是令牌的颁发对象。
标签: jwt