MicrosoftIdentityMessageHandler Clase

Definición

Implementación DelegatingHandler que agrega automáticamente encabezados de autorización a las solicitudes HTTP salientes mediante IAuthorizationHeaderProvider y MicrosoftIdentityMessageHandlerOptions.

public class MicrosoftIdentityMessageHandler : System.Net.Http.DelegatingHandler
type MicrosoftIdentityMessageHandler = class
    inherit DelegatingHandler
Public Class MicrosoftIdentityMessageHandler
Inherits DelegatingHandler
Herencia
MicrosoftIdentityMessageHandler

Ejemplos

Configuración básica con inserción de dependencias:

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

Opciones de autenticación por solicitud:

// 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 la identidad del 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);

Creación de instancias 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");

Control de errores:

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;
}

Comentarios

Este controlador de mensajes proporciona una manera flexible y redactable de agregar Microsoft autenticación de identidad al código basado en HttpClient. Sirve como alternativa a IDownstreamApi escenarios en los que los desarrolladores quieren mantener el control directo sobre el control de solicitudes HTTP, a la vez que se benefician de las funcionalidades de autenticación de Microsoft Identity Web.

Características principales:

  • Inserción automática de encabezados de autorización para todas las solicitudes salientes
  • Opciones de autenticación por solicitud mediante métodos de extensión
  • Control automático de desafíos de WWW-Authenticate con la actualización de tokens
  • Compatibilidad con escenarios de identidad de agente e identidad administrada
  • Registro completo y control de errores
  • Compatibilidad con varios marcos (.NET Framework 4.6.2+, .NET Standard 2.0+, .NET 5+)

WWW-Authenticate control de desafíos:

Cuando una API de bajada devuelve una respuesta 401 No autorizada con un encabezado WWW-Authenticate que contiene desafíos de portador con notificaciones adicionales, este controlador intentará adquirir automáticamente un nuevo token con las notificaciones solicitadas y reintentará la solicitud. Esto es especialmente útil para escenarios de acceso condicional en los que se requieren notificaciones adicionales.

Constructores

Nombre Description
MicrosoftIdentityMessageHandler(IAuthorizationHeaderProvider, MicrosoftIdentityMessageHandlerOptions, ILogger<MicrosoftIdentityMessageHandler>)

Inicializa una nueva instancia de la clase MicrosoftIdentityMessageHandler.

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

Inicializa una nueva instancia de la MicrosoftIdentityMessageHandler clase con compatibilidad con el enlace de tokens poP de mTLS.

Métodos

Nombre Description
SendAsync(HttpRequestMessage, CancellationToken)

Envía una solicitud HTTP con inserción automática de encabezados de autenticación. Controla WWW-Authenticate desafíos al intentar actualizar tokens con notificaciones adicionales si es necesario.

Se aplica a

Consulte también