MicrosoftIdentityMessageHandler Klasa
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Implementacja DelegatingHandler , która automatycznie dodaje nagłówki autoryzacji do wychodzących żądań HTTP przy użyciu poleceń IAuthorizationHeaderProvider i MicrosoftIdentityMessageHandlerOptions.
public class MicrosoftIdentityMessageHandler : System.Net.Http.DelegatingHandler
type MicrosoftIdentityMessageHandler = class
inherit DelegatingHandler
Public Class MicrosoftIdentityMessageHandler
Inherits DelegatingHandler
- Dziedziczenie
-
MicrosoftIdentityMessageHandler
Przykłady
Podstawowa konfiguracja z iniekcją zależności:
// 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();
}
}
Opcje uwierzytelniania poszczególnych żądań:
// 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);
Użycie tożsamości agenta:
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);
Ręczne tworzenie wystąpień:
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");
Obsługa błędów:
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;
}
Uwagi
Ta procedura obsługi komunikatów zapewnia elastyczny, elastyczny sposób dodawania uwierzytelniania tożsamości Microsoft do kodu opartego na kliencie HttpClient. Jest to alternatywa dla IDownstreamApi scenariuszy, w których deweloperzy chcą zachować bezpośrednią kontrolę nad obsługą żądań HTTP, jednocześnie korzystając z możliwości uwierzytelniania Microsoft Identity Web.
Najważniejsze funkcje:
- Automatyczne wstrzykiwanie nagłówka autoryzacji dla wszystkich żądań wychodzących
- Opcje uwierzytelniania na żądanie przy użyciu metod rozszerzeń
- Automatyczna obsługa WWW-Authenticate wyzwania z odświeżaniem tokenu
- Obsługa scenariuszy tożsamości agenta i tożsamości zarządzanej
- Kompleksowe rejestrowanie i obsługa błędów
- Zgodność z wieloma platformami (.NET Framework 4.6.2+, .NET Standard 2.0+, .NET 5+)
WWW-Authenticate obsługa wyzwań:
Gdy podrzędny interfejs API zwraca odpowiedź 401 Brak autoryzacji z nagłówkiem WWW-Authenticate zawierającym wyzwania elementu nośnego z dodatkowymi oświadczeniami, ta procedura obsługi automatycznie podejmie próbę uzyskania nowego tokenu z żądanymi oświadczeniami i ponowi próbę żądania. Jest to szczególnie przydatne w scenariuszach dostępu warunkowego, w których wymagane są dodatkowe oświadczenia.
Konstruktory
| Nazwa | Opis |
|---|---|
| MicrosoftIdentityMessageHandler(IAuthorizationHeaderProvider, MicrosoftIdentityMessageHandlerOptions, ILogger<MicrosoftIdentityMessageHandler>) |
Inicjuje nowe wystąpienie klasy MicrosoftIdentityMessageHandler. |
| MicrosoftIdentityMessageHandler(IAuthorizationHeaderProvider, MicrosoftIdentityMessageHandlerOptions, IMsalMtlsHttpClientFactory, ILogger<MicrosoftIdentityMessageHandler>) |
Inicjuje MicrosoftIdentityMessageHandler nowe wystąpienie klasy z obsługą powiązania tokenu mTLS PoP. |
Metody
| Nazwa | Opis |
|---|---|
| SendAsync(HttpRequestMessage, CancellationToken) |
Wysyła żądanie HTTP z automatycznym wstrzyknięciem nagłówka uwierzytelniania. Obsługuje WWW-Authenticate wyzwania, próbując odświeżyć token z dodatkowymi oświadczeniami w razie potrzeby. |