Översikt över autentiseringsuppgifter för Microsoft. Identity.Web

När ditt program autentiseras med Microsofts identitetsplattform visas en autentiseringsuppgift som bevisar dess identitet. Microsoft. Identity.Web har stöd för flera typer av autentiseringsuppgifter, som var och en passar för olika miljöer och säkerhetskrav.

Den här artikeln hjälper dig att förstå tillgängliga typer av autentiseringsuppgifter, välja rätt för ditt scenario och konfigurera autentiseringsuppgifter i ditt program.

Varför val av autentiseringsuppgifter är viktigt

De autentiseringsuppgifter som programmet använder påverkar direkt dess säkerhetsstatus, driftkostnader och distributionsflexitet. En dåligt vald autentiseringsuppgift kan exponera hemligheter, kräva manuell rotation eller begränsa var programmet kan köras.

Microsoft. Identity.Web tillhandahåller en enhetlig konfigurationsmodell som gör att du kan:

  • Ange flera autentiseringsuppgifter med automatisk återställning.
  • Ändra typer av autentiseringsuppgifter utan att ändra programkoden.
  • Använd olika autentiseringsuppgifter per miljö (utveckling, mellanlagring, produktion).

Typer av autentiseringsuppgifter som stöds

Microsoft. Identity.Web har stöd för tre kategorier av autentiseringsuppgifter för konfidentiella klientprogram:

Autentiseringsuppgifter utan certifikat (federerade identitetsuppgifter + hanterad identitet)

Certifikatlösa autentiseringsuppgifter använder Azure hanterad identitet i kombination med federerade autentiseringsuppgifter (FIC) för att autentisera ditt program utan att hantera några hemligheter eller certifikat. Azure hanterar livscykeln för autentiseringsuppgifter helt och hållet.

Hur det fungerar: Programmet använder sin hanterade identitet för att hämta en token som Microsofts identitetsplattform accepterar som bevis på programmets identitet via ett förkonfigurerat federationsförtroende.

Bäst för: Produktionsarbetsbelastningar som körs på Azure.

Läs mer om certifikatfri autentisering

Certifikat

Certifikat ger stark, asymmetrisk nyckelbaserad autentisering. Din applikation bevisar sin identitet genom att signera ett intyg med certifikatets privata nyckel. Microsoft. Identity.Web kan läsa in certifikat från flera källor:

  • Azure Key Vault – Centraliserad, hanterad certifikatlagring med åtkomstprinciper.
  • Certificate Store – Windows certifikatarkiv (CurrentUser eller LocalMachine).
  • Filsökväg – Certifikatfil på disk (.pfx-format).
  • Base64-kodad – Certifikatet är inbäddat direkt i konfigurationen.

Bäst för: Produktionsarbetsbelastningar där certifikatlösa autentiseringsuppgifter inte är tillgängliga eller hybridmiljöer.

Läs mer om certifikatautentiseringsuppgifter

Klienthemligheter

Klienthemligheter är delade strängar som ditt program presenterar för Microsofts identitetsplattform. De är den enklaste typen av autentiseringsuppgifter att konfigurera men erbjuder den svagaste säkerheten.

Bäst för: Endast lokal utveckling och testning.

Läs mer om klienthemligheter


Välj rätt typ av autentiseringsuppgifter

Använd följande beslutsträd för att avgöra vilken typ av autentiseringsuppgifter som är lämplig för ditt scenario.

Is your application running on Azure?
├── Yes
│   ├── Can you use Managed Identity?
│   │   ├── Yes → Use certificateless credentials (recommended)
│   │   └── No → Use certificates from Azure Key Vault
└── No
    ├── Is this a production environment?
    │   ├── Yes → Use certificates (Key Vault, Certificate Store, or file path)
    │   └── No → Use client secrets for development/testing

Allmän vägledning

Följ dessa principer när du väljer en typ av autentiseringsuppgifter:

  • Föredra alltid certifikatlösa referenser när programmet körs på Azure. De eliminerar autentiseringsuppgifter helt och hållet.
  • Använd certifikat när certifikatlösa autentiseringsuppgifter inte är tillgängliga. Lagra dem i Azure Key Vault när det är möjligt.
  • Begränsa klienthemligheter till utvecklingsmiljöer. Använd aldrig klienthemligheter i produktionsdistributioner.

Jämföra typer av autentiseringsuppgifter

I följande tabell sammanfattas de viktigaste skillnaderna mellan typer av autentiseringsuppgifter:

Characteristic Certifikatfri (FIC + MI) Certifikat Klienthemligheter
Säkerhetsnivå Högsta Hög Låg
Risk för hemlig exponering Inget - inget att läcka Låg – privat nyckel skyddad Hög – sträng kan kopieras
Rotation krävs Nej – Azure hanterar livscykeln Ja – innan certifikatet upphör att gälla Ja – innan hemligheten upphör att gälla
Rotationskomplexitet Ingen Medel – uppdatera certifikat, omdistribuera Låg – uppdateringssträng, omdistribuering
Azure portalkonfiguration Hanterad identitet + FIC-förtroende Ladda upp certifikat till appregistrering Generera hemlighet i appregistrering
Lämpliga miljöer Azure produktionsmiljö Alla produktionsmiljöer Endast utveckling och testning
Infrastrukturberoende Azure beräkningsresurs Certifikatarkiv eller Key Vault Ingen
Efterlevnad Uppfyller kraven för noll förtroende Uppfyller de flesta efterlevnadsramverk Kanske inte uppfyller säkerhetsprinciper

Konfigurera autentiseringsuppgifter i appsettings.json

Microsoft. Identity.Web använder en ClientCredentials matris i konfigurationen för att ange en eller flera autentiseringsuppgifter. Varje post i matrisen innehåller en SourceType egenskap som anger var autentiseringsuppgifterna kommer ifrån.

Konfigurationsstruktur

I följande exempel visas en minimal konfiguration med en enda certifikatfri autentiseringsuppgift:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "your-tenant-id",
    "ClientId": "your-client-id",

    "ClientCredentials": [
      {
        "SourceType": "SignedAssertionFromManagedIdentity",
        "ManagedIdentityClientId": "user-assigned-managed-identity-client-id"
      }
    ]
  }
}

SourceType-värden

Egenskapen SourceType motsvarar CredentialSource uppräkning och avgör hur Microsoft. Identity.Web läser in autentiseringsuppgifterna:

SourceType-värde Typ av autentiseringsuppgifter Beskrivning
SignedAssertionFromManagedIdentity Certifikatlös Använder hanterad identitet för att hämta en signerad försäkran. Rekommenderas för Azure-produktion.
KeyVault Certifikat Läser in ett certifikat från Azure Key Vault via URI.
StoreWithThumbprint Certifikat Läser in ett certifikat från Windows certifikatarkivet med tumavtryck.
StoreWithDistinguishedName Certifikat Läser in ett certifikat från Windows certifikatlager efter ämnets distingerade namn.
Path Certifikat Läser in ett certifikat från en .pfx-fil på disken.
Base64Encoded Certifikat Läser in ett certifikat från en Base64-kodad sträng i konfigurationen.
ClientSecret Klienthemlighet Använder en klienthemlighetssträng.
AutoDecryptKeys Tokendekryptering Hämtar automatiskt nycklar för dekryptering av krypterade token.
SignedAssertionFilePath Federerad Läser en signerad försäkran från en filsökväg (för Kubernetes-arbetsbelastningsidentitet).

Exempel på autentiseringsuppgifter efter typ

I följande exempel visas hur du konfigurerar varje typ av autentiseringsuppgifter i appsettings.json och, där det är tillgängligt, i C#-kod.

Utan certifikat (hanterad identitet)

Använd en användartilldelad hanterad identitet genom att ange dess klient-ID:

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "your-tenant-id",
    "ClientId": "your-client-id",
    "ClientCredentials": [
      {
        "SourceType": "SignedAssertionFromManagedIdentity",
        "ManagedIdentityClientId": "user-assigned-managed-identity-client-id"
      }
    ]
  }
}

För systemtilldelad hanterad identitet utelämnar du egenskapen ManagedIdentityClientId :

{
  "AzureAd": {
    "ClientCredentials": [
      {
        "SourceType": "SignedAssertionFromManagedIdentity"
      }
    ]
  }
}

Certifikat från Azure Key Vault

Läs in ett certifikat som lagras i Azure Key Vault genom att ange valv-URL:en och certifikatnamnet:

{
  "AzureAd": {
    "ClientCredentials": [
      {
        "SourceType": "KeyVault",
        "KeyVaultUrl": "https://your-keyvault.vault.azure.net",
        "KeyVaultCertificateName": "your-certificate-name"
      }
    ]
  }
}

Du kan också använda CredentialDescription hjälpmetoden i C#:

var credential = CredentialDescription.FromKeyVault(
    "https://your-keyvault.vault.azure.net",
    "your-certificate-name");

Certifikat från certifikatarkiv

Läs in ett certifikat från Windows certifikatarkivet med tumavtryck:

{
  "AzureAd": {
    "ClientCredentials": [
      {
        "SourceType": "StoreWithThumbprint",
        "CertificateThumbprint": "ABC123DEF456...",
        "CertificateStorePath": "CurrentUser/My"
      }
    ]
  }
}

Du kan också använda ett unikt namn, vilket förenklar certifikatrotationen eftersom det nya certifikatet väljs automatiskt:

{
  "AzureAd": {
    "ClientCredentials": [
      {
        "SourceType": "StoreWithDistinguishedName",
        "CertificateDistinguishedName": "CN=YourAppCertificate",
        "CertificateStorePath": "CurrentUser/My"
      }
    ]
  }
}

I C# använder du hjälpmetoden:

// By thumbprint
var credential = CredentialDescription.FromCertificateStore(
    "CurrentUser/My",
    thumbprint: "ABC123DEF456...");

// By distinguished name (recommended for rotation)
var credential = CredentialDescription.FromCertificateStore(
    "CurrentUser/My",
    distinguishedName: "CN=YourAppCertificate");

Certifikat från filväg

Läs in ett certifikat från en .pfx fil på disk:

{
  "AzureAd": {
    "ClientCredentials": [
      {
        "SourceType": "Path",
        "CertificateDiskPath": "/var/certs/app-cert.pfx",
        "CertificatePassword": "certificate-password"
      }
    ]
  }
}

Varning

Undvik att lagra certifikatlösenord direkt i appsettings.json. Använd ASP.NET Core Secret Manager, miljövariabler eller Azure Key Vault för känsliga värden.

Base64-kodat certifikat

Bädda in ett certifikat direkt i konfigurationen som en Base64-kodad sträng:

{
  "AzureAd": {
    "ClientCredentials": [
      {
        "SourceType": "Base64Encoded",
        "Base64EncodedValue": "MIIKcQIBAzCCCi0..."
      }
    ]
  }
}

Klienthemlighet

Ange en klienthemlighetssträng för utveckling och testning:

{
  "AzureAd": {
    "ClientCredentials": [
      {
        "SourceType": "ClientSecret",
        "ClientSecret": "your-client-secret"
      }
    ]
  }
}

Försiktighet

Klienthemligheter bör endast användas under utveckling. Skicka aldrig sekretessuppgifter till källkodshantering eller distribuera dem till produktionsmiljöer.


Använd flera autentiseringsuppgifter med reservlösning

Du kan ange flera autentiseringsuppgifter i matrisen ClientCredentials . Microsoft. Identity.Web försöker varje autentiseringsuppgift i ordning och återgår till nästa om den aktuella misslyckas. Det här mönstret är användbart för program som körs i flera miljöer.

{
  "AzureAd": {
    "Instance": "https://login.microsoftonline.com/",
    "TenantId": "your-tenant-id",
    "ClientId": "your-client-id",
    "ClientCredentials": [
      {
        "SourceType": "SignedAssertionFromManagedIdentity",
        "ManagedIdentityClientId": "your-managed-identity-client-id"
      },
      {
        "SourceType": "KeyVault",
        "KeyVaultUrl": "https://your-keyvault.vault.azure.net",
        "KeyVaultCertificateName": "your-certificate-name"
      },
      {
        "SourceType": "ClientSecret",
        "ClientSecret": "development-only-secret"
      }
    ]
  }
}

I det här exemplet:

  1. Programmet försöker först med certifikatfri autentisering med hanterad identitet (fungerar på Azure).
  2. Om den hanterade identiteten inte är tillgänglig återgår den till ett certifikat från Key Vault.
  3. Som en sista utväg använder den en klienthemlighet (för lokal utveckling).

Med den här metoden kan du använda samma konfigurationsfil i miljöer utan kodändringar.


Konfigurera autentiseringsuppgifter i kod

Du kan också konfigurera autentiseringsuppgifter programmatiskt i Program.cs eller Startup.cs:

using Microsoft.Identity.Web;

builder.Services.AddMicrosoftIdentityWebAppAuthentication(builder.Configuration, "AzureAd")
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddDownstreamApi("MyApi", builder.Configuration.GetSection("MyApi"))
    .AddDistributedTokenCaches();

// Or configure credentials programmatically
builder.Services.Configure<MicrosoftIdentityOptions>(options =>
{
    options.ClientCredentials = new[]
    {
        new CredentialDescription
        {
            SourceType = CredentialSource.SignedAssertionFromManagedIdentity,
            ManagedIdentityClientId = "your-managed-identity-client-id"
        }
    };
});

Autentiseringsuppgifter för tokendekryptering

Utöver klientautentiseringsuppgifter för autentisering Microsoft. Identity.Web stöder även autentiseringsuppgifter för tokendekryptering. Använd autentiseringsuppgifter för tokendekryptering när programmet tar emot krypterade token och behöver dekryptera dem.

Autentiseringsuppgifter för tokendekryptering använder samma SourceType värden och konfigurationsmönster som klientautentiseringsuppgifter, men anges i matrisen TokenDecryptionCredentials :

{
  "AzureAd": {
    "TokenDecryptionCredentials": [
      {
        "SourceType": "KeyVault",
        "KeyVaultUrl": "https://your-keyvault.vault.azure.net",
        "KeyVaultCertificateName": "token-decryption-cert"
      }
    ]
  }
}

Läs mer om tokendekryptering


Metodtips

Tänk på följande rekommendationer när du konfigurerar autentiseringsuppgifter för ditt program:

Föredra certifikatlösa autentiseringsuppgifter i produktion. De eliminerar risken för hemlig exponering och tar bort rotationskostnader. Använd dem när programmet körs på Azure beräkningsresurser som stöder hanterad identitet.

Använd autentiseringsfallback för portabilitet. Konfigurera flera autentiseringsuppgifter i prioritetsordning så att programmet fungerar i utveckling, mellanlagring och produktion utan kodändringar.

Använd aldrig klienthemligheter i produktion. Klienthemligheter kan läcka genom loggar, konfigurationsfiler eller källkontroll. Använd certifikat eller certifikatlösa autentiseringsuppgifter i stället.

Lagra känsliga värden utanför konfigurationsfiler. Använd Azure Key Vault, miljövariabler eller ASP.NET Core Secret Manager för certifikatlösenord och klienthemligheter. Checka inte in känsliga värden till källkontrollen.

Rotera certifikat innan de upphör att gälla. Övervaka certifikatets förfallodatum och upprätta en rotationsprocess. Azure Key Vault kan automatisera certifikatförnyelsen.

Använd Azure Key Vault för certifikatlagring. Key Vault tillhandahåller centraliserad hantering, åtkomstprinciper, granskningsloggning och automatisk rotation för certifikat.