Quantcast
Viewing all articles
Browse latest Browse all 8862

JWTクレーム・セット部分のデコード方法

概要

JavaScriptで、正確にはNode.jsで、IDトークンのペイロード部分をサクッとデコードしたかった・・・・んだけど、しょうもないところででハマッたので、メモ。

以下を目的とする。

  • Node.jsの標準ライブラリの範囲で、JWTのペイロード部分を日本語を含めてデコードする

なお、「標準のライブラリで」のこだわりが無ければ、jsonwebtokenとかjwt-decodeとかのライブラリを使うのが吉。

検証環境

Node.js - v10.16.0

JWTペイロード部分(クレームセット)をデコードするスクリプト

var atob = (base64) => {
    var buffer = Buffer.from( base64, 'base64' );
    var utf8 = buffer.toString('utf8'); // Not "ascii"
    return utf8;
};
var decodeJwt = (token) => {
    var base64Url = token.split('.')[1];
    var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');

    var encodeURI = encodeURIComponent(atob(base64));
    var decodeString = decodeURIComponent(encodeURI);
    return JSON.parse(decodeString);
};

引数に与えてコマンドラインから変換するなら次のようにする。引数「JST_STRINGS」に入れるべきは、例えばOpenID ConnectでのトークンEndPointから取得したJSONのid_tokenキーに格納された文字列など。

decode_jst.js
var atob = (base64) => {
    var buffer = Buffer.from( base64, 'base64' );
    var utf8 = buffer.toString('utf8'); // Not "ascii"
    return utf8;
};
var decodeJwt = (token) => {
    var base64Url = token.split('.')[1];
    var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');

    var encodeURI = encodeURIComponent(atob(base64));
    var decodeString = decodeURIComponent(encodeURI);
    return JSON.parse(decodeString);
};

var main = (argv) => {
    if( argv.length < 3 ){
        console.log("\n  [USAGE] node decode_jst.js JST_STRINGS\n");
        return;
    }

    var jsonObj = decodeJwt(argv[2]);
    console.log(jsonObj);

    return;
};

main(process.argv);

※encodeURIComponent()は要らんかも?あとで仕様をちゃんと確認しよう【ToDo】

補足

ブラウザのJavaScript環境でデコードする場合は、windowsオブジェクト(配下のatob関数)を用いて、以下の記事の方法で出来る。

参考サイト


Viewing all articles
Browse latest Browse all 8862

Trending Articles