Flutter 什么';在Flatter应用程序中保存jwt令牌的最佳方法是什么?

Flutter 什么';在Flatter应用程序中保存jwt令牌的最佳方法是什么?,flutter,jwt,token,Flutter,Jwt,Token,不仅仅是在哪里(例如:SQLite…),还包括如何(LIB,最佳具体实践) 使用最适合您,因为它“为简单数据提供了持久存储。” 示例代码: import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() { runApp(MaterialApp( home: Scaffold( body: Center(

不仅仅是在哪里(例如:SQLite…),还包括如何(LIB,最佳具体实践)

使用最适合您,因为它“为简单数据提供了持久存储。”

示例代码:

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

void main() {
  runApp(MaterialApp(
    home: Scaffold(
      body: Center(
      child: RaisedButton(
        onPressed: _getAndSaveToken,
        child: Text('Get token'),
        ),
      ),
    ),
  ));
}

_getAndSaveToken() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  String token = await _getTokenFromHttp();
  await prefs.setInt('jwt', token);
}

Future<String> _getTokenFromHttp() async {
  // http code here
}
导入“包装:颤振/材料.省道”;
导入“package:shared_preferences/shared_preferences.dart”;
void main(){
runApp(材料应用程序)(
家:脚手架(
正文:中(
孩子:升起按钮(
按下时:_getAndSaveToken,
子项:文本('Get token'),
),
),
),
));
}
_getAndSaveToken()异步{
SharedReferences prefs=等待SharedReferences.getInstance();
字符串标记=等待_getTokenFromHttp();
等待prefs.setInt('jwt',令牌);
}
Future\u getTokenFromHttp()异步{
//这里是http代码
}

您可能不想在共享首选项中存储敏感数据。相反,您可能希望查看如下插件:


正如我在一篇已删除的帖子中提到的,我一直在使用配置单元来存储我的令牌和其他本地数据。使用它可以创建

如评论中所述:

上面的示例将加密密钥存储在未加密的框中。你不应该那样做

重要:

  • 只有值是加密的,而密钥是以明文存储的
  • 请确保在应用程序关闭时安全地存储加密密钥。对于颤振,您可以使用或类似的软件包
  • 不检查加密密钥是否正确。如果不是,可能会出现意外行为
因此,如果您不需要任何特定的
hive
功能,应该是一个更好的选择


在同一个项目中使用多个此选项有意义吗?软件包描述本身表明“此插件不得用于存储关键数据”。它最适合于应用程序内的首选项,如打开/关闭黑暗模式。Flatter_secure_存储目前不支持web。还有其他关于Flitter web支持的选择吗?@Fvisitot我知道这个问题是在一年多前提出的,但我把答案留给子孙后代。基本上,没有办法将令牌存储在web上的加密存储中。但在我看来,使用共享首选项(实际上是本地存储)作为web的备用方案是足够安全的。这个加密框可以在两个应用程序之间共享吗?您使用的是未加密的框来存储加密密钥。无法达到使用加密框的目的。根据,使用加密框时,您需要安全地保存加密密钥。在《颤栗》中,他们建议你保存它。我的建议:改用这个选项。@BrenoTeodoro是的。移动和桌面上真的需要安全存储吗?由于在web中,我们通常将jwt令牌存储在HttpOnly cookie中,用户仍然可以看到来自开发工具的内容,因此我猜,除非是Flatter web,否则您可以将jwt(不是用户和密码,这是敏感数据)存储在任何位置(Hive、SQLite、Get Storage等),在android中,有一个加密的特定于应用程序的位置,只有您的应用程序可以访问,
import 'package:flutter_secure_storage/flutter_secure_storage.dart';

// Create storage
final storage = new FlutterSecureStorage();

// Write value 
await storage.write(key: 'jwt', value: token);
import 'dart:typed_data';
import 'package:hive/hive.dart';

void main() async {
  var keyBox = await Hive.openBox('encryptionKeyBox');
  if (!keyBox.containsKey('key')) {
    var key = Hive.generateSecureKey();
    keyBox.put('key', key);
  }

  var key = keyBox.get('key') as Uint8List;
  print('Encryption key: $key');

  var encryptedBox = await Hive.openBox('vaultBox', encryptionKey: key);
  encryptedBox.put('secret', 'Hive is cool');
  print(encryptedBox.get('secret'));
}