Používejte certifikáty s Microsoft. Identity.Web

Microsoft. Identity.Web podporuje ověřování na základě certifikátů jako zabezpečenou alternativu k tajným klíčům klienta pro důvěrné klientské aplikace. Certifikáty používají asymetrickou kryptografii, takže se může ověřit pouze držitel privátního klíče.

V tomto článku nakonfigurujete přihlašovací údaje certifikátu z různých zdrojů, zaregistrujete je v aplikaci a budete je spravovat v produkčním prostředí.

Proč používat certifikáty?

Faktor Tajný klíč klienta Certifikát
Security Sdílený tajný klíč (symetrický) Asymetrický pár klíčů
Otočení Vyžaduje opětovné nasazení aplikace nebo změnu konfigurace. Je možné automatizovat prostřednictvím Key Vault
Riziko expozice Tajnost v konfiguraci může uniknout Privátní klíč zůstává v zabezpečeném úložišti
Dodržování předpisů Nemusí splňovat podnikové zásady Splňuje většinu podnikových požadavků na zabezpečení.
Doporučeno pro: Vývoj, vytváření prototypů Produkční úlohy

Důležité

Microsoft doporučuje certifikáty pro klientské tajné kódy pro produkční aplikace. Pro nejvyšší stav zabezpečení používejte ověřování bez certifikátů (spravovaná identita nebo federace identit úloh), když ho vaše hostitelské prostředí podporuje.

Jak to funguje

  1. Vygenerujete nebo získáte certifikát X.509 s privátním klíčem.
  2. Zaregistrujete publikový klíč (nebo kryptografický otisk) certifikátu s registrací aplikace Microsoft Entra.
  3. Za běhu Microsoft. Identity.Web načte certifikát (včetně privátního klíče) z vašeho nakonfigurovaného zdroje.
  4. Knihovna používá privátní klíč k podepsání klientského prohlášení, které odesílá do Microsoft Entra ID k získání tokenů.

Zdroje certifikátů

Microsoft. Identity.Web podporuje načítání certifikátů z více zdrojů:

Typ zdroje hodnota SourceType Nejlepší pro
Azure Key Vault KeyVault Produkce (doporučeno)
Úložiště certifikátů StoreWithThumbprint nebo StoreWithDistinguishedName Windows servery v místním prostředí
Cesta k souboru Path Vývoj, kontejnerizované aplikace
Řetězec kódovaný Base64 Base64Encoded Tajné kódy Kubernetes, kanály CI/CD

V poli ClientCertificates v oddílu AzureAd konfigurace (neboAzureAdB2C) nakonfigurujete přihlašovací údaje certifikátu. Pro scénáře obměny můžete zadat více certifikátů – Microsoft. Identity.Web používá první platný certifikát, který najde.


Azure Key Vault je doporučeným zdrojem pro certifikáty v produkčním prostředí. Poskytuje centralizovanou správu, řízení přístupu, auditování a možnosti automatické rotace.

Konfigurace

Přidejte konfiguraci certifikátu do složky appsettings.json:

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

    "ClientCertificates": [
      {
        "SourceType": "KeyVault",
        "KeyVaultUrl": "https://your-keyvault-name.vault.azure.net",
        "KeyVaultCertificateName": "your-certificate-name"
      }
    ]
  }
}
Vlastnictví Description
SourceType Musí být "KeyVault".
KeyVaultUrl Identifikátor URI služby vašeho Azure Key Vault (například https://myapp-kv.vault.azure.net).
KeyVaultCertificateName Název certifikátu uložený v Key Vault.

Nastavení zásad přístupu Key Vault

Identita vaší aplikace musí mít oprávnění ke čtení certifikátů z Key Vault. Způsob udělení závisí na tom, jestli používáte model zásad přístupu k trezoru nebo Azure řízení přístupu na základě role (RBAC).

Možnost 1: Zásady přístupu do úložiště trezoru

az keyvault set-policy \
  --name your-keyvault-name \
  --object-id <app-or-managed-identity-object-id> \
  --certificate-permissions get list \
  --secret-permissions get

Poznámka:

Vyžaduje se oprávnění --secret-permissions get, protože Azure Key Vault ukládá privátní klíč jako tajný klíč propojený s certifikátem. Microsoft. Identity.Web potřebuje přístup k certifikátu i jeho privátnímu klíči.

Možnost 2: Azure RBAC

Přiřaďte roli uživatele certifikátu Key Vault identitě aplikace:

az role assignment create \
  --role "Key Vault Certificate User" \
  --assignee <app-or-managed-identity-object-id> \
  --scope /subscriptions/<sub-id>/resourceGroups/<rg>/providers/Microsoft.KeyVault/vaults/<vault-name>

Použití spravované identity pro přístup k Key Vault

Když vaše aplikace běží v Azure (App Service, Azure Functions, Azure Kubernetes Service, virtuální počítače), použijte spravovanou identitu k ověření v Key Vault. To eliminuje potřebu jakýchkoli přihlašovacích údajů pro přístup k samotnému trezoru.

Spravovaná identita přiřazená systémem

Pokud má vaše aplikace povolenou spravovanou identitu systémově přiřazenou, Microsoft.Identity.Web automaticky používá DefaultAzureCredential k ověření s Key Vault. Kromě položky ClientCertificates není potřeba žádná další konfigurace:

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

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

Spravovaná identita přiřazená uživatelem

U spravované identity přiřazené uživatelem zadejte ManagedIdentityClientId na popisovači certifikátu Key Vault:

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

    "ClientCertificates": [
      {
        "SourceType": "KeyVault",
        "KeyVaultUrl": "https://your-keyvault-name.vault.azure.net",
        "KeyVaultCertificateName": "your-certificate-name",
        "ManagedIdentityClientId": "user-assigned-managed-identity-client-id"
      }
    ]
  }
}

Návod

Při místním spuštění během vývoje se DefaultAzureCredential vrátí k vašim Azure CLI nebo Visual Studio přihlašovacím údajům. Ujistěte se, že jste přihlášení pomocí az login a že váš vývojářský účet má příslušná oprávnění Key Vault.


Z úložiště certifikátů (pouze Windows)

Na Windows můžete načíst certifikáty z úložiště certifikátů Windows. To je běžné pro místní nasazení nebo nasazení hostované službou IIS.

Podle otisku prstu

Slouží StoreWithThumbprint k identifikaci certifikátu kryptografickým otiskem SHA-1:

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

    "ClientCertificates": [
      {
        "SourceType": "StoreWithThumbprint",
        "CertificateStorePath": "CurrentUser/My",
        "CertificateThumbprint": "A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2"
      }
    ]
  }
}
Vlastnictví Description
SourceType Musí být "StoreWithThumbprint".
CertificateStorePath Umístění úložiště certifikátů. Společné hodnoty: "CurrentUser/My", "LocalMachine/My".
CertificateThumbprint Kryptografický otisk SHA-1 certifikátu (40 šestnáctkových znaků).

Podle rozlišujícího názvu

Slouží StoreWithDistinguishedName k identifikaci certifikátu podle názvu subjektu:

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

    "ClientCertificates": [
      {
        "SourceType": "StoreWithDistinguishedName",
        "CertificateStorePath": "CurrentUser/My",
        "CertificateDistinguishedName": "CN=MyAppCertificate"
      }
    ]
  }
}
Vlastnictví Description
SourceType Musí být "StoreWithDistinguishedName".
CertificateStorePath Umístění úložiště certifikátů. Společné hodnoty: "CurrentUser/My", "LocalMachine/My".
CertificateDistinguishedName Rozlišující název subjektu certifikátu (například "CN=MyAppCertificate").

Umístění úložiště certifikátů

Následující tabulka uvádí běžné cesty k úložišti certifikátů a oprávnění potřebná pro přístup k nim:

Cesta Description Požadována oprávnění
CurrentUser/My Osobní obchod aktuálního uživatele Přístup na úrovni uživatele
LocalMachine/My Osobní prodejna pro celý stroj Přístup správce
LocalMachine/Root Důvěryhodné kořenové certifikační autority Přístup správce
CurrentUser/Root Důvěryhodné kořenové certifikační autority aktuálního uživatele Přístup na úrovni uživatele

Poznámka:

Při hostování ve službě IIS musí mít identita fondu aplikací přístup pro čtení k privátnímu klíči certifikátu. Můžete to udělit pomocí možnosti Spravovat privátní klíče v modulu snap-in Certifikáty konzoly MMC.


Z cesty k souboru

Certifikát můžete načíst přímo ze souboru .pfx na disku.

Výstraha

Ukládání souborů certifikátů na disk s hesly v konfiguraci se nedoporučuje pro produkční prostředí. Tento přístup použijte pouze pro místní vývoj nebo v prostředích, kde je systém souborů zabezpečený (například připojené tajné kódy v kontejnerech).

Konfigurace

Přidejte cestu k souboru certifikátu a heslo do složky appsettings.json:

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

    "ClientCertificates": [
      {
        "SourceType": "Path",
        "CertificateDiskPath": "/path/to/certificate.pfx",
        "CertificatePassword": "your-certificate-password"
      }
    ]
  }
}
Vlastnictví Description
SourceType Musí být "Path".
CertificateDiskPath Absolutní nebo relativní cesta k .pfx souboru.
CertificatePassword Heslo k .pfx souboru. Pokud certifikát nemá žádné heslo, tuto vlastnost vynecháte nebo ji nastavte na prázdný řetězec.

Návod

Abyste se vyhnuli ukládání hesla ve formátu prostého textu appsettings.json, napište ho z proměnné prostředí nebo správce tajných kódů:

Použití uživatelských tajemství .NET (vývoj):

dotnet user-secrets set "AzureAd:ClientCertificates:0:CertificatePassword" "your-password"

Použití proměnné prostředí:

export AzureAd__ClientCertificates__0__CertificatePassword="your-password"

Z hodnoty s kódováním Base64

Certifikát můžete zadat jako řetězec s kódováním Base64. Tento přístup je užitečný při vkládání certifikátů prostřednictvím proměnných prostředí, tajných kódů Kubernetes nebo proměnných kanálu CI/CD.

Konfigurace

Přidejte hodnotu certifikátu s kódováním Base64 do svého appsettings.json:

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

    "ClientCertificates": [
      {
        "SourceType": "Base64Encoded",
        "Base64EncodedValue": "MIIKcQIBAzCCCi0GCSqGSIb3DQEHAaCCCh4Egg..."
      }
    ]
  }
}
Vlastnictví Description
SourceType Musí být "Base64Encoded".
Base64EncodedValue Úplný certifikát (včetně privátního klíče) kódovaný jako řetězec Base64.

Vygenerování hodnoty Base64

.pfx Převeďte soubor na řetězec Base64:

PowerShell:

$certBytes = [System.IO.File]::ReadAllBytes("path/to/certificate.pfx")
$base64 = [System.Convert]::ToBase64String($certBytes)
$base64 | Set-Clipboard  # Copies to clipboard

Bash:

base64 -w 0 path/to/certificate.pfx

Použití s tajnými kódy Kubernetes

Uložte certifikát kódovaný v Base64 do tajného kódu Kubernetes a namapujte ho na proměnnou prostředí:

apiVersion: v1
kind: Secret
metadata:
  name: app-cert-secret
type: Opaque
data:
  AzureAd__ClientCertificates__0__Base64EncodedValue: <base64-encoded-pfx>

Odkazujte na tajný klíč v nasazení:

env:
  - name: AzureAd__ClientCertificates__0__SourceType
    value: "Base64Encoded"
  - name: AzureAd__ClientCertificates__0__Base64EncodedValue
    valueFrom:
      secretKeyRef:
        name: app-cert-secret
        key: AzureAd__ClientCertificates__0__Base64EncodedValue

Použití v CI/CD pipelinech

V Azure DevOps nebo GitHub Actions uložte certifikát s kódováním Base64 jako tajnou proměnnou a pak ho nastavte jako proměnnou prostředí za běhu.

GitHub Actions example:

env:
  AzureAd__ClientCertificates__0__SourceType: "Base64Encoded"
  AzureAd__ClientCertificates__0__Base64EncodedValue: ${{ secrets.APP_CERTIFICATE_BASE64 }}

Azure DevOps example:

variables:
  AzureAd__ClientCertificates__0__SourceType: "Base64Encoded"
  AzureAd__ClientCertificates__0__Base64EncodedValue: $(AppCertificateBase64)

Důležité

I když je certifikát kódovaný base64, obsahuje privátní klíč a musí být považován za tajný klíč. Vždy používejte tajné proměnné v kanálech CI/CD – nikdy neověřete certifikáty s kódováním Base64 do správy zdrojového kódu.


Konfigurace certifikátů v kódu jazyka C#

Kromě konfigurace JSON můžete přihlašovací údaje certifikátu nakonfigurovat programově pomocí třídy CredentialDescription z Microsoft.Identity.Abstractions.

Pomocné metody

Třída CredentialDescription poskytuje statické pomocné metody pro každý typ zdroje certifikátu:

using Microsoft.Identity.Abstractions;

// From Azure Key Vault
var kvCredential = CredentialDescription.FromKeyVault(
    "https://your-keyvault-name.vault.azure.net",
    "your-certificate-name");

// From certificate store (by thumbprint)
var thumbprintCredential = CredentialDescription.FromCertificateStore(
    "CurrentUser/My",
    thumbprint: "A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2");

// From certificate store (by distinguished name)
var dnCredential = CredentialDescription.FromCertificateStore(
    "CurrentUser/My",
    distinguishedName: "CN=MyAppCertificate");

// From file path
var pathCredential = CredentialDescription.FromCertificatePath(
    "/path/to/certificate.pfx",
    "your-certificate-password");

// From Base64-encoded string
var base64Credential = CredentialDescription.FromBase64String(
    "MIIKcQIBAzCCCi0GCSqGSIb3DQEHAaCCCh4Egg...");

Použití v ASP.NET Core

Při konfiguraci ověřování předejte popisy přihlašovacích údajů přímo:

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(options =>
    {
        options.Instance = "https://login.microsoftonline.com/";
        options.TenantId = "your-tenant-id";
        options.ClientId = "your-client-id";
        options.ClientCredentials = new[]
        {
            CredentialDescription.FromKeyVault(
                "https://your-keyvault-name.vault.azure.net",
                "your-certificate-name")
        };
    });

Návod

Pomocné metody jsou ekvivalentní nastavení vlastností objektu CredentialDescription ručně. Poskytují stručnější syntaxi při konfiguraci přihlašovacích údajů v kódu, nikoli prostřednictvím appsettings.json.


Vytvoření samopodepsaného certifikátu pro vývoj

Pro místní vývoj a testování můžete vytvořit certifikát podepsaný svým držitelem. Nepoužívejte certifikáty podepsané svým držitelem v produkčním prostředí.

Pomocí PowerShellu (Windows)

Spuštěním následujících příkazů vytvořte certifikát podepsaný svým držitelem, exportujte ho a zobrazte kryptografický otisk:

$cert = New-SelfSignedCertificate `
  -Subject "CN=MyDevCertificate" `
  -CertStoreLocation "Cert:\CurrentUser\My" `
  -KeyExportPolicy Exportable `
  -KeySpec Signature `
  -KeyLength 2048 `
  -KeyAlgorithm RSA `
  -HashAlgorithm SHA256 `
  -NotAfter (Get-Date).AddYears(2)

# Export the .pfx file (with private key)
$password = ConvertTo-SecureString -String "YourPassword123!" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath ".\MyDevCertificate.pfx" -Password $password

# Export the .cer file (public key only — for app registration)
Export-Certificate -Cert $cert -FilePath ".\MyDevCertificate.cer"

# Display the thumbprint
Write-Host "Thumbprint: $($cert.Thumbprint)"

Použití OpenSSL (napříč platformami)

Spuštěním následujících příkazů vygenerujte certifikát, zabalte ho .pfx jako soubor a zobrazte kryptografický otisk:

# Generate a self-signed certificate and private key
openssl req -x509 -newkey rsa:2048 \
  -keyout key.pem -out cert.pem \
  -days 730 -nodes \
  -subj "/CN=MyDevCertificate"

# Package into a .pfx file
openssl pkcs12 -export \
  -out MyDevCertificate.pfx \
  -inkey key.pem -in cert.pem \
  -passout pass:YourPassword123!

# Get the thumbprint
openssl x509 -in cert.pem -noout -fingerprint -sha1

Použití rozhraní příkazového řádku .NET

Export vývojového certifikátu HTTPS jako .pfx souboru:

dotnet dev-certs https --export-path ./MyDevCertificate.pfx --password YourPassword123!

Poznámka:

Příkaz dotnet dev-certs vygeneruje vývojový certifikát HTTPS. I když se dá použít k testování načítání certifikátů, je primárně určená pro místní protokol HTTPS a nemusí být vhodná pro všechny scénáře testování ověřování.


Registrace certifikátu v Microsoft Entra ID

Po vytvoření nebo získání certifikátu musíte v Microsoft Entra ID zaregistrovat jeho veřejný klíč v registraci aplikace.

Použití portálu Azure

  1. Přejděte na portál Azure a přejděte na Microsoft Entra ID>Registrace aplikací.
  2. Vyberte aplikaci.
  3. Vyberte Certifikáty & tajemstvíCertifikátyNahrát certifikát.
  4. Nahrajte soubor .cer nebo .pem obsahující pouze veřejný klíč. Nenahrávejte .pfx soubor, který obsahuje privátní klíč.
  5. Poznamenejte si hodnotu kryptografického otisku zobrazenou po nahrání – možná ji budete potřebovat pro konfiguraci.

Použití Azure CLI

az ad app credential reset \
  --id <application-client-id> \
  --cert @/path/to/certificate.pem \
  --append

Příznak --append přidá certifikát bez odebrání existujících přihlašovacích údajů.

Použití Microsoft Graph PowerShellu

$certData = [System.IO.File]::ReadAllBytes(".\MyDevCertificate.cer")
$base64Cert = [System.Convert]::ToBase64String($certData)

$keyCredential = @{
    type = "AsymmetricX509Cert"
    usage = "Verify"
    key = [System.Convert]::FromBase64String($base64Cert)
    displayName = "MyAppCertificate"
}

Update-MgApplication -ApplicationId <app-object-id> -KeyCredentials @($keyCredential)

Důležité

Nahrajte pouze veřejný klíč (.cer nebo .pem) do registrace aplikace. Nikdy nenahrávejte soubor .pfx, který obsahuje privátní klíč. Privátní klíč musí zůstat bezpečně uložený a přístupný jenom pro vaši aplikaci.


Rotace certifikátů

Rotace certifikátů nahradí stávající certifikát novým ještě před jeho vypršením, čímž se zajišťuje nepřerušovaná služba.

Strategie: Překrývající se certifikáty

Doporučený postup používá překrývající se období platnosti:

  1. Vygenerujte nový certifikát před vypršením platnosti aktuálního certifikátu (například 30–60 dní předem).
  2. Registrujte nový certifikát v registraci aplikace Microsoft Entra vedle existujícího certifikátu. Microsoft Entra ID přijímá tokeny podepsané libovolným registrovaným certifikátem.
  3. Deploy nový certifikát do zdroje certifikátu vaší aplikace (Key Vault, úložiště certifikátů atd.).
  4. Aktualizujte konfiguraci (v případě potřeby) tak, aby odkazovat na nový certifikát.
  5. Po potvrzení, že všechny instance používají nový certifikát, odeberte starý certifikát z registrace aplikace.

Několik certifikátů v konfiguraci

Microsoft. Identity.Web podporuje zadávání více certifikátů. Knihovna je zkusí v daném pořadí a použije první platný certifikát.

{
  "AzureAd": {
    "ClientCertificates": [
      {
        "SourceType": "KeyVault",
        "KeyVaultUrl": "https://your-keyvault.vault.azure.net",
        "KeyVaultCertificateName": "new-cert-2026"
      },
      {
        "SourceType": "KeyVault",
        "KeyVaultUrl": "https://your-keyvault.vault.azure.net",
        "KeyVaultCertificateName": "current-cert-2025"
      }
    ]
  }
}

Automatické otáčení pomocí Azure Key Vault

Azure Key Vault podporuje automatické prodlužování platnosti certifikátu. Když povolíte automatické otáčení:

  1. Key Vault vygeneruje novou verzi certifikátu před vypršením platnosti.
  2. Microsoft. Identity.Web automaticky převezme nejnovější verzi (při příštím načtení certifikátu).
  3. Původní verze certifikátu zůstane platná, dokud nevyprší platnost.

Pro konfiguraci automatické rotace v Key Vault:

az keyvault certificate set-attributes \
  --vault-name your-keyvault-name \
  --name your-certificate-name \
  --policy @rotation-policy.json

Návod

U aplikací s dlouhotrvajícími procesy zvažte implementaci pravidelné aktualizace certifikátu. Microsoft. Identity.Web ukládá certifikát do mezipaměti v paměti. Pokud se certifikát otočí v Key Vault, aplikace převezme nový certifikát při příštím vytvoření nové instance důvěrné klientské aplikace MSAL.


Řešení chyb certifikátů

Tato část obsahuje seznam běžných chybových zpráv a jejich řešení.

Běžné chyby

Certifikát nebyl nalezen.

Chybová zpráva:

System.Security.Cryptography.CryptographicException: The certificate cannot be found.

Možné příčiny a řešení:

Příčina Řešení
Nesprávný kryptografický otisk Ověřte, že kryptografický otisk v konfiguraci odpovídá nainstalovanému certifikátu. Odeberte všechny skryté znaky (mezery, neviditelné unicode).
Nesprávné úložiště certifikátů Ověřte, že CertificateStorePath odpovídá umístění, kde je certifikát nainstalovaný (CurrentUser/My vs LocalMachine/My).
Certifikát není nainstalovaný Importujte certifikát do správného úložiště pomocí certmgr.msc (CurrentUser) nebo certlm.msc (LocalMachine).
Neshoda názvu trezoru klíčů Ověřte KeyVaultUrl a KeyVaultCertificateName jsou správná.
Soubor nebyl nalezen. Ověřte CertificateDiskPath , že odkazuje na existující .pfx soubor a aplikace má přístup pro čtení.

Přístup odepřen pro Key Vault

Chybová zpráva:

Azure.RequestFailedException: The user, group or application '...' does not have certificates get permission on key vault '...'

Řešení:

  • Ověřte, že zásady přístupu udělují get oprávnění pro certifikáty i tajné kódy.
  • Pokud používáte Azure RBAC, ujistěte se, že uživatelský účet má roli Key Vault Certificate User.
  • U spravované identity ověřte, že je identita povolená, a v zásadách se používá správné ID objektu.

Privátní klíč certifikátu není přístupný

Chybová zpráva:

System.Security.Cryptography.CryptographicException: Keyset does not exist.

Řešení:

  • Na Windows/IIS se ujistěte, že identita fondu aplikací má read přístup k privátnímu klíči. Pomocí modulu snap-in Certifikáty konzoly MMC udělte přístup prostřednictvím správy privátních klíčů.
  • V Linuxu .pfx ověřte, že soubor má příslušná oprávnění k souborům (chmod 600).
  • Ujistěte se, že byl certifikát exportován pomocí privátního klíče (Export-PfxCertificate nebo openssl pkcs12 -export).

Platnost certifikátu vypršela

Chybová zpráva:

AADSTS700027: Client assertion contains an invalid signature. The key was expired.

Řešení:

  • Zkontrolujte dobu platnosti certifikátu: openssl x509 -in cert.pem -noout -dates.
  • Vygenerujte nový certifikát a aktualizujte registraci aplikace i konfiguraci vaší aplikace.
  • Implementujte obměnu certifikátů, abyste zabránili budoucím problémům s vypršením platnosti. Viz Obměně certifikátů.

Nesprávné heslo certifikátu

Chybová zpráva:

System.Security.Cryptography.CryptographicException: The specified network password is not correct.

Řešení:

  • Ověřte CertificatePassword , že odpovídá heslu použitému při exportu .pfx souboru.
  • Pokud používáte proměnné prostředí, zkontrolujte problémy s kódováním (nové řádky na konci, speciální znaky).
  • Znovu exportujte certifikát se známým heslem.

Kontrolní seznam diagnostiky

Tento kontrolní seznam použijte, pokud ověřování certifikátu nefunguje:

  • [ ] Platnost osvědčení – Je certifikát v době platnosti? Zkontrolujte NotBefore a NotAfter datumy.
  • [ ] Registrace aplikace – Je veřejný klíč certifikátu nahraný do správné registrace aplikace?
  • [ ] Shoda kryptografického otisku — Odpovídá kryptografický otisk ve vaší konfiguraci certifikátu v registraci aplikace?
  • [ ] Přístup k privátnímu klíči – Může proces aplikace číst privátní klíč certifikátu?
  • [ ] Oprávnění Key Vault — Má identita u zdrojů Key Vault oprávnění certificates/get i secrets/get?
  • [ ] Oddíl Konfigurace – Je konfigurace certifikátu ve správném oddílu (AzureAd nebo AzureAdB2C)?
  • [ ] NuGet packages — Je Microsoft.Identity.Web aktuální? Starší verze nemusí podporovat některé typy zdrojů certifikátů.

Povolit protokolování

Pokud chcete získat podrobné diagnostické informace, povolte protokolování MSAL:

builder.Services.AddMicrosoftIdentityWebAppAuthentication(builder.Configuration, "AzureAd")
    .EnableTokenAcquisitionToCallDownstreamApi()
    .AddInMemoryTokenCaches();

builder.Logging.AddFilter("Microsoft.Identity", LogLevel.Debug);

Projděte si protokoly kvůli zprávám o načítání certifikátů, tvorbě klientských tvrzení a získávání tokenů.