我在哪里可以找到来自cognito的JWT的密钥

leo*_*o c 8 amazon-web-services amazon-cognito aws-cognito

我正在为我的Web App尝试Cognito用户池的登录功能.我能够获得令牌,但我不知道在哪里可以找到解密它的秘密.我在其中一篇文章中读到,秘密是用户池中应用程序的秘密ID.但是,对于Javascript SDK,密码ID为空.这是否意味着我的秘密也应该是空白的?我试过这个但是我收到一条消息"错误:PEM_read_bio_PUBKEY失败".

B M*_*B M 13

要纠正其他答案:RS256是一种非对称算法,需要公钥和私钥.另见RS256与HS256:有什么区别?https://en.wikipedia.org/wiki/RSA_(cryptosystem).

正确的是,为了验证JWT,您不需要用于签名的私钥,只有AWS提供的公钥https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json.

  • 我从那里得到了一个Json数组,该属性包含令牌的公钥?尝试使用"n"属性中的值抛出签名无效 (3认同)
  • @JefreeSujit JWT 将包含一个“kid”(密钥 ID),它根据上面显示的“cognito-idp”请求决定要使用的 JWK。然后,您需要 JWK 的“n”(模数)和“e”(公共指数)来转换为“pem”格式的 RSA 公钥。下面是 scala 中的一行(使用 java 库)用于转换(`n` 和 `e` 是字符串): `Base64.getEncoder.encodeToString(KeyFactory.getInstance("RSA").generatePublic(new RSAPublicKeySpec(new BigInteger(1, Base64.getUrlDecoder.decode(n)), new BigInteger(1, Base64.getUrlDecoder.decode(e)))).getEncoded)` (2认同)

Jak*_*ubM 3

AWS使用RS256算法,不需要秘密,而是需要公钥来解码。

在这里您将找到池的 JWKS:(https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json请参阅http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html#amazon -cognito-identity-user-pools-using-id-and-access-tokens-in-web-api

这里描述了将 JWK 转换为公钥的过程:https://mobile.awsblog.com/post/Tx3JK25U7Z9EUIU/Integrating-Amazon-Cognito-User-Pools-with-API-Gateway(在“理解代码”部分下) )。

  • 抱歉,但这完全是错误的 - RS256 是一种非对称算法,需要公钥和私钥。正确的是,为了验证 JWT,您不需要用于签名的私钥。 (6认同)