MicrosoftIdentityMessageHandler Classe

Definição

Uma DelegatingHandler implementação que adiciona automaticamente cabeçalhos de autorização a pedidos 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ências:

// 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 pedido:

// 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);

Utilização da 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;
}

Observações

Este manipulador de mensagens oferece uma forma flexível e componível de adicionar autenticação Microsoft Identity a código baseado em HttpClient. Serve como alternativa para IDownstreamApi cenários em que os programadores querem manter controlo direto sobre o tratamento dos pedidos HTTP, beneficiando ainda das capacidades de autenticação do Microsoft Identity Web.

Principais características:

  • Injeção automática de cabeçalhos de autorização para todos os pedidos de saída
  • Opções de autenticação por pedido usando métodos de extensão
  • Gestão automática de desafios WWW-Authenticate com atualização de token
  • Suporte para identidade de agente e cenários de identidade gerida
  • Registo abrangente e tratamento de erros
  • Compatibilidade multi-framework (.NET Framework 4.6.2+, .NET Standard 2.0+, .NET 5+)

WWW-Authenticate Gestão de Desafios:

Quando uma API a jusante devolve uma resposta 401 Não Autorizada com um cabeçalho WWW-Authenticate contendo desafios Bearer com reivindicações adicionais, este handler tentará automaticamente adquirir um novo token com as reivindicações solicitadas e tentará novamente o pedido. Isto é particularmente útil para cenários de Acesso Condicional onde são necessárias reclamações adicionais.

Construtores

Name Descrição
MicrosoftIdentityMessageHandler(IAuthorizationHeaderProvider, MicrosoftIdentityMessageHandlerOptions, ILogger<MicrosoftIdentityMessageHandler>)

Inicializa uma nova instância da MicrosoftIdentityMessageHandler classe.

MicrosoftIdentityMessageHandler(IAuthorizationHeaderProvider, MicrosoftIdentityMessageHandlerOptions, IMsalMtlsHttpClientFactory, ILogger<MicrosoftIdentityMessageHandler>)

Inicializa uma nova instância da MicrosoftIdentityMessageHandler classe com suporte para ligação de tokens PoP mTLS.

Métodos

Name Descrição
SendAsync(HttpRequestMessage, CancellationToken)

Envia um pedido HTTP com injeção automática de cabeçalho de autenticação. Lida WWW-Authenticate desafios tentando atualizar tokens com reivindicações adicionais, se necessário.

Aplica-se a

Ver também