Solución:
ASP.NET Core no usa Web.config. Se agrega como parte de la publicación para la compatibilidad con el alojamiento en IIS únicamente. No está destinado a que lo modifiques o utilices de manera significativa.
Las opciones integradas para los proveedores de configuración en ASP.NET Core son: JSON, argumentos de línea de comandos, secretos de usuario, variables de entorno y Azure Key Valult. Sin embargo, User Secrets es solo para desarrollo, y los argumentos de la línea de comandos son difíciles de utilizar cuando se aloja en IIS. (Técnicamente, puede modificar Web.config para agregar argumentos de línea de comandos, pero como se mencionó, eso se sobrescribirá en la próxima publicación, por lo que no es el enfoque más sostenible).
De las opciones restantes de JSON, variables de entorno y Azure Key Vault, solo Azure Key Vault admite el cifrado. Puede utilizar Azure Key Vault tanto si está alojando en Azure como si no, pero no es gratis. Sin embargo, tampoco es muy caro, por lo que podría valer la pena investigarlo.
JSON es probablemente la peor opción, desde el punto de vista de la seguridad, principalmente porque requiere que almacene sus secretos en su control de código fuente, que no es (o debería ser) un principio. Las variables de entorno, aunque no estén cifradas, se pueden proteger. Sin embargo, es difícil (aunque técnicamente no imposible) ejecutar varias aplicaciones en el mismo servidor si cada una requiere diferentes secretos para las mismas variables de entorno. Técnicamente, puede establecer variables de entorno a nivel de usuario y, luego, también puede asignar un grupo de aplicaciones para que se ejecute como un usuario específico. Sin embargo, eso es mucha configuración.
Dicho esto, también es completamente posible crear sus propios proveedores de configuración, lo que significa que técnicamente puede usar lo que quiera. Por ejemplo, puede escribir un proveedor de configuración de SQL Server y luego almacenar sus credenciales allí. Aún necesitaría configurar la cadena de conexión en algún lugar, pero tal vez podría usar la misma cadena de conexión para la configuración de todos los sitios.
- web.config no se puede utilizar para secretos ya que es un archivo de texto sin cifrar
-
cualquier otra fuente de configuración de archivos (como
appsettings.json
) que podrían agregarse a través de la nueva API de configuración no se pueden usar hasta que no estén encriptados. -
Está bien usar variables de entorno, pero solo si puede garantizar que no es posible hacer una instantánea de las variables de entorno en la máquina prod. Consulte las variables de entorno consideradas perjudiciales para sus secretos para obtener más detalles sobre este riesgo.
-
si está alojando en Azure, busque en Azure Key Vault
-
hay muchas herramientas / servicios, como Hashicorp Vault, que ayuda a manejar datos confidenciales