Stockage sécurisé des informations d'identification : votre solution pour gérer les noms d'utilisateur et les mots de passe dans votre application du Windows Store

Si vous n'avez pas encore entendu parler du Stockage sécurisé des informations d'identification qui est disponible pour les applications du Windows Store, il est temps d'aborder le sujet. Pourquoi ? Parce que, non seulement il simplifie le stockage et la récupération des informations d'identification de l'utilisateur, mais il les stocke de manière sécurisée et les informations d'identification suivent « gratuitement » les utilisateurs avec leur compte Microsoft.

Supposons que vous disposiez d'une application qui se connecte à un service pour accéder à des ressources protégées, telles que des fichiers multimédias, un réseau social, etc. Votre service requiert des informations de connexion pour chaque utilisateur. Vous avez donc intégré à votre application une interface utilisateur qui récupère le nom d'utilisateur et le mot de passe de l'utilisateur, qui sont ensuite utilisés pour connecter l'utilisateur au service. Tout fonctionne à merveille.

Vous voulez maintenant aller plus loin pour vos utilisateurs et stocker leurs informations d'identification de manière sécurisée afin qu'ils n'aient pas à se connecter à chaque fois qu'ils utilisent votre application. C'est là que le Stockage sécurisé des informations d'identification intervient. En quelques appels simples à l'API du Stockage sécurisé des informations d'identification, vous pouvez stocker le nom d'utilisateur et le mot de passe de votre utilisateur, puis les récupérer facilement et connecter l'utilisateur lors de sa prochaine ouverture de votre application.

Stockage sécurisé

Un des atouts du Stockage sécurisé des informations d'identification pour votre application est qu'il stocke les informations d'identification de l'utilisateur dans un lieu sécurisé et que ces informations d'identification sont chiffrées lorsqu'elles sont stockées sur le disque. Vous pourriez évidemment stocker les informations d'identification de l'utilisateur dans un fichier du stockage local de votre application, mais enregistrer ce type d'informations en texte brut présente une faille de sécurité considérable. Si le système de l'utilisateur est compromis d'une manière ou d'une autre, son nom d'utilisateur et son mot de passe sont facilement accessibles et utilisables. Si le nom d'utilisateur et le mot de passe sont stockés avec le Stockage sécurisé des informations d'identification, une source malveillante ne réussira qu'à récupérer un fichier chiffré.

Le Stockage sécurisé des informations d'identification est unique pour chaque utilisateur d'un PC Windows et l'accès aux informations d'identification est limité à l'application qui les a stockées. En d'autres termes, vous ne pouvez récupérer que les informations d'identification que vous avez stockées pour votre application. De même, aucune autre application ne peut obtenir les informations d'identification que votre application a stockées dans le stockage sécurisé.

Informations d'identification itinérantes

Autre avantage pour les utilisateurs : lorsque vous stockez leur nom d'utilisateur et leur mot de passe avec le Stockage sécurisé des informations d'identification, ces dernières suivent leur compte Microsoft sur n'importe quelle machine approuvée qu'ils utilisent avec ce compte Microsoft. Ceci rend votre application sécurisée encore plus pratique pour vos utilisateurs, car elle peut les connecter automatiquement (sans demander une nouvelle fois à l'utilisateur ses informations d'identification) sur n'importe quelle machine approuvée sur laquelle ils ont installé votre application et associé leur compte Microsoft.

Le fonctionnement est légèrement différent pour les comptes de domaine. Si des informations d'identification sont stockées avec votre compte Microsoft et que vous associez ce compte à un compte de domaine (par exemple le compte que vous utilisez au travail), vos informations d'identification suivent ce compte de domaine. Toutefois, les nouvelles informations d'identification ajoutées une fois que vous êtes connecté avec le compte de domaine ne sont pas itinérantes. Ceci garantit que les informations d'identification privées du domaine ne sont pas exposées à l'extérieur du domaine.

Stockage des informations d'identification de l'utilisateur

Le stockage des informations d'identification de l'utilisateur dans le Stockage sécurisé des informations d'identification est une procédure simple qui se décompose en deux étapes. Commencez par obtenir une référence au Stockage sécurisé des informations d'identification à l'aide de l'objet PasswordVault auprès de l'espace de noms Windows.Security.Credentials. Créez ensuite un objet PasswordCredential contenant un identifiant pour votre application, le nom d'utilisateur et le mot de passe, puis transmettez ces informations à la méthode PasswordVault.Add() en vue d'ajouter les informations d'identification dans le stockage sécurisé.

C#

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

JavaScript

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

Récupération des informations d'identification de l'utilisateur

Plusieurs options permettent de récupérer les informations d'identification de l'utilisateur dans le Stockage sécurisé des informations d'identification après avoir obtenu une référence à l'objet PasswordVault.

  • Vous pouvez récupérer toutes les informations d'identification que l'utilisateur a fournies pour votre application dans le Stockage sécurisé avec la méthode PasswordVault.RetrieveAll().
  • Si vous connaissez le nom d'utilisateur des informations d'identification, vous pouvez récupérer toutes les informations d'identification de ce nom d'utilisateur grâce à la méthode PasswordVault.FindAllByUserName().
  • Si vous connaissez le nom de ressource des informations d'identification, vous pouvez récupérer toutes les informations d'identification de ce nom de ressource grâce à la méthode PasswordVault.FindAllByResource().
  • Enfin, si vous connaissez à la fois le nom d'utilisateur et le nom de ressource d'informations d'identification en particulier, vous pouvez récupérer uniquement ces informations d'identification à l'aide de la méthode PasswordVault.Retrieve().

Examinons un exemple dans lequel nous avons stocké globalement le nom de ressource dans une application et où nous connectons l'utilisateur automatiquement si nous trouvons des informations d'identification qui lui correspondent. Si nous trouvons plusieurs informations d'identification pour l'utilisateur, nous lui demandons de choisir les informations par défaut à utiliser lors de la connexion.

C#

 private string resourceName = "My App";
private string defaultUserName;

private void 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);
}


private Windows.Security.Credentials.PasswordCredential GetCredentialFromLocker()
{
    Windows.Security.Credentials.PasswordCredential credential = null;

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

            defaultUserName = GetDefaultUserNameUI();

            credential = vault.Retrieve(resourceName, defaultUserName);
        }
    }

    return credential;
}

JavaScript

 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;
}

Suppression des informations d'identification de l'utilisateur

La suppression des informations d'identification de l'utilisateur dans le Stockage sécurisé des informations d'identification est également une procédure simple qui se décompose en deux étapes. Cette fois encore, obtenez une référence au Stockage sécurisé des informations d'identification à l'aide de l'objet PasswordVault auprès de l'espace de noms Windows.Security.Credentials. Ensuite, transmettez les informations d'identification que vous souhaitez supprimer à la méthode PasswordVault.Remove().

C#

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

JavaScript

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

Simplicité et sécurité

Comme vous pouvez le voir, le Stockage sécurisé des informations d'identification est une fonctionnalité facile à utiliser qui simplifie l'authentification des utilisateurs et le stockage des informations d'identification de ces utilisateurs pour une utilisation future, tout cela dans un mode hautement sécurisé.

Les autres rubriques concernant l'authentification des applications Windows 8 sont notamment celles sur le service Broker d'authentification Web, qui permet de récupérer un jeton d'authentification auprès d'un site Web (par exemple, OAuth) et celle sur la personnalisation de votre applications en fonction du compte Microsoft d'un utilisateur.

Pour plus d'informations, consultez

--Doug Rothaus, Développeur de contenu, Contenu de développement Windows

Remerciements tout particuliers à Yashar Bahman pour son aide et sa participation à ce billet.