You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Flask-Cognito遇“jwks.json中未找到公钥”错误求排查

排查Flask-Cognito "Public key not found in jwks.json" 错误

以下是针对性的排查步骤:

1. 核对核心配置的准确性

确保COGNITO_REGION和COGNITO_USERPOOL_ID是实际有效值,而非代码里的占位符:

  • COGNITO_REGION必须是AWS的标准区域名(比如eu-west-1),不能是eu-xxxx这类占位符。
  • COGNITO_USERPOOL_ID格式必须为{区域}_{随机字符串},比如eu-west-1_abc123XYZ。
    这两个参数直接决定了Flask-Cognito请求JWKS的地址,一旦错误就会拿不到正确的公钥列表。

2. 验证Token与JWKS的匹配性

  • 用jwt.io解码你的token,查看Header部分的kid(密钥ID)和alg(签名算法)。
  • 手动访问Cognito的JWKS端点:https://cognito-idp.{你的区域}.amazonaws.com/{你的用户池ID}/.well-known/jwks.json,检查返回的JSON中是否包含token里的kid。
    • 如果找不到对应的kid,说明你使用的token不是当前用户池生成的,或者用户池的密钥已经轮换但框架没获取到新的JWKS。

3. 检查应用的网络访问能力

如果你的Flask应用部署在受限网络(比如AWS VPC内),需要确认应用服务器能正常访问Cognito的JWKS端点:

  • 在应用服务器上执行curl https://cognito-idp.{你的区域}.amazonaws.com/{你的用户池ID}/.well-known/jwks.json,看是否能返回正常的JSON响应。
  • 如果无法访问,需要配置VPC端点(针对AWS内部部署)或调整防火墙/安全组的出站规则,允许访问Cognito服务地址。

4. 清除JWKS缓存并重启应用

Flask-Cognito可能缓存了旧的JWKS数据,导致无法匹配新token的kid:

  • 直接重启Flask应用,强制框架重新拉取最新的JWKS。
  • 若框架有缓存相关配置(部分版本支持),可暂时禁用缓存测试。

5. 确认App Client ID的一致性

  • 如果使用的是Access Token,确保COGNITO_APP_CLIENT_ID与生成该token的Cognito应用客户端ID完全一致。
  • 如果使用的是ID Token,检查token Payload中的aud字段是否等于配置的COGNITO_APP_CLIENT_ID,不匹配会导致验证失败。

调试辅助步骤

开启Flask的调试日志,查看框架请求JWKS的详细过程:

import logging
logging.basicConfig(level=logging.DEBUG)

启动应用后,观察日志中是否有JWKS请求的错误信息(比如404、网络超时等),能快速定位问题根源。

内容的提问来源于stack exchange,提问作者NOOBAF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:37:25