# 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 对象。

在这里投放广告？

[给我们发邮件](mailto:hi@dennn.is?subject=%E5%9C%A8%20OneClick%20Pro%20%E4%B8%8A%E6%8A%95%E6%94%BE%E5%B9%BF%E5%91%8A)

[广告 适用于 WordPress 的智能体就绪型插件套件。](https://sleekwp.com/?ref=oneclickpro)
