认证与绕过

GinTvT 发布于 2025-03-22 57 次阅读 安全学习 预计阅读时间: 3 分钟


传统的鉴权如cookie和session的认证往往在一台服务器上

jwt认证和ak/sk跳出这个范畴,让授权和鉴权的服务器不在一台上

JWT(JSON Web Token)

是一种用于客户端与服务器之间传递信息的安全机制,通常用于认证和授权。JWT 是一种基于 JSON 格式的令牌,能够自包含地传递认证信息和其他数据

组成部分

Header(头部)

Header通常由两部分组成:令牌的类型(即JWT)和所使用的签名算法(例如HMAC SHA256或RSA)

{
    "alg": "HS256",
    "typ": "JWT"
}

Payload

承载了信息,包含了用户相关的声明

  1. 存储声明(Claims)
  • 注册声明(Registered Claims):这些是建议但不是强制性的预定义声明,通常包括:
  • iss(Issuer):JWT 的签发者。
  • sub(Subject):JWT 的主题或用户的标识。
  • aud(Audience):JWT 的受众,即 JWT 所面向的用户或系统。
  • exp(Expiration Time):JWT 的过期时间。
  • iat(Issued At):JWT 的签发时间。
  • nbf(Not Before):在此时间之前,JWT 无法使用。
  • 公共声明(Public Claims):这些是可供使用的自定义声明,但需要避免与注册声明或其他公共声明冲突。
  • 私有声明(Private Claims):这些声明是应用程序特定的,不同的应用或系统间可能有不同的定义,通常用于在不同服务之间共享用户信息。举个栗子
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

以上会被Base64编码为JWT的第二部分,会被解码回明文信息,所以不建议存放敏感信息

  1. 自包含数据
  • Payload 包含了验证用户身份所需的所有信息,使 JWT 可以是自包含的。这意味着服务器可以通过解码 JWT 来获取用户信息,而无需额外查询数据库,这提高了效率和性能。
  1. 灵活性
  • Payload 可以根据需求自定义,既可以包含简单的用户身份信息,也可以包含复杂的权限和角色信息。它可以适应各种不同的应用场景
  1. 无状态性支持
  • 因为 Payload 包含了所有必要的声明信息,服务器不需要存储用户的会话数据,这支持了 JWT 的无状态性特点,非常适合分布式系统和微服务架构

Signature(签名)

jwt的header跟payload都是在客户端可以解析出明⽂的。所以他们⾥⾯⼀般不会存储 敏感信息。

header中描述了签名算法(HS256)

其安全性的最终保障来⾃于密钥的机密性(包括1.不能是弱密钥被爆破出来了2.如果 是产品通⽤密钥,那么代码审计的作⽤就出来了)

当然也取决于程序员是不是傻⼦,不检出签名是否正确

此作者没有提供个人介绍。
最后更新于 2025-04-23