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

Аватар пользователя Ivan Gagarinov
Ivan Gagarinov
22 декабря 2024

Чтобы декодировать JWT токен на JavaScript без использования библиотек, вам нужно выполнить следующие шаги:

  1. Разделить токен на части.
  2. Декодировать заголовок и полезную нагрузку из формата Base64Url.
  3. (Опционально) Проверить подпись, если у вас есть секретный ключ.

Допустим, у вас есть токен:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Разделение токена

const token = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";

const parts = token.split('.');
const header = parts[0];
const payload = parts[1];
const signature = parts[2];

Декодирование заголовка и полезной нагрузки

JWT использует Base64Url для кодирования, поэтому нам нужно написать функцию для декодирования:

function base64UrlDecode(base64Url) {
    // Заменяем символы для стандарта Base64
    let base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
    // Добавляем недостающие символы для корректной длины
    const padding = '='.repeat((4 - (base64.length % 4)) % 4);
    base64 += padding;

    return decodeURIComponent(escape(window.atob(base64)));
}

// Декодируем заголовок и полезную нагрузку
const decodedHeader = base64UrlDecode(header);
const decodedPayload = base64UrlDecode(payload);

console.log("Decoded Header:", JSON.parse(decodedHeader));
console.log("Decoded Payload:", JSON.parse(decodedPayload));

Для проверки подписи вы должны иметь секретный ключ и алгоритм, используемый для подписи. Это может быть более сложной задачей и выходит за рамки простого декодирования. Обычно для проверки подписи используются библиотеки, поскольку это требует знания алгоритмов цифровой подписи, таких как HMAC, RSA и т.д.

Если у вас есть ключ и вы хотите проверить подпись, вам нужно будет вручную реализовать алгоритм проверки, что может быть сложным.

0 0