简介
Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准((RFC7519). 该 token 被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT 的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该 token 也可直接被用于认证,也可被加密。
构成
分为三个部分,分别为 header/payload/signature。其中 header 是声明的类型和加密使用的算法。payload是载荷,最后是加上 HMAC(base64(header)+base64(payload), secret)
安全问题
Header 部分
• 是否支持修改算法为 none/对称加密算法
• 删除签名
• 插入错误信息
• 直接在 header 中加入新的公钥
• kid 字段是否有 SQL 注入/命令注入/目录遍历
• 结合业务功能通过 kid 直接下载对应公私钥
• 是否强制使用白名单上的加密算法
• JWKS 劫持
• JKU (JWK Set URL) / X5U (X.509 URL) 注入
Payload 部分
• 其中是否存在敏感信息
• 检查过期策略,比如 exp , iat
Signature 部分
• 检查是否强制检查签名
• 密钥是否可以爆破
• 是否可以通过其他方式拿到密钥
其他
• 重放
• 通过匹配校验的时间做时间测试
• 修改算法 RS256 为 HS256
• 弱密钥爆破
标签:是否,JWT,header,token,密钥,payload From: https://blog.51cto.com/u_14156098/8918163