如何从Dart中的jwt令牌中提取过期时间?
我从api收到jwt令牌,但我不知道如何从Dart中的令牌中提取过期时间 接收到的令牌 EYJHBGCIOIJIUZI1NIISINR5CCIKPXVCJ9.EYJLBWFPFBCI6INN1AMVLDVPBC5JB20ILCJ1C2VYSWQII1ZTHHZGFLNDIXMDG3MZM1DBMDGILJJYXQIOJENYXNTGZYMZYSIMV4CI6MTU4NJC2MZZN0.EWLTDRXAXAIBCUQVZZ7Z3EWYIXAI5I如何从Dart中的jwt令牌中提取过期时间?,dart,Dart,我从api收到jwt令牌,但我不知道如何从Dart中的令牌中提取过期时间 接收到的令牌 EYJHBGCIOIJIUZI1NIISINR5CCIKPXVCJ9.EYJLBWFPFBCI6INN1AMVLDVPBC5JB20ILCJ1C2VYSWQII1ZTHHZGFLNDIXMDG3MZM1DBMDGILJJYXQIOJENYXNTGZYMZYSIMV4CI6MTU4NJC2MZZN0.EWLTDRXAXAIBCUQVZZ7Z3EWYIXAI5I 您可以通过解码来实现,一般来说,JWT令牌包含两部
您可以通过解码来实现,一般来说,JWT令牌包含两部分(对象),在上面的JWT中,解码的结果是:
{
alg: "HS256",
typ: "JWT"
}.
{
email: "sujeeth91171@gmail.com",
userId: "5e8adae42108733580f40858",
iat: 1586158336,
exp: 1586763136
}.
所以过期日期是一个时间戳(1586763136),代表2020年4月13日星期一上午7:32:16
怎么做
导入'dart:convert';
映射解析JWT(字符串标记){
最终部分=标记分割('.');
如果(零件长度!=3){
抛出异常(“无效令牌”);
}
最终有效载荷=_decodeBase64(第[1]部分);
最终payloadMap=json.decode(有效载荷);
如果(payloadMap是!Map){
抛出异常(“无效负载”);
}
返回payloadMap;
}
字符串_decodeBase64(字符串str){
字符串输出=str.replaceAll('-','+')。replaceAll(''''','/');
开关(输出长度%4){
案例0:
打破
案例2:
输出+='=';
打破
案例3:
输出+='=';
打破
违约:
抛出异常(“非法的base64url字符串!”);
}
返回utf8.decode(base64Url.decode(输出));
}
Dart代码的作用是:您可以通过解码来实现,一般来说,JWT令牌包含两部分(对象),在上面的JWT中,解码的结果是:
{
alg: "HS256",
typ: "JWT"
}.
{
email: "sujeeth91171@gmail.com",
userId: "5e8adae42108733580f40858",
iat: 1586158336,
exp: 1586763136
}.
所以过期日期是一个时间戳(1586763136),代表2020年4月13日星期一上午7:32:16
怎么做
导入'dart:convert';
映射解析JWT(字符串标记){
最终部分=标记分割('.');
如果(零件长度!=3){
抛出异常(“无效令牌”);
}
最终有效载荷=_decodeBase64(第[1]部分);
最终payloadMap=json.decode(有效载荷);
如果(payloadMap是!Map){
抛出异常(“无效负载”);
}
返回payloadMap;
}
字符串_decodeBase64(字符串str){
字符串输出=str.replaceAll('-','+')。replaceAll(''''','/');
开关(输出长度%4){
案例0:
打破
案例2:
输出+='=';
打破
案例3:
输出+='=';
打破
违约:
抛出异常(“非法的base64url字符串!”);
}
返回utf8.decode(base64Url.decode(输出));
}
Dart代码积分将转到:您应该使用。使用,您将解码base64,并使用get-Map对象调用[“exp”]
属性
导入'dart:convert';
字符串解码Base64(要编码的字符串){
字符串res;
试一试{
while(toDecode.length*6%8!=0){
toDecode+=“=”;
}
res=utf8.decode(base64.decode(toDecode));
}捕获(错误){
抛出异常(“decodeBase64([toDecode=$toDecode])\n\t\t错误:$error”);
}
返回res;
}
空干管(){
最终标记='Eyjhbgcoijiuzi1niisinr5cci6ikpxvcj9.Eyjlbwfpbci6in1amvldg3mubwpbc5jb20ilcj1c2vyswqioii1zthhzgflndixmdg3mzm1odmyxntgzymzysimv4cci6mtu4njc2mzn0.ewltdrxaibnmcbuqvxzed7zfr3ewyixaijai5i';
final decoded=json.decode(decodeBase64(token.split(“.”[1]);
int exp=解码[“exp”];
打印(exp);/1586763136
}
您应该使用。使用,您将解码base64,并使用get-Map对象调用[“exp”]
属性
导入'dart:convert';
字符串解码Base64(要编码的字符串){
字符串res;
试一试{
while(toDecode.length*6%8!=0){
toDecode+=“=”;
}
res=utf8.decode(base64.decode(toDecode));
}捕获(错误){
抛出异常(“decodeBase64([toDecode=$toDecode])\n\t\t错误:$error”);
}
返回res;
}
空干管(){
最终标记='Eyjhbgcoijiuzi1niisinr5cci6ikpxvcj9.Eyjlbwfpbci6in1amvldg3mubwpbc5jb20ilcj1c2vyswqioii1zthhzgflndixmdg3mzm1odmyxntgzymzysimv4cci6mtu4njc2mzn0.ewltdrxaibnmcbuqvxzed7zfr3ewyixaijai5i';
final decoded=json.decode(decodeBase64(token.split(“.”[1]);
int exp=解码[“exp”];
打印(exp);/1586763136
}
如果您想使用软件包,可选择以下解决方案:
安装corsac_jwt:
如果要使用软件包,可选择以下解决方案: 安装corsac_jwt:
请将您的令牌示例添加到question@KirillMatrosov我已经添加了令牌。您是否尝试过许多提供jwt令牌解析的包中的一些。如果是,哪些?@julemand101我没有尝试过任何软件包请将您的令牌示例添加到question@KirillMatrosov我已经添加了令牌。您是否尝试过许多提供jwt令牌解析的包中的一些。如果是,哪些软件包?@julemand101我还没有试过任何软件包
import 'package:corsac_jwt/corsac_jwt.dart';
import 'package:corsac_jwt/corsac_jwt.dart';
void main() {
final parsed = JWT.parse('eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6InN1amVldGg5MTE3MUBnbWFpbC5jb20iLCJ1c2VySWQiOiI1ZThhZGFlNDIxMDg3MzM1ODBmNDA4NTgiLCJpYXQiOjE1ODYxNTgzMzYsImV4cCI6MTU4Njc2MzEzNn0.EwLTdRXaibNmcbuqVxzEDSfrW37z3eWYIxAifAUsT5I');
print(DateTime.fromMillisecondsSinceEpoch(parsed.expiresAt * 1000, isUtc: true)); // 2020-04-13 07:32:16.000Z
}