flutter_secure_storage

Creator: coderz1093

Last updated:

Add to Cart

Description:

flutter secure storage

flutter_secure_storage #
Note: usage of encryptedSharedPreference #
When using the encryptedSharedPreferences parameter on Android, make sure to pass the option to the
constructor instead of the function like so:
AndroidOptions _getAndroidOptions() => const AndroidOptions(
encryptedSharedPreferences: true,
);
final storage = FlutterSecureStorage(aOptions: _getAndroidOptions());
copied to clipboard
This will prevent errors due to mixed usage of encryptedSharedPreferences.
For more info, see this issue.
Info #
A Flutter plugin to store data in secure storage:

Keychain is used for iOS
AES encryption is used for Android. AES secret key is encrypted with RSA and RSA key is stored in KeyStore
With V5.0.0 we can use EncryptedSharedPreferences on Android by enabling it in the Android Options like so:

AndroidOptions _getAndroidOptions() => const AndroidOptions(
encryptedSharedPreferences: true,
);
copied to clipboard
For more information see the example app.

libsecret is used for Linux.

Note KeyStore was introduced in Android 4.3 (API level 18). The plugin wouldn't work for earlier versions.
Getting Started #
import 'package:flutter_secure_storage/flutter_secure_storage.dart';

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

// Read value
String value = await storage.read(key: key);

// Read all values
Map<String, String> allValues = await storage.readAll();

// Delete value
await storage.delete(key: key);

// Delete all
await storage.deleteAll();

// Write value
await storage.write(key: key, value: value);

copied to clipboard
This allows us to be able to fetch secure values while the app is backgrounded, by specifying first_unlock or first_unlock_this_device. The default if not specified is unlocked.
An example:
final options = IOSOptions(accessibility: KeychainAccessibility.first_unlock);
await storage.write(key: key, value: value, iOptions: options);
copied to clipboard
Configure Android version #
In [project]/android/app/build.gradle set minSdkVersion to >= 18.
android {
...

defaultConfig {
...
minSdkVersion 18
...
}

}
copied to clipboard
Note By default Android backups data on Google Drive. It can cause exception java.security.InvalidKeyException:Failed to unwrap key.
You need to

disable autobackup, details
exclude sharedprefs FlutterSecureStorage used by the plugin, details

Configure Web Version #
Flutter Secure Storage uses an experimental implementation using WebCrypto. Use at your own risk at this time. Feedback welcome to improve it. The intent is that the browser is creating the private key, and as a result, the encrypted strings in local_storage are not portable to other browsers or other machines and will only work on the same domain.
It is VERY important that you have HTTP Strict Forward Secrecy enabled and the proper headers applied to your responses or you could be subject to a javascript hijack.
Please see:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security
https://www.netsparker.com/blog/web-security/http-security-headers/

Configure Linux Version #
You need libsecret-1-dev and libjsoncpp-dev on your machine to build the project, and libsecret-1-0 and libjsoncpp1 to run the application (add it as a dependency after packaging your app). If you using snapcraft to build the project use the following
parts:
uet-lms:
source: .
plugin: flutter
flutter-target: lib/main.dart
build-packages:
- libsecret-1-dev
- libjsoncpp-dev
stage-packages:
- libsecret-1-0
- libjsoncpp-dev
copied to clipboard
Configure Windows Version #
Note The current implementation does not support readAll and deleteAll and is subject to change.
Configure MacOS Version #
You also need to add Keychain Sharing as capability to your macOS runner. To achieve this, please add the following in both your macos/Runner/DebugProfile.entitlements and macos/Runner/Release.entitlements (you need to change both files).
<key>keychain-access-groups</key>
<array/>
copied to clipboard
Integration Tests #
Run the following command from example directory
flutter drive --target=test_driver/app.dart
copied to clipboard

License

For personal and professional use. You cannot resell or redistribute these repositories in their original state.

Customer Reviews

There are no reviews.