Identidade gerida com MSAL.NET

Note

Esta funcionalidade está disponível a partir da versão 4.54.0 do MSAL.NET.

Um desafio comum para os desenvolvedores é o gerenciamento de segredos, credenciais, certificados e chaves usadas para proteger a comunicação entre serviços. As identidades geridas no Azure eliminam a necessidade de os programadores gerirem estas credenciais manualmente. O MSAL.NET suporta a aquisição de tokens através do serviço de identidade gerida quando utilizado com aplicações a correr dentro da infraestrutura Azure, tais como:

Para uma lista completa, consulte os serviços do Azure que podem usar identidades geridas para aceder a outros serviços.

Qual SDK usar - SDK do Azure ou MSAL?

As bibliotecas MSAL fornecem APIs de nível inferior mais próximas dos protocolos OAuth2 e OIDC.

Tanto o MSAL.NET como o SDK do Azure permitem adquirir tokens através de identidade gerida. Internamente, o SDK do Azure utiliza o MSAL.NET e fornece uma API de nível superior através das abstrações DefaultAzureCredential e ManagedIdentityCredential.

Se a sua aplicação já usa um dos SDKs, continue a usar o mesmo SDK. Usa o SDK do Azure se estiveres a escrever uma nova aplicação e planeares chamar outros recursos do Azure, pois este SDK proporciona uma melhor experiência de programador ao permitir que a aplicação corra em máquinas privadas onde não existe identidade gerida. Considera usar MSAL se precisares de chamar outras APIs web downstream como o Microsoft Graph ou a tua própria web API.

Note

Microsoft.Identity.Web é uma API de nível superior que oferece integração com o ASP.NET Core e o ASP.NET Classic, enquanto utiliza o MSAL de forma subjacente. A biblioteca também fornece uma forma de carregar credenciais (certificados, asserções assinadas) usadas pelo MSAL.NET como credenciais do cliente. Para certificados, utiliza o DefaultAzureCredentials para obter certificados do KeyVault. Também oferece federação de identidade de carga de trabalho com credenciais de identidade geridas. Para mais detalhes, veja Descrição da Credencial.

Início rápido

Para começar rapidamente e ver o Azure Managed Identity em ação, pode usar um dos exemplos que a equipa criou para este propósito:

Como usar identidades geridas

Existem dois tipos de identidades geridas disponíveis para os programadores – atribuídas pelo sistema e atribuídas pelo utilizador. Pode saber mais sobre as diferenças no artigo Managed Identity Types . O MSAL.NET suporta a obtenção de tokens em ambos os casos. O registo do MSAL.NET permite acompanhar pedidos e metadados relacionados.

Antes de utilizarem identidades geridas do MSAL.NET, os programadores devem habilitá-las para os recursos que pretendem utilizar através do CLI do Azure ou do portal do Azure.

Exemplos

Para identidades atribuídas pelo utilizador e pelo sistema, os programadores podem usar a ManagedIdentityApplicationBuilder classe.

Identidades geridas atribuídas pelo sistema

Para identidades geridas atribuídas pelo sistema, o programador não precisa de passar qualquer informação adicional ao criar uma instância de IManagedIdentityApplication, pois irá inferir automaticamente os metadados relevantes sobre a identidade atribuída.

AcquireTokenForManagedIdentity(String) é invocado com o recurso para o qual se pretende obter um token, como https://management.azure.com.

IManagedIdentityApplication mi = ManagedIdentityApplicationBuilder.Create(ManagedIdentityId.SystemAssigned)
    .Build();

AuthenticationResult result = await mi.AcquireTokenForManagedIdentity(resource)
    .ExecuteAsync()
    .ConfigureAwait(false);

Identidades geridas atribuídas pelo utilizador

Para identidades geridas atribuídas pelo utilizador, o programador precisa de passar ou o ID do cliente, o identificador completo de recurso ou o ID do objeto da identidade gerida ao criar IManagedIdentityApplication.

Tal como no caso das identidades geridas atribuídas pelo sistema, AcquireTokenForManagedIdentity(String) é invocado com o recurso para o qual se pretende adquirir um token, por exemplo, https://management.azure.com.

IManagedIdentityApplication mi = ManagedIdentityApplicationBuilder.Create(ManagedIdentityId.WithUserAssignedClientId(clientIdOfUserAssignedManagedIdentity))
    .Build();

AuthenticationResult result = await mi.AcquireTokenForManagedIdentity(resource)
    .ExecuteAsync()
    .ConfigureAwait(false);

Caching

Por defeito, o MSAL.NET suporta cache em memória. O MSAL não suporta extensibilidade de cache para identidade gerida devido a preocupações de segurança ao utilizar cache distribuído. Como um token adquirido para identidade gerida pertence a um recurso Azure, usar uma cache distribuída pode expô-lo aos outros recursos Azure que partilham a cache.

Troubleshooting

Para pedidos falhados, a resposta ao erro contém um ID de correlação que pode ser usado para diagnósticos adicionais e análise de logs. Tenha em mente que os IDs de correlação gerados no MSAL.NET ou passados para o MSAL são diferentes do que é devolvido nas respostas de erro do servidor, pois o MSAL.NET não pode passar o ID de correlação para os endpoints de aquisição de tokens de identidade geridos.

Potenciais erros

MsalServiceException Código de Erro: managed_identity_failed_response Mensagem de Erro: Ocorreu um erro inesperado ao obter o token AAD

Esta exceção pode significar que o recurso para o qual está a tentar adquirir um token não é suportado ou é fornecido usando o formato de ID de recurso errado. Exemplos de formatos corretos de ID de recurso incluem https://management.azure.com/.default, https://management.azure.com, e https://graph.microsoft.com.

MsalServiceException Código de erro: managed_identity_unreachable_network.

Esta exceção pode significar que provavelmente está a usar um recurso onde o MSAL.NET não suporta aquisição de token para identidade gerida ou que está a executar o código de exemplo a partir de uma máquina de desenvolvimento onde o endpoint para adquirir o token para identidades geridas é inacessível.