作者:縌风而行2010 | 来源:互联网 | 2022-12-06 17:12
我正在编写一个Flutter/Dart应用程序,并从一个具有我需要使用的声明的auth服务器返回JWT.我看过各种(4至今)飞镖JWT库 - 但都太旧,并不再与飞镖2等工作,或者他们需要的秘密智威汤逊这是没有意义的,是不正确(解码或者可能,因为我没有访问权限).
那么 - 如何在"现代"的Dart/Flutter应用程序中获得JWT并从中获取声明?
1> boformer..:
JWT令牌只是base64编码的JSON字符串(其中3个用点分隔):
import 'dart:convert';
Map 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) {
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));
}
太棒了。就是让我感到困惑的填充-这是一个非常好的例程-谢谢!现在,为什么这个小例程不在一个不错的JWT包中,我不知道!:)(或者如果不容易看到它!)