En tiempo de desarrollo .Net Core nos brinda esta excelente funcionalidad la cual nos permite guardar configuraciones en nuestro perfil de usuario loca de una forma segura y sencilla. Estás funcionalidad nos ayuda a no subir por error o a no modificar los archivos con información privada en servidores o inclusive en nuestros sistemas de control de código fuente como GitHub, Bitbucket o Team Foundation Service.
Objetivo
En esta entrega estaremos viendo qué es, cómo configurar y utilizar User Secrets. .
Audiencia
Este documento está dirigido a personas que conocen muy poco o nada sobre el tema o personas que desarrollan tareas de consultoría de desarrollo o que simplemente están interesados en leer e investigar sobre la tecnología alcanzada por esta publicación.
Desarrollo
Antiguamente, en nuestras aplicaciones .Net, teníamos la posibilidad de encriptar nuestra información secreta contenida en los archivos web.config. Lo cual a veces lo hacía un poco incómodo al tener que implementar las aplicaciones o guardarlas en nuestros repositorios de código ya que se guardaban información sensible.
Ahora podemos guardar información sensible de la mano User Secrets de forma segura. Entre las cosas que podemos guardar tenemos: cadenas de conexión, claves de API, datos del cliente, datos de cualquier red social o de cualquier aplicación. Todo lo que nosotros consideremos como datos sensible puede ser almacenado sin correr riesgos de exponerla públicamente.
En mi caso me es muy útil cuando subo ejemplos a GitHub. Lo utilizo para subir un ejemplo sin la necesidad de tener que subir en el ejemplo los datos de acceso aun APi que utilizo en Azure o de alguna red social.
Microsoft.Extensions.SecretManager.Tools
Para poder utilizar y tener disponible esta funcionalidad deberemos usar Microsoft.Extensions.SecretManager.Tools. Secret Manager almacena la información fuera del proyecto y nos permite no solo usar en el proyecto actual, también, nos brinda la posibilidad de usarlo en varios proyectos.
Lo instalaremos desde la consola de los paquetes Nuget en nuestra aplicación.
Una vez instalado hacemos botón derecho sobre nuestro proyecto y seleccionaremos del menú la opción “Manage User Secrets”:
Nos abrirá un archivo del tipo JSON llamado secrets.json. Este archivo guardaran los datos que necesitemos. Este se crea automáticamente y se ubica dentro de una carpeta protegida del sistema. podremos encontrarlo por medio de una estructura de carpeta similar a esta:
%APPDATA%\Microsoft\UserSecrets\user-secrets-id\secrets.json
Si queremos ver el User-Secrets-Id podemos ubicarlo haciendo click derecho sobre el proyecto y seleccionado la opción “Edit <Nombre del proyecto>.csproj”. Este nos mostrar el archivo de configuración del proyecto con el id dentro:
En nuestro archivo JSON agregaremos un valor con motivo de poder tener información para poder ser consumida más adelante:
{ "TopSecret": "TopSecretValuePasssUserRoot" }
El siguiente paso es configurarlo en nuestra aplicación Web el servicio. Abriremos el archivo Startup.cs y modificaremos el constructor para que lo tengamos disponible con las siguientes líneas:
Hasta ahora ya tenemos activo nuestro servicio de UserSecrets, agregamos un valor en nuestro archivo secrets.json y configuramos en el constructor para poder acceder. Ahora vamos a consumir el valor desde nuestro archivo. Iremos al HomeController.cs e inyectamos en constructor IConfiguration para tener disponible la consulta del valor:
Por último, Lo ejecutaremos y comprobaremos si está recuperando el error correctamente:
Conclusión
En este post hemos visto que es, como configurarlo y cómo utilizar UserSecrets. El uso de esta funcionalidad no brinda una gran posibilidad de no estar obligados o por error a subir información confidencial de nuestras cuentas de redes sociales, conexión a base de datos o cualquier información sensible que consideremos.