WEB上で、JWTの署名検証を公開鍵で行うというマニアックな実装を行ったのでメモ。

取得したJWTを、サービス側で用意された公開鍵で検証するというユースケースを想定したものです。

オンラインで検証する

https://token.dev

JWTの検証をオンラインで行うことができるサイト。デバッグにとても便利。

アルゴリズムやペイロードの確認ができる。

WEBで検証を実装する

WEB上で署名検証を行う場合は jsonwebtoken を使用する。

yarn add jsonwebtoken

以下の通りimportして、verifyメソッドを叩く。

import * as jwt from 'jsonwebtoken';

...
const verify = () => {
	const verifyOptions = {
	        expiresIn: '24h',
	        algorithm: ['RS256'], // 署名アルゴリズム
	      };
	      const pem = `-----BEGIN PUBLIC KEY-----
	${publicKEY}
	-----END PUBLIC KEY-----`; // 公開鍵は文字列で用意されている場合、pemのフォーマットに合わせる必要がある。
	      const legit = jwt.verify(token, pem, verifyOptions);
				// 無効な場合、nullが返却される。有効な場合は署名の情報が返却される
}
...

まとめ

署名についてもjsでできるのすごい。機会があったらやってみたい。