2 votes

Effacer les informations d'identification stockées dans l'application Windows universelle

J'utilise Windows.Web.Http.HttpClient dans la plate-forme Windows universelle (UWP). L'URL nécessite des informations d'identification de domaine (NTLM), de sorte que Windows ouvre une fenêtre contextuelle auto-définie pour le nom d'utilisateur et le mot de passe. L'application a besoin d'une fonctionnalité pour se déconnecter mais je n'ai pas trouvé de code fonctionnel qui permette d'effacer les informations d'identification stockées par UWP.

J'ai essayé d'effacer les informations d'identification de Windows.Security.Credentials.PasswordVault en utilisant le code suivant mais cela n'a pas fonctionné :

        var cred = new Windows.Security.Credentials.PasswordVault(); 
        var pwds = cred.RetrieveAll();
        foreach(var pwd in pwds)
        {
            pwd.RetrievePassword();                 
            cred.Remove(pwd);
        }

J'efface également les cookies comme indiqué ci-dessous :

        var filter = new HttpBaseProtocolFilter();            
        var cookieManager = filter.CookieManager;
        HttpCookieCollection cookies = cookieManager.GetCookies(uri);            
        foreach (HttpCookie u in cookies)
        {
            cookieManager.DeleteCookie(u);
        }

Des suggestions, s'il vous plaît ?

3voto

Peter Torr - MSFT Points 8895

Cette fonction n'est pas disponible dans Windows 10, mais le sera dans la mise à jour Anniversaire :

var filter = new HttpBaseProtocolFilter();
filter.ClearAuthenticationCache();

Vous pouvez en savoir plus sur la page MSDN et si vous avez une version Insider Preview / SDK postérieure à 14295, vous devriez pouvoir le tester.

1voto

Lennard Wolf Points 78

Veuillez consulter :

https://docs.microsoft.com/en-us/Windows/uwp/security/credential-locker#deleting-user-credentials

La fonction de suppression des données d'identification est décrite.

Il semble que la méthode public IReadOnlyList<PasswordCredential> RetrieveAll() que vous utilisez renvoie une collection en lecture seule. Ses valeurs ne peuvent donc pas être supprimées.

Essayez d'accéder aux informations d'identification, par exemple avec public PasswordCredential Retrieve(String resource, String userName) . Le type de retour, qui n'est pas en lecture seule, devrait vous permettre d'utiliser les méthodes de suppression.

Si vous souhaitez supprimer toutes les informations d'identification pour un nom de ressource spécifique, cette solution de contournement fonctionne même dans les anciennes versions de Windows 10 :

private void RemoveAllCredentials(PasswordVault passwordVault)
    {
        //Get all credentials.
        List<PasswordCredential> passwordCredentials = new List<PasswordCredential>();
        var credentials = passwordVault.RetrieveAll();
        foreach (PasswordCredential credential in credentials)
        {
            if (credential.Resource.Equals("ResourceName"))
            {
                passwordCredentials.Add(
                    passwordVault.Retrieve(credential.Resource, credential.UserName));
            }
        }
        foreach (PasswordCredential entry in passwordCredentials)
        {
            passwordVault.Remove(entry);
        }
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X