关于JWT令牌结构的解释

关于JWT令牌结构的解释,jwt,Jwt,我试图理解JWT代币的用法,但我在理论部分迷失了方向 我对JWT代币的结构有一些疑问,为了让这个问题成为新用户的一种文档,提供一个逻辑顺序,我将在下面用粗体写,只要我列出一个JWT内容示例。 我还将在问题的结尾对它们进行总结 一个“经典”JWT令牌的组成如下: [标题][有效负载][签名] 详细内容: 标题 { "alg": "HS256", "typ": "JWT" } 其中包含以下字段: ALG=加密算法(使用默认的HS256可以) TYP=仅表示它是JWT 有效载荷 {

我试图理解JWT代币的用法,但我在理论部分迷失了方向

我对JWT代币的结构有一些疑问,为了让这个问题成为新用户的一种文档,提供一个逻辑顺序,我将在下面用粗体写,只要我列出一个JWT内容示例。

我还将在问题的结尾对它们进行总结



一个“经典”JWT令牌的组成如下:

[标题][有效负载][签名]

详细内容:


标题

{
  "alg": "HS256",
  "typ": "JWT"
}
其中包含以下字段:

  • ALG=加密算法(使用默认的HS256可以)
  • TYP=仅表示它是JWT

有效载荷

{
  "sub": "1234567890",
  "name": "MrJohnDoe",
  "iat": 1516239022
}
  • SUB=什么是SUB?你能告诉我一个常见用法的例子吗?
    请参见下面的@CassioMazzocchiMolin答案
  • SUB=是一个可选参数。这是代币的主题。(字幕:@CassioMazzocchiMolin)
    根据:看起来你可以用它来存储你的用户ID
  • NAME=用户名
  • IAT=令牌到期时间。它是用ms表示的吗?
    感谢以下评论中的@jps和@JeanRostan。
    • IAT=令牌创建日期和时间,以unix时间戳表示

签名

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

secret

)
  • “秘密”到底是什么?我应该使用用户密码作为密码吗?
    感谢下面评论中的@jps。
    • SECRET=服务器只知道的唯一密钥。为避免与当前用户密码混淆,此密码不应用于此目的
什么是子代码?你能给我举一个常见用法的例子吗

sub
索赔确定了作为联合工作组主体的委托人。换句话说,它可以保存您向其颁发令牌的用户的用户名

从:

子索赔
(主体)确定了作为主体的主体 JWT的主题。JWT中的声明通常是声明 关于这个话题。subject值的作用域必须为 在发行人的上下文中是本地唯一的,或者是全球唯一的。 本索赔的处理通常是针对具体应用的。这个
sub
值是包含StringOrURI的区分大小写的字符串 价值此声明的使用是可选的

什么是子代码?你能给我举一个常见用法的例子吗

sub
索赔确定了作为联合工作组主体的委托人。换句话说,它可以保存您向其颁发令牌的用户的用户名

从:

子索赔
(主体)确定了作为主体的主体 JWT的主题。JWT中的声明通常是声明 关于这个话题。subject值的作用域必须为 在发行人的上下文中是本地唯一的,或者是全球唯一的。 本索赔的处理通常是针对具体应用的。这个
sub
值是包含StringOrURI的区分大小写的字符串 价值此声明的使用是可选的


iat是unix时间戳,它表示自1970-01-01 00:00:00 UTC()以来经过的秒数,因此它是指示令牌不再有效的日期。JWT令牌上的wiki页面很可能会回答您的问题:阅读时间戳格式。IAT在时发出,即创建令牌时的时间戳。过期时间在exp声明中。机密是用于签名的密钥。您不应该使用用户密码。这个秘密只能在服务器端知道。@Deadpool你是说iat和exp?这仅仅是两个不同的声明,一个是关于创建时间,另一个是关于它的生命主体的结束,即令牌被颁发给谁。iat是unix时间戳,它表示自1970-01-01 00:00:00 UTC()以来经过的秒数,因此它是指示令牌不再有效的日期。JWT令牌上的wiki页面很可能会回答您的问题:阅读时间戳格式。IAT在时发出,即创建令牌时的时间戳。过期时间在exp声明中。机密是用于签名的密钥。您不应该使用用户密码。这个秘密只能在服务器端知道。@Deadpool你是说iat和exp?这仅仅是两种不同的说法,一种是关于创造的时间,另一种是关于它的生命主体是谁,代币是发给谁的。谢谢!所以不需要了,很好!在此期间,我进行了深入的搜索,发现了一个谣言,说“你可以使用sub来存储你的唯一用户ID”。您认为这是一个正确的用法吗?@Deadpool是的,它适用于唯一的用户标识符。谢谢!所以不需要了,很好!在此期间,我进行了深入的搜索,发现了一个谣言,说“你可以使用sub来存储你的唯一用户ID”。您认为这是正确的用法吗?@Deadpool是的,它适合于唯一的用户标识符。