为啥我的来自 Amazon Cognito 的 JWT 令牌具有无效签名?
Posted
技术标签:
【中文标题】为啥我的来自 Amazon Cognito 的 JWT 令牌具有无效签名?【英文标题】:Why does my JWT Token' from Amazon Cognito have an invalid signature?为什么我的来自 Amazon Cognito 的 JWT 令牌具有无效签名? 【发布时间】:2017-10-12 18:04:25 【问题描述】:我正在研究 Amazon cognito。我正在尝试从https://jwt.io 解码
eyJraWQiOiJRaGF4STZGbXB5Y3Z3dUV5TUZJUk9FTm5MTDJKTiswMzVVak5MNTEycjZvPSIsImFsZyI6IlJTMjU2In0.eyJzdWIiOiJhYjI0YzExYS1mNjZhLTRjMjktOWVhNy0yMWQwMTc2NmZlN2IiLCJhdWQiOiIxY2ZxNjJubjNlZmNpdWFpYnFldmlxbHU4OSIsInRva2VuX3VzZSI6ImlkIiwiYXV0aF90aW1lIjoxNDk0Njg1MjQwLCJpc3MiOiJodHRwczpcL1wvY29nbml0by1pZHAudXMtZWFzdC0xLmFtYXpvbmF3cy5jb21cL3VzLWVhc3QtMV9oM3F4WGVPQzQiLCJjb2duaXRvOnVzZXJuYW1lIjoidGVzdHNhbmRlZXAxIiwiZXhwIjoxNDk0Njg4ODQwLCJpYXQiOjE0OTQ2ODUyNDAsImVtYWlsIjoic2FuZGVlcC5qYWtrYXJhanVAZm9jYWxjeG0uY29tIn0.ZRsYZZwxUnqL4FfuWhD-w8xQWoQQkuj4rYCYPqQehcq1SMe0Vww2GIY4-sr9RgwjVxhOo4WqIQT8LzSn_tFBF504h5xGpp5fD37rIJZ49rC3naH7tC0nHwKSswi6C6x8BlIPi4QAnlP49SZMoIEPEnQig9F6wzlDfb-cjw0R2q61Em-e0cpBM8lbjxCrgBF2-PbXFqwEfncEUkwb93qZHo4Wk3pYH3d-9aXzZg6Xc4CNZfehAUZ7qknq2qtaSI3tH-EXGYmytjoVwcF5jIvej2OATrQf_JbfBNSxC96oA_CglWVKvp2rPrqlZzDCd0Se68TjZvKSbW7XtKX_DzI5ww P>
它说签名无效。我尝试了很多代币,我总是得到这个。
为什么会报签名无效?
【问题讨论】:
查看 jwt.io 页面右下方:'验证签名''公钥或证书:输入...' 没有公钥、证书或密钥,您无法验证令牌。 【参考方案1】:@jps 是正确的。您需要先为您的 Cognito 用户池下载 JWK,然后才能验证 JWT 的签名。
-
下载您的 Cognito 用户池 JWK 文件:
https://cognito-idp.region.amazonaws.com/userPoolId/.well-known/jwks.json
。这对于您的用户池是:https://cognito-idp.us-east-1.amazonaws.com/us-east-1_h3qxXeOC4/.well-known/jwks.json
找到您的身份kid
值。您提供的令牌的值是:"QhaxI6FmpycvwuEyMFIROENnLL2JN+035UjNL512r6o="
。
然后您需要生成与 JWKs 文件中提供的数据相匹配的公钥,该公钥与您的 kid
密钥相匹配。这是关于这里的博客:https://aws.amazon.com/blogs/mobile/integrating-amazon-cognito-user-pools-with-api-gateway/(进一步查看博客文章以了解如何生成公钥)。
【讨论】:
感谢大卫和@jps。 如果在第 2 步中您的孩子与 cognito 中的 jwks 文件不匹配会怎样?我正在使用 Cognito 用户池 - 它使用 Azure 登录,然后负载均衡器通过 Cognito 控制身份验证。数据访问令牌是 JWT 令牌,但它的签名无效。有人可以帮我弄清楚如何修复签名无效 @user1633146 你发现了吗?以上是关于为啥我的来自 Amazon Cognito 的 JWT 令牌具有无效签名?的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Amazon Cognito 不在其访问令牌中返回受众字段?
Amazon Cognito 未向我的应用程序用户发送 SMS 文本消息