JWT令牌(Token)设计

JWT(JSON Web Token)是一种基于开放标准的令牌(Token),用于在不同实体之间传递和验证信息。它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。

  1. 头部(Header)包含了关于令牌类型和加密算法的信息。它使用Base64编码,并以JSON格式表示。header通常包含两个字段:

    • "alg":指定签名算法,例如"HMAC SHA256"或"RSA"等。
    • "typ":指定令牌类型,通常为"JWT"。

    示例:

    {
      "alg": "HS256",
      "typ": "JWT"
    }
    
  2. 载荷(Payload)是JWT的主要内容,也是存储实际信息的部分。它也使用Base64编码,并以JSON格式表示。payload包含一组称为"声明"(Claims)的键值对,用于在令牌中传递有关用户、角色、权限和其他相关信息。

    • 标准声明:标准化的声明,如"iss"(发布者)、"sub"(主题)、"aud"(观众)和"exp"(过期时间)等。
    • 私有声明:自定义的声明,可以根据需求自定义添加其他信息。

    示例:

    {
      "sub": "1234567890",
      "name": "John Doe",
      "iat": 1516239022
    }
    
  3. 签名(Signature)用于验证JWT的真实性和完整性。签名是通过将编码后的头部和载荷与秘密密钥进行加密生成的,以确保令牌在传输过程中未被篡改。签名的生成算法取决于头部中指定的"alg"字段。

    示例:

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

JWT的设计目标是实现无状态身份验证和授权机制,使得应用程序在服务端无需存储会话信息,可以根据JWT的内容对用户进行认证和授权。JWT通过简洁、自包含和数字签名等特性,提供了一种安全可靠的身份验证解决方案,广泛应用于现代的分布式系统和身份验证机制中。

注意:过期时间的设置

要在JWT中设置过期时间,可以在Payload(载荷)中添加一个名为"exp"的标准声明(Claim),表示JWT的过期时间。"exp"声明的值是一个数值类型,表示某个时间点的UNIX时间戳,单位为秒或毫秒。

以下是一个示例Payload,包括了设置过期时间的"exp"声明:

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022,
  "exp": 1516239122  // 设置JWT的过期时间为 1516239122 秒
}

在生成JWT时,需要计算当前时间和过期时间,确保生成的JWT在当前时间之后,且在过期时间之前使用。在验证JWT时,需要检查"exp"声明,确保当前时间未超过JWT的过期时间,以确保JWT未失效。

设置过期时间可以增强JWT的安全性,避免长时间使用老旧的令牌造成潜在的安全风险,例如未经授权的访问。因此,建议在生成JWT时始终包含过期时间,以提高系统的安全性。

相关推荐

  1. jwt的基本使用,前端如何存储token

    2024-01-09 22:56:03       28 阅读
  2. <span style='color:red;'>JWT</span><span style='color:red;'>令</span><span style='color:red;'>牌</span>

    JWT

    2024-01-09 22:56:03      21 阅读
  3. <span style='color:red;'>JWT</span><span style='color:red;'>令</span><span style='color:red;'>牌</span>

    JWT

    2024-01-09 22:56:03      18 阅读
  4. JWT

    2024-01-09 22:56:03       11 阅读
  5. SpringBoot登录校验-JWT

    2024-01-09 22:56:03       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-09 22:56:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-09 22:56:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-09 22:56:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-09 22:56:03       20 阅读

热门阅读

  1. 【前端面试题】每日一个前端面试专题

    2024-01-09 22:56:03       46 阅读
  2. MySQL中的索引:深入理解与案例解析

    2024-01-09 22:56:03       34 阅读
  3. C++,智能指针详解(面试)

    2024-01-09 22:56:03       26 阅读
  4. Gitee

    Gitee

    2024-01-09 22:56:03      37 阅读
  5. insert into select简单数据迁移-postgresql

    2024-01-09 22:56:03       32 阅读
  6. C++-nullptr-类型推导

    2024-01-09 22:56:03       37 阅读
  7. C++推箱子游戏开发

    2024-01-09 22:56:03       42 阅读
  8. Fixed win size sliding window

    2024-01-09 22:56:03       37 阅读
  9. 【Vue】项目使用px2rem

    2024-01-09 22:56:03       40 阅读