Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este artigo descreve como os aplicativos do Windows podem usar o Cofre de Credenciais para armazenar e recuperar credenciais de usuário com segurança e percorrê-las entre dispositivos com a conta da Microsoft do usuário.
As APIs do Windows Runtime (WinRT) para acesso ao Credential Locker fazem parte do Windows Software Development Kit (SDK). Estas APIs podem ser usadas no WinUI, bem como noutras aplicações de ambiente de trabalho, como WPF e WinForms. Para obter mais informações sobre como usar APIs do WinRT em seu aplicativo da área de trabalho do Windows, consulte Chamar APIs do Tempo de Execução do Windows em aplicativos da área de trabalho.
Visão geral do cenário de exemplo
Por exemplo, tens uma aplicação que se liga a um serviço para aceder a recursos protegidos, como ficheiros multimédia ou redes sociais. O seu serviço requer informações de login para cada utilizador. Incorporou uma interface na sua aplicação que recebe o nome de utilizador e a palavra-passe do utilizador, que depois são usados para iniciar sessão no serviço. Usando a API do Credential Locker, pode guardar o nome de utilizador e a palavra-passe do seu utilizador, recuperá-los facilmente e iniciar sessão automaticamente na próxima vez que abrir a sua aplicação, independentemente do dispositivo em que esteja.
As credenciais de utilizador armazenadas no Credential Locker não expiram, não são afetadas pelo ApplicationData.RoamingStorageQuota e não serão limpas devido à inatividade, como acontece com os dados tradicionais de roaming. No entanto, só pode armazenar até 20 credenciais por aplicação no Credential Locker.
O Credential Locker funciona de forma um pouco diferente para contas de domínio. Se houver credenciais armazenadas com a sua conta Microsoft, e associares essa conta a uma conta de domínio (como a conta que usas no trabalho), as tuas credenciais irão mover-se para essa conta de domínio. No entanto, quaisquer novas credenciais adicionadas ao iniciar sessão com a conta do domínio não irão fazer roaming. Isto garante que as credenciais privadas do domínio não são expostas fora do domínio.
Armazenar credenciais de utilizador
- Obtenha uma referência a Credential Locker usando o objeto PasswordVault do espaço de nomes Windows.Security.Credentials.
- Crie um objeto PasswordCredential que contenha um identificador para a sua aplicação, o nome de utilizador e a palavra-passe, e passe isso para o método PasswordVault.Add para adicionar a credencial ao locker.
var vault = new Windows.Security.Credentials.PasswordVault();
vault.Add(new Windows.Security.Credentials.PasswordCredential(
"My App", username, password));
Recuperação de credenciais de utilizador
Tem várias opções para recuperar credenciais de utilizador do Credential Locker depois de ter uma referência ao objeto PasswordVault .
- Pode recuperar todas as credenciais que o utilizador forneceu para a sua aplicação no armazenamento com o método PasswordVault.RetrieveAll.
- Se souber o nome de utilizador das credenciais armazenadas, pode recuperar todas as credenciais desse nome de utilizador com o método PasswordVault.FindAllByUserName .
- Se souberes o nome do recurso para as credenciais armazenadas, podes recuperar todas as credenciais desse nome de recurso com o método PasswordVault.FindAllByResource .
- Por fim, se souber tanto o nome de utilizador como o nome do recurso de uma credencial, pode obter apenas essa credencial com o método PasswordVault.Retrieve .
Vamos ver um exemplo em que armazenamos o nome do recurso globalmente numa aplicação e logamos automaticamente o utilizador se encontrarmos uma credencial para ele. Se encontrarmos várias credenciais para o mesmo utilizador, pedimos ao utilizador que selecione uma credencial padrão para usar ao iniciar sessão.
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;
}
Eliminar credenciais de utilizador
Eliminar credenciais de utilizador no Credential Locker é também um processo rápido, em dois passos.
- Obtenha uma referência ao Credential Locker usando o objeto PasswordVault do espaço de nomes Windows.Security.Credentials.
- Passa a credencial que queres eliminar para o método PasswordVault.Remove .
var vault = new Windows.Security.Credentials.PasswordVault();
vault.Remove(new Windows.Security.Credentials.PasswordCredential(
"My App", username, password));
Melhores práticas
Usa o bloqueio de credenciais apenas para palavras-passe e não para blocos de dados maiores.
Guarde as palavras-passe no bloqueio de credenciais apenas se forem cumpridos os seguintes critérios:
- O utilizador iniciou sessão com sucesso.
- O utilizador optou por guardar as palavras-passe.
Nunca guarde credenciais em texto simples usando dados da aplicação ou definições de roaming.
Conteúdo relacionado
Windows developer