Compartir a través de


Almacenamiento seguro

Examinar ejemplo. Examinar el ejemplo

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.

  1. Establezca el atributo android:fullBackupContent en AndroidManifest.xml:

    <application ...
        android:fullBackupContent="@xml/auto_backup_rules">
    </application>
    
  2. 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.