Как получить претензии от JWT в моем приложении Flutter - PullRequest
0 голосов
/ 25 августа 2018

Я пишу приложение Flutter / Dart и получаю обратно JWT с сервера авторизации, у которого есть некоторые претензии, которые мне нужно использовать.Я просмотрел различные (до сих пор 4) библиотеки Dart JWT - но все они слишком старые и больше не работают с Dart 2 и т. Д., Или им нужен секрет для декодирования JWT, который не имеет смысла и не является правильным (или возможно, так как у меня нет доступа).

Итак - как можно получить JWT и получить от него претензии в «современном» приложении Dart / Flutter?

Ответы [ 3 ]

0 голосов
/ 09 апреля 2019

На момент написания этой статьи пакет jaguar_jwt активно поддерживается. Хотя это не ясно задокументировано, у него есть открытый метод, который будет декодировать кодировку Base64Url. Это в основном то же самое, что и принятый ответ.

//import 'package:jaguar_jwt/jaguar_jwt.dart';

final String token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NTQ4MjAxNjIsImlhdCI6MTU1NDc3Njk2MiwiaXNzIjoiU3VyYWdjaCIsInN1YiI6IjQifQ.bg5B_k9WCmxiu2epuZo_Tpt_KZC4N9ve_2GEdrulcXM';
final parts = token.split('.');
final payload = parts[1];
final String decoded = B64urlEncRfc7515.decodeUtf8(payload);

Это дает строку JSON, которая для данного конкретного примера:

{
  "exp":1554820162,
  "iat":1554776962,
  "iss":"Suragch",
  "sub":"4"
}

Смотри также:

0 голосов
/ 05 июля 2019

Используйте функцию base64Url.normalize (). Вот что _decodeBase64 () делает из ответа выше!

String getJsonFromJWT(String splittedToken){
  String normalizedSource = base64Url.normalize(encodedStr);
  return utf8.decode(base64Url.decode(normalizedSource));
}
0 голосов
/ 26 августа 2018

JWT-токены - это просто строки JSON в кодировке base64 (3 из них разделены точками):

import 'dart:convert';

Map<String, dynamic> parseJwt(String token) {
  final parts = token.split('.');
  if (parts.length != 3) {
    throw Exception('invalid token');
  }

  final payload = _decodeBase64(parts[1]);
  final payloadMap = json.decode(payload);
  if (payloadMap is! Map<String, dynamic>) {
    throw Exception('invalid payload');
  }

  return payloadMap;
}

String _decodeBase64(String str) {
  String output = str.replaceAll('-', '+').replaceAll('_', '/');

  switch (output.length % 4) {
    case 0:
      break;
    case 2:
      output += '==';
      break;
    case 3:
      output += '=';
      break;
    default:
      throw Exception('Illegal base64url string!"');
  }

  return utf8.decode(base64Url.decode(output));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...