net mvc deploy aspnetcoremodule asp application c# iis iis-7 dpapi

c# - deploy - publish mvc core to iis



ProtectedData.Unprotect en una aplicaciĆ³n IIS: no funciona despuĆ©s de IISRESET (2)

Aunque no sé por qué sucedía esto, modifiqué el código para usar el cifrado AES, esto funciona bien.

Aunque no es una respuesta al problema por decir, creo que es una solución válida que merece ser mencionada.

EDITAR :

Creo que he encontrado lo que estaba causando el problema (todavía no sé exactamente por qué sucede esto, pero sí noté algo hoy).

Si la aplicación web está utilizando la identidad de ApplicationPool , todo está bien y bien, y DPAPI debería continuar funcionando después de un IISRESET. Sin embargo, si cambio la identidad a un usuario específico definido en AD, las cosas se vuelven locas una vez que se recicla el grupo de aplicaciones.

Por suerte para mí En este caso particular, ya no necesito un usuario específico de AD y el cifrado principal se basa en AES (DPAPI no se puede usar para acceder a un recurso compartido cuando el equilibrio de carga entra en la ecuación) con DPAPI solo utilizado para cifra la copia local de las claves AES.

Necesito almacenar y recuperar datos confidenciales de una base de datos local; estos datos son utilizados por una aplicación web.

Para proteger dichos datos, he optado por utilizar la clase ProtectedData .

La aplicación IIS se está ejecutando con un usuario AD específico (propiedad Identity en la configuración avanzada).

Todo funciona bien hasta que haga un IISRESET - en este punto, parece que la identidad ha cambiado a los efectos de la clase ProtectedData , y me quedan datos que no puedo descifrar - Obtengo una Key not valid for use in specified state excepción de Key not valid for use in specified state .

Aquí está el código que estoy usando:

static public string Encrypt(string data) { var encryptedData = ProtectedData.Protect(System.Text.Encoding.UTF8.GetBytes(data), entropy, DataProtectionScope.CurrentUser); return Convert.ToBase64String(encryptedData); } static public string Decrypt(string base64string) { var encryptedData = Convert.FromBase64String(base64string); return System.Text.Encoding.UTF8.GetString(ProtectedData.Unprotect(encryptedData, entropy, DataProtectionScope.CurrentUser)); }

La entropy es obviamente estática para mi aplicación.

¿Que esta pasando? Tenía la impresión de que DataProtectionScope.CurrentUser usará, como su nombre lo indica, el usuario actual, que, en mi conocimiento, debe ser la identidad del grupo de aplicaciones. ¿Por qué parece que esto cambia cuando realizo un IISRESET?


Tuve el error exacto al utilizar ASP.NET Core Data Protection API, y para aquellos de ustedes que tienen este error, confirmen que LoadUserProfile esté habilitado para el usuario del grupo de aplicaciones.