Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano, jak aplikacje systemu Windows mogą używać funkcji Credential Locker do bezpiecznego przechowywania i pobierania poświadczeń użytkownika oraz roamingu ich między urządzeniami przy użyciu konta Microsoft użytkownika.
Interfejsy API środowiska uruchomieniowego systemu Windows (WinRT) dla dostępu do funkcji Credential Locker są częścią zestawu Windows Software Development Kit (SDK). Te interfejsy API mogą być używane w systemie WinUI, a także w innych aplikacjach klasycznych, takich jak WPF i WinForms. Aby uzyskać więcej informacji na temat używania interfejsów API WinRT w aplikacji klasycznej systemu Windows, zobacz Wywoływanie interfejsów API środowiska uruchomieniowego systemu Windows w aplikacjach klasycznych.
Omówienie przykładowego scenariusza
Na przykład masz aplikację, która łączy się z usługą w celu uzyskania dostępu do chronionych zasobów, takich jak pliki multimedialne lub sieci społecznościowe. Usługa wymaga informacji logowania dla każdego użytkownika. Zbudowałeś interfejs użytkownika w swojej aplikacji, który pobiera nazwę użytkownika i hasło, a następnie jest używany do zalogowania użytkownika do usługi. Korzystając z interfejsu API funkcji Credential Locker, możesz przechowywać nazwę użytkownika i hasło dla użytkownika, a następnie łatwo je pobrać i zalogować użytkownika automatycznie przy następnym otwarciu aplikacji, niezależnie od tego, na jakim urządzeniu się znajduje.
Poświadczenia użytkownika przechowywane w funkcji Credential Locker nie wygasają, nie są dotknięte przez ApplicationData.RoamingStorageQuota i nie zostaną wyczyszczone z powodu nieaktywności, w przeciwieństwie do tradycyjnych danych roamingowych. Jednak w funkcji Credential Locker można przechowywać maksymalnie 20 poświadczeń na aplikację.
Funkcja Credential Locker działa nieco inaczej w przypadku kont domeny. Jeśli istnieją poświadczenia przechowywane przy użyciu konta Microsoft i skojarzysz to konto z kontem domeny (takim jak konto używane w pracy), poświadczenia będą przenoszone do tego konta domeny. Jednak wszystkie nowe poświadczenia dodane po zalogowaniu się przy użyciu konta domeny nie będą wędrować. Gwarantuje to, że poświadczenia prywatne dla domeny nie są uwidocznione poza domeną.
Przechowywanie poświadczeń użytkownika
- Uzyskaj odwołanie do funkcji Credential Locker przy użyciu obiektu PasswordVault z przestrzeni nazw Windows.Security.Credentials .
- Utwórz obiekt PasswordCredential zawierający identyfikator aplikacji, nazwę użytkownika i hasło, a następnie przekaż go do metody PasswordVault.Add , aby dodać poświadczenia do funkcji locker.
var vault = new Windows.Security.Credentials.PasswordVault();
vault.Add(new Windows.Security.Credentials.PasswordCredential(
"My App", username, password));
Pobieranie poświadczeń użytkownika
Masz kilka opcji pobierania poświadczeń użytkownika z szafy poświadczeń, gdy masz odwołanie do obiektu PasswordVault.
- Możesz pobrać wszystkie poświadczenia podane przez użytkownika dla aplikacji w funkcji locker za pomocą metody PasswordVault.RetrieveAll .
- Jeśli znasz nazwę użytkownika, którego poświadczenia są przechowywane, możesz pobrać wszystkie poświadczenia dla tej nazwy użytkownika za pomocą metody PasswordVault.FindAllByUserName.
- Jeśli znasz nazwę zasobu dla przechowywanych poświadczeń, możesz pobrać wszystkie poświadczenia dla tej nazwy zasobu za pomocą metody PasswordVault.FindAllByResource .
- Na koniec, jeśli znasz zarówno nazwę użytkownika, jak i nazwę zasobu dla poświadczenia, możesz pobrać tylko to poświadczenie za pomocą metody PasswordVault.Retrieve .
Przyjrzyjmy się przykładowi, w którym nazwa zasobu jest przechowywana globalnie w aplikacji i logujemy użytkownika automatycznie, jeśli znajdziemy dla nich poświadczenia. Jeśli znajdziemy wiele poświadczeń dla tego samego użytkownika, poprosimy użytkownika o wybranie domyślnego poświadczenia do użycia podczas logowania.
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;
}
Usuwanie poświadczeń użytkownika
Usuwanie poświadczeń użytkownika w funkcji Credential Locker jest również szybkim procesem dwuetapowym.
- Uzyskaj odwołanie do funkcji Credential Locker przy użyciu obiektu PasswordVault z przestrzeni nazw Windows.Security.Credentials .
- Przekaż poświadczenia, które chcesz usunąć, do metody PasswordVault.Remove.
var vault = new Windows.Security.Credentials.PasswordVault();
vault.Remove(new Windows.Security.Credentials.PasswordCredential(
"My App", username, password));
Najlepsze rozwiązania
Używaj tylko sejfu poświadczeń dla haseł, a nie dla dużych zbiorów danych.
Zapisz hasła w skrytce poświadczeń tylko wtedy, gdy spełnione są następujące kryteria:
- Użytkownik pomyślnie się zalogował.
- Użytkownik zdecydował się zapisać hasła.
Nigdy nie przechowuj poświadczeń w postaci zwykłego tekstu przy użyciu danych aplikacji lub ustawień roamingu.