技術ブログ

プログラミング、IT関連の記事中心

Node.jsでJWT(JSON Web Token)を生成/デコードする方法【Node.js】

■はじめに

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)