пятница, 14 июня 2013 г.

Хранение пароля и логина в приложении Windows 8 (C#)


Для хранения логинов и паролей в Windows 8 приложениях, Microsoft представила новый API, называемый PasswordVault (Хранилище паролей). При добавлении в это хранилище, происходит автоматическое шифрование данных, что очень удобно, если вы не хотите изобретать велосипед. Это только основы, для всех методов ссылка на MSDN
Для удобного взаимодействия с PasswordVault, я сделал 3 простых метода:
  • Метод добавления данных (SaveCredential)
  • Получения данных (GetCredential)
  • Удаления данных (RemoveCredential)
Особенности:

  • Помним, что для использования PasswordVault, требуется подключение библиотеки Windows.Security.Credentials
  • Для получения пароля или удаления данных, нужно знать логин
  • Если не найдены данные, то выкидывается исключение, к-ое надо обработать
  • Посмотреть добавленные данные можно в Control Panel -> User Accounts .. -> Credential Manager


В Windows каждому приложению отведен ресурс, который имеет имя. В нашем случае, я назвал его MyAppCredential. Это имя мы используем во всех методах при обращении к хранилищу.

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 коммент.:

Отправить комментарий