Microsoft.Identity.Web ile sertifikaları kullanın

Microsoft. Identity.Web, gizli istemci uygulamaları için istemci gizli dizilerine güvenli bir alternatif olarak sertifika tabanlı kimlik doğrulamasını destekler. Sertifikalar asimetrik şifreleme kullanır, bu nedenle yalnızca özel anahtar sahibi kimlik doğrulaması yapabilir.

Bu makalede, çeşitli kaynaklardan sertifika kimlik bilgilerini yapılandırıyor, bunları uygulamanıza kaydedecek ve üretim ortamında yönetebilirsiniz.

Sertifikalar neden kullanılır?

Faktör İstemci Sırrı Certificate
Güvenlik ** Paylaşılan gizli anahtar (simetrik) Asimetrik anahtar çifti
Döndürme Uygulama yeniden dağıtma veya yapılandırma değişikliği gerektirir Key Vault aracılığıyla otomatikleştirilebilir
Maruz kalma riski Yapılandırmadaki gizli bilgi sızdırılabilir Özel anahtar güvenli depolamada kalır
Uyumluluk Kurumsal ilkeleri karşılamayabilir Çoğu kurumsal güvenlik gereksinimlerini karşılar
için önerilir Geliştirme, prototip oluşturma Üretim iş yükleri

Önemli

Microsoft, üretim uygulamaları için istemci sırlarına tercih olarak sertifikaları önerir. En yüksek güvenlik duruşu için barındırma ortamınız destekliyorsa sertifikasız kimlik doğrulamasını (Yönetilen Kimlik veya İş Yükü Kimliği Federasyonu) kullanın.

Nasıl çalışır?

  1. Özel anahtarla bir X.509 sertifikası oluşturur veya alırsınız.
  2. Sertifikanın public anahtarını (veya parmak izini) Microsoft Entra uygulama kaydınıza kaydedersiniz.
  3. Çalışma zamanında Microsoft. Identity.Web, yapılandırılan kaynağınızdan sertifikayı (özel anahtar dahil) yükler.
  4. Kütüphane, belirteçleri alabilmek için Microsoft Entra ID'ye gönderdiği istemci onayını imzalamak amacıyla özel anahtarı kullanır.

Sertifika kaynakları

Microsoft. Identity.Web birden çok kaynaktan sertifika yüklemeyi destekler:

Kaynak Türü SourceType Değeri En Uygun
Azure Key Vault KeyVault Üretim (önerilen)
Sertifika Deposu StoreWithThumbprint veya StoreWithDistinguishedName Windows sunucuları, şirket içi
Dosya yolu Path Geliştirme, konteynerleştirilmiş uygulamalar
Base64 ile kodlanmış dize Base64Encoded Kubernetes gizli bilgiler, CI/CD işlem hatları

(veya ClientCertificates) yapılandırma bölümünüzdeki AzureAd dizide AzureAdB2C sertifika kimlik bilgilerini yapılandırabilirsiniz. Döndürme senaryoları için birden çok sertifika belirtebilirsiniz; Microsoft. Identity.Web bulduğu ilk geçerli sertifikayı kullanır.


Azure Key Vault, üretimdeki sertifikalar için önerilen kaynaktır. Merkezi yönetim, erişim denetimi, denetim ve otomatik döndürme özellikleri sağlar.

Konfigürasyon

Sertifika yapılandırmasını appsettings.json konumuna ekleyin:

{
  "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"
      }
    ]
  }
}
Mülkiyet Açıklama
SourceType olmalıdır "KeyVault".
KeyVaultUrl Azure Key Vault URI'niz (örneğin, https://myapp-kv.vault.azure.net).
KeyVaultCertificateName Key Vault'ta depolanan sertifikanın adı.

Key Vault erişim ilkelerini ayarlama

Uygulamanızın kimliğinin Key Vault'tan sertifika okuma iznine sahip olması gerekmektedir. Bunu nasıl verdiğiniz, Azure kasa erişim ilkesi modelini mi yoksa rol tabanlı erişim denetimini (RBAC) kullandığınıza bağlıdır.

Seçenek 1: Kasa erişim ilkesi

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

Uyarı

Azure Key Vault özel anahtarı sertifikaya bağlı bir gizli dizi olarak depoladığı için --secret-permissions get izni gereklidir. Microsoft. Identity.Web'in hem sertifikaya hem de özel anahtarına erişmesi gerekir.

Seçenek 2: RBAC'Azure

uygulamanızın kimliğine Key Vault Sertifika Kullanıcısı rolünü atayın:

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>

Key Vault erişmek için Yönetilen Kimlik kullanma

Uygulamanız Azure (App Service, Azure İşlevleri, Azure Kubernetes Service, VM'ler) çalıştırıldığında, Key Vault kimlik doğrulaması yapmak için Yönetilen Kimlik'i kullanın. Kasaya erişmek için herhangi bir kimlik bilgisi gereksinimini ortadan kaldırır.

Sistem tarafından atanan Yönetilen Kimlik

Uygulamanızda sistem tarafından atanan bir Yönetilen Kimlik etkinleştirildiyse Microsoft. Identity.Web, Key Vault kimlik doğrulaması yapmak için otomatik olarak DefaultAzureCredential kullanır. Girişin ötesinde ClientCertificates ek yapılandırma gerekmez:

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

Kullanıcı Tarafından Atanan Yönetilen Kimlik

Kullanıcı tarafından atanan Yönetilen Kimlik için, Key Vault sertifika tanımlayıcısı üzerinde ManagedIdentityClientId belirtin:

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

Tip

Geliştirme sırasında yerel olarak çalışırken DefaultAzureCredential Azure CLI veya Visual Studio kimlik bilgilerinize geri döner. az login ile oturum açtığınızdan ve geliştirici hesabınızın uygun Key Vault izinlerine sahip olduğundan emin olun.


Sertifika deposundan (yalnızca Windows)

Windows sertifikalarını Windows Sertifika Deposu'ndan yükleyebilirsiniz. Bu, şirket içi veya IIS tarafından barındırılan dağıtımlar için yaygındır.

Parmak izine göre

Sertifikayı SHA-1 parmak izine göre tanımlamak için kullanın StoreWithThumbprint :

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

    "ClientCertificates": [
      {
        "SourceType": "StoreWithThumbprint",
        "CertificateStorePath": "CurrentUser/My",
        "CertificateThumbprint": "A1B2C3D4E5F6A1B2C3D4E5F6A1B2C3D4E5F6A1B2"
      }
    ]
  }
}
Mülkiyet Açıklama
SourceType olmalıdır "StoreWithThumbprint".
CertificateStorePath Sertifika deposu konumu. Ortak değerler: "CurrentUser/My", "LocalMachine/My".
CertificateThumbprint Sertifikanın SHA-1 parmak izi (40 onaltılık karakter).

Ayırt edici isme göre

Sertifikayı konu adına göre tanımlamak için kullanın StoreWithDistinguishedName :

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

    "ClientCertificates": [
      {
        "SourceType": "StoreWithDistinguishedName",
        "CertificateStorePath": "CurrentUser/My",
        "CertificateDistinguishedName": "CN=MyAppCertificate"
      }
    ]
  }
}
Mülkiyet Açıklama
SourceType olmalıdır "StoreWithDistinguishedName".
CertificateStorePath Sertifika deposu konumu. Ortak değerler: "CurrentUser/My", "LocalMachine/My".
CertificateDistinguishedName Sertifikanın konu ayırt edici adı (örneğin, "CN=MyAppCertificate").

Sertifika deposu konumları

Aşağıdaki tabloda yaygın sertifika deposu yolları ve bunlara erişmek için gereken izinler listelemektedir:

Yol Açıklama Gerekli izinler
CurrentUser/My Geçerli kullanıcının kişisel mağazası Kullanıcı düzeyinde erişim
LocalMachine/My Makine genelinde kişisel mağaza Yönetici erişimi
LocalMachine/Root Güvenilen kök Sertifika Yetkilileri (CA'lar) Yönetici erişimi
CurrentUser/Root Mevcut kullanıcı güvenilir kök CA’lar Kullanıcı düzeyinde erişim

Uyarı

IIS'de barındırırken, uygulama havuzu kimliğinin sertifikanın özel anahtarına okuma erişimi olmalıdır. Bunu, Sertifikalar MMC ek bileşenindeki Özel Anahtarları Yönet seçeneğini kullanarak verebilirsiniz.


Dosya yolundan

Bir sertifikayı doğrudan disk üzerindeki bir .pfx (PKCS#12) dosyasından yükleyebilirsiniz.

Uyarı

Sertifika dosyalarının yapılandırmada parolalarla diskte depolanması üretim için önerilmez. Bu yaklaşımı yalnızca yerel geliştirme için veya dosya sisteminin güvenliğinin sağlandığı ortamlarda (örneğin, kapsayıcılara bağlı gizli diziler) kullanın.

Konfigürasyon

sertifika dosya yolunu ve parolasını appsettings.json öğenize ekleyin.

{
  "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"
      }
    ]
  }
}
Mülkiyet Açıklama
SourceType olmalıdır "Path".
CertificateDiskPath Dosyanın mutlak veya göreli yolu .pfx .
CertificatePassword .pfx Dosyanın parolası. Sertifikanın parolası yoksa, bu özelliği atlayın veya boş bir dize olarak ayarlayın.

Tip

parolanın içinde appsettings.jsondüz metin olarak depolanmasını önlemek için, bir ortam değişkeninden veya gizli dizi yöneticisinden bu parolaya başvurun:

.NET Kullanıcı Gizli Anahtarları (geliştirme):

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

Ortam değişkeni kullanma:

export AzureAd__ClientCertificates__0__CertificatePassword="your-password"

Base64 ile kodlanmış değerden

Sertifikayı Base64 ile kodlanmış bir dize olarak sağlayabilirsiniz. Bu yaklaşım, ortam değişkenleri, Kubernetes gizli dizileri veya CI/CD işlem hattı değişkenleri aracılığıyla sertifika eklediğinizde kullanışlıdır.

Konfigürasyon

Base64 ile kodlanmış sertifika değerini appsettings.json öğenize ekleyin.

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

    "ClientCertificates": [
      {
        "SourceType": "Base64Encoded",
        "Base64EncodedValue": "MIIKcQIBAzCCCi0GCSqGSIb3DQEHAaCCCh4Egg..."
      }
    ]
  }
}
Mülkiyet Açıklama
SourceType olmalıdır "Base64Encoded".
Base64EncodedValue Base64 dizesi olarak kodlanmış tam sertifika (özel anahtar dahil).

Base64 değerini oluşturma

Bir .pfx dosyayı Base64 dizesine dönüştürün:

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

Kubernetes gizli bilgileriyle kullanım

Base64 kodlu sertifikayı kubernetes gizli dizisinde depolayın ve bir ortam değişkeniyle eşleyin:

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

Dağıtımınızda gizli bilgiyi referans alın.

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

CI/CD işlem hatlarında kullanma

Azure DevOps veya GitHub Actions Base64 kodlu sertifikayı gizli dizi değişkeni olarak depolayın ve çalışma zamanında ortam değişkeni olarak ayarlayın.

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)

Önemli

Sertifika Base64 ile kodlanmış olsa da özel anahtarı içerir ve gizli dizi olarak ele alınmalıdır. CI/CD işlem hatlarında her zaman gizli dizi değişkenlerini kullanın; hiçbir zaman Base64 ile kodlanmış sertifikaları kaynak denetimine işlemeyin.


C# kodunda sertifikaları yapılandırma

JSON yapılandırmasına ek olarak, CredentialDescription'den Microsoft.Identity.Abstractions sınıfını kullanarak sertifika kimlik bilgilerini program aracılığıyla yapılandırabilirsiniz.

Yardımcı yöntemler

sınıfı, CredentialDescription her sertifika kaynak türü için statik yardımcı yöntemler sağlar:

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

ASP.NET Core'de kullanma

Kimlik doğrulamasını yapılandırırken kimlik bilgisi açıklamalarını doğrudan geçirin:

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

Tip

Yardımcı yöntemler, nesnedeki CredentialDescription özellikleri el ile ayarlamaya eşdeğerdir. Kimlik bilgilerini appsettings.json üzerinden değil de kodda yapılandırdığınızda, daha kısa ve öz bir söz dizimi sunarlar.


Geliştirme için kendi kendine imzalanmış sertifika oluşturma

Yerel geliştirme ve test için otomatik olarak imzalanan bir sertifika oluşturabilirsiniz. Üretimde otomatik olarak imzalanan sertifikaları kullanmayın.

PowerShell kullanma (Windows)

Otomatik olarak imzalanan bir sertifika oluşturmak, sertifikayı dışarı aktarmak ve parmak izini görüntülemek için aşağıdaki komutları çalıştırın:

$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)"

OpenSSL kullanma (platformlar arası)

Sertifika oluşturmak, dosya olarak .pfx paketlemek ve parmak izini görüntülemek için aşağıdaki komutları çalıştırın:

# 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

.NET CLI kullanma

Geliştirme HTTPS sertifikalarını dosya olarak dışarı aktarın .pfx :

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

Uyarı

dotnet dev-certs komutu bir HTTPS geliştirme sertifikası oluşturur. Sertifika yüklemesini test etme amacıyla kullanılabilse de, öncelikle yerel HTTPS için tasarlanmıştır ve tüm kimlik doğrulama testi senaryoları için uygun olmayabilir.


Sertifikayı Microsoft Entra ID'ye kaydetme

Sertifika oluşturduktan veya aldıktan sonra ortak anahtarını Microsoft Entra ID uygulama kaydınıza kaydetmeniz gerekir.

Azure portalını kullanma

  1. Azure portalına gidin ve Microsoft Entra ID>Uygulama kayıtları adresine gidin.
  2. Uygulamanızı seçin.
  3. Sertifikalar & gizli anahtarlarSertifikalarSertifika yükle.
  4. .cer veya .pem dosyasını yükleyin, yalnızca ortak anahtarı içeren. Özel anahtarı içeren dosyayı karşıya yüklemeyin .pfx .
  5. Karşıya yüklemeden sonra görüntülenen Parmak İzi değerini not edin; yapılandırma için buna ihtiyacınız olabilir.

Azure CLI kullanma

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

bayrağı, --append mevcut kimlik bilgilerini kaldırmadan sertifikayı ekler.

Microsoft Graph PowerShell kullanma

$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)

Önemli

Uygulama kaydına yalnızca ortak anahtarı (.cer veya .pem) yükleyin. Özel anahtarı içeren .pfx dosyayı hiçbir zaman karşıya yüklemeyin. Özel anahtarın güvenli bir şekilde depolanmış ve yalnızca uygulamanız tarafından erişilebilir durumda kalması gerekir.


Sertifika rotasyonu

Sertifika döndürme süresi dolmadan önce süresi dolan sertifikayı yenisiyle değiştirerek kesintisiz hizmet sağlar.

Strateji: Çakışan sertifikalar

Önerilen yaklaşım çakışan geçerlilik sürelerini kullanır:

  1. Geçerli sertifikanın süresi dolmadan önce yeni bir sertifika oluşturun (örneğin, 30-60 gün önce).
  2. Yeni sertifikayı mevcut sertifikayla birlikte Microsoft Entra uygulama kaydınıza kaydetme. Microsoft Entra ID herhangi bir kayıtlı sertifika tarafından imzalanan belirteçleri kabul eder.
  3. Yeni sertifikayı dağıtın uygulamanızın sertifika kaynağına (Key Vault, sertifika deposu vb.).
  4. Yapılandırmayı (gerekirse) yeni sertifikaya işaret etmek için güncelleştirin.
  5. Tüm örneklerin yenisini kullandığını onayladıktan sonra eski sertifikayı uygulama kaydından kaldırın.

Yapılandırmada birden çok sertifika

Microsoft. Identity.Web birden çok sertifika belirtmeyi destekler. Kitaplık bunları sırayla dener ve ilk geçerli sertifikayı kullanır:

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

Azure Key Vault ile otomatik döndürme

Azure Key Vault otomatik sertifika yenilemeyi destekler. Otomatik döndürmeyi etkinleştirdiğinizde:

  1. Key Vault, süresi dolmadan önce yeni bir sertifika sürümü oluşturur.
  2. Microsoft. Identity.Web en son sürümü otomatik olarak alır (sonraki sertifika getirmede).
  3. Eski sertifika sürümü süresi dolana kadar geçerli kalır.

Key Vault otomatik döndürmeyi yapılandırmak için:

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

Tip

Uzun süre çalışan işlemlere sahip uygulamalar için düzenli aralıklarla sertifika yenilemesi uygulamayı göz önünde bulundurun. Microsoft. Identity.Web sertifikayı bellekte önbelleğe alır. Sertifika Key Vault'ta değiştirildiğinde, uygulama yeni bir MSAL gizli istemci uygulama örneği oluşturmaya ihtiyaç duyduğunda yeni sertifikayı alır.


Sertifika hatalarını giderme

Bu bölümde yaygın hata iletileri ve bunların çözümleri listelenmektedir.

Sık karşılaşılan hatalar

Sertifika bulunamadı

Hata iletisi:

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

Olası nedenler ve çözümler:

Nedeni Çözüm
Yanlış parmak izi Yapılandırmanızdaki parmak izini yüklü sertifikayla eşleştirin. Tüm gizli karakterleri (boşluklar, görünmez Unicode) kaldırın.
Yanlış sertifika deposu CertificateStorePath sertifikanın yüklü olduğu yerle (CurrentUser/My vs LocalMachine/My) eşleşiyor mu kontrol edin.
Sertifika yüklü değil (CurrentUser) veya certmgr.msc (LocalMachine) kullanarak certlm.msc sertifikayı doğru depoya aktarın.
Key Vault isim uyumsuzluğu KeyVaultUrl ve KeyVaultCertificateName'in doğru olduğunu doğrulayın.
Dosya bulunamadı Var olan bir CertificateDiskPath dosyasına işaret ettiğini ve uygulamanın bu dosyada okuma erişiminin olduğunu onaylayın.pfx.

Key Vault erişimi reddedildi

Hata iletisi:

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

Çözümler:

  • Erişim ilkelerinin hem sertifikalar hem de gizliler için izin verdiğinden emin olun.
  • Azure RBAC kullanıyorsanız kimliğin Key Vault Sertifika Kullanıcısı rolüne sahip olduğundan emin olun.
  • Yönetilen Kimlik için, kimliğin etkinleştirildiğini ve ilkede doğru nesne kimliğinin kullanıldığını onaylayın.

Sertifika özel anahtarı erişilebilir değil

Hata iletisi:

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

Çözümler:

  • Windows/IIS'de, uygulama havuzu kimliğinin özel anahtara read erişimi olduğundan emin olun. Özel Anahtarları Yönet aracılığıyla erişim vermek için Sertifikalar MMC ek bileşenini kullanın.
  • Linux'ta, dosyanın uygun dosya izinlerine (.pfx) sahip olduğunu doğrulayınchmod 600.
  • Sertifikanın özel anahtarla (Export-PfxCertificate veya openssl pkcs12 -export) dışarı aktarıldığından emin olun.

Sertifikanın süresi doldu

Hata iletisi:

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

Çözümler:

  • Sertifikanın geçerlilik süresini denetleyin: openssl x509 -in cert.pem -noout -dates.
  • Yeni bir sertifika oluşturun ve hem uygulama kaydını hem de uygulamanızın yapılandırmasını güncelleştirin.
  • Gelecekte süre sonu sorunlarını önlemek için sertifika döndürmeyi uygulayın. Bkz. Sertifika yenilemesi.

Yanlış sertifika parolası

Hata iletisi:

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

Çözümler:

  • Doğrula CertificatePassword, .pfx dosyasını dışarı aktarırken kullanılan parolayla eşleştiğini.
  • Ortam değişkenlerini kullanıyorsanız kodlama hatalarını (sondaki satır sonları, özel karakterler) denetleyin.
  • Sertifikayı bilinen bir parolayla yeniden dışarı aktarın.

Tanılama denetim listesi

Sertifika kimlik doğrulaması çalışmadığında bu denetim listesini kullanın:

  • [ ] Sertifika geçerliliği — Sertifika geçerlilik süresi içinde mi? NotBefore ve NotAfter tarihlerini kontrol edin.
  • [ ] Uygulama kaydı — Sertifikanın ortak anahtarı doğru uygulama kaydına mı yüklendi?
  • [ ] Parmak izi eşleşmesi — Yapılandırmanızdaki parmak izi uygulama kaydındaki sertifikayla eşleşir mi?
  • [ ] Özel anahtar erişimi — Uygulama işlemi sertifikanın özel anahtarını okuyabilir mi?
  • [ ] Key Vault izinleri — Key Vault kaynaklar için kimliğin hem certificates/get hem de secrets/get izinleri var mı?
  • [ ] Yapılandırma bölümü — Sertifika yapılandırması doğru bölümün (AzureAd veya AzureAdB2C) altında mı?
  • [ ] NuGet paketleriMicrosoft.Identity.Web güncel mi? Eski sürümlerde belirli sertifika kaynak türleri için destek eksik olabilir.

Log kaydını etkinleştir

Ayrıntılı tanılama bilgilerini almak için MSAL günlüğünü etkinleştirin:

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

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

Sertifika yükleme, istemci onaylama oluşturma ve belirteç alma hakkındaki iletilerin günlüklerini gözden geçirin.