MicrosoftIdentityMessageHandler Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
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. |