Hitelesítőadat-tároló Windows-alkalmazásokhoz

Ez a cikk azt ismerteti, hogyan használhatják a Windows-alkalmazások a hitelesítő adatokat tároló szekrényt a felhasználói hitelesítő adatok biztonságos tárolására és lekérésére, valamint a felhasználó Microsoft-fiókjával rendelkező eszközök közötti vándorlásra.

A Hitelesítő adatok tárolására szolgáló Windows Futtatókörnyezet (WinRT) API-k a Windows Software Development Kit (SDK) részét képezik. Ezek az API-k a WinUI-ban és más asztali alkalmazásokban, például a WPF-ben és a WinForm-ban is használhatók. A WinRT API-k windowsos asztali alkalmazásban való használatáról további információt a Windows futtatókörnyezeti API-k meghívása asztali alkalmazásokban című témakörben talál.

A mintaforgatókönyv áttekintése

Rendelkezik például egy olyan alkalmazással, amely egy szolgáltatáshoz csatlakozik, hogy hozzáférjen a védett erőforrásokhoz, például médiafájlokhoz vagy közösségi hálózatokhoz. A szolgáltatáshoz minden felhasználó bejelentkezési adatai szükségesek. Olyan felhasználói felületet épített be az alkalmazásba, amely lekéri a felhasználó felhasználónevét és jelszavát, amelyet aztán a felhasználó a szolgáltatásba való bejelentkezéshez használ. A Credential Locker API használatával tárolhatja a felhasználó felhasználónevét és jelszavát, és egyszerűen lekérheti őket, és automatikusan bejelentkeztetheti a felhasználót az alkalmazás következő megnyitásakor, függetlenül attól, hogy milyen eszközön van.

A hitelesítő adatok tárolójában tárolt felhasználói hitelesítő adatok nem járnak le, az ApplicationData.RoamingStorageQuotanem érinti őket, és a hagyományos roamingadatokhoz hasonló inaktivitás miatt nem törlődnek. Alkalmazásonként azonban legfeljebb 20 hitelesítő adatot tárolhat a Hitelesítő adatok tárolójában.

A hitelesítő adatok tárolója egy kicsit másképp működik a tartományi fiókok esetében. Ha vannak a Microsoft-fiókjában tárolt hitelesítő adatok, és ezt a fiókot egy tartományi fiókkal (például a munkahelyén használt fiókkal) társítja, a hitelesítő adatai erre a tartományi fiókra fognak áttérni. A tartományi fiókkal való bejelentkezéskor hozzáadott új hitelesítő adatok azonban nem lesznek elérhetők. Ez biztosítja, hogy a tartományhoz tartozó személyes hitelesítő adatok ne lesznek elérhetők a tartományon kívül.

Felhasználói hitelesítő adatok tárolása

  1. Szerezze be a Hitelesítő adatok tárolóra mutató hivatkozást a PasswordVault objektummal a Windows.Security.Credentials névtérből.
  2. Hozzon létre egy PasswordCredential objektumot, amely tartalmazza az alkalmazás azonosítóját, a felhasználónevet és a jelszót, majd adja át a PasswordVault.Add metódusnak, amellyel hozzáadhatja a hitelesítő adatokat a szekrényhez.
var vault = new Windows.Security.Credentials.PasswordVault();
vault.Add(new Windows.Security.Credentials.PasswordCredential(
    "My App", username, password));

Felhasználói hitelesítő adatok lekérése

A PasswordVault objektumra való hivatkozás után számos lehetősége van a felhasználói hitelesítő adatok lekérésére a hitelesítő adatok tárolójából.

  • A PasswordVault.RetrieveAll metódussal lekérheti a felhasználó által az alkalmazáshoz megadott összes hitelesítő adatot a szekrényben.
  • Ha ismeri a tárolt hitelesítő adatok felhasználónevét, a PasswordVault.FindAllByUserName metódussal lekérheti a felhasználónévhez tartozó összes hitelesítő adatot.
  • Ha ismeri a tárolt hitelesítő adatok erőforrásnevét, a PasswordVault.FindAllByResource metódussal lekérheti az adott erőforrásnévhez tartozó összes hitelesítő adatot.
  • Végül, ha ismeri a hitelesítő adatok felhasználónevét és erőforrásnevét is, a PasswordVault.Retrieve metódussal csak ezt a hitelesítő adatot kérheti le.

Nézzünk meg egy példát, amelyben globálisan tároltuk az erőforrás nevét egy alkalmazásban, és automatikusan bejelentkeztetjük a felhasználót, ha találunk nekik hitelesítő adatokat. Ha több hitelesítő adatot találunk ugyanahhoz a felhasználóhoz, megkérjük a felhasználót, hogy válasszon ki egy alapértelmezett hitelesítő adatot, amelyet a bejelentkezéskor használni szeretne.

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

Felhasználói hitelesítő adatok törlése

A hitelesítő adatok törlése a Hitelesítő Adattárban szintén gyors, kétlépéses folyamat.

  1. Szerezze be a Hitelesítő adatok tárolóra mutató hivatkozást a PasswordVault objektummal a Windows.Security.Credentials névtérből.
  2. Adja meg a törölni kívánt hitelesítő adatot a PasswordVault.Remove metódusnak.
var vault = new Windows.Security.Credentials.PasswordVault();
vault.Remove(new Windows.Security.Credentials.PasswordCredential(
    "My App", username, password));

Bevált gyakorlatok

Csak a hitelesítőadat-tárolót használja jelszavakhoz, nagyobb adatblobokhoz nem.

Csak akkor mentse a jelszavakat a hitelesítőadat-tárolóba, ha az alábbi feltételek teljesülnek:

  • A felhasználó sikeresen bejelentkezett.
  • A felhasználó a jelszavak mentését választotta.

Soha ne tároljon hitelesítő adatokat egyszerű szöveges formátumban alkalmazásadatok vagy roamingbeállítások használatával.