Токены JWT - это 3 строки Base64, разделенные знаком «.».
- Часть 1 называется Заголовок. он содержит алгоритм и тип токена.
- Часть 2 называется Payload. он содержит пользовательские данные.
- Часть 3 называется Подпись. Что рассчитывается следующим образом:
<Hashing Algo: e.g. HMACSHA256 etc
>(
base64UrlEncode(header) + "." + base64UrlEncode(payload), "secret string<Known to JWT creator>"
);
Как разработчик приложений, нас больше всего интересует декодирование полезной нагрузки для получения сведений о пользователе, таких как идентификатор почты, время сеанса и т. Д. Итак, мы начнем с разделения JWT на 3 части.
final parts = token.split('.'); if (parts.length != 3) { throw Exception('invalid token'); }
Теперь декодируйте строку в кодировке Base64, чтобы получить полезную нагрузку JSON.
import 'dart:convert'; String decodeBase64(String str) { //'-', '+' 62nd char of encoding, '_', '/' 63rd char of encoding String output = str.replaceAll('-', '+').replaceAll('_', '/'); switch (output.length % 4) { // Pad with trailing '=' case 0: // No pad chars in this case break; case 2: // Two pad chars output += '=='; break; case 3: // One pad char output += '='; break; default: throw Exception('Illegal base64url string!"'); } return utf8.decode(base64Url.decode(output)); }
Вышеупомянутая функция вернет строку Json с полезной нагрузкой.
//0: Header, 1: Payload, 2: Signature final payload = _decodeBase64(parts[1]); final payloadMap = json.decode(payload); //Map dictionary
Полный код: