You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何在请求头发送JWT Token?含HS256编码实现

Flutter中HS256算法JWT编码实现及请求头配置

一、依赖引入

首先在pubspec.yaml中添加JWT处理和网络请求的依赖:

dependencies:
  dart_jsonwebtoken: ^2.12.0
  http: ^1.1.0

执行flutter pub get完成依赖安装。

二、HS256密钥生成方法

HS256采用对称加密,密钥生成及注意事项:

  • 可生成32位或64位随机字节,再转成Base64编码字符串作为密钥;
  • 密钥需和服务器端使用的完全一致,绝对不能硬编码在客户端代码中,建议通过后端安全配置接口获取,或打包时通过环境变量注入。

三、完整代码实现

以下是补充JWT逻辑后的请求代码:

import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart';
import 'package:http/http.dart' as http;

fetchData({required String type, required String fid, required String url, required String secretKey}) async {
  // 构造JWT载荷
  final payload = {
    "fid": fid,
    "type": type,
    // 可选:添加1小时过期时间,提升安全性
    "exp": DateTime.now().add(const Duration(hours: 1)).millisecondsSinceEpoch ~/ 1000
  };

  // 初始化JWT实例
  final jwt = JWT(payload);

  // 使用HS256算法签名生成Token
  final token = jwt.sign(SecretKey(secretKey), algorithm: Algorithm.HS256);

  // 构造请求头:JWT通常放在Authorization字段,格式为Bearer + Token
  // 若服务器要求单独携带'fid'字段,可额外添加注释行的内容
  final headers = {
    'Authorization': 'Bearer $token',
    // 'fid': fid,
  };

  // 发送GET请求
  final response = await http.get(Uri.parse(url), headers: headers);

  // 响应处理示例
  if (response.statusCode == 200) {
    print('请求成功:${response.body}');
  } else {
    print('请求失败,状态码:${response.statusCode}');
  }
}

四、关键说明

  • 密钥传递说明:密钥仅用于客户端生成JWT签名,不需要传递给服务器;服务器会用相同密钥验证JWT的合法性。
  • 请求头规则:若服务器明确要求请求头携带fid参数,需确认是单独添加该字段,还是服务器从JWT载荷中解析fid,根据实际需求调整请求头配置。

内容的提问来源于stack exchange,提问作者Shimron Alakkal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 03:40:29