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.
Üst bilgi
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 iss kullanı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:
- Sertifikalar ve gizli diziler>Sertifikalar'ı seçin.
- Sertifikayı karşıya yükle'yi seçin ve karşıya yüklenecek sertifika dosyasını seçin.
- 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:
Uygulama bildirimini açmak için Bildirim'i seçin.
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" } ]
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.