deploy - publish asp net core application in iis
AspNet Core se usa en la memoria para la protección de datos cuando se ejecuta en IIS (3)
Estoy ejecutando un servidor de producción (Windows Server 2012) con un sitio web AspNet Mvc Core RC1.
Estoy viendo lo siguiente en los registros:
Neither user profile nor HKLM registry available. Using an ephemeral key repository. Protected data will be unavailable when application exits.
Después de inspeccionar el código fuente de DataProtection , DataProtection el problema hasta la siguiente llamada de método:
Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
Esto probablemente esté devolviendo nulo en el servidor por alguna razón. No tengo ninguna configuración personalizada especial en su lugar y he leído los docs así que pensé que la configuración predeterminada funcionaría.
Creo que el problema es que el sitio web de IIS no se ejecuta en el contexto de un determinado usuario, pero no tengo idea de cómo confirmar o solucionar este problema. Mi sitio web está configurado con su propio grupo.
Como nota aparte: el resultado de ejecutar un repositorio en memoria para almacenar claves hace que se reciclen cada vez que la aplicación sale, lo cual es muy molesto y ni siquiera está diseñado para su uso en entornos de producción.
Eche un vistazo a esto desde el repositorio de DataProtection Git.
En resumen, hay un error en IIS que puede que nunca se corrija y que impide la configuración correcta del registro para las claves de protección de datos. Hay una secuencia de comandos powershell para configurar manualmente el registro correctamente para que funcione para AspNet Core. Después de ejecutar el script para cada grupo de aplicaciones que usa para las aplicaciones AspNet Core, esas aplicaciones funcionarán según lo previsto.
El perfil de usuario se debe cargar en la configuración de IIS.
Abra IIS, haga clic derecho en Grupos de aplicaciones y luego en Configuración avanzada. Y establece "Cargar perfil de usuario" en verdadero. Reinicie su aplicación y debería funcionar perfectamente.
Las claves de protección de datos utilizadas por las aplicaciones ASP.NET se almacenan en secciones del Registro externas a las aplicaciones. Al ejecutar su aplicación como una Identidad de AppPool, debe crear una sección de registro para cada AppPool utilizado con una aplicación Core de ASP.NET.
Para instalaciones de IIS independientes, puede usar el script de Data Protection PowerShell para cada grupo de aplicaciones que se use con una aplicación Core de ASP.NET. Las claves se conservarán en el registro.
Como se indica claramente en los registros desde que no existe la sección de registro que busca la protección de datos, las claves no se conservarán en el disco. En cambio, serán efímeros y vivirán solo en memoria.
En escenarios de granjas de servidores web, una aplicación puede configurarse para usar una ruta UNC para almacenar su conjunto de claves de protección de datos. Por defecto, las claves de protección de datos no están encriptadas. Puede implementar un certificado x509 en cada máquina para cifrar el conjunto de claves.
Consulte los documentos oficiales de ASP.NET Core para obtener más información.