为 JWT 验证模拟一个 JWKS 端点

在 /.well-known/jwks.json 上的一个 GET 模拟(mock),以 JWK Set 格式返回一个 RSA 密钥。

JWKS 端点发布了客户端用于验证 JWT 签名的公钥。此模板在 /.well-known/jwks.json 提供一个包含一个 RSA 密钥的 JWK Set,因此您可以测试您的客户端是否获取、解析和缓存了密钥集 —— 包括当密钥 ID 缺失或轮换时它的表现如何。

代替第三方 API 端点。

响应负载

{
  "keys": [
    {
      "kty": "RSA",
      "use": "sig",
      "alg": "RS256",
      "kid": "quickmock-demo-2024",
      "n": "n6cS6BgeHi-qEzBkR5cS-MPBwt1dG9y-tGiSTw8Uov3jMu9Yiz6Oua5dg6xKnEhP20owo6iHI_MMSjU6Sb6iKSyIskDb5myN9DHC6exkDsoKPn5tPOIbzXeV0SaF-b3BejNwakl5nfHVHFMkbLCvx9KP985_5k3b7hD1UTdBOFYLIgHWTIlUkV1L9o5DoiGMm2GYWxww3tL_ZFllp4i4yyPP6c4D_J7kgFukBBZZBGe3Ou1QvzcNUYoaRNRK1PRBsC24xSfN1oZYBd4xpg6Kp3xmpsGR2nzWCviSWbvHatFusy_NqCq2Io1EAeup_i0eIN86t2-G7rn4Uoul27BQcQ",
      "e": "AQAB"
    }
  ]
}

值得了解的字段

字段 含义
keys JWK Set 数组;添加更多条目以测试密钥轮换逻辑。
keys.0.kid JWT 的标头(header)为了选择此密钥而将引用的密钥 ID。
keys.0.alg 该密钥声称支持的签名算法。
keys.0.n RSA 模数,base64url 编码 —— 仅作说明之用,不是有效密钥。

创建模拟数据

curl -X POST https://quickmock.dev/api/mocks \
  -H 'Content-Type: application/json' \
  -d '{
  "method": "GET",
  "response_status": 200,
  "content_type": "application/json",
  "path_suffix": ".well-known/jwks.json",
  "response_body": "{\"keys\":[{\"kty\":\"RSA\",\"use\":\"sig\",\"alg\":\"RS256\",\"kid\":\"quickmock-demo-2024\",\"n\":\"n6cS6BgeHi-qEzBkR5cS-MPBwt1dG9y-tGiSTw8Uov3jMu9Yiz6Oua5dg6xKnEhP20owo6iHI_MMSjU6Sb6iKSyIskDb5myN9DHC6exkDsoKPn5tPOIbzXeV0SaF-b3BejNwakl5nfHVHFMkbLCvx9KP985_5k3b7hD1UTdBOFYLIgHWTIlUkV1L9o5DoiGMm2GYWxww3tL_ZFllp4i4yyPP6c4D_J7kgFukBBZZBGe3Ou1QvzcNUYoaRNRK1PRBsC24xSfN1oZYBd4xpg6Kp3xmpsGR2nzWCviSWbvHatFusy_NqCq2Io1EAeup_i0eIN86t2-G7rn4Uoul27BQcQ\",\"e\":\"AQAB\"}]}"
}'

调用它

curl https://quickmock.dev/m/<slug>/.well-known/jwks.json

您将获得什么

GET /m/<slug>/.well-known/jwks.json -> 200 one RSA JWK
the key is illustrative only, it does not verify any real signature

这与真实情况有何不同

该文档中的 RSA 密钥仅为说明性质 —— Quickmock 并没有持有匹配的私钥,所以它永远无法验证真实的签名。请使用它来检查您的客户端是否正确解析了 JWKS 文档,而不是用来验证真实的令牌。

来源

常见问题解答

我可以使用这个密钥验证真实的令牌吗?
不能。该 RSA 密钥是说明性质的,没有匹配的私钥,因此没有任何东西能产生它能够验证的签名。用它来测试 JWKS 解析和缓存,而不是签名验证。
我如何测试密钥轮换(key rotation)?
向 keys 数组添加第二个具有不同 kid 的条目,然后编辑模拟以删除第一个条目。无限期缓存密钥集的客户端在删除后会持续失败 —— 这正是此测试意在暴露的错误。
如果令牌引用了一个未知的 kid,会发生什么?
正确的客户端会重新获取一次密钥集,如果密钥仍然不存在,则拒绝该令牌。提供一个缺少预期 kid 的集合,是检查您的客户端不会循环或崩溃的最干净的方法。

准备好使用了吗?

在模拟构建器中打开以先进行调整

与本指南非常搭配: 模拟 REST API 端点

相关模板

← 所有模板

最后更新: 2026-10-17