首页 文章

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

提问于
浏览
3

我正在编写一个Flutter / Dart应用程序,并从一个具有我需要使用的声明的auth服务器返回JWT . 我已经查看了各种(4个到目前为止)的Dart JWT库 - 但是它们都太旧了,不再使用Dart 2等,或者它们需要秘密来解码JWT,这是没有意义的,也是不正确的(或者可能,因为我没有访问权限) .

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

1 回答

  • 4

    JWT令牌只是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));
    }
    

相关问题