Uygulama kimlik doğrulaması sertifikası kimlik bilgilerini Microsoft kimlik platformu

Microsoft kimlik platformu, örneğin OAuth 2.0 istemci kimlik bilgileri verme akışında ve adına (OBO) akışında bir istemci gizli dizisinin kullanılabilmesi için uygulamanın kimlik doğrulaması için kendi kimlik bilgilerini kullanmasına olanak tanır.

Bir uygulamanın kimlik doğrulaması için kullanabileceği bir kimlik bilgisi biçimi, uygulamanın sahip olduğu bir sertifikayla imzalanan bir JSON Web Belirteci (JWT) onayıdır. Bu, istemci kimlik doğrulaması seçeneği için OpenID Connect belirtiminde private_key_jwt açıklanmıştır.

Başka bir kimlik sağlayıcısı tarafından verilen bir JWT'yi uygulamanız için kimlik bilgisi olarak kullanmak istiyorsanız, federasyon ilkesi ayarlama hakkında bilgi için lütfen iş yükü kimlik federasyonu konusuna bakın.

Onay biçimi

Onaylama işlemini hesaplamak için istediğiniz dilde birçok JWT kitaplığından birini kullanabilirsiniz. MSAL bunu kullanarak .WithCertificate()destekler. Bilgiler belirteç tarafından Üst Bilgi, Talepler ve İmza içinde taşınır.

Parametre Açıklama
alg PS256 olmalıdır
typ JWT olmalıdır
x5t#s256 X.509 sertifikasının DER kodlamasının Base64url kodlamalı SHA-256 parmak izi.

Talepler (yük)

Talep türü Value Açıklama
aud https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token "aud" (hedef kitle) talebi, JWT'nin hedeflediği alıcıları tanımlar (burada Microsoft Entra Kimliği) Bkz. RFC 7519, Bölüm 4.1.3. Bu durumda, bu alıcı oturum açma sunucusudur (login.microsoftonline.com).
exp 1601519414 "exp" (süre sonu) talebi, JWT'nin işlenmek üzere kabul edilmemesi gereken son kullanma süresini tanımlar. Bkz. RFC 7519, Bölüm 4.1.4. Bu, onaylama işleminin o zamana kadar kullanılmasını sağlar, bu nedenle en fazla 5-10 dakika sonra nbf kısa tutun. Microsoft Entra Id şu anda geçerli saate kısıtlama exp eklemez.
iss {ClientID} "iss" (veren) talebi, JWT'yi veren sorumluyu (bu örnekte istemci uygulamanızı) tanımlar. GUID uygulama kimliğini kullanın.
jti (guid) "jti" (JWT ID) talebi, JWT için benzersiz bir tanımlayıcı sağlar. Tanımlayıcı değeri, aynı değerin yanlışlıkla farklı bir veri nesnesine atanma olasılığının göz ardı edilebilir olmasını sağlayacak şekilde atanmalıdır ; uygulama birden çok veren kullanıyorsa, farklı verenler tarafından üretilen değerler arasında çakışmalar engellenmelidir. "jti" değeri büyük/küçük harfe duyarlı bir dizedir. RFC 7519, Bölüm 4.1.7
nbf 1601519114 "nbf" (daha önce değil) talebi, JWT'nin işlenmek üzere kabul edilmediği zamanı tanımlar. RFC 7519, Bölüm 4.1.5. Geçerli saati kullanmak uygundur.
sub {ClientID} "Alt" (konu) talebi JWT'nin konusunu tanımlar, bu durumda da uygulamanızı tanımlar. ile aynı değeri isskullanın.
iat 1601519114 "iat" (verilen) talebi, JWT'nin verildiği zamanı tanımlar. Bu talep, JWT'nin yaşını belirlemek için kullanılabilir. RFC 7519, Bölüm 4.1.5.

İmza

İmza, JSON Web Belirteci RFC7519 belirtiminde açıklandığı gibi sertifika uygulanarak hesaplanır. PSS doldurmayı kullanın.

Kodu çözülen JWT onay örneği

{
  "alg": "PS256",
  "typ": "JWT",
  "x5t#sha256": "A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u"
}
.
{
  "aud": "https: //login.microsoftonline.com/contoso.onmicrosoft.com/oauth2/v2.0/token",
  "exp": 1484593341,
  "iss": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
  "jti": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",
  "nbf": 1484592741,
  "sub": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
}
.
"A1bC2dE3fH4iJ5kL6mN7oP8qR9sT0u..."

Kodlanmış JWT onay örneği

Aşağıdaki dize, kodlanmış onay örneğidir. Dikkatlice bakarsanız, noktalarla ayrılmış üç bölüm (.):

  • İlk bölüm üst bilgiyi kodlar
  • İkinci bölüm talepleri (yük) kodlar
  • Son bölüm, ilk iki bölümün içeriğindeki sertifikalarla hesaplanan imzadır
"eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNScUtqRlBuZDdSRnd2d1pJMCJ9.eyJhdWQiOiJodHRwczpcL1wvbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbVwvam1wcmlldXJob3RtYWlsLm9ubWljcm9zb2Z0LmNvbVwvb2F1dGgyXC90b2tlbiIsImV4cCI6MTQ4NDU5MzM0MSwiaXNzIjoiOTdlMGE1YjctZDc0NS00MGI2LTk0ZmUtNWY3N2QzNWM2ZTA1IiwianRpIjoiMjJiM2JiMjYtZTA0Ni00MmRmLTljOTYtNjVkYmQ3MmMxYzgxIiwibmJmIjoxNDg0NTkyNzQxLCJzdWIiOiI5N2UwYTViNy1kNzQ1LTQwYjYtOTRmZS01Zjc3ZDM1YzZlMDUifQ.
Gh95kHCOEGq5E_ArMBbDXhwKR577scxYaoJ1P{a lot of characters here}KKJDEg"

Sertifikanızı Microsoft kimlik platformu'a kaydetme

Aşağıdaki yöntemlerden herhangi birini kullanarak sertifika kimlik bilgilerini Microsoft Entra yönetim merkezi aracılığıyla Microsoft kimlik platformu istemci uygulamasıyla ilişkilendirebilirsiniz:

Sertifika dosyasını karşıya yükleme

İstemci uygulamasının Uygulama kayıtları sekmesinde:

  1. Sertifikalar ve gizli diziler>Sertifikalar'ı seçin.
  2. Sertifikayı karşıya yükle'yi seçin ve karşıya yüklenecek sertifika dosyasını seçin.
  3. Ekle'yi seçin. Sertifika karşıya yüklendikten sonra parmak izi, başlangıç tarihi ve süre sonu değerleri görüntülenir.

Uygulama bildirimini güncelleştirme

Sertifika aldıktan sonra şu değerleri hesap edin:

  • $base64Thumbprint - Sertifika karması için Base64 kodlanmış değeri
  • $base64Value - Sertifika ham verilerinin Base64 ile kodlanmış değeri

Uygulama bildirimindeki ($keyId) anahtarı tanımlamak için bir GUID sağlayın.

İstemci uygulaması için Azure uygulama kaydında:

  1. Uygulama bildirimini açmak için Bildirim'i seçin.

  2. Aşağıdaki şemayı kullanarak keyCredentials özelliğini yeni sertifika bilgilerinizle değiştirin.

    "keyCredentials": [
        {
            "customKeyIdentifier": "$base64Thumbprint",
            "keyId": "$keyid",
            "type": "AsymmetricX509Cert",
            "usage": "Verify",
            "value":  "$base64Value"
        }
    ]
    
  3. Uygulama bildirimindeki düzenlemeleri kaydedin ve bildirimi Microsoft kimlik platformu'a yükleyin.

    keyCredentials Özelliği çok değerlidir, bu nedenle daha zengin anahtar yönetimi için birden çok sertifika yükleyebilirsiniz.

İstemci onayı kullanma

İstemci onayları, bir istemci gizli dizisinin kullanılacağı her yerde kullanılabilir. Örneğin yetkilendirme kodu akışında, isteğin uygulamanızdan geldiğini kanıtlamak için bir client_secret geçirebilirsiniz. Bunu ve client_assertion_type parametreleriyle client_assertion değiştirebilirsiniz.

Parametre Değer Açıklama
client_assertion_type urn:ietf:params:oauth:client-assertion-type:jwt-bearer Bu, sertifika kimlik bilgisi kullandığınızı belirten sabit bir değerdir.
client_assertion JWT Bu, yukarıda oluşturulan JWT'dir.

Sonraki adımlar

MSAL.NET kitaplığı bu senaryoyu tek bir kod satırında işler.

GitHub'da Microsoft kimlik platformu kod örneğini kullanan .NET daemon konsol uygulaması, bir uygulamanın kimlik doğrulaması için kendi kimlik bilgilerini nasıl kullandığını gösterir. Ayrıca PowerShell cmdlet'ini kullanarak otomatik olarak imzalanan bir sertifikayı New-SelfSignedCertificate nasıl oluşturabileceğinizi de gösterir. Sertifika oluşturmak, parmak izini hesaplamak vb. için örnek depodaki uygulama oluşturma betiklerini de kullanabilirsiniz.