Flutter JWT生成插件jwt_generator的使用
Flutter JWT生成插件jwt_generator的使用
概述
此包用于使用rsa_pkcs和pointycastle生成JWT。
功能
- JWT GENERATOR 生成JWT
安装
对于Dart项目使用:
dart pub add jwt_manager
对于Flutter项目使用:
flutter pub add jwt_manager
你也可以手动编辑pubspec.yaml
文件:
dependencies:
jwt_manager: ^0.0.1
然后运行dart pub get
或flutter pub get
来完成安装。
使用
示例:
import 'package:jwt_generator/jwt_generator.dart';
void main() {
// 创建一个令牌
final tokenDto = FcmTokenDto(
iss: 'some@email.com',
iat: DateTime(2001),
);
// 这个私钥是由AI生成的
final pemPrivateKey = '''
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAy1YRVTIxeB6YU88f6OhsHtZUB0ll/9Wi72lgzohPRHkHHb3J
y193Y41wmtYNhxY9GHQ6QjciXP4LtQUqf+WOf70O9x3xDJLPuHx8Zw25Cz+S4r0t
KnSNnh7gBi0QJ5PYv+gIJxgV/QlQFVencXbpaohkU/LInxVMoo8bkta160OOBSW2
5JBSxF8tY49SDfxcLyh91BD+E/8cOplGAXaYyPbsVUn76Y83JZ+jIzZWXNvap9Xq
SbfqXzjVQuOQ/XdrQOS5u1c+F6OzWgdSa7OBj479yzfuh7z+W+NpZAKjFihvh1ME
nnLd61Htu/1D5/L/zkv+lZ5sjAps0aWRkwZ+CQIDAQABAoIBADI8BjY1G1GgxWNX
NXv2B9gqfUH7mS52WjWppBgCRwsUl3R6keMjp7w5kks+fMMV9GwZMtdvBZdR0BSd
vR0x2l2mmI7mn8nKb3UVlCplkoS75Q8NS55Eg0RAPnpoIaiVdyQaMAFwiuYjqdxL
9nsqtIn0Pk0bGwNqYK98iYRidTk026KsYrZGSb/Ya0DlBJYOMQnDslPmebGgbZro
9opVaceLpYaklQa2Q7cF4M2MRcKAK//wb2t2aPQ+LmtZGfnyW0z/ZZB8loaMClCU
k0vLcRPt8OuzGUO+9it8GT9JjW59HTEhYtkBs9dLr3yWeSOiUraienNGAEwRSALe
sYyFiTECgYEA5ITum3Vw339C5KByBek3wmFSWhxokgtJfUe33hgqFeSB4Cs8rJri
B8zc00q4WSoXWH7zz/lJm4DCUHl+U7ycppQYovVfuoegXC784uihW4XwPWc4r3yH
agpNancSkLVkWznDGafpQxq7YbK21hYdVRoaw9Y36fO1/9zw+xIHJGUCgYEA48nd
HoXL0v062IdoJ/dgm+RO97iYCDtVzRCYvv65Toa0n5mA+W6IFcJzKFWjE8/eiqoV
/Vl+UXu8QG0g6elVgdHEyoR5ZzX5jjaNl4ZAyzY9Oubh3pj8N6xq1deAOjjBPQNZ
z+NRchG43GJ7m0Z7lajmaMc0PLVNe7SUY7sF/tUCgYBEoriX8LoqJqsMyDP3Goko
1NpLPmUaGFHGUxgimNdrI+ruTY43uX1SInHg9HxSK5Y/ekH4oUM+dXnnedY7iFb0
oV6U82YBPGMpzOMftAdi2ePCTZJ1As4ZR2bhJ0poNFMkI0E6H3isMwc83NSVkKbW
vLR1RY4dspljdBTdFBkZEQKBgGzzNlHNCOpHuIesbEMBbTHjB2ow3nbBeo50q7pe
t185ytazYx7qoShXMyFNpIxrVjPYml/tGB/9INNn3uBCfGV1YbzDlBWrmUtOCHc6
/W606KBtogcIAUrXqtnRE0HFt5dpLOHkBiabF2JBsIFaOu4gNORUs0V+KitK+dah
s4JpAoGAd+YLoCWwe+2P7EqhiGi0eUcqFyTvOsxxRCTsBWWkf2P0SorjjYcmlw2G
iLxH64ZqxyJNdI1wYkGYVxoTdB5jFRP3X7QPDv5v0iMs6iLX0e3XHkUQZSpij2rq
UmUIGqLdAx3FNG0CO/HLr+kc8vkeDTkBKYtDm4r9Ik9IquF4MUc=
-----END RSA PRIVATE KEY-----
''';
// 这个公钥是由AI生成的
final pemPublicKey = '''
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy1YRVTIxeB6YU88f6Ohs
HtZUB0ll/9Wi72lgzohPRHkHHb3Jy193Y41wmtYNhxY9GHQ6QjciXP4LtQUqf+WO
f70O9x3xDJLPuHx8Zw25Cz+S4r0tKnSNnh7gBi0QJ5PYv+gIJxgV/QlQFVencXbp
aohkU/LInxVMoo8bkta160OOBSW25JBSxF8tY49SDfxcLyh91BD+E/8cOplGAXaY
yPbsVUn76Y83JZ+jIzZWXNvap9XqSbfqXzjVQuOQ/XdrQOS5u1c+F6OzWgdSa7OB
j479yzfuh7z+W+NpZAKjFihvh1MEnnLd61Htu/1D5/L/zkv+lZ5sjAps0aWRkwZ+
CQIDAQAB
-----END PUBLIC KEY-----
''';
// 创建一个已编码并签名的令牌
// 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');
// 使用公钥检查签名
// 从.pem字符串中提取公钥
final rsaPublicKey = parser.extractPublicKey(pemPublicKey);
// 验证签名
final rsaVerifier = RsaSignatureVerifier(publicKey: rsaPublicKey);
// 使用句点作为分隔符分割JWT
List<String> rawJwt = jwtToken.split('.');
// 选择最后一个索引作为base64签名
String base64signature = rawJwt.last;
// 移除列表中的最后一项
rawJwt.removeLast();
// 使用句点作为模式连接剩余值
String signedData = rawJwt.join('.');
final isVerified = rsaVerifier.verify(signedData, base64signature);
// 记录验证结果
print('Is signature verified: $isVerified');
}
更多关于Flutter JWT生成插件jwt_generator的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter JWT生成插件jwt_generator的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用jwt_generator
插件来生成JWT(JSON Web Token)的示例代码。请注意,jwt_generator
插件主要用于生成JWT,而不是验证JWT。如果你需要验证JWT,你可能需要使用其他插件,比如flutter_jwt_decode
。
首先,确保你已经在pubspec.yaml
文件中添加了jwt_generator
依赖:
dependencies:
flutter:
sdk: flutter
jwt_generator: ^x.y.z # 请将x.y.z替换为当前最新版本号
然后,运行flutter pub get
来安装依赖。
以下是一个完整的示例,展示了如何使用jwt_generator
来生成JWT:
import 'package:flutter/material.dart';
import 'package:jwt_generator/jwt_generator.dart';
import 'dart:convert';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('JWT Generator Example'),
),
body: Center(
child: FutureBuilder<String>(
future: generateJWT(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
} else {
return Text('Generated JWT: ${snapshot.data}');
}
} else {
return CircularProgressIndicator();
}
},
),
),
),
);
}
Future<String> generateJWT() async {
// 创建JWT负载(Payload)
Map<String, dynamic> payload = {
'iss': 'http://example.com', // 发行人
'aud': 'http://example.org', // 接收人
'iat': DateTime.now().millisecondsSinceEpoch ~/ 1000, // 签发时间
'exp': (DateTime.now().add(Duration(days: 1))).millisecondsSinceEpoch ~/ 1000, // 过期时间
'data': {
'userId': '123456',
'username': 'john_doe',
},
};
// 创建JWT头部(Header)
Map<String, dynamic> header = {
'typ': 'JWT',
'alg': 'HS256', // 使用HMAC SHA-256签名算法
};
// 密钥(Secret Key),用于签名JWT
String secretKey = 'your_256_bit_secret'; // 请确保使用足够长的密钥以保证安全性
// 使用jwt_generator生成JWT
Jwt jwt = Jwt(header, payload, secretKey);
String token = jwt.generate();
return token;
}
}
在这个示例中,我们创建了一个简单的Flutter应用,该应用在启动时生成一个JWT并将其显示在屏幕上。
注意事项
- 密钥管理:在实际应用中,密钥的管理非常重要。不要将密钥硬编码在客户端代码中。考虑使用安全存储或环境变量来管理密钥。
- 时间戳:
iat
(签发时间)和exp
(过期时间)字段使用了Unix时间戳(秒)。 - 算法选择:在示例中,我们使用了
HS256
(HMAC SHA-256)算法。根据你的需求,你可以选择其他算法。 - 依赖版本:确保你使用的是
jwt_generator
的最新版本。你可以在pub.dev
网站上查看最新版本号。
这个示例应该能够帮助你理解如何在Flutter项目中使用jwt_generator
插件来生成JWT。如果你有更多问题或需要进一步的帮助,请随时提问。