Robson Amorim

.Net

Asp.net Core User Secrets

Com certeza você já precisou armazenar dados sensíveis durante o desenvolvimento dos seus projetos. Dados como connection strings, informações de conexões com redes sociais para viabilizar o login integrado, endereços de email, etc. Estes dados podem ficar expostos quando armazenados juntos do nosso código fonte.

Imagine o problema que subir seu código fonte em um repositório público do git hub com a connection string de um banco de dados poderia causar…

Para resolver isto o Asp.net Core conta com as User Secrets. A ideia das User Secrets é bem clara: Armazenar seus dados sensíveis separados do código fonte do seu projeto, localmente na sua maquina, na sessão App Data do seu usuário. Evitando assim aquele commit e push com dados sensíveis por engano…

Instalando o Asp.Net Core User Secrets e User Secrets Manager Tool

Instale o pacote NuGet via Package Manager Console ao seu projeto com o comando abaixo:


Install-Package Microsoft.Extensions.Configuration.UserSecrets

Para que você consiga gerenciar as suas User Secrets de forma simples e utiliza-las no seu projeto, você precisará adicionar a tool Asp.Net Core User Secrets Manager Tool ao seu projeto na seção tools do seu arquivo .csproj

Clique com o botão direito do mouse do nome do seu projeto, e selecione Edit <nome_do_projeto>.csproj

user-secrets-1

 

Após isto adicione a seu projeto a ferramenta de gerenciamento das suas User Secrets ao seu arquivo .csproj na tag <ItemGroup>

<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="1.0.1" />

Execute o comando dotnet restore na sua ferramente de linha de comando dentro do diretório do seu projeto para que o gerenciador seja baixado via NuGet.

Para verificar se tudo ocorreu como deveria, execute o comando dotnet user-secrets -h a saída deve ser semelhante a mostrada abaixo:


> dotnet user-secrets -h
User Secrets Manager 1.0.1-rtm-10418

Usage: dotnet user-secrets [options] [command]

Options:
 -?|-h|--help Show help information
 --version Show version information
 -v|--verbose Show verbose output
 -p|--project Path to project, default is current directory
 -c|--configuration CONFIGURATION The project configuration to use. Defaults to 'Debug'
 --id The user secret id to use.

Commands:
 clear Deletes all the application secrets
 list Lists all the application secrets
 remove Removes the specified user secret
 set Sets the user secret to the specified value

Use "dotnet user-secrets [command] --help" for more information about a command.

Configurando o arquivo das User Secrets

Clique com o botão direito do mouse no projeto e selecione a opção Manage User Secrets. Este procedimento irá realizar a criação do arquivo JSON (sim, JSON!) que conterá todos as User Secrets do seu projeto.

Clique novamente com o botão direito do mouse no projeto e selecione Edit <nome_do_projeto>.csproj

Você verá uma nova linha adicionada ao seu arquivo .xml

<UserSecretsId>70f06c8f-9b87-42f4-88b2-fa0b36e8394e</UserSecretsId>

Este GUID dentro de <UserSecretsId> será o nome do arquivo onde estarão contidos as seus User Secrets. Altere o Id para que fique mais fácil de ser identificado por você posteriormente.

Adicionando uma User Secret

Para adicionar uma User Secret abra o console na pasta do projeto, use o comando dotnet user-secrets set Chave Valor onde Chave é o ID da sua informação e Valor o conteúdo da informação a ser armazenada.

> dotnet user-secrets set Nome Robson;
Successfully saved Nome = Robson to the secret store.

Para verificar se tudo deu certo execute o comando dotnet user-secrets list

> dotnet user-secrets list
Nome = Robson

Acessando os User Secrets no seu código fonte
Para ter acesso as User Secrets no seu código fonte, acesse a sua classe Startup.cs e no método Startup chame o método AddUserSecrets do objeto builder. Mas atenção! Lembre-se que as User Secrets devem ser usadas somente em ambiente de desenvolvimento, para ambiente de produção, você deve usar os arquivos de configurações .config que já conhecemos.

O método Startup do seu arquivo Statup.cs deve ficar como abaixo:

public Startup(IHostingEnvironment env)
 {
     var builder = new ConfigurationBuilder()
     .SetBasePath(env.ContentRootPath)
     .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
     .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
     .AddEnvironmentVariables();


      if (env.IsDevelopment())
      {
          builder.AddUserSecrets();
      }

      Configuration = builder.Build();
 }

Note das linhas 10 a 13 adicionarmos uma verificação através do objeto env para checar se estamos em ambiente de desenvolvimento e então adicionar as user secrets ao nosso código fonte.

Para acessar o valor que você adicionou anteriormente no arquivo da suas User Secrets, utilize o objeto Configuration que você já conhece passando o nome da chave que deseja resgatar o valor:


var nome = Configuration["Nome"];

Os valores são armazenados em um arquivo de configuração JSON no diretório do perfil do usuário:

Windows: %APPDATA%\microsoft\UserSecrets\<userSecretsId>\secrets.json
Linux: ~/.microsoft/usersecrets/<userSecretsId>/secrets.json
Mac: ~/.microsoft/usersecrets/<userSecretsId>/secrets.json

Importante salientar que as user secrets atualmente não são criptografados, mas podem ser algum dia.

Simples e útil não é mesmo !?

#Ubuntu

Leave A Comment

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

%d blogueiros gostam disto: