Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Um segredo de cliente é uma cadeia de caracteres que a sua aplicação utiliza para provar a sua identidade ao solicitar tokens à plataforma de identidade da Microsoft. Microsoft. O Identity.Web suporta segredos de cliente como um dos vários tipos de credenciais para aplicações cliente confidenciais.
Importante
Os segredos do cliente só devem ser usados em ambientes de desenvolvimento e testes. Para cargas de trabalho de produção, utilize certificados ou credenciais sem certificado , como identidades geridas ou credenciais de identidade federadas. Os segredos dos clientes são mais fáceis de comprometer do que credenciais baseadas em certificados e não podem ser atribuídos a operações específicas.
Escolha um tipo de credencial
Aplicações cliente confidenciais precisam de uma credencial para se autenticarem com a plataforma de identidades da Microsoft. Microsoft. O Identity.Web suporta os seguintes tipos de credenciais através da secção de configuração ClientCredentials:
| Tipo de credencial | Ambiente recomendado | Nível de segurança |
|---|---|---|
| Segredo do cliente | Desenvolvimento, testes | Baixo |
| Certidão | Encenação, produção | Alto |
| Identidade gerenciada | Produção alojada no Azure | Máximo |
| Identidade federada | CI/CD, Kubernetes | Alto |
Os segredos do cliente são simples cadeias de caracteres registadas na sua aplicação no Microsoft Entra ID. Embora sejam o tipo de credencial mais fácil de configurar, também apresentam limitações significativas de segurança:
- Podem ser expostos acidentalmente em código-fonte, registos ou ficheiros de configuração.
- Têm uma data de validade e devem ser substituídas manualmente.
- Não fornecem qualquer prova criptográfica da identidade do interlocutor para além da posse do segredo.
Configurar um segredo de cliente em appsettings.json
Para configurar um cliente secreto, adicione um ClientCredentials array à AzureAd secção do seu appsettings.json ficheiro:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "YOUR_TENANT_ID",
"ClientId": "YOUR_CLIENT_ID",
"ClientCredentials": [
{
"SourceType": "ClientSecret",
"ClientSecret": "YOUR_SECRET_VALUE"
}
]
}
}
O ClientCredentials array suporta múltiplas entradas. Microsoft. O Identity.Web testa cada credencial por ordem até que uma tenha sucesso, o que é útil para cenários de rotação secreta.
Advertência
Nunca guardes valores secretos reais no controlo de código fonte. O YOUR_SECRET_VALUE marcador de posição no exemplo anterior deve ser substituído por uma referência a um armazenamento seguro, conforme descrito nas secções seguintes.
Armazenar segredos para o desenvolvimento
Esta secção descreve como manter valores secretos fora do seu código-fonte durante o desenvolvimento local.
Segredos de utilizador .NET
A abordagem recomendada para armazenar segredos durante o desenvolvimento local é a ferramenta Secret Manager. User Secrets armazena dados sensíveis fora da árvore do seu projeto, o que impede commits acidentais no controle de versão.
Inicialize os Segredos do Utilizador para o seu projeto:
dotnet user-secrets initDefina o valor do segredo do cliente:
dotnet user-secrets set "AzureAd:ClientCredentials:0:ClientSecret" "your-secret-value"Verifique se o segredo foi guardado:
dotnet user-secrets list
Segredos de Utilizador são automaticamente carregados no ambiente Development quando utiliza WebApplication.CreateBuilder() ou Host.CreateDefaultBuilder().
O seu appsettings.json deve conter a estrutura sem o valor secreto real:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "YOUR_TENANT_ID",
"ClientId": "YOUR_CLIENT_ID",
"ClientCredentials": [
{
"SourceType": "ClientSecret"
}
]
}
}
Variáveis de ambiente
Também pode usar variáveis de ambiente para fornecer o segredo do cliente. A configuração do .NET mapeia automaticamente as variáveis de ambiente que usam o separador __ (dois sublinhados) para a hierarquia de configuração. Defina a variável para a sua shell:
$env:AzureAd__ClientCredentials__0__ClientSecret = "your-secret-value"
As variáveis de ambiente têm precedência sobre valores em appsettings.json, pelo que o valor secreto no seu ficheiro de configuração pode estar vazio ou omitido.
Guardar segredos para ambientes superiores
Para staging, QA ou qualquer ambiente partilhado, use o Azure Key Vault como fonte de configuração. Esta abordagem mantém segredos fora dos ficheiros de configuração e das variáveis do ambiente, ao mesmo tempo que fornece auditoria, políticas de acesso e capacidades de rotação automática.
Adicionar Azure Key Vault como fonte de configuração
Instale o pacote NuGet necessário:
dotnet add package Azure.Extensions.AspNetCore.Configuration.SecretsArmazene o segredo do cliente no Azure Key Vault com um nome que corresponda ao caminho de configuração. Use
--(duplo traço) como separador:az keyvault secret set \ --vault-name "your-keyvault-name" \ --name "AzureAd--ClientCredentials--0--ClientSecret" \ --value "your-secret-value"Adicione-Key Vault como fonte de configuração em
Program.cs. O seguinte código regista o Key Vault para que os seus segredos estejam disponíveis através da API de configuração padrão:var builder = WebApplication.CreateBuilder(args); builder.Configuration.AddAzureKeyVault( new Uri("https://your-keyvault-name.vault.azure.net/"), new DefaultAzureCredential());
O nome do segredo do Key Vault AzureAd--ClientCredentials--0--ClientSecret é mapeado automaticamente para o caminho de configuração AzureAd:ClientCredentials:0:ClientSecret.
Sugestão
Mesmo ao usar o Key Vault para armazenar um segredo de cliente, considere se a sua carga de trabalho em produção seria melhor servida por certificados ou identidades geridas. O Key Vault é útil para ambientes de desenvolvimento partilhado ou staging, mas as aplicações de produção devem usar tipos de credenciais mais fortes.
Criar um segredo de cliente no portal do Azure
Siga estes passos para registar um segredo de cliente para a sua aplicação no Microsoft Entra ID:
- Inicia sessão no centro de administração Microsoft Entra.
- Navegue até Identidade>Aplicações>Registros de Aplicações.
- Selecione seu aplicativo na lista.
- No menu à esquerda, selecione Certificados & Segredos.
- Selecione o separador Segredos do Cliente .
- Selecione Novo segredo do cliente.
- No painel Adicionar um segredo de cliente :
- Introduza uma Descrição do segredo (por exemplo, "Segredo de desenvolvimento").
- Selecione uma duração de expiração . As opções disponíveis incluem 180 dias, 365 dias, 730 dias ou uma data personalizada.
- Selecione Adicionar.
- Copie imediatamente o valor secreto. O valor só é mostrado uma vez e não pode ser recuperado depois de sair da página.
Importante
Regista o valor secreto num local seguro imediatamente após a criação. O Microsoft Entra ID só mostra o valor no momento da criação. Se perderes o valor, tens de criar um novo segredo.
Gerir a expiração e rotação secretas
Os segredos do cliente têm uma vida máxima e expiram na data especificada durante a criação. Planeie uma rotação secreta para evitar falhas de candidatura.
Expiração do monitor
- Verifique a coluna Expiração na página Certificados e Segredos do registo da sua aplicação.
- Configure Microsoft Entra recomendações para receber alertas antes de expirarem as credenciais.
Estratégia de rotação
Use o ClientCredentials array para suportar rotação sem tempo de inatividade:
Crie um novo segredo de cliente no portal do Azure.
Adicione o novo segredo como uma entrada adicional no
ClientCredentialsarray. Coloca primeiro o novo segredo para que seja experimentado antes do antigo:{ "AzureAd": { "ClientCredentials": [ { "SourceType": "ClientSecret", "ClientSecret": "[NEW_SECRET_REFERENCE]" }, { "SourceType": "ClientSecret", "ClientSecret": "[OLD_SECRET_REFERENCE]" } ] } }Implemente a configuração atualizada. Microsoft.Identity.Web tenta a primeira credencial e recorre à segunda se a primeira falhar.
Depois de confirmar que o novo segredo funciona, remova o segredo antigo tanto da configuração como do portal Azure.
Migrar para credenciais de produção
Antes de implementar para produção, migre dos segredos do cliente para um tipo de credencial mais seguro:
Autenticação baseada em certificado
Os certificados fornecem prova criptográfica de identidade e são o tipo de credencial recomendado para produção. A seguinte configuração recupera um certificado do Key Vault:
{
"AzureAd": {
"ClientCredentials": [
{
"SourceType": "KeyVault",
"KeyVaultUrl": "https://your-keyvault-name.vault.azure.net",
"KeyVaultCertificateName": "your-certificate-name"
}
]
}
}
Para passos detalhados, consulte Use certificados com Microsoft. Identidade.Web.
Identidade gerida (sem certificado)
Para aplicações alojadas no Azure, as identidades geridas eliminam completamente a necessidade de gerir credenciais. A seguinte configuração utiliza uma identidade gerida atribuída pelo utilizador:
{
"AzureAd": {
"ClientCredentials": [
{
"SourceType": "SignedAssertionFromManagedIdentity",
"ManagedIdentityClientId": "YOUR_MANAGED_IDENTITY_CLIENT_ID"
}
]
}
}
Para passos detalhados, consulte Autenticação sem certificado com Microsoft. Identidade.Web.
Lista de verificação da migração
- [ ] Gerar ou provisionar a nova credencial (certificado ou identidade gerida).
- [ ] Atualize a configuração da sua aplicação para usar o novo tipo de credencial.
- [ ] Testar as novas credenciais num ambiente de teste.
- [ ] Implementar em produção.
- [ ] Remover o antigo segredo do cliente do portal Azure.
- [ ] Verifica se a aplicação funciona corretamente sem o segredo antigo.
Evite erros comuns de segurança
Reveja os seguintes anti-padrões e as suas alternativas recomendadas ao trabalhar com segredos de clientes:
| Anti-padrão | Risco | Recommendation |
|---|---|---|
| Inclusão fixa de informações confidenciais no código-fonte | Segredo exposto no controlo de versões | Use User Secrets, variáveis de ambiente ou Key Vault |
Comprometer-se appsettings.Development.json com segredos |
Segredo exposto a qualquer pessoa com acesso ao repositório | Adicione o ficheiro a .gitignore e use os Segredos de Utilizador em vez disso |
| Partilha de segredos entre ambientes | Segredo de desenvolvimento comprometido expõe produção | Use segredos únicos por ambiente |
| Utilização de segredos na produção | Maior risco de roubo de credenciais | Migrar para certificados ou identidades geridas |
| Criação de segredos sem plano de expiração | Interrupção de aplicação quando o segredo expira | Definir lembretes de expiração e implementar rotação |
| Registo de valores secretos | Segredo exposto em ficheiros de registo | Nunca registar os valores das credenciais; regista apenas o tipo de fonte da credencial |
| Armazenar segredos em ficheiros de texto simples em servidores | Segredo exposto a qualquer pessoa com acesso ao servidor | Use variáveis de ambiente ou Key Vault |
Solucionar erros comuns
Esta secção aborda erros frequentes que pode encontrar ao configurar os segredos do cliente.
Segredo inválido do cliente
Erro:AADSTS7000215: Invalid client secret provided.
Causas possíveis:
- O valor secreto foi copiado incorretamente. Os valores secretos podem conter caracteres especiais que são truncados durante operações de copiar/colar.
- O segredo foi criado para o registo de uma aplicação diferente daquele configurado em
ClientId. - O caminho de configuração está incorreto e o valor secreto não está a ser lido pela aplicação.
Resolution:
Crie um novo segredo do cliente no portal do Azure e copie cuidadosamente o valor completo.
Verifica se
ClientIdeTenantIdna tua configuração correspondem ao registo da aplicação onde a chave secreta foi criada.Adicione um ponto de interrupção ou instrução log para verificar se a configuração está corretamente carregada:
// For debugging only — remove before committing var config = builder.Configuration.GetSection("AzureAd:ClientCredentials:0:ClientSecret").Value; Console.WriteLine($"Secret loaded: {!string.IsNullOrEmpty(config)}");
Segredo de cliente expirado
Erro:AADSTS7000222: The provided client secret keys for app '{app-id}' are expired.
Resolution:
- Navegue até ao registo da aplicação no centro de administração Microsoft Entra.
- Verifique a data de validade em Certificados &>Segredos de Clientes.
- Crie um novo segredo e atualize a configuração da sua aplicação.
- Apaga o segredo expirado do portal.
Segredo não encontrado na configuração
Sintoma: A aplicação lança um NullReferenceException ou falha em autenticar porque o valor secreto é null.
Causas possíveis:
- Os User Secrets não são inicializados para o projeto.
- O nome da variável de ambiente não corresponde ao caminho de configuração esperado.
- O Key Vault não está configurado como fonte de configuração.
- A aplicação está a correr num ambiente que não é de Desenvolvimento, onde os Segredos de Utilizador não são carregados.
Resolution:
- Verifique se os Segredos de Utilizador estão inicializados verificando a existência de um
UserSecretsIdno seu ficheiro.csproj. - Verifique se o segredo está definido executando
dotnet user-secrets list. - Verifique se o caminho de configuração corresponde exatamente:
AzureAd:ClientCredentials:0:ClientSecret. - Se estiver a correr fora do ambiente de Desenvolvimento, certifique-se de que a fonte de configuração apropriada (variável de ambiente ou Key Vault) está disponível.