Хранение учетных данных API в флаттер-приложении - PullRequest
0 голосов
/ 13 апреля 2019

Я использую сервисы 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);
      }
    });
  });
}

Где я должен хранить следующие учетные данные:

{
  "private_key_id": ...,
  "private_key": ...,
  "client_email": ...,
  "client_id": ...,
  "type": "service_account"
}

Я не думаю, что жесткое кодирование, как указано выше, является хорошей идеей.

Я думаю, что это должно работать: https://medium.com/@sokrato/storing-your-secret-keys-in-flutter-c0b9af1c0f69

Спасибо.

Ответы [ 2 ]

5 голосов
/ 13 апреля 2019

Для хранения конфиденциальной информации, такой как учетные данные, вы должны использовать связку ключей под iOS и хранилище ключей под Android.

Для этого есть идеальная библиотека 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");

Чтобы использовать его, добавьте flutter_secure_storage: 3.2.1+1 к вам pubspec.yaml и запустите flutter packages get в терминале.

Вот пакет и более подробный пример того, как его использовать: https://pub.dartlang.org/packages/flutter_secure_storage

0 голосов
/ 18 июля 2019
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
/*  
* Example of a secure store as a Mixin 
* Usage: 

import '../mixins/secure_store_mixin.dart';

MyClass extends StatelessWidget with SecureStoreMixin {

  exampleSet(){
    setSecureStore('jwt', 'jwt-token-data');
  }

  exampleGet(){
     getSecureStore('jwt', (token) { print(token); });
  }
}

*/

class SecureStoreMixin{

  final secureStore = new FlutterSecureStorage();

  void setSecureStore(String key, String data) async {
    await secureStore.write(key: key, value: data);
  }

  void getSecureStore(String key, Function callback) async {
    await secureStore.read(key: key).then(callback);
  }

}

Примечание: расширить, добавив дополнительные методы:

  • получить все: Map<String, String> allValues = await secureStore.readAll();
  • удалить: await secureStore.delete(key: key);
  • удалить все: await secureStore.deleteAll();
...