Introdução
Infisical é uma plataforma de gerenciamento de secrets que centraliza credenciais, tokens e variáveis sensíveis em um lugar seguro. Em vez de espalhar segredos por arquivos, variáveis locais e pipelines, você mantém tudo organizado por projeto, ambiente e caminho, com controle de acesso e auditoria.
Vantagens do Infisical
- Centralização dos segredos em um único local confiável
- Separação por ambiente (dev, staging, prod) sem duplicar configuração
- Controle de acesso por equipe, projeto e caminho
- Auditoria de acesso e mudanças em secrets
- Integração simples com aplicações e pipelines
A integração com .NET: JJConsulting.Infisical
Para usar Infisical de forma idiomática em .NET, criamos o JJConsulting.Infisical. A biblioteca conecta o Infisical ao sistema de configuração do .NET e registra serviços de DI para consumo direto de secrets quando necessário.
- Adiciona um provider do Infisical ao
IConfiguration - Registra
IInfisicalAuthenticationServiceeIInfisicalSecretsService - Suporta autenticação por service token e por machine identity
Instalação
dotnet add package JJConsulting.Infisical
<ItemGroup>
<PackageReference Include="JJConsulting.Infisical" Version="1.0.0" />
</ItemGroup>
Configuração com service token
Use service token quando quiser um fluxo simples, escopado por ambiente. Coloque as configurações no appsettings.json e registre no startup:
{
"Infisical": {
"Environment": "prod",
"ProjectId": "your-project-id",
"ServiceToken": "your-service-token",
"SecretPath": "/",
"Url": "https://app.infisical.com"
}
}
using JJConsulting.Infisical.Configuration;
var infisicalConfig = ServiceTokenInfisicalConfig
.FromConfiguration(builder.Configuration.GetSection("Infisical"));
builder.Host.AddInfisical(infisicalConfig);
Configuração com machine identity
Se preferir client credentials, use machine identity. O restante do fluxo é idêntico.
{
"Infisical": {
"Environment": "prod",
"ProjectId": "your-project-id",
"ClientId": "your-client-id",
"ClientSecret": "your-client-secret",
"SecretPath": "/",
"Url": "https://app.infisical.com"
}
}
using JJConsulting.Infisical.Configuration;
var infisicalConfig = MachineIdentityInfisicalConfig
.FromConfiguration(builder.Configuration.GetSection("Infisical"));
builder.Host.AddInfisical(infisicalConfig);
Nomenclatura de secrets no .NET
O provider segue a convenção padrão do .NET: use double underscore (__) nas chaves do Infisical para mapear chaves aninhadas.
MySettings__MyKeyviraMySettings:MyKeyConnectionStrings__DefaultConnectionviraConnectionStrings:DefaultConnectionLogging__LogLevel__DefaultviraLogging:LogLevel:Default
Os valores são armazenados em cache em memória, e ficam disponíveis até o próximo restart da aplicação, ou seja, não há problema se houver alguma intermitência no servidor Infisical.
Acesso direto a secrets via DI
Às vezes você precisa buscar um secret diretamente (ou atualizar sob demanda). O pacote registra IInfisicalSecretsService, então você pode injetar onde quiser.
using JJConsulting.Infisical.Services;
public class MyService(IInfisicalSecretsService secretsService)
{
public async Task UseSecretsAsync()
{
var all = await secretsService.GetSecretsAsync();
var single = await secretsService.GetSecretAsync("DATABASE_PASSWORD");
}
}
Conclusão
O JJConsulting.Infisical mantém a integração pequena e transparente, pois os secrets entram no IConfiguration, ou seja, você continua usando as mesmas APIs nativas de configuração já utilizadas pelo appsettings.json e variáveis de ambiente. e o acesso direto fica disponível quando precisar.
Para visualizar o código fonte dela, sugerir melhorias ou até mesmo contribuir, está disponível neste repositório do GitHub.