18

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

4

3 回答 3

24

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

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

于 2017-01-11T16:48:16.617 回答
4

只想用这段代码总结一下这个话题:

const jwkToPem = require('jwk-to-pem');
const requestify = require('requestify');

/**
 * Get cognito's secret key
 * @param {String} region
 * @param {String} userPoolId
 * @returns {Promise}
 */
function getPem(region, userPoolId) {
  const jwkUrl = `https://cognito-idp.${region}.amazonaws.com/${userPoolId}/.well-known/jwks.json`;

  return requestify.request(jwkUrl, { method: 'get', dataType: 'json'})
    .then(res => res.getBody()['keys'].shift())
    .then(jwk => jwkToPem(jwk))
  ;
}
于 2018-07-26T11:03:20.747 回答
1

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 (在“理解代码”部分下) )。

于 2016-08-10T20:04:54.093 回答