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
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
Comentários