Для хранения логинов и паролей в Windows 8 приложениях, Microsoft представила новый API, называемый PasswordVault (Хранилище паролей). При добавлении в это хранилище, происходит автоматическое шифрование данных, что очень удобно, если вы не хотите изобретать велосипед. Это только основы, для всех методов ссылка на MSDN
Для удобного взаимодействия с PasswordVault, я сделал 3 простых метода:
- Метод добавления данных (SaveCredential)
- Получения данных (GetCredential)
- Удаления данных (RemoveCredential)
Особенности:
В Windows каждому приложению отведен ресурс, который имеет имя. В нашем случае, я назвал его MyAppCredential. Это имя мы используем во всех методах при обращении к хранилищу.
- Помним, что для использования PasswordVault, требуется подключение библиотеки
Windows.Security.Credentials
- Для получения пароля или удаления данных, нужно знать логин
- Если не найдены данные, то выкидывается исключение, к-ое надо обработать
- Посмотреть добавленные данные можно в Control Panel -> User Accounts .. -> Credential Manager
private const string RESOURCE_NAME = "MyAppCredential"; //для добавления нужно название нашего ресурса
private void SaveCredential(string userName, string password)
{
var vault = new PasswordVault(); //инициализируем хранилище
var credential = new PasswordCredential(RESOURCE_NAME, userName, password);
//добавляем данные, с помощью метода Add
vault.Add(credential);
}
private void GetCredential()
{
string userName;
string password;
var vault = new PasswordVault();
try
{
var credential = vault.FindAllByResource(RESOURCE_NAME).FirstOrDefault();
if (credential != null)
{
// Получаем пароль и логин
userName = credential.UserName;
//ДЛЯ ПОЛУЧЕНИЯ ПАРОЛЯ НУЖНО ЗНАТЬ ЛОГИН
password = vault.Retrieve(RESOURCE_NAME, userName).Password;
}
}
catch (Exception)
{
// Если ничего не найдено, то обработать ошибку
}
}
private void RemoveCredential(string userName)
{
var vault = new PasswordVault();
try
{
// Удаляем данные
//ДЛЯ УДАЛЕНИЯ ДАННЫХ НУЖНО ЗНАТЬ ЛОГИН
vault.Remove(vault.Retrieve(RESOURCE_NAME, userName));
}
catch (Exception)
{
// Если ничего не найдено, то обработать ошибку
}
}
0 коммент.:
Отправить комментарий