Compartir a través de


Almacenar credenciales de usuario con la caja de seguridad de credenciales (HTML)

[ Este artículo está destinado a desarrolladores de Windows 8.x y Windows Phone 8.x que escriben aplicaciones de Windows en tiempo de ejecución. Si estás desarrollando para Windows 10, consulta la documentación más reciente

La caja de seguridad de credenciales simplifica la tarea de almacenar y recuperar las credenciales del usuario de forma segura, y permite incluir las credenciales del usuario en el perfil móvil de una cuenta Microsoft del usuario sin ningún coste.

Supongamos que tienes una aplicación que se conecta a un servicio para acceder a recursos protegidos como archivos multimedia, redes sociales, etc. Tu servicio necesita la información de inicio de sesión de cada usuario. Por lo tanto, has incorporado una interfaz de usuario a tu aplicación que obtiene el nombre de usuario y la contraseña que después se usan para iniciar la sesión del usuario en el servicio. Todo funciona perfectamente.

Ahora quieres ir un poco más allá y guardar la información de inicio de sesión de los usuarios para que no tengan que iniciar sesión cada vez que usan tu aplicación. Incorpora la caja de seguridad de credenciales. Con unas pocas llamadas a la API de la caja de seguridad de credenciales, puedes guardar el nombre de usuario y la contraseña de tu usuario y recuperarlos fácilmente para iniciar la sesión del usuario la próxima vez que abra tu aplicación.

Almacenamiento seguro

La gran ventaja que aporta la caja de seguridad de credenciales a tu aplicación es que guarda las credenciales del usuario en una ubicación segura, y la información de las credenciales se cifra cuando se guarda en el disco. Claro que podrías guardar las credenciales del usuario en un almacenamiento local para tu aplicación, pero guardar credenciales de usuario como texto sin formato presenta un riesgo considerable para la seguridad. Si el sistema de un usuario queda expuesto de alguna manera, su nombre de usuario y su contraseña son fáciles de acceder y manipular. Si el nombre de usuario y la contraseña se almacenan con la caja de seguridad de credenciales, lo más que un origen malintencionado podría hacer es obtener un archivo cifrado.

Perfiles móviles de credenciales

Como ventaja adicional para tus usuarios, cuando almacenas su nombre de usuario y su contraseña con la caja de seguridad de credenciales, las credenciales almacenadas se incluyen en el perfil móvil de su cuenta Microsoft para ir a otros equipos de confianza que usen con esa cuenta Microsoft. Esto hace que tu aplicación segura resulte aún más cómoda para los usuarios, ya que puede iniciar su sesión automáticamente sin tener que volver a pedirles las credenciales, desde cualquier equipo de confianza donde hayan instalado tu aplicación y que esté asociado a su cuenta Microsoft.

Las cosas son ligeramente diferentes para las cuentas de dominio. Si se guardan credenciales con tu cuenta Microsoft y asocias esa cuenta con una cuenta de dominio (como la cuenta que usas en el trabajo), las credenciales se incluirán en el perfil móvil de esa cuenta de dominio. Sin embargo, las nuevas credenciales que se agregan al iniciar sesión con la cuenta de dominio no se incluirán en el perfil móvil. De esta manera se garantiza que las credenciales privadas del dominio no queden expuestas fuera del mismo.

Tecnologías

Instrucciones

Paso 1: Almacenar credenciales de usuario

Almacenar las credenciales de usuario en la caja de seguridad de credenciales es un proceso rápido en dos pasos.

  1. Obtén una referencia a la caja de seguridad de credenciales usando el objeto PasswordVault del espacio de nombres Windows.Security.Credentials.
  2. Crea un objeto PasswordCredential que contenga un identificador para tu aplicación, el nombre de usuario y la contraseña, y pásalo al método PasswordVault.Add para agregar la credencial a la caja de seguridad de credenciales.
var vault = new Windows.Security.Credentials.PasswordVault();
vault.add(new Windows.Security.Credentials.PasswordCredential(
    "My App", username, password));

Paso 2: Recuperar credenciales de usuario

Tienes varias maneras para recuperar credenciales de usuario de la caja de seguridad de credenciales una vez que tengas una referencia al objeto PasswordVault.

  • Puedes usar el método PasswordVault.RetrieveAll para recuperar todas las credenciales que el usuario ha proporcionado a la caja de seguridad para tu aplicación.

  • Si conoces el nombre de usuario de las credenciales almacenadas, puedes recuperar todas las credenciales de ese nombre de usuario con el método PasswordVault.FindAllByUserName.

  • Si conoces el nombre de recurso de las credenciales almacenadas, puedes recuperar todas las credenciales de ese nombre de recurso con el método PasswordVault.FindAllByResource.

  • Por último, si conoces el nombre de usuario y el nombre de recurso de una credencial, puedes recuperar solo esa credencial con el método PasswordVault.Retrieve.

Veamos un ejemplo en el que hemos almacenado el nombre de recurso globalmente en una aplicación e iniciamos la sesión del usuario automáticamente si encontramos unas credenciales para él. Si se encuentran varias credenciales para el usuario, le pedimos que seleccione la credencial predeterminada que se usará para iniciar sesión.

var resourceName = "My App";
var defaultUserName;

function login() {
    var loginCredential = getCredentialFromLocker();

    if (loginCredential != null) {
        // There is a credential stored in the locker.
        // Populate the Password property of the credential
        // for automatic login.
        loginCredential.retrievePassword();
    } else {
        // There is no credential stored in the locker.
        // Display UI to get user credentials.
        loginCredential = getLoginCredentialUI();
    }

    // Log the user in.
    serverLogin(loginCredential.userName, loginCredential.password);
}


function GetCredentialFromLocker() {
    var credential = null;

    var vault = new Windows.Security.Credentials.PasswordVault();
    var credentialList = vault.findAllByResource(resourceName);
    if (credentialList.length > 0) {
        if (credentialList.length == 1) {
            credential = credentialList[0];
        } else {
            // When there are multiple usernames,
            // retrieve the default username. If one doesn’t
            // exist, display UI to have the user select
            // a default username.

            defaultUserName = getDefaultUserNameUI();
            credential = vault.retrieve(resourceName, defaultUserName);
        }
    }

    return credential;
}

Paso 3: Eliminar credenciales de usuario

Eliminar las credenciales de usuario en la caja de seguridad de credenciales también es un proceso rápido en dos pasos.

  1. Obtén una referencia a la caja de seguridad de credenciales usando el objeto PasswordVault del espacio de nombres Windows.Security.Credentials.

  2. Pasa las credenciales que quieres eliminar al método PasswordVault.Remove.

var vault = new Windows.Security.Credentials.PasswordVault();
vault.remove(new Windows.Security.Credentials.PasswordCredential(
    "My App", username, password));

Observaciones

Como puedes ver, la caja de seguridad de credenciales es una característica fácil de usar que simplifica la tarea de autenticar usuarios y almacenar esas credenciales de usuario para usos futuros, todo de una forma muy segura.

Procedimiento recomendado

Usa la caja de seguridad de credenciales solo para contraseñas y no para objetos binarios de datos más grandes.

Guarda las contraseñas en la caja de seguridad de credenciales solamente si se cumplen estos criterios:

  • El usuario inicia sesión correctamente.
  • El usuario decidió guardar las contraseñas.

Temas relacionados

Muestra de la caja de seguridad de credenciales

Autenticación e identidad de usuario

Windows.Security.Credentials