Übersicht über Anmeldeinformationen für Microsoft.Identity.Web

Wenn Ihre Anwendung sich mit der Microsoft Identitätsplattform authentifiziert, legt sie eine Anmeldeinformation vor, um ihre Identität zu beweisen. Microsoft. Identity.Web unterstützt mehrere Anmeldeinformationstypen, die jeweils für unterschiedliche Umgebungen und Sicherheitsanforderungen geeignet sind.

Dieser Artikel hilft Ihnen, die verfügbaren Anmeldeinformationstypen zu verstehen, das richtige für Ihr Szenario auszuwählen und Anmeldeinformationen in Ihrer Anwendung zu konfigurieren.

Warum die Auswahl von Zugangsdaten wichtig ist

Die von Ihrer Anwendung verwendeten Anmeldeinformationen wirken sich direkt auf den Sicherheitsstatus, den betriebstechnischen Aufwand und die Flexibilität der Bereitstellung aus. Eine schlecht ausgewählte Anmeldeinformationen kann Geheimnisse verfügbar machen, manuelle Aktualisierung erfordern oder den Einsatzbereich Ihrer Anwendung einschränken.

Microsoft. Identity.Web bietet ein einheitliches Konfigurationsmodell, mit dem Sie folgende Aktionen ausführen können:

  • Geben Sie mehrere Anmeldeinformationen mit automatischem Fallback an.
  • Ändern Sie Anmeldeinformationstypen, ohne den Anwendungscode zu ändern.
  • Verwenden Sie unterschiedliche Anmeldeinformationen pro Umgebung (Entwicklung, Staging, Produktion).

Unterstützte Anmeldedatentypen

Microsoft. Identity.Web unterstützt drei Kategorien von Anmeldeinformationen für vertrauliche Clientanwendungen:

Zertifikatlose Anmeldeinformationen (Verbundidentitätsanmeldeinformationen + verwaltete Identität)

Zertifikatlose Anmeldeinformationen verwenden Azure verwaltete Identität in Kombination mit Verbundidentitätsanmeldeinformationen (FIC), um Ihre Anwendung zu authentifizieren, ohne geheime Schlüssel oder Zertifikate zu verwalten. Azure verarbeitet den Lebenszyklus der Anmeldeinformationen vollständig.

So funktioniert es: Ihre Anwendung verwendet ihre verwaltete Identität, um ein Token zu erhalten, das die Microsoft-Identitätsplattform als Nachweis der Identität der Anwendung durch ein vorkonfiguriertes Verbundvertrauen akzeptiert.

Am besten geeignet für: Produktionsarbeitslasten, die auf Azure ausgeführt werden.

Weitere Informationen zur zertifikatlosen Authentifizierung

Zertifikate

Zertifikate stellen eine starke, asymmetrische schlüsselbasierte Authentifizierung bereit. Ihre Anwendung beweist ihre Identität durch Signieren einer Assertion mit dem privaten Schlüssel des Zertifikats. Microsoft. Identity.Web kann Zertifikate aus mehreren Quellen laden:

  • Azure Key Vault – Zentralisierter, verwalteter Zertifikatspeicher mit Zugriffsrichtlinien.
  • Certificate Store – Windows Zertifikatspeicher (CurrentUser oder LocalMachine).
  • Dateipfad – Zertifikatdatei auf dem Datenträger (PFX-Format).
  • Base64-codiert – Zertifikat, das direkt in die Konfiguration eingebettet ist.

Am besten geeignet für: Produktionsarbeitslasten, bei denen zertifikatlose Anmeldeinformationen nicht verfügbar sind, oder Hybridumgebungen.

Weitere Informationen zu Zertifikatsinformationen

Client-Geheimnisse

Clientgeheimnisse sind gemeinsame Zeichenfolgen, die Ihre Anwendung der Microsoft Identity Platform präsentiert. Sie sind der einfachste Anmeldeinformationstyp zum Konfigurieren, bieten aber die schwächste Sicherheit.

Am besten geeignet für: Nur lokale Entwicklung und Tests.

Weitere Informationen zu geheimen Clientschlüsseln


Den richtigen Anmeldetyp wählen

Verwenden Sie den folgenden Entscheidungsbaum, um zu bestimmen, welcher Anmeldedatentyp für Ihr Szenario geeignet ist.

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

Allgemeine Anleitungen

Befolgen Sie bei der Auswahl eines Authentifizierungstyps die folgenden Grundsätze:

  • Bevorzugen Sie stets zertifikatlose Anmeldeinformationen, wenn Ihre Anwendung auf Azure ausgeführt wird. Sie beseitigen die Verwaltung von Anmeldeinformationen vollständig.
  • Verwenden Sie Zertifikate , wenn zertifikatlose Anmeldeinformationen nicht verfügbar sind. Speichern Sie sie nach Möglichkeit in Azure Key Vault.
  • Beschränken Sie Client-Geheimnisse auf Entwicklungsumgebungen. Verwenden Sie niemals Client-Geheimnisse in Produktionsumgebungen.

Vergleich von Anmeldedatentypen

In der folgenden Tabelle sind die wichtigsten Unterschiede zwischen den Anmeldetypen zusammengefasst.

Merkmal Zertifikatlos (FIC + MI) Zertifikate Client-Geheimnisse
Sicherheitsstufe Am höchsten Hoch Niedrig
Geheimes Expositionsrisiko Keine - kein Geheimnis zu verraten Niedrig – geschützter privater Schlüssel Hoch - String ist kopierbar
Drehung erforderlich Nein – Azure verwaltet den Lebenszyklus Ja - vor Ablauf des Zertifikats Ja - vor Ablauf des Geheimnisses
Drehungskomplexität Nichts Mittel – Zertifikat aktualisieren, erneut bereitstellen Niedrig – Updatezeichenfolge, erneute Bereitstellung
Azure Portal-Setup Verwaltete Identität + FIC-Vertrauen Zertifikat in der App-Registrierung hochladen Generieren eines geheimen Schlüssels bei der App-Registrierung
Geeignete Umgebungen Azure Produktion Jede Produktionsumgebung Nur Entwicklung und Tests
Infrastrukturabhängigkeit Azure Computeressource Zertifikatspeicher oder Key Vault Nichts
Konformität Erfüllt Zero-Trust-Anforderungen Erfüllt die meisten Compliance-Frameworks Möglicherweise nicht den Sicherheitsrichtlinien entsprechen

Konfigurieren von Anmeldeinformationen in appsettings.json

Microsoft.Identity.Web verwendet ein ClientCredentials-Array in Ihrer Konfiguration, um eine oder mehrere Anmeldeinformationen anzugeben. Jeder Eintrag im Array enthält eine SourceType Eigenschaft, die angibt, von wo die Anmeldeinformationen stammen.

Konfigurationsstruktur

Das folgende Beispiel zeigt eine minimale Konfiguration mit einer einzigen zertifikatlosen Anmeldeinformation:

{
  "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-Werte

Die Eigenschaft SourceType entspricht der Enumeration CredentialSource und bestimmt, wie Microsoft.Identity.Web die Anmeldeinformationen lädt.

SourceType-Wert Berechtigungstyp Beschreibung
SignedAssertionFromManagedIdentity Zertifikatlos Verwendet verwaltete Identität, um eine signierte Assertion abzurufen. Empfohlen für Azure Produktion.
KeyVault Zertifikat Lädt ein Zertifikat über die URI aus dem Azure Key Vault.
StoreWithThumbprint Zertifikat Lädt ein Zertifikat aus dem Windows Zertifikatspeicher per Fingerabdruck.
StoreWithDistinguishedName Zertifikat Lädt ein Zertifikat aus dem zertifikatsspeicher Windows durch den Betreff distinguished Name.
Path Zertifikat Lädt ein Zertifikat aus einer PFX-Datei auf dem Datenträger.
Base64Encoded Zertifikat Lädt ein Zertifikat aus einer Base64-codierten Zeichenfolge in der Konfiguration.
ClientSecret Geheimer Clientschlüssel Verwendet eine geheime Clientschlüsselzeichenfolge.
AutoDecryptKeys Tokenentschlüsselung Ruft automatisch Schlüssel zum Entschlüsseln verschlüsselter Token ab.
SignedAssertionFilePath Föderiert Liest eine signierte Assertion aus einem Dateipfad (für Kubernetes Workload Identity).

Beispiele für Anmeldeinformationen nach Typ

Die folgenden Beispiele zeigen, wie Sie jeden Anmeldeinformationstyp in appsettings.json und, sofern verfügbar, im C#-Code konfigurieren.

Zertifikatlose (verwaltete Identität)

Verwenden Sie eine vom Benutzer zugewiesene verwaltete Identität, indem Sie ihre Client-ID angeben:

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

Lassen Sie die ManagedIdentityClientId Eigenschaft für vom System zugewiesene verwaltete Identität weg:

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

Zertifikat von Azure Key Vault

Laden Sie ein in Azure Key Vault gespeichertes Zertifikat, indem Sie die Tresor-URL und den Zertifikatnamen angeben:

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

Sie können auch die CredentialDescription Hilfsmethode in C# verwenden:

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

Zertifikat aus Zertifikatspeicher

Laden Sie ein Zertifikat aus dem Windows Zertifikatspeicher per Fingerabdruck:

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

Sie können auch einen Distinguished Name verwenden, der die Zertifikatsrotation vereinfacht, weil das neue Zertifikat automatisch ausgewählt wird:

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

Verwenden Sie in C# die Hilfsmethode:

// 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");

Zertifikat aus Dateipfad

Laden eines Zertifikats aus einer .pfx Datei auf dem Datenträger:

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

Warnung

Vermeiden Sie das direkte Speichern von Zertifikat-Kennwörtern in appsettings.json. Verwenden Sie ASP.NET Core Secret Manager, Umgebungsvariablen oder Azure Key Vault für vertrauliche Werte.

Base64-codiertes Zertifikat

Betten Sie ein Zertifikat direkt in die Konfiguration als base64-codierte Zeichenfolge ein:

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

Geheimer Clientschlüssel

Geben Sie eine geheime Clientschlüsselzeichenfolge für Entwicklung und Tests an:

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

Vorsicht

Geheime Clientschlüssel sollten nur während der Entwicklung verwendet werden. Geben Sie niemals sensible Daten in der Quellcodeverwaltung hinzu und stellen Sie sie nicht in Produktionsumgebungen bereit.


Verwenden mehrerer Anmeldeinformationen mit Fallback

Sie können mehrere Anmeldeinformationen im ClientCredentials Array angeben. Microsoft.Identity.Web versucht jede Anmeldeinformation in der Reihenfolge und fällt auf die nächste zurück, wenn die aktuelle fehlschlägt. Dieses Muster ist nützlich für Anwendungen, die in mehreren Umgebungen ausgeführt werden.

{
  "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"
      }
    ]
  }
}

In diesem Beispiel:

  1. Die Anwendung versucht zunächst zertifikatlose Authentifizierung mit verwalteter Identität (funktioniert bei Azure).
  2. Wenn die verwaltete Identität nicht verfügbar ist, wird auf ein Zertifikat im Key Vault zurückgegriffen.
  3. Als letztes Mittel wird ein Clientgeheimnis (für die lokale Entwicklung) verwendet.

Mit diesem Ansatz können Sie dieselbe Konfigurationsdatei in Umgebungen ohne Codeänderungen verwenden.


Konfigurieren von Anmeldeinformationen im Code

Sie können Anmeldeinformationen auch programmgesteuert in Program.cs oder 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"
        }
    };
});

Token-Entschlüsselungsanmeldedaten

Über Clientanmeldeinformationen für die Authentifizierung hinaus unterstützt Microsoft Identity.Web auch Anmeldeinformationen für die Tokenentschlüsselung. Verwenden Sie Die Anmeldeinformationen für die Tokenentschlüsselung, wenn Ihre Anwendung verschlüsselte Token empfängt und sie entschlüsseln muss.

Tokenentschlüsselungsanmeldeinformationen verwenden dieselben SourceType Werte und Konfigurationsmuster wie Clientanmeldeinformationen, werden jedoch im TokenDecryptionCredentials Array angegeben:

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

Weitere Informationen zur Tokenentschlüsselung


Bewährte Methoden

Beachten Sie diese Empfehlungen beim Konfigurieren von Anmeldeinformationen für Ihre Anwendung:

Bevorzugen Sie zertifikatlose Anmeldeinformationen in der Produktion. Sie beseitigen geheimes Expositionsrisiko und entfernen den Drehaufwand. Verwenden Sie sie, wenn Ihre Anwendung auf Azure Computeressourcen ausgeführt wird, die verwaltete Identität unterstützen.

Verwenden Sie den Fallback von Anmeldeinformationen für die Portabilität. Konfigurieren Sie mehrere Anmeldeinformationen in der Prioritätsreihenfolge, damit Ihre Anwendung ohne Codeänderungen in Entwicklung, Staging und Produktion funktioniert.

Verwenden Sie niemals geheime Clientschlüssel in der Produktion. Geheime Clientschlüssel können durch Logdateien, Konfigurationsdateien oder Versionsverwaltung offengelegt werden. Verwenden Sie stattdessen Zertifikate oder zertifikatlose Berechtigungen.

Speichern Sie vertrauliche Werte außerhalb von Konfigurationsdateien. Verwenden Sie Azure Key Vault, Umgebungsvariablen oder den ASP.NET Core Geheimen Manager für Zertifikat-Kennwörter und geheime Clientschlüssel. Speichern Sie keine vertraulichen Werte in Versionskontrollsystemen.

Erneuern Sie Zertifikate, bevor sie ablaufen. Überwachen Sie die Ablaufdaten der Zertifikate und richten Sie einen Erneuerungsprozess ein. Azure Key Vault können die Zertifikaterneuerung automatisieren.

Verwenden Sie Azure Key Vault für den Zertifikatspeicher. Key Vault bietet zentralisierte Verwaltung, Zugriffsrichtlinien, Audit-Protokollierung und automatischen Austausch für Zertifikate.