web-dev-qa-db-ja.com

cognitoからJWTの秘密鍵はどこにありますか

WebアプリのCognitoユーザープールのログイン機能を試しています。トークンを取得できましたが、デコードするための秘密がどこにあるのかわかりません。投稿の1つで、シークレットはユーザープール内のアプリのシークレットIDであると読みました。ただし、Javascript SDKの場合、シークレットIDは空白です。これは私の秘密も空白にする必要があることを意味しますか?これを試しましたが、「エラー:PEM_read_bio_PUBKEYが失敗しました」というメッセージが表示されました。

10
leo c

他の答えを修正するには:RS256は非対称アルゴリズムであり、公開鍵と秘密鍵が必要です。 RS256とHS256:違いは何ですか? および https://en.wikipedia.org/wiki/RSA_(cryptosystem) も参照してください。

正しいのは、JWTを検証するために、署名に使用された秘密鍵は必要なく、AWSがhttps://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.jsonで利用できるようにした公開鍵のみが必要なことです。

15
B M

このトピックをコードスニペットで要約したいだけです。

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))
  ;
}
2
D.Dimitrioglo

AWSは、デコードに秘密鍵を必要としないRS256アルゴリズムを使用します。

ここにあなたのプールのJWKSがあります:https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.jsonhttp://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 (セクション「コードの理解」の下)。

0
JakubM

私はこの種のこともすべてやり遂げようとしていました。

そのために、私は私のために働いたこのようなことを行う方法の例を示しました

1) 「シークレット」を使用したJWTトークンの検証-別名発行者RSA公開鍵

2) 発行者のパブリックSSL証明書を使用してJWTトークンやその他の署名を検証する

0
David Kierans