Как декодировать токен jwt в javascript без использования библиотеки?

Как я могу декодировать полезную нагрузку JWT, используя JavaScript? Без библиотеки. Таким образом, токен просто возвращает полезный объект, который может использоваться моим клиентским приложением.

Пример токена: xxxxxxxxx.XXXXXXXX.xxxxxxxx

И результат - полезная нагрузка:

{exp: 10012016 name: john doe, scope:['admin']}
146
задан joe 2 July 2019 в 10:31
поделиться

1 ответ

Ответ, базирующийся от GitHub - auth0/jwt-decode. Измененный ввод/вывод для включения строкового разделения и эхо-сигнала {заголовок, полезная нагрузка, подпись}, таким образом, можно просто передать целый маркер.

var jwtDecode = function (jwt) {

        function b64DecodeUnicode(str) {
            return decodeURIComponent(atob(str).replace(/(.)/g, function (m, p) {
                var code = p.charCodeAt(0).toString(16).toUpperCase();
                if (code.length < 2) {
                    code = '0' + code;
                }
                return '%' + code;
            }));
        }

        function decode(str) {
            var output = str.replace(/-/g, "+").replace(/_/g, "/");
            switch (output.length % 4) {
                case 0:
                    break;
                case 2:
                    output += "==";
                    break;
                case 3:
                    output += "=";
                    break;
                default:
                    throw "Illegal base64url string!";
            }

            try {
                return b64DecodeUnicode(output);
            } catch (err) {
                return atob(output);
            }
        }

        var jwtArray = jwt.split('.');

        return {
            header: decode(jwtArray[0]),
            payload: decode(jwtArray[1]),
            signature: decode(jwtArray[2])
        };

    };
0
ответ дан 23 November 2019 в 21:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: