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:

[code language=”text”]

Install-Package Microsoft.Extensions.Configuration.UserSecrets

[/code]

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>

[code language=”xml”]
<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="1.0.1" />
[/code]

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:

[code language=”text”]

> 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.

[/code]

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

[code language=”xml”]
<UserSecretsId>70f06c8f-9b87-42f4-88b2-fa0b36e8394e</UserSecretsId>
[/code]

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.

[code language=”text”]
> dotnet user-secrets set Nome Robson;
Successfully saved Nome = Robson to the secret store.
[/code]

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

[code language=”text”]
> dotnet user-secrets list
Nome = Robson
[/code]

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:

[code language=”csharp”]
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();
}

[/code]

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:

[code language=”csharp”]

var nome = Configuration["Nome"];

[/code]

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

Modificado pela ultima vez: 19 de dezembro de 2017

Comentários

Escreva uma resposta ou comentário

Seu endereço de e-mail não será publicado.

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