Flutter JSON Web Token生成与验证插件dart_jsonwebtoken的使用
Flutter JSON Web Token生成与验证插件dart_jsonwebtoken的使用
JSON Web Token (JWT)
dart_jsonwebtoken
是一个Dart实现的著名JavaScript库 jsonwebtoken
的替代品。JSON Web Tokens是一种开放的、行业标准(RFC 7519)方法,用于在双方之间安全地表示声明。
你可以通过 jwt.io 解码、验证和生成JWT。
示例代码
下面是一个完整的示例demo,展示了如何使用 dart_jsonwebtoken
插件来创建和验证JWT。
导入包
首先,确保你已经在 pubspec.yaml
文件中添加了 dart_jsonwebtoken
依赖:
dependencies:
dart_jsonwebtoken: ^latest_version # 替换为最新版本号
然后,在你的Dart文件中导入该包:
import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart';
创建 & 签名JWT
接下来,我们将演示如何创建并签名一个JWT。这里我们使用HMAC SHA-256算法作为例子:
void main() {
// Generate a JSON Web Token
final jwt = JWT(
// Payload
{
'id': 123,
'server': {
'id': '3e4fc296',
'loc': 'euw-2',
}
},
issuer: 'https://github.com/jonasroussel/dart_jsonwebtoken',
);
// Sign it (default with HS256 algorithm)
final token = jwt.sign(SecretKey('secret passphrase'));
print('Signed token: $token\n');
}
验证JWT
现在我们已经创建了一个JWT,接下来让我们看看如何验证它:
try {
// Verify a token (SecretKey for HMAC & PublicKey for all the others)
final jwt = JWT.verify(token, SecretKey('secret passphrase'));
print('Payload: ${jwt.payload}');
} on JWTExpiredException {
print('jwt expired');
} on JWTException catch (ex) {
print(ex.message); // ex: invalid signature
}
解码但不检查签名
如果你只需要解码而不需要验证签名,可以这样做:
final jwt = JWT.decode(token);
print('Payload: ${jwt.payload}');
支持的算法
以下是 dart_jsonwebtoken
支持的所有算法列表:
JWT Algorithms | Digital Signature or MAC Algorithm |
---|---|
HS256 | HMAC using SHA-256 hash algorithm |
HS384 | HMAC using SHA-384 hash algorithm |
HS512 | HMAC using SHA-512 hash algorithm |
PS256 | RSASSA-PSS using SHA-256 hash algorithm |
PS384 | RSASSA-PSS using SHA-384 hash algorithm |
PS512 | RSASSA-PSS using SHA-512 hash algorithm |
RS256 | RSASSA-PKCS1-v1_5 using SHA-256 hash algorithm |
RS384 | RSASSA-PKCS1-v1_5 using SHA-384 hash algorithm |
RS512 | RSASSA-PKCS1-v1_5 using SHA-512 hash algorithm |
ES256 | ECDSA using P-256 curve and SHA-256 hash algorithm |
ES256K | ECDSA using secp256k curve and SHA-256 hash algorithm |
ES384 | ECDSA using P-384 curve and SHA-384 hash algorithm |
ES512 | ECDSA using P-521 curve and SHA-512 hash algorithm |
EdDSA | EdDSA using ed25519 curve and SHA-512 hash algorithm |
对于非对称加密算法(如RSA或ECDSA),你需要提供私钥进行签名,并使用相应的公钥进行验证。对于HMAC算法,则只需提供一个共享的秘密密钥即可。
以上就是关于 dart_jsonwebtoken
插件的基本用法介绍。希望这些信息对你有所帮助!如果有任何问题,请随时提问。
更多关于Flutter JSON Web Token生成与验证插件dart_jsonwebtoken的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter JSON Web Token生成与验证插件dart_jsonwebtoken的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter中使用dart_jsonwebtoken
插件来生成和验证JSON Web Token (JWT)的示例代码。
首先,确保你已经在你的pubspec.yaml
文件中添加了dart_jsonwebtoken
依赖:
dependencies:
flutter:
sdk: flutter
dart_jsonwebtoken: ^x.y.z # 请替换为最新版本号
然后,运行flutter pub get
来安装依赖。
以下是一个完整的示例,包括生成JWT和验证JWT的代码:
import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart';
import 'package:flutter/material.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 Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Generating and Verifying JWT'),
ElevatedButton(
onPressed: () async {
// Generate JWT
String secretKey = 'your_secret_key'; // 请替换为你的密钥
Map<String, dynamic> payload = {
'iss': 'http://example.org',
'aud': 'http://example.com',
'iat': DateTime.now().toIso8601String(),
'nbf': DateTime.now().add(Duration(seconds: 1)).toIso8601String(),
'exp': DateTime.now().add(Duration(hours: 1)).toIso8601String(),
'sub': '1234567890',
'name': 'John Doe',
'admin': true,
};
JWT jwt = JWT(secretKey);
String token = jwt.encode(payload);
print('Generated Token: $token');
// Verify JWT
try {
Map<String, dynamic> decoded = jwt.decode(token);
print('Decoded Payload: $decoded');
// 验证是否过期等,这里仅示例解码后的内容
if (decoded != null) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Token is valid'),
duration: Duration(seconds: 2),
),
);
}
} catch (e) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Token is invalid: $e'),
duration: Duration(seconds: 2),
),
);
}
},
child: Text('Generate and Verify JWT'),
),
],
),
),
),
);
}
}
代码解释:
-
依赖导入:确保你已经导入了
dart_jsonwebtoken
包。 -
生成JWT:
- 创建一个密钥(
secretKey
),这在实际应用中应该是一个安全的密钥。 - 创建一个包含JWT标准字段的
payload
(载荷)。 - 使用
JWT
类的encode
方法生成JWT。
- 创建一个密钥(
-
验证JWT:
- 使用
JWT
类的decode
方法解码JWT。 - 捕获可能的异常,如果解码失败(例如,签名不正确或令牌已过期),则会抛出异常。
- 使用
-
UI交互:
- 使用
ElevatedButton
按钮来触发JWT的生成和验证。 - 使用
ScaffoldMessenger.of(context).showSnackBar
来显示验证结果。
- 使用
请注意,为了简化示例,密钥和载荷都是硬编码的。在实际应用中,密钥应该安全存储,载荷应该根据实际需求动态生成。