dart - 如何在我的 Flutter 应用程序中从 JWT 获取声明

标签 dart jwt flutter

我正在编写一个 Flutter/Dart 应用程序,并且正在从一个身份验证服务器返回一个 JWT,该服务器有一些我需要使用的声明。我已经查看了各种(到目前为止 4 个)Dart JWT 库——但要么都太旧,不再与 Dart 2 一起工作,等等。或者他们需要 secret 来解码 JWT,这没有意义而且不正确(或可能,因为我无权访问)。

那么——如何在“现代”Dart/Flutter 应用程序中获取 JWT 并从中获取声明?

最佳答案

JWT token 只是 base64 编码的 JSON 字符串(其中 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));
}

关于dart - 如何在我的 Flutter 应用程序中从 JWT 获取声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52017389/

相关文章:

dart - art在整数移位时崩溃

flutter - getter 'visible'在null上被调用

oauth - OAuth提供程序重定向后如何为用户提供JWT token ?

java - 使用 OAuth2.0 或 Azure Active Directory 保护 REST API

flutter - 填充堆栈中所有可用的水平空间

dart - 防止并发访问 Dart 中的相同数据

flutter - 如何定期设置状态?

visual-studio-code - 为什么 flutter 包会失败?从 github 克隆的相同目录但在一台 pc 包上失败

c# - C# 中是否有任何 JSON Web token (JWT) 示例?

list - 可选参数的默认值必须为常数