■はじめに
RestAPIなどJWTを生成したい場面がちょくちょくあります。
ここでは、Node.jsでJWTを生成する方法と、生成したJWTをデコードして中身を見る方法を記載します。
※基本的なNode.jsの使い方などは割愛していますので、ご了承ください。
※秘密鍵に関しては生成している前提で進めています。
■手順
以下のnpmコマンドでライブラリをインストールする。
npm i jsonwebtoken
以下をコピペして実行してみてください。(早速完成系ですw)
var jwt = require('jsonwebtoken');
// 本来なら直書きでは無く、「readFileSync」などで読み込んだ方が良さげだが、ここではローカル実行するために直書きしてます。
const PEM = `[秘密鍵の中の値]`
// var fs = require('fs');
// const PEM = fs.readFileSync('auth.pem')
// JWT生成関数
function issueToken() {
// headerの設定
const opts = jwt.SignOptions = {
algorithm: 'RS256',
issuer: 'https://issuer.example.com',
expiresIn: '1d'
}
// payloadの設定
const payload = {
sub: "TEST",
}
// headerとpayloadを元に秘密鍵でJWT化
return jwt.sign(payload, PEM, opts)
}
// JWTのデコード(引数にJWT)
function verifyToken(idToken) {
// headerの設定
const opts = jwt.VerifyOptions = {
algorithms: ['RS256'],
issuer: 'https://issuer.example.com',
maxAge: '1d'
}
// デコード
return new Promise((resolve, reject) => {
jwt.verify(idToken, PEM, opts, function(err, decoded) {
if (err) {
reject(err)
} else {
resolve(decoded)
}
})
})
}
const idToken = issueToken()
console.log(idToken)
const result = verifyToken(idToken)
console.log(result)