我正在尝试在 python 应用程序中测试我的服务器端对 cognito JWT 令牌的处理。我正在使用 Moto 创建一个认知用户池,在池中创建一个用户,对用户进行身份验证,然后取回 JWT。一切正常,直到我想验证 JWT 以便它可以用于访问服务器上的某些内容。
验证 JWT 的正常过程的一部分是从 Cognito 用户池下载公共 JWK 文件,并使用它来验证令牌的签名。似乎没有下载 JWK 文件的 Moto 实现,那么如何验证使用 Moto 生成的令牌?
Moto 有用于测试代币合法性的测试 - 并参考存储库中的
jwks.json
文件。
这里:
path = "../../moto/cognitoidp/resources/jwks-public.json"
您可以使用此文件验证您的令牌(使用 moto 生成)吗?我还没弄清楚怎么办。我注意到既有这个公共文件(用于验证),也有一个私有文件(我猜是在生成令牌时使用的)。
这可能有帮助:
使用
requests
获取密钥:
region = "us-west-2"
cognito_userpool_id = "your_userpool_id"
keys_url = f"https://cognito-idp.{region}.amazonaws.com/{cognito_userpool_id}/.well-known/jwks.json"
response = requests.get(keys_url).json()
keys_array response["keys"]
如果您的域代码不使用
requests
下载密钥(可能使用 urllib),您可以模拟该请求并返回上述代码的结果
注意:我个人遇到了
Token was not issued for this audience
错误。但这可能与项目有关。