Flutter JWT管理插件jwt_manager的使用

Flutter JWT管理插件jwt_manager的使用

JWT管理器

一个易于使用的纯 Dart JWT管理器,用于创建 JWT令牌并验证签名。

特性

创建编码的JWT令牌

// 创建令牌
final tokenDto = FcmTokenDto(
  iss: 'some@email.com',
  iat: DateTime(2001),
);

// RsaKeyParser 提取私钥从 PEM 字符串
final parser = RsaKeyParser();
final rsaPrivateKey = parser.extractPrivateKey(pemPrivateKey);

// 创建用于签名的 RsaSignifier
final rsaSignifier = RsaSignifier(privateKey: rsaPrivateKey);

// JwtBuilder 将令牌编码为字符串并签名
final jwtBuilder = JwtBuilder(signifier: rsaSignifier);
final jwtToken = jwtBuilder.buildToken(tokenDto);

print('Encoded JWT: $jwtToken');

验证JWT令牌的签名

final pemPublicKey = '''
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1SU1LfVLPHCozMxH2Mo
4lgOEePzNm0tRgeLezV6ffAt0gunVTLw7onLRnrq0/IzW7yWR7QkrmBL7jTKEn5u
+qKhbwKfBstIs+bMY2Zkp18gnTxKLxoS2tFczGkPLPgizskuemMghRniWaoLcyeh
kd3qqGElvW/VDL5AaWTg0nLVkjRo9z+40RQzuVaE8AkAFmxZzow3x+VJYKdjykkJ
0iT9wCS0DRTXu269V264Vf/3jvredZiKRkgwlL9xNAwxXFg0x/XFw005UWVRIkdg
cKWTjpBP2dPwVZ4WWC+9aGVd+Gyn1o0CLelf4rEjGoXbAAEgAqeGUxrcIlbjXfbc
mwIDAQAB
-----END PUBLIC KEY-----
''';

// 从 PEM 字符串提取公钥
final rsaPublicKey = parser.extractPublicKey(pemPublicKey);

// 验证签名
final rsaVerifier = RsaSignatureVerifier(publicKey: rsaPublicKey);
final isVerified = rsaVerifier.verify(
  'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzb21lQGVtYWlsLmNvbSIsInNjb3BlIjoiaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vYXV0aC9maXJlYmFzZS5tZXNzYWdpbmciLCJhdWQiOiJodHRwczovL29hdXRoMi5nb29nbGVhcGlzLmNvbS90b2tlbiIsImV4cCI6OTc4Mjk2NDAwLCJpYXQiOjk3ODI5MjgwMH0',
  'cqABcd-RMTQvxvI2zKPNek-UPd7fY0796B8hN9pDYyyrRWDOy7LlufaCvMlDIXrOS-zJMTsFbPQ8UMYY2Ofkz_lloCy4K5IhGZQIOjYvfhIZhp9PxMvj0XhRsezERQoK4air_lcUEh1LJ1o9j_i4P0XyOqGhcgcKKZLrc3zziSbb-vEIKu9gX4WsVYpyv4CK-o9AOAxXqukebcrIdURhf0V8o1hiVwTTfX5_x4j_XF99ZqjoFCTTcieM2F7F9-LFmwqy9Cg0E_UsyPC7aeR_UADLfE-1SBfYTSPdxAZ0HVfYQcET7hnzZJzz_NhyD62fLQzj6Eqag8_fWeZr_NYsPg'
);

print('Is signature verified: $isVerified');

更多关于Flutter JWT管理插件jwt_manager的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter JWT管理插件jwt_manager的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,管理JWT(JSON Web Tokens)可以使用jwt_manager插件。这个插件可以帮助你存储、解析和验证JWT。以下是如何使用jwt_manager插件的详细步骤:

1. 添加依赖

首先,在pubspec.yaml文件中添加jwt_manager插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  jwt_manager: ^1.0.0  # 使用最新版本

然后运行flutter pub get来安装依赖。

2. 初始化JwtManager

在使用jwt_manager之前,你需要初始化它。通常可以在main.dart文件中进行初始化:

import 'package:jwt_manager/jwt_manager.dart';

void main() {
  JwtManager.initialize(
    secretKey: 'your-secret-key',  // 用于验证JWT的密钥
    algorithm: JwtAlgorithm.HS256, // 使用的算法
  );
  runApp(MyApp());
}

3. 存储JWT

你可以在用户登录成功后将JWT存储起来:

String jwtToken = 'your.jwt.token';

JwtManager.instance.storeToken(jwtToken);

4. 获取JWT

当需要使用JWT时,可以从JwtManager中获取:

String? jwtToken = JwtManager.instance.getToken();

5. 解析JWT

你可以解析JWT以获取其中的信息:

Map<String, dynamic>? payload = JwtManager.instance.decodeToken(jwtToken);

if (payload != null) {
  print('JWT Payload: $payload');
} else {
  print('Invalid JWT');
}

6. 验证JWT

你可以验证JWT是否有效:

bool isValid = JwtManager.instance.isValidToken(jwtToken);

if (isValid) {
  print('JWT is valid');
} else {
  print('JWT is invalid or expired');
}

7. 清除JWT

当用户注销时,可以清除存储的JWT:

JwtManager.instance.clearToken();

8. 处理过期JWT

你可以检查JWT是否过期:

bool isExpired = JwtManager.instance.isTokenExpired(jwtToken);

if (isExpired) {
  print('JWT is expired');
} else {
  print('JWT is still valid');
}

9. 刷新JWT

如果需要刷新JWT,可以调用相应的API获取新的JWT并存储:

String newJwtToken = await refreshToken(); // 假设这是一个刷新JWT的函数

JwtManager.instance.storeToken(newJwtToken);

10. 处理错误

在使用jwt_manager时,可能会遇到一些错误,比如无效的JWT或解析错误。你可以使用try-catch块来捕获并处理这些错误:

try {
  Map<String, dynamic>? payload = JwtManager.instance.decodeToken(jwtToken);
  print('JWT Payload: $payload');
} catch (e) {
  print('Error decoding JWT: $e');
}
回到顶部