Расшифровка токена JWT без ключа в приложении React Native Expo - PullRequest
0 голосов
/ 11 июня 2019

Мое приложение в настоящее время работает на выставке, и мне нужен способ декодирования токена JWT, который я получил от бэкэнда. Когда я использую jwt.io, ему не нужен ключ для декодирования, но я не могу найти библиотеку, поддерживающую expo, которая не нуждается в ключе для декодирования. Я попытался расшифровать его без библиотеки, используя код ниже, но он не работает: -

JSON.parse(new Buffer(token.split(‘.’)[1], ‘base64’.toString())); 

Я попытался использовать несколько библиотек expo, но все, что я нашел, нуждается в ключе для декодирования, и если я передам пустую строку ключу, он просто не будет декодироваться. Я также пытался декодировать без библиотеки

Ожидаемый результат - объект ниже, после декодирования моего токена JWT через jwt.io:

{
  "id": "5ce667c89133fd61e7f08c53",
  "name": "TEST Group",
  "username": "chia.wq@redtech.my",
  "type": "G",
  "iat": 1560152565
}

Есть ли другой способ для меня декодировать без ключа, используя или не используя библиотеку в React Native на Expo?

1 Ответ

0 голосов
/ 11 июня 2019

Ключ JWT предназначен только для подписи токена, поэтому yes может извлекать данные без ключа.

Единственное, чего вам не хватает, так это того, что буферы кодируются не в Base64, а в «URL Base64».

Перед передачей частей токена на Buffer необходимо заменить все '-' на '+' и все '_' на '/'.

const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';

const parts = token.split('.').map(part => Buffer.from(part.replace(/-/g, '+').replace(/_/g, '/'), 'base64').toString());

const payload = JSON.parse(parts[1]);

console.log('JWT payload', payload);

...