JWT ======================================== 简介 ---------------------------------------- Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。 构成 ---------------------------------------- 分为三个部分,分别为header/payload/signature。其中header是声明的类型和加密使用的算法。payload是载荷,最后是加上 ``HMAC(base64(header)+base64(payload), secret)`` 安全问题 ---------------------------------------- Header部分 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 是否支持修改算法为none/对称加密算法 - 删除签名 - 插入错误信息 - kid字段是否有SQL注入/命令注入/目录遍历 - jwk元素是否可信 - 是否强制使用白名单上的加密算法 Payload部分 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 其中是否存在敏感信息 - 检查过期策略,比如 ``exp`` , ``iat`` Signature部分 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 检查是否强制检查签名 - 密钥是否可以爆破 - 是否可以通过其他方式拿到密钥 其他 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - 重放 - 通过匹配校验的时间做时间攻击 - 修改算法RS256为HS256 - 弱密钥破解 参考链接 ---------------------------------------- - `Critical vulnerabilities in JSON Web Token libraries `_