Unn*_*nan 1 dart flutter flutter-dependencies
我在flutter应用程序中使用googleapis服务,该服务需要一些JSON格式的凭据。在我的应用程序中存储此凭据的最佳方法是什么?
我可以在自己的资产文件夹中保留一个JSON文件并在主函数中读取它吗?
还是应该在主要功能中对凭证进行硬编码?我是开发开发的新手。
我的代码如下所示
import 'package:googleapis/storage/v1.dart';
import 'package:googleapis_auth/auth_io.dart';
final _credentials = new ServiceAccountCredentials.fromJson(r'''
{
"private_key_id": ...,
"private_key": ...,
"client_email": ...,
"client_id": ...,
"type": "service_account"
}
''');
const _SCOPES = const [StorageApi.DevstorageReadOnlyScope];
void main() {
clientViaServiceAccount(_credentials, _SCOPES).then((http_client) {
var storage = new StorageApi(http_client);
storage.buckets.list('dart-on-cloud').then((buckets) {
print("Received ${buckets.items.length} bucket names:");
for (var file in buckets.items) {
print(file.name);
}
});
});
}
Run Code Online (Sandbox Code Playgroud)
我应该保留以下凭据:
{
"private_key_id": ...,
"private_key": ...,
"client_email": ...,
"client_id": ...,
"type": "service_account"
}
Run Code Online (Sandbox Code Playgroud)
我不认为像上面这样的硬编码是个好主意。
我认为这应该工作:https : //medium.com/@sokrato/storing-your-secret-keys-in-flutter-c0b9af1c0f69
谢谢。
Ben*_*rth 11
评论:我不明白罗宾实际上是如何回答这个问题的。原始发布者需要应用程序具有访问 API 的凭据。使用安全密钥存储不会为应用程序提供任何数据,因此它仍然无法访问 API。如果您在项目中添加文件,那么安全密钥存储不会以任何方式保护文件。
环境变量:我建议将环境变量用于根据环境而变化的变量:您可能有 2 个 API_KEYS,因为您有生产和测试环境。但是,您的应用程序的攻击者仍然可以通过“中间人”窃取您的请求,例如,使用代理程序。攻击者可以嗅探流量或反编译您的应用程序以窃取 API_KEYS 并在他们自己的情况下使用它们项目、漏洞利用或加密挖掘。因此,如果您使用环境变量,请确保您的 API 密钥不是那么强大。某些 API 提供商将允许您限制该密钥的权力。
后端:因此,如果 API_KEY 功能强大且不受限制,则根本不应该在应用程序上使用它。它应该在您的后端,它代表客户端调用外部 API。您可以托管服务器来执行此操作,或使用无服务器函数(例如 AWS Lambda、GCP 云函数、Azure 函数、Firebase 云函数等等)。
这取决于您的威胁模型:您认为您的应用程序可能面临什么样的威胁。就我而言,我并不担心有人反编译我的黑客马拉松项目以窃取我免费获得的天气 API_KEY,但我担心某些 github 爬虫或 api 提供者找到了这个 api_key 并禁用它(这发生在我的与她的 Google Cloud Platform 服务帐户凭据的朋友)。所以,我正在使用环境变量。
为了存储诸如凭证之类的敏感信息,您应该使用iOS下的Keychain和Android下的Keystore。
有一个完善的图书馆flutter_secure_storage。
使用方法如下:
// Create storage
final storage = new FlutterSecureStorage();
// Store password
await storage.write(key: "password", value: "my-secret-password");
// Read value
String myPassword = await storage.read(key: "password");
Run Code Online (Sandbox Code Playgroud)
要使用它添加flutter_secure_storage: 3.2.1+1到您pubspec.yaml和运行flutter packages get在终端。
这是软件包以及有关如何使用它的更详细的示例:https : //pub.dartlang.org/packages/flutter_secure_storage
| 归档时间: |
|
| 查看次数: |
2782 次 |
| 最近记录: |