Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten przewodnik pomaga zidentyfikować różnice między zestawem Microsoft Entra SDK for AgentID i biblioteką Microsoft.Identity.Web do obsługi uwierzytelniania w aplikacjach. Biblioteka Microsoft.Identity.Web integruje się bezpośrednio z aplikacjami .NET w celu uzyskania maksymalnej wydajności, podczas gdy zestaw Microsoft Entra SDK for AgentID działa jako oddzielny kontener i obsługuje dowolny język programowania za pośrednictwem interfejsów API HTTP, a wybór poprawnego podejścia zależy od architektury, języka i środowiska wdrażania aplikacji.
Różnice architektury
Podstawowa różnica polega na miejscu wykonywania logiki uwierzytelniania. Microsoft.Identity.Web działa w ramach procesu aplikacji, a zestaw Microsoft Entra SDK for AgentID działa jako niezależna usługa obok aplikacji. Ten wybór architektury ma wpływ na czynniki, takie jak przepływ pracy programowania i złożoność operacyjna.
| Aspekt | Microsoft.Identity.Web (In-Process) | Zestaw Microsoft Entra SDK dla identyfikatora agenta (poza procesem) |
|---|---|---|
| Granica procesu | Udostępnia wspólny proces, pamięć i cykl życia z aplikacją, umożliwiając bezpośrednie wywoływanie metod i współdzielenie konfiguracji | Utrzymuje pełną izolację, komunikując się tylko za pośrednictwem interfejsów API HTTP i zarządzając własnymi zasobami niezależnie |
| Sprzęganie języka | Ściśle łączy strategię uwierzytelniania z platformą .NET, wymagając środowiska języka C# i środowiska uruchomieniowego platformy .NET wszędzie, gdzie potrzebujesz uwierzytelniania | Rozdziela uwierzytelnianie ze stosu technologii aplikacji, uwidaczniając niezależny od języka interfejs HTTP, który działa równie dobrze w języku Python, Node.js, Go lub dowolnym języku obsługującym protokół HTTP |
| Model wdrażania | Wdraża jako pakiety NuGet osadzone w pliku binarnym aplikacji, tworząc monolityczną jednostkę wdrażania | Wdraża jako oddzielny obraz kontenera, umożliwiając niezależne przechowywanie wersji, skalowanie i aktualizacje logiki uwierzytelniania bez wpływu na kod aplikacji |
Microsoft.Identity.Web (In-Process)
Ten fragment kodu pokazuje, jak platforma Microsoft.Identity.Web integruje się bezpośrednio z aplikacją platformy ASP.NET Core:
// Startup configuration
services.AddMicrosoftIdentityWebApiAuthentication(Configuration)
.EnableTokenAcquisitionToCallDownstreamApi()
.AddDownstreamApi("Graph", Configuration.GetSection("DownstreamApis:Graph"))
.AddInMemoryTokenCaches();
// Usage in controller
public class MyController : ControllerBase
{
private readonly IDownstreamApi _downstreamApi;
public MyController(IDownstreamApi downstreamApi)
{
_downstreamApi = downstreamApi;
}
public async Task<ActionResult> GetUserData()
{
var user = await _downstreamApi.GetForUserAsync<User>("Graph",
options => options.RelativePath = "me");
return Ok(user);
}
}
Zestaw Microsoft Entra SDK dla identyfikatora agenta (poza procesem)
Ten fragment kodu pokazuje, jak wywołać zestaw Microsoft Entra SDK for AgentID z aplikacji Node.js przy użyciu protokołu HTTP. Wywołanie punktu końcowego /DownstreamApi zestawu SDK obsługuje pozyskiwanie tokenów i wywołania interfejsów API podrzędnych, w tym przekazywanie przychodzącego tokenu dla przepływów OBO w nagłówku Authorization:
// Configuration
const SidecarUrl = process.env.SIDECAR_URL || "http://localhost:5000";
// Usage in application
async function getUserData(incomingToken: string) {
const response = await fetch(
`${SidecarUrl}/DownstreamApi/Graph?optionsOverride.RelativePath=me`,
{
headers: {
'Authorization': `Bearer ${incomingToken}`
}
}
);
const result = await response.json();
return JSON.parse(result.content);
}
Porównanie funkcji
| Funkcja | Microsoft.Identity.Web | Microsoft Entra SDK dla AgentID |
|---|---|---|
| Obsługa języków | Tylko język C# /.NET | Dowolny język (HTTP) |
| Wdrożenie | Biblioteka w trakcie procesu | Oddzielny kontener |
| Pozyskiwanie tokenów | ✅ Bezpośrednie MSAL.NET | ✅ Za pośrednictwem interfejsu API HTTP |
| Buforowanie tokenów | ✅W pamięci, ✅ rozproszona | ✅Rozproszona pamięć ❌ |
| Przepływ OBO | ✅ Natywna obsługa | ✅ Za pośrednictwem punktu końcowego HTTP |
| Poświadczenia klienta | ✅ Natywna obsługa | ✅ Za pośrednictwem punktu końcowego HTTP |
| Tożsamość zarządzana | ✅ Bezpośrednia obsługa | ✅ Bezpośrednia obsługa |
| Tożsamości agenta | ✅ Za pośrednictwem rozszerzeń | ✅ Parametry zapytania |
| Walidacja tokenu | ✅ Oprogramowanie pośredniczące | ✅ /Validate endpoint (Weryfikowanie punktu końcowego) |
| Kolejny interfejs API | ✅ IDownstreamApi | ✅ /DownstreamApi punkt końcowy |
| Microsoft Graph | ✅ Integracja z zestawem Graph SDK | ⚠️ Za pośrednictwem DownstreamApi |
| Wydajność | ⚡ W trakcie realizacji (najszybszy) | 🔄 Obciążenie http |
| Configuration |
appsettings.json i kod |
appsettings.json i zmienne środowiskowe |
| Debugowanie | ✅ Standardowe debugowanie platformy .NET | ⚠✔ Debugowanie kontenera |
| Przeładowywanie na gorąco | ✅ Automatyczne ładowanie .NET | ❌ Ponowne uruchamianie kontenera |
| Aktualizacje pakietów | 📦 Pakiety NuGet | 🐳 Obrazy kontenerów |
| Licencja | MIT | MIT |
Kiedy należy używać każdego podejścia
Wybór między microsoft.Identity.Web a zestawem Microsoft Entra SDK for AgentID zależy od wymagań, architektury i strategii wdrażania aplikacji. W zależności od potrzeb jedno podejście może być bardziej odpowiednie niż inne, a poniższe wskazówki mogą pomóc w podjęciu świadomej decyzji.
| Scenario | Microsoft.Identity.Web (In-Process) | Zestaw Microsoft Entra SDK dla identyfikatora agenta (poza procesem) |
|---|---|---|
| Stack technologiczny | Aplikacje platformy .NET wyłącznie • podstawowe interfejsy API sieci Web ASP.NET • ASP.NET Core Web Apps • Usługi robocze platformy .NET • Aplikacje Blazor • Aplikacje demona |
Mikrousługi wielojęzyczne • Node.js, Python, Go, Usługi Java • Architektury wielo-językowe • usługi spoza .NET • Integracja starszych systemów |
| Wymagania dotyczące wydajności | Wydajność jest krytyczna • Scenariusze o wysokiej przepływności • Operacje wrażliwe na opóźnienia Każda milisekunda się liczy |
Może tolerować obciążenie http • ~1–5 ms dodatkowe opóźnienie dopuszczalne • Przepustowość nie jest ograniczana przez uwierzytelnianie |
| Potrzeby integracji | Wymagana jest głęboka integracja • Niestandardowa konfiguracja MSAL.NET • Bezpośredni dostęp do funkcji biblioteki MSAL • Zaawansowane strategie pamięci podręcznej tokenów |
Standaryzacja integracji • Wystarczająca ilość interfejsu API HTTP • Spójne wzorce uwierzytelniania między usługami |
| Doświadczenie w programowaniu | Szybki rozwój • Szybkie tworzenie prototypów • Przeładowywanie na gorąco na potrzeby programowania • Standardowe debugowanie .NET |
Programowanie oparte na kontenerach • Ponowne uruchamianie kontenera w przypadku zmian • Wymagane debugowanie kontenera |
| Zespół i architektura | Stos jednojęzyczny • Wiedza zespołowa w języku C#/.NET • Brak wymagań dotyczących wielu języków |
Różnorodność technologii • Mieszanka struktur i języków • Struktura zespołu polyglot |
| Model wdrażania | Wdrożenia monolityczne • Wdrażanie pojedynczej aplikacji • Tradycyjne modele hostingu |
Wdrożenia konteneryzowane • Środowiska Kubernetes • Konfiguracje narzędzia Docker Compose • Architektury siatki usług |
| Operations | Zintegrowane aktualizacje uwierzytelniania • Zmiany uwierzytelniania wymagają ponownego kompilowanie aplikacji • Wspólny cykl życia z aplikacją |
Korzyści operacyjne • Niezależne skalowanie logiki uwierzytelniania • Oddzielanie aktualizacji uwierzytelniania od kodu aplikacji • Scentralizowane monitorowanie uwierzytelniania |
Wskazówki dotyczące migracji
Migracja z Microsoft.Identity.Web do Microsoft Entra SDK dla identyfikatora AgentID
W niektórych scenariuszach możesz chcieć zmigrować istniejącą aplikację .NET przy użyciu Microsoft.Identity.Web, aby skorzystać z zestawu SDK Microsoft Entra dla AgentID do uwierzytelniania. Przyczyny migracji mogą obejmować wdrożenie architektury wielojęzycznej, standaryzację uwierzytelniania między usługami lub przejście do konteneryzowanego modelu wdrażania.
Przed wykonaniem tej czynności należy dokładnie rozważyć i zaplanować. Ta część zawiera ogólną ścieżkę migracji z przykładami kodu, które ułatwiają migrację aplikacji.
Ostrzeżenie
Firma Microsoft nie zaleca przejścia z witryny Microsoft.Identity.Web do zestawu Microsoft Entra SDK for AgentID, ale jeśli zdecydujesz się to zrobić, poniżej przedstawiono pokazy podobnych pojęć w innych językach i strukturach.
Krok 1. Wdrażanie kontenera zestawu SDK
Najpierw musisz dodać kontener SDK do zasobnika.
# Before: Single ASP.NET Core container
containers:
- name: app
image: myregistry/myapp:latest
# After: App + Microsoft Entra SDK for AgentID
containers:
- name: app
image: myregistry/myapp:latest
env:
- name: SIDECAR_URL
value: "http://localhost:5000"
- name: sidecar
image: mcr.microsoft.com/entra-sdk/auth-sidecar:1.0.0
env:
- name: AzureAd__TenantId
value: "your-tenant-id"
- name: AzureAd__ClientId
value: "your-client-id"
Krok 2. Migrowanie konfiguracji
Następnie należy przenieść konfigurację z appsettings.json do zmiennych środowiskowych:
Przed (appsettings.json)
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "your-tenant-id",
"ClientId": "your-client-id"
},
"DownstreamApis": {
"Graph": {
"BaseUrl": "https://graph.microsoft.com/v1.0",
"Scopes": "User.Read Mail.Read",
"RelativePath": "/me"
}
}
}
Po (Kubernetes ConfigMap / Zmienne środowiskowe)
apiVersion: v1
kind: ConfigMap
metadata:
name: sidecar-config
data:
AzureAd__Instance: "https://login.microsoftonline.com/"
AzureAd__TenantId: "your-tenant-id"
AzureAd__ClientId: "your-client-id"
DownstreamApis__Graph__BaseUrl: "https://graph.microsoft.com/v1.0"
DownstreamApis__Graph__Scopes: "User.Read Mail.Read"
DownstreamApis__Graph__RelativePath: "/me"
Krok 3. Aktualizowanie kodu aplikacji
Znajdź wszystkie wystąpienia wywołań w procesie do microsoft.Identity.Web i zastąp je wywołaniami HTTP do zestawu Microsoft Entra SDK dla punktów końcowych AgentID:
Przed (C# z IDownstreamApi):
public class UserController : ControllerBase
{
private readonly IDownstreamApi _downstreamApi;
public UserController(IDownstreamApi downstreamApi)
{
_downstreamApi = downstreamApi;
}
[HttpGet]
public async Task<ActionResult<User>> GetMe()
{
var user = await _downstreamApi.GetForUserAsync<User>(
"Graph",
options => options.RelativePath = "me"
);
return Ok(user);
}
}
Po (dowolny język z klientem HTTP):
W poniższym fragmencie kodu można zobaczyć wywołania Microsoft Entra SDK dla AgentID przy użyciu punktu końcowego /DownstreamApi, aby pobrać dane użytkownika. Przykłady są dostępne w językach C# i TypeScript.
public class UserController : ControllerBase
{
private readonly HttpClient _httpClient;
private readonly string _SidecarUrl;
public UserController(IHttpClientFactory httpClientFactory, IConfiguration config)
{
_httpClient = httpClientFactory.CreateClient();
_SidecarUrl = config["SIDECAR_URL"];
}
[HttpGet]
public async Task<ActionResult<User>> GetMe()
{
var inboundAuthorizationHeader = Request.Headers["Authorization"].ToString();
// this validates the inbound authorization header and calls the downstream API.
// If you don't call a downstream API, Do validate the inbound authorization header
// (calling the /Validate endpoint)
var request = new HttpRequestMessage(
HttpMethod.Get,
$"{_SidecarUrl}/DownstreamApi/Graph?optionsOverride.RelativePath=me"
);
request.Headers.Add("Authorization", inboundAuthorizationHeader);
var response = await _httpClient.SendAsync(request);
var result = await response.Content.ReadFromJsonAsync<SidecarResponse>();
var user = JsonSerializer.Deserialize<User>(result.Content);
return Ok(user);
}
}
TypeScript
Tę samą logikę można zaimplementować w języku TypeScript w następujący sposób:
export async function getMe(incomingToken: string): Promise<User> {
const SidecarUrl = process.env.SIDECAR_URL!;
const response = await fetch(
`${SidecarUrl}/DownstreamApi/Graph?optionsOverride.RelativePath=me`,
{
headers: {
'Authorization': incomingToken
}
}
);
const result = await response.json();
return JSON.parse(result.content) as User;
}
Krok 4. Usuwanie zależności Microsoft.Identity.Web
Po zakończeniu poprzednich kroków możesz uporządkować aplikację, usuwając pakiety NuGet używane przez microsoft.Identity.Web z projektu:
<!-- Remove these from .csproj -->
<PackageReference Include="Microsoft.Identity.Web" Version="..." />
<PackageReference Include="Microsoft.Identity.Web.MicrosoftGraph" Version="..." />
<PackageReference Include="Microsoft.Identity.Web.DownstreamApi" Version="..." />
Jeśli nadal chcesz zweryfikować tokeny w aplikacji, nie musisz w pełni usuwać oryginalnej konfiguracji uwierzytelniania, chociaż można delegować walidację całkowicie do zestawu Microsoft Entra SDK for AgentID.
// Remove from Program.cs or Startup.cs
services.AddMicrosoftIdentityWebApiAuthentication(Configuration)
.EnableTokenAcquisitionToCallDownstreamApi()
.AddDownstreamApi("Graph", Configuration.GetSection("DownstreamApis:Graph"))
.AddInMemoryTokenCaches();
Krok 5. Testowanie i weryfikowanie
- Testy jednostkowe: aktualizowanie testów w celu pozorowania wywołań HTTP do zestawu SDK
- Testy integracyjne: testowanie komunikacji SDK w środowisku staging
- Testy wydajnościowe: mierzenie wpływu na obciążenie HTTP
- Testy zabezpieczeń: weryfikowanie obsługi tokenów i zasad sieci
Zagadnienia dotyczące wydajności
Obciążenie zestawu SDK
Zestaw Microsoft Entra SDK for AgentID wprowadza obciążenie komunikacji HTTP:
| Współczynnik wydajności | Wpływ | Strategia ograniczania ryzyka |
|---|---|---|
| Latency | ~1–5 ms na każde żądanie komunikacji localhost | Użyj protokołu HTTP/2, aby zmniejszyć obciążenie połączenia |
| Throughput | Ograniczone przez buforowanie połączeń HTTP | Zastosuj buforowanie połączeń, aby ponownie używać połączeń HTTP |
| Pamięć | Dodatkowe obciążenie pamięci kontenera | Zapewnianie odpowiedniej alokacji zasobów zestawu SDK |
| Wydajność żądań | Wiele rund dla złożonych operacji | Żądania wsadowe w celu łączenia wielu operacji, jeśli to możliwe |
| Wydajność tokenu | Powtarzający się narzut związany z pozyskiwaniem tokenów | Wykorzystanie pamięci podręcznej tokenów zestawu SDK w celu uzyskania optymalnej wydajności |
wydajność In-Process
Użycie biblioteki Microsoft.Identity.Web ma minimalne obciążenie, ponieważ działa w ramach tego samego procesu co aplikacja, zapewniając natywne wywołania metod z mikrosekundowymi opóźnieniami i pamięcią współużytkowanego procesu bez ograniczeń protokołu HTTP. Gdy wydajność jest krytyczna, integracja w procesie jest optymalnym wyborem, ale elastyczność i niezależność od języka projektu zestawu Microsoft Entra SDK dla AgentID może przewyższać kompromisy wydajności w wielu scenariuszach.
Poniżej przedstawiono porównania wydajności i kosztów użycia metodą in-process oraz Microsoft Entra SDK dla AgentID w trybie Out-of-Process.
Zagadnienia dotyczące kosztów
| Współczynnik kosztów | Microsoft.Identity.Web (In-Process) | Zestaw Microsoft Entra SDK dla identyfikatora agenta (poza procesem) |
|---|---|---|
| Środowisko obliczeniowe | Minimalne dodatkowe wykorzystanie CPU/pamięci w procesie aplikacji | Dodatkowe zasoby kontenera na pod |
| Network | Brak dodatkowych obciążeń | Minimalna (komunikacja localhost) |
| Przechowywanie | Rozmiar pakietu NuGet (~10 MB) | Przechowywanie obrazów kontenerów |
| Zarządzanie | Brak dodatkowych obciążeń | Obciążenie związane z orkiestracją kontenerów |
Przykład kosztów
W przypadku 10 replik z konfiguracją zestawu SDK 128Mi/100m:
| Resource | W toku | Microsoft Entra SDK dla AgentID |
|---|---|---|
| Pamięć | Ok. 0 MB dodatkowe | 10 × 128Mi = 1,28 GB |
| CPU | ~0% dodatkowe | 10 × 100 m = 1 rdzeń |
| Przechowywanie | ~10 MB na wdrożenie | Rozmiar obrazu kontenera na węzeł |
Pomoc techniczna i konserwacja
| Aspekt | Microsoft.Identity.Web | Microsoft Entra SDK dla AgentID |
|---|---|---|
| Updates | Aktualizacje pakietów NuGet | Aktualizacje obrazu kontenera |
| Niezgodne zmiany | Poprzez wersjonowanie pakietów | Za pomocą tagów kontenera |
| Poprawki błędów | Integracja czasu kompilacji | Aktualizacje kontenera środowiska uruchomieniowego |
| Poprawki zabezpieczeń | Ponowne kompilowanie aplikacji | Ponowne wdrażanie kontenera |
| dokumentacja | Obszerne dokumenty platformy .NET | Ta dokumentacja |
| Community | Duża społeczność platformy .NET | Rosnąca społeczność |
Podejście hybrydowe
Oba podejścia można połączyć w ramach tej samej architektury: użyj biblioteki Microsoft.Identity.Web dla usług .NET, które wymagają maksymalnej wydajności, a jednocześnie korzystając z zestawu Microsoft Entra SDK dla identyfikatora AgentID dla usług non-.NET lub gdy potrzebujesz wzorców uwierzytelniania niezależnego od języka. Ta strategia hybrydowa umożliwia optymalizowanie wydajności, gdy krytyczne jest zachowanie spójności i elastyczności w całym ekosystemie usług.
Przykładowa architektura wygląda następująco:
graph TB
subgraph cluster["Kubernetes Cluster"]
subgraph netpod["<b>.NET API Pod</b>"]
netapi["<b>.NET API</b><br/>(Microsoft.Identity.Web)"]
style netapi fill:#0078d4,stroke:#005a9e,stroke-width:2px,color:#fff
end
subgraph nodepod["<b>Node.js API Pod</b>"]
nodeapi["<b>Node.js API</b>"]
sidecar["<b>Microsoft Entra SDK for AgentID</b>"]
style nodeapi fill:#68a063,stroke:#4a7c45,stroke-width:2px,color:#fff
style sidecar fill:#f2711c,stroke:#d85e10,stroke-width:2px,color:#fff
end
end
style cluster fill:#f0f0f0,stroke:#333,stroke-width:3px
style netpod fill:#e8f4f8,stroke:#0078d4,stroke-width:2px
style nodepod fill:#e8f4e8,stroke:#68a063,stroke-width:2px
Dalsze kroki
- Przewodnik instalacji — wdrażanie zestawu Microsoft Entra SDK dla identyfikatora agenta
- Dokumentacja konfiguracji — konfigurowanie zestawu SDK
- Scenariusze — przykłady praktyczne
- Dokumentacja Microsoft.Identity.Web — informacje o bibliotece procesów