Cómo guardar "secretos" en nuestras aplicaciones de .NET Core (sin peligro de enviarlos a GitHub por error) - VÍDEO
Tags: dotnet, spanish, git, video
Published: 2020-10-08 09:43:07

---
title: Cómo guardar "secretos" en nuestras aplicaciones de .NET Core (sin peligro de enviarlos a GitHub por error) - VÍDEO
published: true
tags: DotNet, Spanish, Git, Video
canonical_url: https://www.campusmvp.es/recursos/post/como-guardar-secretos-en-nuestras-aplicaciones-de-net-core-sin-peligro-de-enviarlos-a-github-por-error.aspx
cover_image: https://www.campusmvp.es/recursos/image.axd?picture=/2019/1T/secretos-net-core/Secretos-Net-Core-Portada.png
---

Si alguna vez has utilizado ASP.NET Core, te habrás dado cuenta de que tiene una opción muy interesante, llamada **secretos de usuario** , la cual nos permite generar un `secrets.json` que se almacenará en local, y permite que si utilizamos un control de código fuente público como GitHub, no hagamos pública información privada como, por ejemplo, nuestra cadena de conexión.

En ASP.NET Core, para poder utilizar esta funcionalidad, basta con que vayamos a `Administrar secretos de usuario` en el menú contextual de nuestro proyecto en Visual Studio:

![La imagen muestra el menú contextual de un proyecto, con el submenú de administrar secretos de usuario resaltado](https://www.campusmvp.es/recursos/image.axd?picture=/2019/1T/secretos-net-core/MenuSecretos.png)

y añadamos las partes del JSON que queremos mantener privadas, consiguiendo así no tener que escribirlas en el `appsettings.json`.

Con esto, si vamos al `.csproj`, veremos que se ha añadido una línea como esta:

```
<UserSecretsId>2a2fc01e-0fc6-4b74-b887-0217454d7b14</UserSecretsId>

```

Que no es más que el GUID (identificador global único) que se ha asignado al proyecto. Con esto, ya es posible acceder a los "secretos de usuario" y utilizar ese JSON privado para nuestros desarrollos. Esto en realidad, lo que hace es guardar un archivo con JSON, aparte del de configuración (`appsettings.json`), en la ruta `%APPDATA%\Microsoft\UserSecrets\ <user_secrets_id>\secrets.json`.

Esta poderosa característica por desgracia, **no está implementada en aplicaciones de consola** (habrá que esperar a la versión 3 para ver si lo implementan). De todos modos, tocando un poco algunas cosas, **podemos conseguir que nuestras aplicaciones de consola puedan utilizar la funcionalidad de secretos** , con solo 5 sencillos pasos.

## Paso 1: Creamos a mano el fichero "secrets.json"

En primer lugar, creamos una nueva carpeta dentro de la ruta `%APPDATA%\Microsoft\UserSecrets`, por ejemplo, con el nombre `AppConsolaCampusMVP`. Dentro de ella creamos un nuevo archivo de texto con el nombre `secrets.json`.

> Es importante que recordemos el nombre de la carpeta, porque lo necesitaremos más adelante.

![secrets.json file](https://www.campusmvp.es/recursos/image.axd?picture=/2019/1T/secretos-net-core/json.PNG)

## Paso 2: Escribimos un parámetro de configuración "secreto"

Dentro del fichero, vamos a guardar una configuración "secreta" de ejemplo, en este caso un simple mensaje:

```
{
  "Mensaje": "CampusMVP"
}

```

## Paso 3: Añadimos las dependencias necesarias

En nuestra aplicación .Net Core, añadimos el paquete:  
`Microsoft.Extensions.Configuration.UserSecrets`.

Esto se puede conseguir desde la interfaz de usuario del gestor de paquetes del proyecto en Visual Studio, o desde la consola del administrador de paquetes con

```
PM->Install-Package Microsoft.Extensions.Configuration.UserSecrets

```

## Paso 4: Instanciamos un objeto de configuración

Y con eso, solo nos queda configurar un objeto que nos permita leer la configuración de secretos, y que implemente la interfaz `IConfiguration`:

```
IConfiguration config = new ConfigurationBuilder()
     .AddUserSecrets("AppConsolaCampusMVP") //Nombre de la carpeta que hemos creado
     .Build();

```

Esto nos permite añadir el archivo de configuración de secretos que hemos creado, aprovechando la extensibilidad de la clase `ConfigurationBuilder`.

## Paso 5: Comprobamos los resultados

Con esto, si en el método `Main` de nuestra aplicación, después de crear el `IConfiguration`, añadimos:

```
Console.WriteLine($"Mensaje desde los secretos de usuario: '{config["Mensaje"]}'");

```

Podemos ver que hemos conseguido que nuestra aplicación de consola ya trabaje con los secretos de usuario del mismo modo que una aplicación web.

![Resultado de ejecutar la aplicación de consola, mostrando el "mensaje secreto"](https://www.campusmvp.es/recursos/image.axd?picture=/2019/1T/secretos-net-core/result.PNG)

## Programa completo

```
using Microsoft.Extensions.Configuration;
using System;

namespace AppConsolaCampusMVP
{
    class Program
    {
        static void Main(string[] args)
        {
            //Obtenemos el nombre de la carpeta que hemos creado
            IConfiguration config = new ConfigurationBuilder()
                    .AddUserSecrets("AppConsolaCampusMVP")
           .Build();

            Console.WriteLine($"Mensaje desde los secretos de usuario: '{config["Mensaje"]}'");
            Console.Read();
        }
    }
}

```

Con estos sencillos pasos, hemos conseguido tener una configuración de desarrollo que no se va a hacer pública en nuestro control de versiones ya que se almacena por separado en una carpeta dependiente del usuario.

Para entender mejor todo el proceso, vamos a verlo también en la práctica con un vídeo:

{% youtube FJGIz9JFzTU %}