Partager via


Casier d’informations d’identification pour les applications Windows

Cet article explique comment les applications Windows peuvent utiliser Credential Locker pour stocker et récupérer en toute sécurité les informations d’identification de l’utilisateur et les parcourir entre les appareils avec le compte Microsoft de l’utilisateur.

Les API Windows Runtime (WinRT) pour l’accès Credential Locker font partie du Kit de développement logiciel (SDK) Windows. Ces API ont été créées pour une utilisation dans des applications plateforme Windows universelle (UWP), mais elles peuvent également être utilisées dans des applications WinUI ou dans des applications de bureau empaquetées, notamment WPF et Windows Forms. Pour plus d’informations sur l’utilisation des API WinRT dans votre application de bureau Windows, consultez Appeler les API Windows Runtime dans les applications de bureau.

Vue d’ensemble de l’exemple de scénario

Par exemple, vous disposez d’une application qui se connecte à un service pour accéder à des ressources protégées telles que des fichiers multimédias ou des réseaux sociaux. Votre service nécessite des informations de connexion pour chaque utilisateur. Vous avez intégré l’interface utilisateur à votre application qui obtient le nom d’utilisateur et le mot de passe de l’utilisateur, qui est ensuite utilisé pour connecter l’utilisateur dans le service. À l’aide de l’API Credential Locker, vous pouvez stocker le nom d’utilisateur et le mot de passe de votre utilisateur et les récupérer facilement et connecter automatiquement l’utilisateur à la prochaine ouverture de votre application, quel que soit l’appareil sur lequel il se trouve.

Les informations d’identification de l’utilisateur stockées dans Credential Locker n’expirent pas, ne sont pas affectées par ApplicationData.RoamingStorageQuota et ne seront pas effacées en raison d’une inactivité telle que les données itinérantes traditionnelles. Toutefois, vous ne pouvez stocker que jusqu’à 20 informations d’identification par application dans le coffre d’informations d’identification.

Credential Locker fonctionne un peu différemment pour les comptes de domaine. S’il existe des informations d’identification 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 se déplacent vers ce compte de domaine. Toutefois, toutes les nouvelles informations d’identification ajoutées lors de la connexion avec le compte de domaine ne seront pas itinérantes. Cela garantit que les informations d’identification privées pour le domaine ne sont pas exposées en dehors du domaine.

Stockage des informations d’identification de l’utilisateur

  1. Obtenez une référence à Credential Locker à l’aide de l’objet PasswordVault à partir de l’espace de noms Windows.Security.Credentials .
  2. Créez un objet PasswordCredential qui contient un identificateur pour votre application, le nom d’utilisateur et le mot de passe, puis transmettez-le à la méthode PasswordVault.Add pour ajouter les informations d’identification au casier.
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

Vous avez plusieurs options pour récupérer les informations d’identification de l’utilisateur à partir de Credential Locker une fois que vous avez une référence à l’objet PasswordVault .

  • Vous pouvez récupérer toutes les informations d’identification fournies par l’utilisateur pour votre application dans le casier avec la méthode PasswordVault.RetrieveAll .
  • Si vous connaissez le nom d’utilisateur des informations d’identification stockées, vous pouvez récupérer toutes les informations d’identification de ce nom d’utilisateur avec la méthode PasswordVault.FindAllByUserName .
  • Si vous connaissez le nom de la ressource pour les informations d’identification stockées, vous pouvez récupérer toutes les informations d’identification de ce nom de ressource avec la méthode PasswordVault.FindAllByResource .
  • Enfin, si vous connaissez à la fois le nom d’utilisateur et le nom de la ressource pour les informations d’identification, vous pouvez récupérer uniquement ces informations d’identification avec la méthode PasswordVault.Retrieve .

Examinons un exemple dans lequel nous avons stocké le nom de la ressource globalement dans une application et nous connectons l’utilisateur automatiquement si nous trouvons des informations d’identification pour eux. Si nous trouvons plusieurs informations d’identification pour le même utilisateur, nous demandons à l’utilisateur de sélectionner les informations d’identification par défaut à utiliser lors de la connexion.

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();

    IReadOnlyList<PasswordCredential> credentialList = null;

    try
    {
        credentialList = vault.FindAllByResource(resourceName);
    }
    catch(Exception)
    {
        return null;
    }

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

Suppression des informations d’identification de l’utilisateur

La suppression des informations d’identification utilisateur dans Credential Locker est également un processus rapide en deux étapes.

  1. Obtenez une référence à Credential Locker à l’aide de l’objet PasswordVault à partir de l’espace de noms Windows.Security.Credentials .
  2. Transmettez les informations d’identification que vous souhaitez supprimer à la méthode PasswordVault.Remove .
var vault = new Windows.Security.Credentials.PasswordVault();
vault.Remove(new Windows.Security.Credentials.PasswordCredential(
    "My App", username, password));

Bonnes pratiques

Utilisez uniquement le casier d’informations d’identification pour les mots de passe et non pour les objets blob de données volumineux.

Enregistrez les mots de passe dans le casier des informations d’identification uniquement si les critères suivants sont remplis :

  • L’utilisateur s’est connecté avec succès.
  • L’utilisateur a choisi d’enregistrer les mots de passe.

Ne stockez jamais les informations d’identification en texte brut à l’aide des données d’application ou des paramètres d’itinérance.