MicrosoftIdentityMessageHandler Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Uma DelegatingHandler implementação que adiciona automaticamente cabeçalhos de autorização a solicitações HTTP de saída usando IAuthorizationHeaderProvider e MicrosoftIdentityMessageHandlerOptions.
public class MicrosoftIdentityMessageHandler : System.Net.Http.DelegatingHandler
type MicrosoftIdentityMessageHandler = class
inherit DelegatingHandler
Public Class MicrosoftIdentityMessageHandler
Inherits DelegatingHandler
- Herança
-
MicrosoftIdentityMessageHandler
Exemplos
Configuração básica com injeção de dependência:
// In Program.cs or Startup.cs
services.AddHttpClient("MyApiClient", client =>
{
client.BaseAddress = new Uri("https://api.example.com");
})
.AddHttpMessageHandler(serviceProvider => new MicrosoftIdentityMessageHandler(
serviceProvider.GetRequiredService<IAuthorizationHeaderProvider>(),
new MicrosoftIdentityMessageHandlerOptions
{
Scopes = { "https://api.example.com/.default" }
}));
// In a controller or service
public class ApiService
{
private readonly HttpClient _httpClient;
public ApiService(IHttpClientFactory httpClientFactory)
{
_httpClient = httpClientFactory.CreateClient("MyApiClient");
}
public async Task<string> GetDataAsync()
{
var response = await _httpClient.GetAsync("/api/data");
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
}
Opções de autenticação por solicitação:
// Override scopes for a specific request
var request = new HttpRequestMessage(HttpMethod.Get, "/api/sensitive-data")
.WithAuthenticationOptions(options =>
{
options.Scopes.Add("https://api.example.com/sensitive.read");
options.RequestAppToken = true;
});
var response = await _httpClient.SendAsync(request);
Uso de identidade do agente:
var request = new HttpRequestMessage(HttpMethod.Get, "/api/agent-data")
.WithAuthenticationOptions(options =>
{
options.Scopes.Add("https://graph.microsoft.com/.default");
options.WithAgentIdentity("agent-application-id");
options.RequestAppToken = true;
});
var response = await _httpClient.SendAsync(request);
Instanciação manual:
var headerProvider = serviceProvider.GetRequiredService<IAuthorizationHeaderProvider>();
var logger = serviceProvider.GetService<ILogger<MicrosoftIdentityMessageHandler>>();
var handler = new MicrosoftIdentityMessageHandler(
headerProvider,
new MicrosoftIdentityMessageHandlerOptions
{
Scopes = { "https://graph.microsoft.com/.default" }
},
logger);
using var httpClient = new HttpClient(handler);
var response = await httpClient.GetAsync("https://graph.microsoft.com/v1.0/me");
Tratamento de erros:
try
{
var response = await _httpClient.SendAsync(request, cancellationToken);
response.EnsureSuccessStatusCode();
return await response.Content.ReadAsStringAsync();
}
catch (MicrosoftIdentityAuthenticationException authEx)
{
// Handle authentication-specific failures
_logger.LogError(authEx, "Authentication failed: {Message}", authEx.Message);
throw;
}
catch (HttpRequestException httpEx)
{
// Handle other HTTP failures
_logger.LogError(httpEx, "HTTP request failed: {Message}", httpEx.Message);
throw;
}
Comentários
Esse manipulador de mensagens fornece uma maneira flexível e responsável de adicionar a autenticação de identidade Microsoft ao código baseado em HttpClient. Ele serve como uma alternativa para IDownstreamApi cenários em que os desenvolvedores desejam manter o controle direto sobre o tratamento de solicitações HTTP enquanto ainda se beneficiam dos recursos de autenticação do Microsoft Identity Web.
Principais recursos:
- Injeção automática de cabeçalho de autorização para todas as solicitações de saída
- Opções de autenticação por solicitação usando métodos de extensão
- Tratamento de desafio de WWW-Authenticate automático com atualização de token
- Suporte para a identidade do agente e cenários de identidade gerenciada
- Log abrangente e tratamento de erros
- Compatibilidade com várias estruturas (.NET Framework 4.6.2+, .NET Standard 2.0+, .NET 5+)
WWW-Authenticate tratamento de desafios:
Quando uma API downstream retorna uma resposta 401 Não autorizada com um cabeçalho WWW-Authenticate contendo desafios de portador com declarações adicionais, esse manipulador tentará adquirir automaticamente um novo token com as declarações solicitadas e tentará novamente a solicitação. Isso é particularmente útil para cenários de Acesso Condicional em que declarações adicionais são necessárias.
Construtores
| Nome | Description |
|---|---|
| MicrosoftIdentityMessageHandler(IAuthorizationHeaderProvider, MicrosoftIdentityMessageHandlerOptions, ILogger<MicrosoftIdentityMessageHandler>) |
Inicializa uma nova instância da classe MicrosoftIdentityMessageHandler. |
| MicrosoftIdentityMessageHandler(IAuthorizationHeaderProvider, MicrosoftIdentityMessageHandlerOptions, IMsalMtlsHttpClientFactory, ILogger<MicrosoftIdentityMessageHandler>) |
Inicializa uma nova instância da classe com suporte à MicrosoftIdentityMessageHandler associação de token poP mTLS. |
Métodos
| Nome | Description |
|---|---|
| SendAsync(HttpRequestMessage, CancellationToken) |
Envia uma solicitação HTTP com injeção automática de cabeçalho de autenticação. Lida com WWW-Authenticate desafios ao tentar atualizar o token com declarações adicionais, se necessário. |