概要
Cognito ユーザプール認証時のJWTトークンをjwt.toで検証する。
公開されているJWKから公開鍵を作ってそれで検証したいので、そういう感じでやる。
※jwt.toへJWTトークンをペーストした時点で、公開鍵が入るかもしれないけど、それはそれとして自分で公開鍵を取得する
実戦で jwt.to を使って検証することは現実的でないので、jwt.toの中で紹介されているライブラリを使用すること。
実践
Cognitoの認証~JWTトークン取得まで
- この記事 を参照にしてとりあえずユーザプールで認証してJWTトークンを貰う。
公開鍵取得下準備
公開鍵へはnodeを使って変換する。
JWKを公開鍵に変換するためのライブラリを入れる。
npm install jwk-to-pem --save
変換用のjavascript(後で使う)
var jwkToPem = require('jwk-to-pem')
var jwk = "/.well-known/jwks.json内のkidに対応するjwkを入れる"
pem = jwkToPem(jwk)
console.log(pem)
検証用公開鍵取得
- https://jwt.io/ へアクセスして、Encordedの欄に JWTトークンをコピペする。
- トークンの中の
issのURL/.well-known/jwks.json
へアクセスするとjwkを取得できる。
※公式のステップ2 参照(このURLはあくまでCognitoでの決め事) - jwt.to のHEADER欄に出ている、
kid
と一致するJSON部分が検証用の公開鍵の元ネタになる。
※JWTトークンの署名の検証には署名時に使用した秘密鍵の対になる公開鍵が必要 - 下準備の "変換用のjavascript" 内の、
var jwk
に、対応するkidのJSON部分を設定する。
※↓のような感じ
var jwk = {
"alg": "RS256",
"e": "AQAB",
"kid": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"kty": "RSA",
"n": "yyyyyyyyyyyyyyyyyyyyyyyyyyyyy",
"use": "sig"
}
で、jsを実行すると公開鍵が表示される。
実際に検証する
表示された公開鍵を、https://jwt.io/ の右下の "public key or certificate ..." 部分に公開鍵をペーストする。
画面下が、Signature Verified
になれば検証OK。
※ならない場合は、トークンのダブルクォーテーションを消してみたりすると、動くかも。。