Bagikan melalui


Loker info masuk untuk aplikasi Windows

Artikel ini menjelaskan bagaimana aplikasi Windows dapat menggunakan Credential Locker untuk menyimpan dan mengambil kredensial pengguna dengan aman, dan menjelajahnya di antara perangkat dengan akun Microsoft pengguna.

API Windows Runtime (WinRT) untuk akses Credential Locker adalah bagian dari Windows Software Development Kit (SDK). API ini dibuat untuk digunakan dalam aplikasi Platform Windows Universal (UWP), tetapi juga dapat digunakan di aplikasi WinUI atau di aplikasi desktop paket, termasuk WPF dan Formulir Windows. Untuk informasi selengkapnya tentang menggunakan API WinRT di aplikasi desktop Windows Anda, lihat Memanggil API Windows Runtime di aplikasi desktop.

Gambaran umum skenario sampel

Misalnya, Anda memiliki aplikasi yang terhubung ke layanan untuk mengakses sumber daya yang dilindungi seperti file media, atau jejaring sosial. Layanan Anda memerlukan informasi masuk untuk setiap pengguna. Anda telah membuat UI ke dalam aplikasi yang mendapatkan nama pengguna dan kata sandi untuk pengguna, yang kemudian digunakan untuk memasukkan pengguna ke layanan. Dengan menggunakan API Credential Locker, Anda dapat menyimpan nama pengguna dan kata sandi untuk pengguna Anda dan dengan mudah mengambilnya dan memasukkan pengguna secara otomatis saat berikutnya mereka membuka aplikasi Anda, terlepas dari perangkat apa yang mereka gunakan.

Kredensial pengguna yang disimpan di Credential Locker tidak kedaluwarsa, tidak terpengaruh oleh ApplicationData.RoamingStorageQuota, dan tidak akan dihapus karena tidak aktif seperti data roaming tradisional. Namun, Anda hanya dapat menyimpan hingga 20 kredensial per aplikasi di Credential Locker.

Credential Locker berfungsi sedikit berbeda untuk akun domain. Jika ada kredensial yang disimpan dengan akun Microsoft Anda, dan Anda mengaitkan akun tersebut dengan akun domain (seperti akun yang Anda gunakan di tempat kerja), kredensial Anda akan menjelajah ke akun domain tersebut. Namun, kredensial baru apa pun yang ditambahkan saat masuk dengan akun domain tidak akan menjelajah. Ini memastikan bahwa kredensial privat untuk domain tidak diekspos di luar domain.

Menyimpan kredensial pengguna

  1. Dapatkan referensi ke Credential Locker menggunakan objek PasswordVault dari namespace Windows.Security.Credentials .
  2. Buat objek PasswordCredential yang berisi pengidentifikasi untuk aplikasi Anda, nama pengguna dan kata sandi, dan teruskan ke metode PasswordVault.Add untuk menambahkan kredensial ke loker.
var vault = new Windows.Security.Credentials.PasswordVault();
vault.Add(new Windows.Security.Credentials.PasswordCredential(
    "My App", username, password));

Mengambil kredensial pengguna

Anda memiliki beberapa opsi untuk mengambil kredensial pengguna dari Credential Locker setelah Anda memiliki referensi ke objek PasswordVault .

Mari kita lihat contoh di mana kita telah menyimpan nama sumber daya secara global dalam aplikasi dan kita mencatat pengguna secara otomatis jika kita menemukan kredensial untuk mereka. Jika kami menemukan beberapa kredensial untuk pengguna yang sama, kami meminta pengguna untuk memilih kredensial default yang akan digunakan saat masuk.

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

Menghapus kredensial pengguna

Menghapus kredensial pengguna di Credential Locker juga merupakan proses dua langkah yang cepat.

  1. Dapatkan referensi ke Credential Locker menggunakan objek PasswordVault dari namespace Windows.Security.Credentials .
  2. Teruskan kredensial yang ingin Anda hapus ke metode PasswordVault.Remove .
var vault = new Windows.Security.Credentials.PasswordVault();
vault.Remove(new Windows.Security.Credentials.PasswordCredential(
    "My App", username, password));

Praktik terbaik

Hanya gunakan loker kredensial untuk kata sandi dan bukan untuk blob data yang lebih besar.

Simpan kata sandi di loker info masuk hanya jika kriteria berikut terpenuhi:

  • Pengguna telah berhasil masuk.
  • Pengguna telah memilih untuk menyimpan kata sandi.

Jangan pernah menyimpan kredensial dalam teks biasa menggunakan data aplikasi atau pengaturan roaming.