Flutter JWT处理插件corsac_jwt的使用

发布于 1周前 作者 eggper 来自 Flutter

Flutter JWT处理插件corsac_jwt的使用

Usage 使用方法

corsac_jwt 是一个轻量级的 JSON Web Token (JWT) 实现库,用于在 Dart/Flutter 项目中创建和验证 JWT。下面是一个完整的示例demo,展示如何使用 corsac_jwt 插件来生成和验证 JWT。

示例代码

import 'package:corsac_jwt/corsac_jwt.dart';

void main() {
  // 创建JWT构建器并设置必要的声明
  var builder = JWTBuilder()
    ..issuer = 'https://api.foobar.com'
    ..expiresAt = DateTime.now().add(Duration(minutes: 3))
    ..setClaim('data', {'userId': 836});

  // 获取未签名的token
  var token = builder.getToken();
  print('Unsigned Token: $token');

  // 创建签名器并使用共享密钥进行签名
  var signer = JWTHmacSha256Signer('sharedSecret');
  var signedToken = builder.getSignedToken(signer);
  print('Signed Token: $signedToken'); // 输出编码后的JWT

  // 将字符串形式的token解析为JWT对象
  var stringToken = signedToken.toString();
  var decodedToken = JWT.parse(stringToken);

  // 验证签名
  bool isSignatureValid = decodedToken.verify(signer);
  print('Is Signature Valid: $isSignatureValid'); // true

  // 创建JWT验证器并验证声明
  var validator = JWTValidator()
    ..issuer = 'https://api.foobar.com'; // 设置你想要验证的声明
  Set<String> errors = validator.validate(decodedToken);
  print('Validation Errors: $errors'); // 如果为空列表,则表示没有错误
}

支持的签名算法

  • HS256 (JwtHmacSha256Signer)
  • RS256 (JwtRsaSha256Signer)

请根据你的需求选择合适的签名算法,并确保在生产环境中使用安全的密钥管理策略。

License 许可证

BSD-2

以上就是 corsac_jwt 插件的基本使用方法和示例代码。如果你有更多的问题或需要进一步的帮助,请参考官方文档或社区资源。


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

1 回复

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


当然,以下是如何在Flutter项目中使用corsac_jwt插件来处理JWT(JSON Web Token)的示例代码。corsac_jwt是一个Flutter插件,它允许你解析和验证JWT。

首先,确保你已经将corsac_jwt添加到你的pubspec.yaml文件中:

dependencies:
  flutter:
    sdk: flutter
  corsac_jwt: ^x.y.z  # 请替换为最新版本号

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

示例代码

以下是一个简单的Flutter应用示例,展示了如何使用corsac_jwt插件来解析JWT:

import 'package:flutter/material.dart';
import 'package:corsac_jwt/corsac_jwt.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter JWT Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter JWT Demo'),
        ),
        body: Center(
          child: JwtDemo(),
        ),
      ),
    );
  }
}

class JwtDemo extends StatefulWidget {
  @override
  _JwtDemoState createState() => _JwtDemoState();
}

class _JwtDemoState extends State<JwtDemo> {
  String? decodedToken;

  void _parseJwt(String token) async {
    try {
      Jwt jwt = Jwt.parse(token);
      decodedToken = jwt.claims.toJson().toString();
      setState(() {});
    } catch (e) {
      decodedToken = "Error parsing JWT: $e";
      setState(() {});
    }
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('Enter JWT:'),
        TextField(
          maxLines: 10,
          decoration: InputDecoration(
            border: OutlineInputBorder(),
            labelText: 'JWT',
          ),
          onEditingComplete: () {
            String? token = textController.text;
            if (token != null && token.isNotEmpty) {
              _parseJwt(token);
            }
          },
        ),
        SizedBox(height: 20),
        Text('Decoded Token:'),
        Text(decodedToken ?? 'N/A', style: TextStyle(fontSize: 16)),
      ],
    );
  }
}

注意:上面的代码片段中有几个需要调整的地方,因为示例中缺少对TextField控制器的管理。以下是完整的、可运行的示例:

import 'package:flutter/material.dart';
import 'package:corsac_jwt/corsac_jwt.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter JWT Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter JWT Demo'),
        ),
        body: Center(
          child: JwtDemo(),
        ),
      ),
    );
  }
}

class JwtDemo extends StatefulWidget {
  @override
  _JwtDemoState createState() => _JwtDemoState();
}

class _JwtDemoState extends State<JwtDemo> {
  final TextEditingController textController = TextEditingController();
  String? decodedToken;

  void _parseJwt() async {
    String? token = textController.text;
    if (token != null && token.isNotEmpty) {
      try {
        Jwt jwt = Jwt.parse(token);
        decodedToken = jwt.claims.toJson().toString();
        setState(() {});
      } catch (e) {
        decodedToken = "Error parsing JWT: $e";
        setState(() {});
      }
    } else {
      decodedToken = "Please enter a valid JWT.";
      setState(() {});
    }
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('Enter JWT:'),
        TextField(
          controller: textController,
          maxLines: 10,
          decoration: InputDecoration(
            border: OutlineInputBorder(),
            labelText: 'JWT',
          ),
        ),
        ElevatedButton(
          onPressed: _parseJwt,
          child: Text('Parse JWT'),
        ),
        SizedBox(height: 20),
        Text('Decoded Token:'),
        Text(decodedToken ?? 'N/A', style: TextStyle(fontSize: 16)),
      ],
    );
  }

  @override
  void dispose() {
    textController.dispose();
    super.dispose();
  }
}

在这个示例中,我们使用了一个TextEditingController来管理TextField的文本输入,并通过一个按钮触发JWT解析操作。解析后的JWT声明会以JSON格式显示在屏幕上。

希望这能帮助你理解如何在Flutter项目中使用corsac_jwt插件来处理JWT。

回到顶部