TypeScript(NodeJS)

【TypeScript版】CognitoのIDトークンのJWT検証

Cognito の認証で取得した ID トークン。

以前、Java のライブラリで JWT の整合性の検証を行いました。

【Java版】CognitoのIDトークンのJWT検証とダミートークンの作成前回、AWS SDK を使って Cognito 認証を実現しました。 https://itneko.com/java-aws-sd...

今回は TypeScript において、JWT の検証に最適なライブラリを検索する機会があったので TIPS 化。

用途によって使い分けは必要になりますが、2 つ紹介していきます。

decode-verify-jwt

aws-support-tools の GitHub にある、AWS のプレミアムサポートが提供するツールとサンプルコード。

その中に、Cognito の ID トークンのデコードと検証を行うソースコードも紹介されています。

Decode and verify Amazon Cognito JWT tokens

TypeScript と Python の 2 つのサンプル。

今回は TypeScript 版を見てみましょう。

.well-known/jwks.json のチェックはもちろん、有効期限のチェックもされていますね。

Error で throw されると他のエラーとの区別がメッセージでしかできないので、独自の Error クラスを作るのが理想なのでしょうか。

nodejs-jwt-validator

上記の decode-verify-jwt をカスタマイズしたものなのでしょうか。

AWS に掲載されている JWT の検証方法については考慮されてそうです。

decode-verify-jwt と同じく、ライブラリの中でトークンの有効期限のチェックをしています。

有効期限のチェックは別のところで行いたいと思うケースもありますよね。

こちらも Error オブジェクトが throw されてくるだけなので、有効期限切れだけをハンドリングするのは少し手間です。

auth0/jwt-decode

そんな時は純粋に JWT のデコードのみライブラリに頼り、トークンの整合性の検証は自前で用意するのもアリ。

参考までにデコードのサンプルを書いてみます。

jwt_decode がコンストラクタっぽい感じで使えるのは、default function が指定されているからなのですね。

まとめ

TypeScript や NodeJS で利用できる JWT のトークン検証ライブラリを紹介してきました。

Cognito の利用に限定した話ではないでアレですが、トークンの検証機能は AWS の SDK に含まれていてもいいのになっと。

せっかく TypeScript を触る機会を得たので、少し勉強してみようと思います。