Cofre de credenciais
Este artigo descreve como aplicativos UWP (Plataforma Universal do Windows) podem usar o Cofre de credenciais para armazenar com segurança e recuperar credenciais do usuário, e alternar entre os dispositivos com a conta da Microsoft do usuário.
Por exemplo, você possui um aplicativo que se conecta a um serviço para acessar recursos protegidos, como arquivos de mídia ou rede social. O seu serviço requer informações de logon para cada usuário. Você criou a interface do usuário em seu aplicativo que obtém o nome do usuário e a senha que são então usados para fazer logon do usuário no serviço. Usando a API do Cofre de credenciais, você pode armazenar o nome do usuário e a senha do seu usuário e recuperá-los com facilidade e fazer logon do usuário automaticamente na próxima vez em que ele abrir o aplicativo, independentemente do aplicativo em que ele está.
As credenciais do usuário armazenadas no CredentialLocker não expiram, não são afetadas por ApplicationData.RoamingStorageQuota e não serão limpas devido a inatividade como dados de roaming tradicionais. No entanto, você só pode armazenar até 20 credenciais por app no CredentialLocker.
O Cofre de credenciais funciona um pouco diferente para contas de domínio. Se houver credenciais armazenadas à sua conta da Microsoft e você associar essa conta a uma conta de domínio (como a conta que você usa no trabalho), suas credenciais se moverão para essa conta de domínio. No entanto, quaisquer credenciais novas adicionadas ao se conectar à conta de domínio não se moverão. Isso garante que credenciais privadas para o domínio não serão expostas fora do domínio.
Armazenando credenciais do usuário
- Obtenha uma referência para o Cofre de credenciais usando o objeto PasswordVault do namespace Windows.Security.Credentials.
- Crie um objeto PasswordCredential que contenha um identificador para o seu aplicativo, o nome de usuário e a senha, e passe isso para o método PasswordVault.Add para adicionar a credencial ao cofre.
var vault = new Windows.Security.Credentials.PasswordVault();
vault.Add(new Windows.Security.Credentials.PasswordCredential(
"My App", username, password));
Recuperando credenciais do usuário
Você tem várias opções para recuperar credenciais do usuário do Cofre de credenciais depois que tiver uma referência para o objeto PasswordVault.
É possível recuperar todas as credenciais do usuário fornecidas para o seu aplicativo no cofre com o método PasswordVault.RetrieveAll.
Se você souber o nome do usuário para as credenciais armazenadas, poderá recuperar todas elas para esse nome de usuário com o método PasswordVault.FindAllByUserName.
Se você souber o nome do recurso para as credenciais armazenadas, poderá recuperar todas elas para esse nome de recurso com o método PasswordVault.FindAllByResource.
Finalmente, se você souber o nome do usuário e o nome do recurso de uma credencial, poderá recuperar apenas essa credencial, com o método PasswordVault.Retrieve.
Vejamos um exemplo em que armazenamos o nome do recurso globalmente em um aplicativo e faremos logon automaticamente do usuário se encontrarmos uma credencial para ele. No caso de encontrarmos várias credenciais para o mesmo usuário, pediremos a ele para selecionar uma credencial padrão a ser usada ao fazer logon.
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;
}
Excluindo credenciais do usuário
Eliminar credenciais do usuário no Cofre de credenciais é um processo rápido em duas etapas.
Obtenha uma referência para o Cofre de credenciais usando o objeto PasswordVault do namespace Windows.Security.Credentials.
Passe a credencial a ser excluída para o método PasswordVault.Remove.
var vault = new Windows.Security.Credentials.PasswordVault();
vault.Remove(new Windows.Security.Credentials.PasswordCredential(
"My App", username, password));
Práticas recomendadas
Use o cofre de credenciais para senhas e não para blobs de dados maiores.
Salve senhas no cofre de credenciais somente se os seguintes critérios forem atendidos:
- O usuário entrou com êxito.
- O usuário optou por salvar senhas.
Nunca armazene credenciais em texto sem formatação usando dados de aplicativo ou configurações de roaming.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de