Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ten przewodnik pomaga zrozumieć różnice między pakietem Microsoft Entra ID Auth SDK (sidecar) a biblioteką Microsoft.Identity.Web działającą w procesie, służącymi do obsługi uwierzytelniania w aplikacjach. Microsoft. Biblioteka Identity.Web integruje się bezpośrednio z aplikacjami .NET w celu uzyskania maksymalnej wydajności. Zestaw SDK uwierzytelniania Microsoft Entra ID (sidecar) działa jako oddzielny kontener i obsługuje każdy język programowania za pośrednictwem interfejsów API HTTP. Wybór prawidłowego 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 procesie aplikacji. Zestaw SDK uwierzytelniania Microsoft Entra ID (sidecar) działa jako niezależna usługa obok Twojej 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) | pakiet SDK uwierzytelniania Microsoft Entra ID (sidecar) (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 wiąże strategię uwierzytelniania z platformą .NET, wymagając doświadczenia w języku C# i środowiska uruchomieniowego .NET w każdym miejscu, gdzie jest potrzebne uwierzytelnianie. | Rozdziela uwierzytelnianie ze stosu technologii aplikacji, uwidaczniając niezależny od języka interfejs HTTP, który działa równie dobrze z Python, Node.js, Go lub dowolnym językiem 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 (proces)
Ten fragment kodu pokazuje, jak Microsoft.Identity.Web integruje się bezpośrednio z aplikacją 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 SDK do uwierzytelniania Microsoft Entra ID (sidecar) (poza procesem)
Ten fragment kodu pokazuje, jak wywołać SDK uwierzytelniania Microsoft Entra ID (sidecar) z aplikacji Node.js za pomocą 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 | zestaw SDK uwierzytelniania Microsoft Entra ID (sidecar) |
|---|---|---|
| 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średni MSAL.NET | Za pośrednictwem interfejsu API HTTP |
| Buforowanie tokenów | Rozproszone, działające w pamięci | Rozproszone, działające w pamięci |
| 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 | Weryfikowanie punktu końcowego |
| Kolejny interfejs API | IDownstreamApi | punkt końcowy /DownstreamApi |
| Microsoft Graph | Integracja z zestawem Graph SDK | Za pośrednictwem narzędzia DownstreamApi |
| Wydajność | W toku (najszybszy) | Obciążenie HTTP |
| Configuration |
appsettings.json i kod |
appsettings.json i zmienne środowiskowe |
| Debugowanie | Standardowe debugowanie .NET | Debugowanie kontenera |
| Przeładowywanie na gorąco | .NET Przeładowywanie na gorąco - Ponowne ładowanie na gorąco | Ponowne uruchamianie kontenera |
| Aktualizacje pakietów | Pakiety NuGet | Obrazy kontenerów |
| Licencja | MIT | MIT |
Kiedy należy używać każdego podejścia
To, czy wybrać Microsoft.Identity.Web, czy Microsoft Entra ID Auth SDK (sidecar), zależy od wymagań aplikacji, jej architektury i strategii wdrażania. W zależności od potrzeb jedno podejście może być bardziej odpowiednie niż inne. Poniższe wskazówki mogą pomóc w podjęciu świadomej decyzji.
| Scenario | Microsoft.Identity.Web (In-Process) | zestaw SDK uwierzytelniania Microsoft Entra ID (przyczepka) (poza procesem) |
|---|---|---|
| Stack technologiczny | aplikacje .NET wyłącznie • ASP.NET Core API Webowych • ASP.NET Core Web Apps • Usługi .NET Worker Services • Aplikacje Blazor • Aplikacje demona |
Mikrousługi wielojęzyczne • usługi Node.js, Python, Go, Java • Architektury wielo-językowe • Usługi inne niż .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 ID Auth SDK (sidecar)
W niektórych scenariuszach możesz chcieć zmigrować istniejącą aplikację platformy .NET, która korzysta z Microsoft.Identity.Web, tak aby używała pakietu Microsoft Entra ID Auth SDK (sidecar) 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 wprowadzeniem tej zmiany 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
Microsoft nie zaleca migrowania z Microsoft.Identity.Web do zestawu SDK uwierzytelniania Microsoft Entra ID (sidecar). Jeśli zdecydujesz się wprowadzić tę zmianę, w poniższych przykładach przedstawiono podobne pojęcia w innych językach i strukturach.
Krok 1. Wdrażanie kontenera zestawu SDK
Najpierw dodaj kontener SDK do zasobnika:
# Before: Single ASP.NET Core container
containers:
- name: app
image: myregistry/myapp:latest
# After: App + Microsoft Entra ID Auth SDK (sidecar)
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 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 biblioteki Microsoft.Identity.Web i zastąp je wywołaniami HTTP do punktów końcowych zestawu SDK uwierzytelniania Microsoft Entra ID (sidecar):
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 widać wywołania zestawu SDK uwierzytelniania Microsoft Entra ID (sidecar) z użyciem punktu końcowego /DownstreamApi w celu pobrania danych 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: Usuń zależności Microsoft.Identity.Web
Po wykonaniu poprzednich kroków należy uporządkować aplikację, usuwając pakiety NuGet dla 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 usuwać oryginalnej konfiguracji uwierzytelniania. Zamiast tego można delegować walidację całkowicie do zestawu SDK uwierzytelniania Microsoft Entra ID (przyczepki).
// 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 przejściowym.
- Testy wydajnościowe: Mierzenie wpływu na obciążenie HTTP.
- Testy zabezpieczeń: Weryfikowanie obsługi tokenów i zasad sieciowych.
Zagadnienia dotyczące wydajności
Obciążenie związane z zestawem SDK
Zestaw MICROSOFT ENTRA ID Auth SDK (sidecar) wprowadza obciążenie komunikacji HTTP:
| Współczynnik wydajności | Wpływ | Strategia ograniczania ryzyka |
|---|---|---|
| Latency | Około 1–5 ms na każdą żądanie komunikacji przez localhost | Użyj protokołu HTTP/2, aby zmniejszyć obciążenie połączenia. |
| Throughput | Ograniczone przez buforowanie połączeń HTTP | Zaimplementuj buforowanie połączeń w celu ponownego użycia połączeń HTTP. |
| Pamięć | Dodatkowe obciążenie pamięci kontenera | Upewnij się, że zasoby zestawu SDK są odpowiednio alokowane. |
| Wydajność żądań | Wiele rund dla złożonych operacji | Żądania wsadowe do łączenia wielu operacji, jeśli to możliwe. |
| Wydajność tokenu | Powtarzający się narzut związany z pozyskiwaniem tokenów | Korzystaj z pamięci podręcznej tokenów zestawu SDK w celu uzyskania optymalnej wydajności. |
wydajność In-Process
Korzystanie z Microsoft.Identity.Web ma minimalne zużycie zasobów, ponieważ działa w ramach tego samego procesu co aplikacja. Zapewnia ona natywne wywołania metod z opóźnieniem rzędu mikrosekund i współdzieloną pamięcią procesu bez ograniczeń protokołu HTTP. Gdy wydajność jest krytyczna, integracja procesów jest optymalnym wyborem. Jednak elastyczność pakietu Microsoft Entra ID Auth SDK (sidecar) oraz jego konstrukcja niezależna od języka mogą w wielu scenariuszach przeważać nad kompromisami dotyczącymi wydajności.
W poniższej tabeli przedstawiono porównania wydajności i kosztów dla użycia w ramach procesu oraz korzystania z zestawu SDK uwierzytelniania Microsoft Entra ID (sidecar) poza procesem:
Zagadnienia dotyczące kosztów
| Współczynnik kosztów | Microsoft.Identity.Web (In-Process) | zestaw SDK do uwierzytelniania Microsoft Entra ID (sidecar) (poza procesem) |
|---|---|---|
| Środowisko obliczeniowe | Minimalne dodatkowe zużycie procesora i pamięci w procesie aplikacji | Dodatkowe zasoby kontenera na każdy pod. |
| Network | Brak dodatkowych obciążeń | Minimalna komunikacja w 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 o pojemności 128 miB/100 m:
| Resource | W toku | zestaw SDK uwierzytelniania Microsoft Entra ID (sidecar) |
|---|---|---|
| Pamięć | Dodatkowe ok. 0 MB | 10 × 128 MiB = 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 | zestaw SDK uwierzytelniania Microsoft Entra ID (sidecar) |
|---|---|---|
| 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 .NET | Ta dokumentacja |
| Community | Duża społeczność .NET | Rosnąca społeczność |
Podejście hybrydowe
Oba podejścia można połączyć w ramach tej samej architektury. Użyj Microsoft.Identity.Web dla usług .NET, które wymagają maksymalnej wydajności, i użyj zestawu Microsoft Entra ID Auth SDK (w modelu sidecar) dla usług innych niż .NET lub wtedy, gdy potrzebujesz wzorców uwierzytelniania niezależnych od języka. Ta strategia hybrydowa pomaga zoptymalizować wydajność, w której ma kluczowe znaczenie, zachowując spójność i elastyczność w całym ekosystemie usług.
Przykładowa architektura jest następująca:
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 ID Auth SDK (sidecar)</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