Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Sugerencia
Este contenido es un extracto del libro electrónico, ".NET Microservices Architecture for Containerized .NET Applications" (Arquitectura de microservicios de .NET para aplicaciones de .NET contenedorizadas), disponible en Documentación de .NET o como un PDF descargable y gratuito que se puede leer sin conexión.
Para conectarse con recursos protegidos y otros servicios, las aplicaciones ASP.NET Core suelen necesitar usar cadenas de conexión, contraseñas u otras credenciales que contengan información confidencial. Estos fragmentos confidenciales de información se denominan secretos. Se recomienda no incluir secretos en el código fuente y asegurarse de no almacenar secretos en el control de código fuente. En su lugar, debe utilizar el modelo de configuración de ASP.NET Core para leer los secretos desde ubicaciones más seguras.
Debe separar los secretos para acceder a los recursos de desarrollo y almacenamiento provisional de los que se usan para acceder a los recursos de producción, ya que diferentes individuos necesitarán acceso a esos distintos conjuntos de secretos. Para almacenar secretos usados durante el desarrollo, los enfoques comunes son almacenar secretos en variables de entorno o mediante la herramienta Administrador de secretos principales de ASP.NET. Para un almacenamiento más seguro en entornos de producción, los microservicios pueden almacenar secretos en una instancia de Azure Key Vault.
Almacenamiento de secretos en variables de entorno
Una manera de mantener los secretos fuera del código fuente es que los desarrolladores establezcan secretos basados en cadenas como variables de entorno en sus máquinas de desarrollo. Al usar variables de entorno para almacenar secretos con nombres jerárquicos, como los anidados en las secciones de configuración, debe asignar un nombre a las variables para incluir la jerarquía completa de sus secciones, delimitada con dos puntos (:).
Por ejemplo, establecer una variable de entorno Logging:LogLevel:Default con el valor Debug sería equivalente a un valor de configuración en el siguiente archivo de JSON.
{
"Logging": {
"LogLevel": {
"Default": "Debug"
}
}
}
Para acceder a estos valores desde las variables de entorno, la aplicación solo tiene que llamar a AddEnvironmentVariables en su ConfigurationBuilder al construir un objeto IConfigurationRoot.
Nota:
Las variables de entorno se almacenan normalmente como texto sin formato, por lo que si la máquina o el proceso con las variables de entorno están en peligro, los valores de las variables de entorno serán visibles.
Almacenamiento de secretos con ASP.NET Core Secret Manager
La herramienta ASP.NET Core Secret Manager proporciona otro método para mantener los secretos fuera del código fuente durante el desarrollo. Para usar la herramienta Administrador de secretos, instale el paquete Microsoft.Extensions.Configuration.UserSecrets en el archivo del proyecto. Una vez que esa dependencia está presente y se ha restaurado, el dotnet user-secrets comando se puede usar para establecer el valor de secretos desde la línea de comandos. Estos secretos se almacenarán en un archivo JSON en el directorio de perfiles del usuario (los detalles varían según el sistema operativo), lejos del código fuente.
Los secretos establecidos con la herramienta Secret Manager se organizan según la UserSecretsId propiedad del proyecto que usa los secretos. Por lo tanto, debe asegurarse de establecer la propiedad UserSecretsId en el archivo de proyecto, como se muestra en el fragmento de código siguiente. El valor predeterminado es un Identificador Único Global (GUID) asignado por Visual Studio, pero la cadena real no es importante siempre que sea única en tu equipo.
<PropertyGroup>
<UserSecretsId>UniqueIdentifyingString</UserSecretsId>
</PropertyGroup>
El uso de secretos almacenados con Secret Manager en una aplicación se realiza mediante una llamada a AddUserSecrets<T> en la ConfigurationBuilder instancia para incluir secretos para la aplicación en su configuración. El parámetro T genérico debe ser un tipo del ensamblado al que se aplicó UserSecretId. Por lo general, el uso AddUserSecrets<Startup> es correcto.
El AddUserSecrets<Startup>() está incluido en las opciones predeterminadas del entorno de desarrollo cuando se utiliza el método CreateDefaultBuilder en Program.cs.