Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Dart中的jwt令牌中提取过期时间?_Dart - Fatal编程技术网

如何从Dart中的jwt令牌中提取过期时间?

如何从Dart中的jwt令牌中提取过期时间?,dart,Dart,我从api收到jwt令牌,但我不知道如何从Dart中的令牌中提取过期时间 接收到的令牌 EYJHBGCIOIJIUZI1NIISINR5CCIKPXVCJ9.EYJLBWFPFBCI6INN1AMVLDVPBC5JB20ILCJ1C2VYSWQII1ZTHHZGFLNDIXMDG3MZM1DBMDGILJJYXQIOJENYXNTGZYMZYSIMV4CI6MTU4NJC2MZZN0.EWLTDRXAXAIBCUQVZZ7Z3EWYIXAI5I 您可以通过解码来实现,一般来说,JWT令牌包含两部

我从api收到jwt令牌,但我不知道如何从Dart中的令牌中提取过期时间

接收到的令牌

EYJHBGCIOIJIUZI1NIISINR5CCIKPXVCJ9.EYJLBWFPFBCI6INN1AMVLDVPBC5JB20ILCJ1C2VYSWQII1ZTHHZGFLNDIXMDG3MZM1DBMDGILJJYXQIOJENYXNTGZYMZYSIMV4CI6MTU4NJC2MZZN0.EWLTDRXAXAIBCUQVZZ7Z3EWYIXAI5I


您可以通过解码来实现,一般来说,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
}