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

Flutter应用如何安全存储JWT Token并在API请求中传递Token

JWT Token安全存储解决方案

SecureStorage常见问题修复

读取不到Token的问题排查

你目前只能拿到key,大概率是调用了getKeys()类的枚举key方法,没有调用对应key的读值方法。以常用的flutter_secure_storage库为例,正确读写逻辑如下:

// 初始化实例
final storage = FlutterSecureStorage();

// 存Token(登录成功后调用)
await storage.write(
  key: "user_jwt_token", 
  value: "服务端返回的原始JWT字符串"
);

// 读Token
String? jwtToken = await storage.read(key: "user_jwt_token");
// 这里拿到的就是解密后的原始Token,库会自动处理解密逻辑

API请求传参方法

拿到读取到的原始Token后,添加到API请求的Authorization头即可,以Dio网络库为例:

// 读取Token后配置全局请求头
if (jwtToken != null) {
  dio.options.headers["Authorization"] = "Bearer $jwtToken";
}
// 后续发起的所有请求都会自动携带Token校验信息

替代JWT加解密存储方案

如果你不想继续使用SecureStorage,可以选择以下成熟方案:

  • 系统密钥库+自定义加解密
    Android侧使用KeyStore、iOS侧使用Keychain存储加密密钥,采用AES-256-GCM对称加密算法对JWT进行加密后,存储到普通的SharedPreferences即可。密钥由系统原生层保管,即使设备Root/越狱也很难提取,安全性有保障。
  • 官方加密存储组件
    Android端可直接使用谷歌官方提供的EncryptedSharedPreferences,iOS端可直接使用系统原生Keychain,两者均由官方实现加解密逻辑,无需自己处理加密流程,接入成本低,安全性经过验证。
  • 轻量加密库封装
    可使用encrypt等第三方加密库,自己实现JWT的加解密逻辑,密钥依然托管到系统密钥库中,灵活度更高,可适配自定义的存储规则。

注意:JWT本身属于明文编码结构,无需解密即可读取Payload内容,请勿在JWT的Payload中存储密码、身份证号等敏感信息,本地加密仅用于防止Token被窃取后直接被第三方滥用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:18:02