WebアプリのCognitoユーザープールのログイン機能を試しています。トークンを取得できましたが、デコードするための秘密がどこにあるのかわかりません。投稿の1つで、シークレットはユーザープール内のアプリのシークレットIDであると読みました。ただし、Javascript SDKの場合、シークレットIDは空白です。これは私の秘密も空白にする必要があることを意味しますか?これを試しましたが、「エラー:PEM_read_bio_PUBKEYが失敗しました」というメッセージが表示されました。
他の答えを修正するには:RS256は非対称アルゴリズムであり、公開鍵と秘密鍵が必要です。 RS256とHS256:違いは何ですか? および https://en.wikipedia.org/wiki/RSA_(cryptosystem) も参照してください。
正しいのは、JWTを検証するために、署名に使用された秘密鍵は必要なく、AWSがhttps://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json
で利用できるようにした公開鍵のみが必要なことです。
このトピックをコードスニペットで要約したいだけです。
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))
;
}
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 (セクション「コードの理解」の下)。
私はこの種のこともすべてやり遂げようとしていました。
そのために、私は私のために働いたこのようなことを行う方法の例を示しました