【问题标题】:Explanations on JWT Tokens structureJWT Tokens 结构说明
【发布时间】: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


【解决方案1】:

sub 是什么?你能举个例子说明一下它的常见用法吗?

sub 声明标识了作为 JWT 主题的主体。另一方面,它可以保存您向其颁发令牌的用户的用户名。

来自RFC 7519:

4.1.2. "sub" (Subject) Claim

sub(主题)声明标识了作为 JWT 的主题。 JWT 中的声明通常是语句 关于主题。主题值必须被限定为 在发行人的上下文中是本地唯一的,或者是全球唯一的。 此声明的处理通常是特定于应用程序的。这 sub 值是包含 StringOrURI 的区分大小写的字符串 价值。使用此声明是可选的。

【讨论】:

  • 谢谢!所以不需要,好!在此期间我进行了非常深入的搜索,我发现了一个谣言说“您可以使用 sub 来存储您的唯一用户 ID”。您认为这是正确的用法吗?
  • @Deadpool 是的,它适用于唯一的用户标识符。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多