2009-08-07 25 views
6

¿Existe alguna forma de mejores prácticas para almacenar credenciales en una aplicación Windows .NET, ya sea una API integrada o solo un algoritmo de cifrado recomendado?Guardar credenciales de usuario en una aplicación de Windows

En la misma línea que Tortoise SVN, Spotify y Skype.

Editar: Mi intención es utilizar un servicio web que devuelve un token de su servicio de autenticación. Los otros servicios entonces aceptan ese token como parámetro. Sin embargo, el token expira después de 30 minutos, por lo que almacenar el token en sí mismo es inútil para esta tarea.

+0

Por si acaso no lo ha encontrado antes: [Diseño de un sistema de autenticación: a Diálogo en cuatro escenas] (http://web.mit.edu /kerberos/www/dialogue.html) es un excelente artículo sobre los principios de Kerberos; Creo que puede ser interesante en el contexto de la creación de su servicio de autenticación. – Regent

Respuesta

12

Parece que utilizar ProtectedData (que envuelve el Windows Data Protection API) es mi mejor opción, ya que tiene la opción de encriptar en función del usuario que ha iniciado sesión actualmente.

byte[] dataToEncrypt = new byte[] { ... }; 

// entropy will be combined with current user credentials 
byte[] additionalEntropy = new byte { 0x1, 0x2, 0x3, 0x4 }; 

byte[] encryptedData = ProtectedData.Protect(
    dataToEncrypt, additionalEntropy, DataProtectionScope.CurrentUser); 

byte[] decryptedData = ProtectedData.Unprotect(
    encryptedData, additionalEntropy, DataProtectionScope.CurrentUser); 
0

La mejor práctica es nunca almacenar credenciales, solo tokens de Kerberos ... desafortunadamente, no todos los recursos permiten dicha autenticación.

+0

Debería haber sido más específico. Ver mi actualización –

0

Hay un montón de recomendations re contraseñas en MSDN. Necesitará encontrar un contenedor gestionado para CryptProtectData

+1

System.Security.Cryptography.ProtectedData * es * un contenedor administrado para CryptProtectedData. Ver mi respuesta arriba. –

Cuestiones relacionadas