Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här artikeln visar hur du konfigurerar certifikatfri autentisering så att ditt program autentiseras med Microsoft Entra ID utan att hantera certifikat eller klienthemligheter. Din app använder en FIC (Federated Identity Credential) som backas upp av en Azure hanterad identitet för att hämta token, vilket eliminerar rotation av autentiseringsuppgifter, minskar hemlighetsspridningen och förenklar Azure distributioner.
Microsoft. Identity.Web stöder certifikatfri autentisering via källtypen SignedAssertionFromManagedIdentity autentiseringsuppgifter, som finns i version 2.12.0 och senare.
Förstå certifikatfri autentisering
I det här avsnittet beskrivs hur certifikatfri autentisering fungerar och när den ska användas.
Traditionellt bevisar konfidentiella klientprogram sin identitet för att Microsoft Entra ID genom att presentera en klienthemlighet eller ett certifikat. Båda metoderna kräver att du hanterar livscykeln för autentiseringsuppgifter – rotera hemligheter innan de upphör att gälla, förnya certifikat och lagra dem på ett säkert sätt.
Federerade identitetsautentiseringsuppgifter (FIC) ändrar den här modellen. Med FIC konfigurerar du en förtroenderelation mellan din appregistrering och en hanterad identitet. När ditt program behöver autentisera:
- Microsoft.Identity.Web begär en token från slutpunkten för hanterad identitet på Azure-värd.
- Biblioteket använder token för hanterad identitet som ett signerat intyg för att autentisera med Microsoft Entra ID.
- Microsoft Entra ID verifierar den signerade försäkran mot konfigurationen av federerade autentiseringsuppgifter i appregistreringen.
- Microsoft Entra ID utfärdar en åtkomsttoken för den begärda resursen.
Resultatet är en helt autentiseringsfri distribution där det inte finns några hemligheter eller certifikat i dina konfigurations-, kod- eller miljövariabler.
Välj rätt autentiseringsmetod
Följande tabell hjälper dig att avgöra när certifikatfri autentisering är rätt val.
| Scenario | Rekommenderat tillvägagångssätt |
|---|---|
| Appen körs på Azure och du vill ha noll hantering av autentiseringsuppgifter | Certifikatlös med FIC |
| Appen körs på Azure men behöver stöd för lokal återställning | Certifikatbaserade autentiseringsuppgifter med FIC som primär |
| Appen körs utanför Azure (lokalt, andra moln) | Certifikat eller klienthemligheter |
| Utveckling och testning på lokala datorer | Klienthemligheter eller certifikat från ett lokalt arkiv |
Förutsättningar
Kontrollera att du har följande resurser och verktyg innan du börjar:
- En Azure-prenumeration. Om du inte har ett, skapa ett gratis konto.
- En appregistrering i Microsoft Entra ID med nödvändiga API-behörigheter för ditt scenario.
- En Hanterad identitet i Azure – antingen systemtilldelad på beräkningsresursen eller en fristående användartilldelad hanterad identitet.
- Microsoft. Identity.Web version 2.12.0 eller senare installerad i projektet.
- En Azure beräkningsresurs som stöder hanterad identitet, till exempel Azure App Service, Azure Kubernetes Service (AKS), Azure Container Apps eller Azure Virtual Machines.
Steg 1: Skapa eller identifiera en hanterad identitet
Du kan använda antingen en systemtilldelad eller användartilldelad hanterad identitet. Om du inte har skapat någon ännu följer du anvisningarna för ditt scenario.
Alternativ A: Använd en systemtilldelad hanterad identitet
Systemtilldelade hanterade identiteter är knutna till livscykeln för en Azure resurs. När du aktiverar en systemtilldelad identitet på en resurs som en App Service skapar Azure en identitet automatiskt.
- I Azure-portalen går du till beräkningsresursen (till exempel din App Service).
- Välj Identitet på den vänstra navigeringsmenyn.
- På fliken Systemtilldelat ställer du in Status till På.
- Välj Spara och bekräfta åtgärden.
- När identiteten har skapats kopierar du objekt-ID:t (huvudnamn). Du behöver det här värdet när du konfigurerar federerade autentiseringsuppgifter.
Alternativ B: Skapa en användartilldelad hanterad identitet
Användartilldelade hanterade identiteter är fristående Azure resurser som du kan tilldela till en eller flera beräkningsresurser.
- I portalen Azure söker du efter Hanterade identiteter och väljer den.
- Välj Skapa.
- Välj din prenumeration, resursgrupp, region och ange ett namn för identiteten.
- Välj Granska + skapa och sedan Skapa.
- När distributionen är klar öppnar du den nya resursen för hanterad identitet.
- Kopiera klient-ID :t från sidan Översikt . Du behöver det här värdet för programkonfigurationen.
Steg 2: Konfigurera en federerad identitetsautentiseringsuppgift i Azure-portalen
En federerad identitetsautentiseringsuppgift upprättar en förtroenderelation mellan din appregistrering och den hanterade identiteten. Följ dessa steg för att skapa en:
I portalen Azure går du till Microsoft Entra ID>App registrations.
Välj den appregistrering som programmet använder.
I den vänstra navigeringsmenyn väljer du Certifikat och hemligheter.
Välj fliken Federerade autentiseringsuppgifter.
Välj Lägg till autentiseringsuppgift.
Under Scenario med federerade autentiseringsuppgifter väljer du Kundhanterade nycklar eller Annan utfärdare (de tillgängliga alternativen beror på din portalversion).
Konfigurera följande fält:
Fält Värde Utfärdare https://login.microsoftonline.com/{tenant-id}/v2.0– Ersätt{tenant-id}med ditt Microsoft Entra klient-ID.Ämnesidentifierare Objekt-ID:t (huvudnamn) för den hanterade identiteten. För systemtilldelade hittar du detta på resursens identitetssida. För användartilldelad hittar du detta på sidan Översikt för hanterad identitet under Principal-ID. Namn Ett beskrivande namn, till exempel fic-managed-identity-prod.målgrupp api://AzureADTokenExchange(standardvärdet).Välj Lägg till.
Viktigt!
Ämnesidentifieraren måste exakt matcha objekt-ID:t (huvudnamn) för den hanterade identiteten. Ett matchningsfel gör att autentiseringen misslyckas med ett AADSTS70021 fel.
Konfigurera en federerad identitetsautentiseringsuppgift med Azure CLI
Du kan också skapa federerade autentiseringsuppgifter med Azure CLI. Följande kommando skapar en autentiseringsuppgift för din appregistrering:
az ad app federated-credential create \
--id <app-object-id> \
--parameters '{
"name": "fic-managed-identity-prod",
"issuer": "https://login.microsoftonline.com/<tenant-id>/v2.0",
"subject": "<managed-identity-principal-id>",
"audiences": ["api://AzureADTokenExchange"],
"description": "FIC for production managed identity"
}'
Utfärdar-URL:er efter Azure-tjänst
Utfärdarens URL i de federerade autentiseringsuppgifterna beror på den Azure tjänst som är värd för ditt program:
| Azure tjänst | Utfärdar-URL |
|---|---|
| Azure App Service/Azure Functions | https://login.microsoftonline.com/{tenant-id}/v2.0 |
| Azure Container Apps | https://login.microsoftonline.com/{tenant-id}/v2.0 |
| Azure Kubernetes Service (AKS) | OIDC-utfärdarens URL för klustret (hämta med az aks show --query oidcIssuerProfile.issuerUrl) |
| Azure Virtual Machines | https://login.microsoftonline.com/{tenant-id}/v2.0 |
Format för ämnesidentifierare
Formatet för ämnesidentifieraren beror på typen hanterad identitet:
Systemtilldelad hanterad identitet – Använd objekt-ID:t (huvudnamn) från resursens identitetssida . Det här är ett GUID-värde, till exempel a1b2c3d4-e5f6-7890-abcd-ef1234567890.
Användartilldelad hanterad identitet – Använd huvudnamns-ID :t (kallas även objekt-ID) från sidan Översikt för den hanterade identitetsresursen. Det här är också ett GUID-värde.
Anmärkning
För AKS med arbetsbelastningsidentitet använder ämnesidentifieraren ett annat format: system:serviceaccount:{namespace}:{service-account-name}. Det här värdet måste matcha kubernetes-tjänstkontot som podden använder.
Steg 3: Konfigurera ditt program
Uppdatera appsettings.json
Lägg till ClientCredentials-avsnittet i din AzureAd-konfiguration. Ange SourceType till SignedAssertionFromManagedIdentity:
För användartilldelad hanterad identitet
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "YOUR_TENANT_ID",
"ClientId": "YOUR_CLIENT_ID",
"ClientCredentials": [
{
"SourceType": "SignedAssertionFromManagedIdentity",
"ManagedIdentityClientId": "USER_ASSIGNED_MSI_CLIENT_ID"
}
]
}
}
Ersätt följande platshållare:
| Platshållare | Beskrivning |
|---|---|
YOUR_TENANT_ID |
Ditt Microsoft Entra klient-ID. |
YOUR_CLIENT_ID |
Program-ID:t (klient) för din appregistrering. |
USER_ASSIGNED_MSI_CLIENT_ID |
Klient-ID för den användartilldelade hanterade identiteten (från identitetens översiktssida). |
För systemtilldelad hanterad identitet
När du använder en systemtilldelad hanterad identitet utelämnar ManagedIdentityClientId du egenskapen. Microsoft. Identity.Web använder automatiskt värdens systemtilldelade identitet:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "YOUR_TENANT_ID",
"ClientId": "YOUR_CLIENT_ID",
"ClientCredentials": [
{
"SourceType": "SignedAssertionFromManagedIdentity"
}
]
}
}
Registrera tjänster i Program.cs
Inga särskilda kodändringar krävs i startkonfigurationen. Standard Microsoft. Identity.Web-registreringsmetoder läser avsnittet ClientCredentials automatiskt.
I följande exempel registreras autentisering för en webbapp som loggar in användare och anropar underordnade API:er:
// For a web app that signs in users and calls downstream APIs
builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(builder.Configuration.GetSection("AzureAd"))
.EnableTokenAcquisitionToCallDownstreamApi()
.AddInMemoryTokenCaches();
I följande exempel registreras autentisering för ett webb-API som anropar underordnade API:er:
// For a web API that calls downstream APIs
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"))
.EnableTokenAcquisitionToCallDownstreamApi()
.AddInMemoryTokenCaches();
I följande exempel registreras autentisering för ett daemonprogram utan användarinteraktion:
// For a daemon application (no user interaction)
builder.Services.AddAuthentication()
.AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));
builder.Services.AddTokenAcquisition()
.AddInMemoryTokenCaches();
Microsoft. Identity.Web identifierar SignedAssertionFromManagedIdentity källtyp och hanterar tokenutbytet transparent.
Jämföra systemtilldelad och användartilldelad hanterad identitet
Välj den typ av hanterad identitet som passar din arkitektur bäst. I följande avsnitt beskrivs kompromisserna.
Systemtilldelad hanterad identitet
En systemtilldelad identitet skapas och tas bort automatiskt med den Azure resurs som den tillhör.
fördelar:
- Ingen separat resurs att hantera – identitetens livscykel matchar beräkningsresursen.
- Enklare installation för distributioner med enskild resurs.
- Ingen
ManagedIdentityClientIdkrävs i konfigurationen.
Considerations:
- Du kan inte dela identiteten mellan flera resurser.
- Om du tar bort och återskapar resursen ändras identiteten – du måste uppdatera den federerade identitetsautentiseringsuppgiften.
Bäst för: Distributioner med en enda instans där en beräkningsresurs mappas till en appregistrering.
Användartilldelad hanterad identitet
En användartilldelad identitet är en fristående Azure resurs med en egen livscykel.
fördelar:
- Dela en enda identitet mellan flera beräkningsresurser (till exempel flera App Service-instanser i olika regioner).
- Identiteten bevaras oberoende av beräkningsresursens livscykel.
- Förskapa och förkonfigurera innan du distribuerar beräkningsresursen.
Considerations:
- Ytterligare en Azure resurs att hantera.
- Du måste ange
ManagedIdentityClientIdi konfigurationen.
Bäst för: Distributioner med flera instanser eller flera regioner, blågröna distributionsmönster och scenarier där beräkningsresurser ofta återskapas.
Distribuera till Azure beräkningstjänster
När du har konfigurerat programmet distribuerar du det till en Azure beräkningstjänst som stöder hanterad identitet.
Azure App Service
Aktivera hanterad identitet i din App Service (se steg 1).
Distribuera ditt program till App Service med den metod du föredrar (Visual Studio, Azure CLI GitHub Actions).
AzureAdSe till att avsnittet i den distribuerade konfigurationen matchar inställningarna i steg 3.Om du använder en användartilldelad hanterad identitet tilldelar du den till App Service:
az webapp identity assign \ --resource-group <resource-group> \ --name <app-service-name> \ --identities <managed-identity-resource-id>Starta om App Service för att hämta identitetstilldelningen.
Azure Kubernetes-tjänsten (AKS)
För AKS använder du arbetsbelastningsidentitet för att associera ett Kubernetes-tjänstkonto med den hanterade identiteten. Slutför följande steg:
Aktivera funktionen för arbetsbelastningsidentitet i ditt AKS-kluster:
az aks update \ --resource-group <resource-group> \ --name <aks-cluster-name> \ --enable-oidc-issuer \ --enable-workload-identitySkapa ett Kubernetes-tjänstkonto som har kommenterats med klient-ID:t för hanterad identitet:
apiVersion: v1 kind: ServiceAccount metadata: name: my-app-sa namespace: default annotations: azure.workload.identity/client-id: "<USER_ASSIGNED_MSI_CLIENT_ID>"Skapa en federerad autentiseringsuppgift som länkar AKS OIDC-utfärdaren till den hanterade identiteten.
Konfigurera podden så att den använder tjänstkontot:
apiVersion: v1 kind: Pod metadata: name: my-app namespace: default labels: azure.workload.identity/use: "true" spec: serviceAccountName: my-app-sa containers: - name: my-app image: <your-container-image>Distribuera podden. Webhooken för arbetslastidentiteten injicerar de nödvändiga miljövariablerna för slutpunkten för token för hanterad identitet.
Azure Container Apps
Skapa eller uppdatera containerappen med en hanterad identitet:
az containerapp identity assign \ --resource-group <resource-group> \ --name <container-app-name> \ --user-assigned <managed-identity-resource-id>Distribuera din containeravbildning med rätt
AzureAdkonfiguration.Slutpunkten för hanterad identitetstoken är automatiskt tillgänglig i containern.
Migrera från certifikat till certifikatfri autentisering
Om ditt program för närvarande använder certifikatbaserad autentisering kan du migrera till certifikatfri autentisering med minimala konfigurationsändringar.
Slutför migreringsstegen
Skapa en hanterad identitet för din Azure beräkningsresurs (se Steg 1).
Lägg till en federerad identitetsautentiseringsuppgift i din appregistrering (se steg 2).
Uppdatera konfigurationen för att lägga till autentiseringsuppgifterna
SignedAssertionFromManagedIdentity. Du kan behålla befintliga certifikatautentiseringsuppgifter som reserv under migreringen:{ "AzureAd": { "Instance": "https://login.microsoftonline.com/", "TenantId": "YOUR_TENANT_ID", "ClientId": "YOUR_CLIENT_ID", "ClientCredentials": [ { "SourceType": "SignedAssertionFromManagedIdentity", "ManagedIdentityClientId": "USER_ASSIGNED_MSI_CLIENT_ID" }, { "SourceType": "KeyVault", "KeyVaultUrl": "https://your-keyvault.vault.azure.net", "KeyVaultCertificateName": "your-cert-name" } ] } }Microsoft. Identity.Web försöker med autentiseringskällor i ordning. När den körs på Azure lyckas den första autentiseringsuppgiften (
SignedAssertionFromManagedIdentity). Om det misslyckas (till exempel under lokal utveckling) återgår biblioteket till certifikatet.Distribuera och verifiera i en mellanlagringsmiljö innan du tillämpar på produktion.
Ta bort certifikatautentiseringsuppgifterna från konfigurationen när du har bekräftat att certifikatfri autentisering fungerar i produktion.
Ta bort certifikatet från Azure Key Vault och appregistreringen när det inte längre behövs.
Jämför före och efter konfiguration
I följande exempel visas konfigurationsändringen från certifikatbaserad till certifikatfri autentisering.
Före (baserat på certifikat):
{
"AzureAd": {
"ClientCredentials": [
{
"SourceType": "KeyVault",
"KeyVaultUrl": "https://your-keyvault.vault.azure.net",
"KeyVaultCertificateName": "your-cert-name"
}
]
}
}
Efter (certifikatlös):
{
"AzureAd": {
"ClientCredentials": [
{
"SourceType": "SignedAssertionFromManagedIdentity",
"ManagedIdentityClientId": "USER_ASSIGNED_MSI_CLIENT_ID"
}
]
}
}
Felsök vanliga fel
Använd följande vägledning för att diagnostisera och lösa problem med certifikatfri autentisering.
AADSTS70021: Ingen matchande federerad identifieringspost hittades
Orsaka: Ämnesidentifieraren i autentiseringsuppgiften för federerad identitet matchar inte objekt-ID:t för den hanterade identiteten (huvudnamn).
Upplösning:
- I Azure-portalen går du till resursen Hanterad identitet och kopierar Principalt ID (även kallat objekt-ID) från sidan Overview.
- Gå till din appregistrering >Certifikat och hemligheter>Federerade autentiseringsuppgifter.
- Kontrollera att fältet Ämnesidentifierare matchar huvud-ID:t exakt.
- Om värdena inte matchar, tar du bort autentiseringsuppgiften och återskapar den med rätt ämnesidentifierare.
AADSTS700024: Klientens påstående ligger inte inom dess giltiga tidsintervall
Orsaka: Den hanterade identitetstoken som används när den signerade försäkran har upphört att gälla eller så är systemklockan skev.
Upplösning:
- Kontrollera att systemklockan på din Azure resurs är korrekt.
- Starta om programmet för att framtvinga en ny begäran om hanterad identitetstoken.
- Om du kör i en container kontrollerar du att containerns klocka är synkroniserad med värden.
ManagedIdentityException: Slutpunkten för hanterad identitet är inte tillgänglig
Cause: Programmet kan inte nå Azure Instansmetadatatjänst (IMDS) eller slutpunkten för hanterad identitetstoken.
Upplösning:
- Bekräfta att programmet körs på en Azure beräkningsresurs som stöder hanterad identitet.
- Kontrollera att den hanterade identiteten är aktiverad och tilldelad till beräkningsresursen.
- För AKS kontrollerar du att webhooken för arbetsbelastningsidentiteten körs och att podden har rätt anteckning om tjänstkontot.
- För lokal utveckling är detta fel förväntat. Använd en återställningskälla för autentiseringsuppgifter (se Migreringssteg).
AADSTS700016: Programmet hittades inte i katalogen
Orsak:ClientId i din konfiguration matchar inte en giltig appregistrering i den angivna hyresgästen.
Upplösning:
- Kontrollera att
ClientIdmatchar programidentifikator (klient-ID) för din appregistrering. - Kontrollera att
TenantIdmatchar klientorganisationen där appen är registrerad.
Aktivera loggning för felsökning
Orsaka: Källordningen för autentiseringsuppgifter eller konfigurationsfelet kan leda till att biblioteket hoppar över FIC-autentiseringsuppgifterna.
Upplösning:
Aktivera loggning i Microsoft. Identity.Web för att se detaljerade steg för tokenanskaffning. Följande kod konfigurerar loggning på felsökningsnivå för identitetsbiblioteken:
builder.Services.AddLogging(logging => { logging.AddConsole(); logging.SetMinimumLevel(LogLevel.Debug); logging.AddFilter("Microsoft.Identity", LogLevel.Debug); });Granska loggarna efter meddelanden om vilken källa för autentiseringsuppgifter biblioteket försökte med och eventuella fel som returnerades.
Användartilldelad hanterad identitet har inte hämtats
Orsak: När flera användartilldelade hanterade identiteter tilldelas till en beräkningsresurs kan biblioteket använda fel identitet om ManagedIdentityClientId inte anges.
Upplösning:
- Ange alltid egenskapen
ManagedIdentityClientIdnär du använder en användartilldelad hanterad identitet. - Kontrollera att klient-ID:t matchar den identitet som du konfigurerade den federerade identitetsautentiseringsuppgiften för.
Granska säkerhetsfördelar
Certifikatfri autentisering med FIC ger betydande säkerhetsfördelar jämfört med traditionella autentiseringsbaserade metoder:
Inga hemligheter att läcka
Eftersom det inte finns några certifikatfiler, PFX-lösenord eller klienthemligheter i dina konfigurations- eller distributionsartefakter finns det inget för en angripare att extrahera. Även om en angripare får läsåtkomst till dina konfigurationsfiler kan de inte personifiera ditt program utifrån Azure.
Ingen rotation av autentiseringsuppgifter
Hanterade identitetstoken är kortlivade och uppdateras automatiskt av Azure-plattformen. Du behöver inte implementera rotationsscheman, övervaka förfallodatum eller samordna uppdateringar av autentiseringsuppgifter mellan distributioner.
Minskad angreppsyta
Slutpunkten för hanterad identitetstoken är endast tillgänglig från den specifika Azure resurs som identiteten tilldelas till. En angripare kan inte använda autentiseringsuppgifterna från en annan värd-, nätverks- eller molnmiljö.
Förenkling av efterlevnad
Utan långlivade autentiseringsuppgifter eliminerar du flera kategorier av efterlevnadsproblem:
- Inga hemligheter som lagras i källkontroll, miljövariabler eller konfigurationsfiler.
- Inget nyckelmaterial att granska, rotera eller återkalla.
- Det finns ingen certifikatinfrastruktur (CA, förnyelseprocesser) att underhålla.
Skydd på djupet
Kombinera certifikatfri autentisering med andra Azure säkerhetsfunktioner för skiktskydd:
- Azure RBAC: Kontrollera vilka identiteter som kan komma åt vilka resurser.
- Villkorlig åtkomst: Tillämpa principer baserat på identitetsrisk, plats och enhetstillstånd.
- Privata slutpunkter: begränsar nätverksåtkomsten till Azure-resurser.
- Microsoft Defender för molnet: Övervaka misstänkta autentiseringsmönster.