JWT 验证器
检查 JSON Web Token 是否真实且仍然有效。粘贴令牌以及其 HMAC 机密、PEM 公钥、证书、JWK 或完整 JWKS,验证器便会使用 jose 库检查签名,将 exp 和 nbf 与当前时间及可选的时钟容差进行比较,并在解码后的标头和声明旁给出清晰的判定。拒绝 alg none 的令牌。
常见问题
验证器会检查什么?
验证器会根据你提供的密钥检查签名,然后将 exp 声明和 nbf 声明与当前时间进行比较。只有签名匹配且两项时间检查均未失败时,判定才是有效。载荷中会显示 iss、aud 或 sub 等声明,但不会将它们与预期值进行比较。
我可以粘贴哪些密钥?
对于 HS256、HS384 和 HS512,请将共享机密作为文本或 oct JWK 粘贴。对于 RSA、EC 和 EdDSA 令牌,请粘贴 PEM 公钥(SPKI 或 PKCS #1)、X.509 证书、公共或私有 JWK、最多包含 50 个密钥的 JWKS,或私有 PEM 密钥;系统只会使用其中的公钥部分。
如何从 JWKS 中选出正确的密钥?
如果令牌标头包含 kid,就会使用集合中 kid 相同的密钥;如果没有匹配项,错误信息会指出该 kid。如果没有 kid,集合必须恰好包含一个密钥。这与大多数服务器从 jwks_uri 文档中选择密钥的方式一致。
算法选项有什么作用?
选择“使用令牌的 alg”时,算法取自令牌标头,但密钥仍必须与之匹配,因此 RSA 公钥绝不能用作 HMAC 机密。选择特定算法还会要求令牌使用该算法;服务器应通过这种方式固定预期算法。如果令牌使用了其他 alg,系统会拒绝它并显示这两个名称。
为什么拒绝 alg none 的令牌?
alg none 令牌不带签名,因此无从验证,任何人都可以编写这种令牌。在 JWT 库中接受此类令牌是一个众所周知的漏洞。验证器会将其报告为错误,而不会判定为有效。
exp、nbf 和时钟容差如何运作?
当 exp 小于或等于当前时间时,令牌会被视为已过期;当 nbf 晚于当前时间时,令牌会被视为尚未生效。时钟容差范围为 0 到 3600 秒,可放宽这两项检查,以应对服务器之间的时钟偏差。存在但不是数值的声明会使令牌无效。
签名无效意味着什么?
令牌并非使用你提供的密钥签署,或者其标头或载荷在签署后被修改。请检查粘贴的公钥或机密是否匹配(包括每个字符是否完全一致),并确认令牌已完整复制。解码后的标头和载荷仍会显示,供你进行比较。
支持哪些算法?
HS256、HS384、HS512、RS256、RS384、RS512、PS256、PS384、PS512、ES256、ES384、ES512,以及使用 Ed25519 密钥的 EdDSA。RSA 密钥必须至少为 2048 位。不解密加密令牌(JWE)。
令牌或密钥会被存储吗?
不会。令牌和密钥只会在内存中用于本次验证,绝不会记录或保存。公钥可以安全分享,但请谨慎对待 HMAC 机密,并轮换任何你怀疑已经泄露的机密。
令牌和密钥最大可以多大?
令牌最多可包含 65,536 个字符,密钥字段最多可包含 262,144 个字符,足以容纳大型 JWKS 文档。令牌必须包含三个以点分隔的 base64url 部分、一个带有 alg 成员的 JSON 标头,以及一个作为载荷的 JSON 对象。