Almacenamiento seguro
En este artículo se describe cómo puedes usar la interfaz ISecureStorage
de .NET Multi-platform App UI (.NET MAUI). Esta interfaz ayuda a almacenar de forma segura pares clave-valor simples.
La implementación predeterminada de la interfaz ISecureStorage
está disponible a través de la propiedad SecureStorage.Default
. Tanto la interfaz ISecureStorage
como la clase SecureStorage
están contenidas en el espacio de nombres Microsoft.Maui.Storage
.
Introducción
Para acceder a la funcionalidad SecureStorage, se requiere la siguiente configuración específica para la plataforma.
Copia de seguridad para aplicaciones es una característica de Android 6.0 (nivel de API 23) y versiones posteriores que crea copias de seguridad de los datos de aplicación del usuario (preferencias compartidas, archivos en el almacenamiento interno de la aplicación y otros archivos específicos). Los datos se restauran cuando se reinstala o instala una aplicación en un dispositivo nuevo. Esto puede afectar a SecureStorage
, que utiliza las preferencias compartidas de las que se creó una copia de seguridad y que no se pueden descifrar cuando se realiza la restauración. .NET MAUI controla automáticamente este caso quitando la clave para que se pueda restablecer. Como alternativa, puedes deshabilitar la copia de seguridad automática.
Habilitación o deshabilitación de copia de seguridad
Puedes elegir deshabilitar Copia de seguridad automática para toda la aplicación al establecer el valor android:allowBackup
en false en el archivo AndroidManifest.xml. Este enfoque solo se recomienda si planea restaurar los datos de otra manera.
<manifest ... >
...
<application android:allowBackup="false" ... >
...
</application>
</manifest>
Copia de seguridad selectiva
Es posible configurar Copia de seguridad automática para deshabilitar la copia de seguridad de contenido específico. Puede crear un conjunto de reglas personalizadas para excluir los elementos SecureStore
de la copia de seguridad.
Establezca el atributo
android:fullBackupContent
en AndroidManifest.xml:<application ... android:fullBackupContent="@xml/auto_backup_rules"> </application>
Crea un archivo XML denominado auto_backup_rules.xml en el directorio Resources/xml con la acción de compilación de AndroidResource. Establece este contenido que incluye todas las preferencias compartidas, excepto para
SecureStorage
:<?xml version="1.0" encoding="utf-8"?> <full-backup-content> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="${applicationId}.microsoft.maui.essentials.preferences.xml"/> </full-backup-content>
Uso de almacenamiento seguro
Los ejemplos de código siguientes muestran cómo usar almacenamiento seguro.
Sugerencia
Es posible que se produzca una excepción al llamar a GetAsync
o SetAsync
. Esto puede deberse a que un dispositivo no admita el almacenamiento seguro, las claves de cifrado cambiantes o los daños en los datos. Es mejor controlar esto mediante la eliminación y posterior reincorporación del valor, si es posible.
Escribe un valor
Para guardar un valor para una clave determinada en el almacenamiento seguro:
await SecureStorage.Default.SetAsync("oauth_token", "secret-oauth-token-value");
Lee un valor
Para recuperar un valor desde el almacenamiento seguro:
string oauthToken = await SecureStorage.Default.GetAsync("oauth_token");
if (oauthToken == null)
{
// No value is associated with the key "oauth_token"
}
Sugerencia
Si no hay ningún valor asociado a la clave, GetAsync
devuelve null
.
Eliminación de valores
Para quitar un valor específico, quita la clave:
bool success = SecureStorage.Default.Remove("oauth_token");
Para quitar todos los valores, usa el método RemoveAll
:
SecureStorage.Default.RemoveAll();
Diferencias entre plataformas
En esta sección se describen las diferencias específicas de la plataforma con la API de almacenamiento seguro.
SecureStorage
usa la API Preferencias y sigue la misma persistencia de datos que se describe en la documentación sobre Preferencias, con un nombre de archivo de [YOUR-APP-PACKAGE-ID].microsoft.maui.essentials.preferences. Pero los datos se cifran con la clase Android EncryptedSharedPreferences
, desde la biblioteca de seguridad de Android, que encapsula la clase SharedPreferences
y cifra automáticamente las claves y los valores usando un enfoque de dos esquemas:
- Las claves se cifran de forma determinista, para que la clave se pueda cifrar y buscar correctamente.
- Los valores se cifran de forma no determinista mediante AES-256 GCM.
Para obtener más información sobre la biblioteca de seguridad de Android, consulta Cómo trabajar con datos de forma más segura en developer.android.com.
Limitaciones
El rendimiento puede verse afectado si se almacena grandes cantidades de texto, ya que la API se diseñó para almacenar pequeñas cantidades de texto.