🔓Flutter Secure Storage
Este código implementa funcionalidades básicas de autenticação, incluindo armazenamento seguro do token de autenticação usando FlutterSecureStorage e criptografia do token para garantir sua segurança.
import 'dart:async';
import 'dart:convert';
import 'package:encrypt/encrypt.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
class Authentication {
static const _storage = FlutterSecureStorage();
static const _tokenKey = "authentication_token";
static const _encryptionKey = ""; //secure-random -l 16
static const _iv = ""; //secure-random -l 16
// Verifica se o usuário está autenticado
static Future<bool> authenticated() async {
final token = await _getToken();
return token != null;
}
// Realiza o logout do usuário
static Future<void> logout() async {
await _storage.delete(key: _tokenKey);
}
// Salva o token de autenticação criptografado
static Future<void> saveToken(String token) async {
final encryptedToken = _encrypt(token);
await _storage.write(key: _tokenKey, value: encryptedToken);
}
// Obtém o token de autenticação descriptografado
static Future<String?> getToken() async {
final encryptedToken = await _storage.read(key: _tokenKey);
if (encryptedToken == null) {
return null;
}
return _decrypt(encryptedToken);
}
// Método privado para obter o token de autenticação descriptografado
static Future<String?> _getToken() async {
final encryptedToken = await _storage.read(key: _tokenKey);
if (encryptedToken == null) {
return null;
}
return _decrypt(encryptedToken);
}
// Descriptografa uma string criptografada
static String _decrypt(String encrypted) {
final key = Key.fromUtf8(_encryptionKey);
final iv = IV.fromUtf8(_iv);
final encrypter = Encrypter(AES(key, mode: AESMode.cbc));
final decrypted =
encrypter.decrypt(Encrypted.fromBase64(encrypted), iv: iv);
return decrypted;
}
// Criptografa uma string
static String _encrypt(String value) {
final key = Key.fromUtf8(_encryptionKey);
final iv = IV.fromUtf8(_iv);
final encrypter = Encrypter(AES(key, mode: AESMode.cbc));
final encrypted = encrypter.encrypt(value, iv: iv);
return base64.encode(encrypted.bytes);
}
}Last updated