Microsoft kimlik platformu ve OAuth 2.0 Kaynak Sahibi Parola Kimlik Bilgileri

Microsoft kimlik platformu, OAuth 2.0 Kaynak Sahibi Parola Kimlik Bilgileri (ROPC) verme yetkisinidestekler ve bu da bir uygulamanın kullanıcının parolasını doğrudan işleyerek oturum açmasına olanak tanır. Bu makalede, uygulamanızdaki protokole karşı doğrudan programlama açıklanmaktadır. Mümkün olduğunda, belirteçleri almak ve güvenli web API'lerini çağırmak içindesteklenen Microsoft Kimlik Doğrulama Kitaplıklarını (MSAL) kullanmanızı öneririz. Ayrıca MSAL kullananörnek uygulamalarına da göz atın.

Uyarı

Microsoft, ROPC akışını kullanmamanızı önermektedir; bu akış, çok faktörlü kimlik doğrulaması (MFA) ile uyumlu değildir. Çoğu senaryoda daha güvenli alternatifler kullanılabilir ve önerilir. Bu akış, uygulamaya çok yüksek düzeyde güven gerektirir ve diğer akışlarda mevcut olmayan riskler taşır. Bu akışı yalnızca daha güvenli akışlar uygun olmadığında kullanmalısınız.

Önemli

  • Microsoft kimlik platformu, kişisel hesapları değil yalnızca Microsoft Entra kiracıları içinde ROPC iznini destekler. Bu, kiracıya özgü bir uç nokta (https://login.microsoftonline.com/{TenantId_or_Name}) veya organizations uç noktası kullanmanız gerektiği anlamına gelir.
  • Microsoft Entra kiracısına davet edilen kişisel hesaplar ROPC akışını kullanamaz.
  • Parolası olmayan hesaplar ROPC ile oturum açamaz; bu da SMS oturum açma, FIDO ve Authenticator uygulaması gibi özelliklerin bu akışla çalışmayabileceği anlamına gelir. Uygulamanız veya kullanıcılarınız bu özellikleri gerektiriyorsa ROPC dışında bir verme türü kullanın.
  • Kullanıcıların uygulamada oturum açmak için çok faktörlü kimlik doğrulaması (MFA) kullanması gerekiyorsa, bunlar engellenir.
  • ROPC, karma kimlik federasyonu senaryolarında (örneğin, şirket içi hesapların kimliğini doğrulamak için kullanılan Microsoft Entra Id ve AD FS) desteklenmez. Kullanıcılar tam sayfa şirket içi kimlik sağlayıcısına yeniden yönlendiriliyorsa, Microsoft Entra Id kullanıcı adını ve parolayı bu kimlik sağlayıcısına karşı test edememektedir. Ancak Geçiş kimlik doğrulaması ROPC ile desteklenir.
  • Karma kimlik federasyon senaryosu için bir özel durum şu olabilir: AllowCloudPasswordValidation true olarak ayarlanmış Ev Bölgesi Bulma ilkesi, şirket içi parola bulutla eşitlendiğinde ROPC akışının federasyon kullanıcıları için çalışmasını sağlar. Daha fazla bilgi için bkz. eski uygulamalar için federasyon kullanıcıları için doğrudan ROPC kimlik doğrulamasını etkinleştirme.
  • Baştaki veya sondaki boşluklara sahip parolalar ROPC akışı tarafından desteklenmez.

ROPC'den Nasıl Geçiş Yapılır

MFA daha yaygın hale geldikçe, bazı Microsoft web API'leri yalnızca MFA gereksinimlerini geçtiyse erişim belirteçlerini kabul eder. ROPC kullanan uygulamalar ve test makinelerine erişim engellenecek. Ya Microsoft Entra belirteci vermez ya da kaynak isteği reddeder.

Korumalı aşağı akış API'lerini çağırmak üzere belirteç almak için ROPC kullanıyorsanız, güvenli bir belirteç alma stratejisine geçin.

Kullanıcı bağlamı kullanılabilir olduğunda

Bir son kullanıcının bir kaynağa erişmesi gerekiyorsa, kendi adına hareket eden istemci uygulaması etkileşimli bir kimlik doğrulaması biçimi kullanmalıdır. Son kullanıcıya yalnızca tarayıcıda sorulduğunda MFA sınaması yapılabilir.

  • Web uygulamaları için:
  • Web API'leri tarayıcı görüntüleyemez. Bunun yerine, istemci uygulamasına bir doğrulama isteği döndürmeleri gerekir. Ayrıntılar için bkz. Web API'leri ve web API'lerinde kullanıcıları zorlama .
  • Masaüstü uygulamaları aracı tabanlı kimlik doğrulaması kullanmalıdır. Aracılar, MFA'yı zorunlu kılmak ve mümkün olan en güvenli duruşu etkinleştirmek için tarayıcı tabanlı kimlik doğrulaması kullanır.
  • Mobil uygulamalar da aracı (Authenticator, Şirket Portalı) tabanlı kimlik doğrulaması kullanacak şekilde yapılandırılmalıdır.

Kullanıcı bağlamı mevcut olmadığında

Hiçbir kullanıcı bağlamının söz konusu olmadığı ancak bunlarla sınırlı olmadığı senaryo örnekleri şunlardır:

  • CI işlem hattının parçası olarak çalışan bir betik.
  • Kullanıcı ayrıntıları olmadan kendi adına bir kaynağı çağırması gereken bir hizmet.

Uygulama geliştiricileri, daemon örneklerinde gösterilen Hizmet Sorumlusu kimlik doğrulamasıkullanmalıdır. MFA, Hizmet Sorumluları için geçerli değildir.

Hizmet sorumlusu olarak kimlik doğrulaması yapmanın birden çok yolu vardır:

  • Uygulamanız Azure altyapısında çalışıyorsa yönetilen kimlik kullanın. Yönetilen Kimlik, gizli anahtarları ve sertifikaları yönetme ve döndürme ek yükünü ortadan kaldırır.
  • Uygulamanız GitHub gibi başka bir OAuth2 uyumlu Kimlik sağlayıcısı tarafından yönetilen bir sistemde çalışıyorsa Federasyon Kimlik Bilgilerikullanın.
  • Yönetilen Kimlik veya Federasyon Kimliği kullanamıyorsanız, sertifika kimlik bilgisikullanın.

Uyarı

Bir kullanıcı bağlamı kullanılabilir olduğunda Hizmet Sorumlusu kimlik doğrulamayı kullanmayın. Yalnızca uygulama erişimi doğası gereği yüksek ayrıcalıkları vardır ve genellikle kiracının tamamına erişim sağlar, bu da kötü niyetli bir kişinin herhangi bir kullanıcının müşteri verilerine erişmesine olanak tanır.

Protokol diyagramı

Aşağıdaki diyagramda ROPC akışı gösterilmektedir.

Kaynak sahibi parola kimlik bilgisi akışını gösteren Diyagramı

Yetkilendirme isteği

ROPC akışı tek bir istektir; istemci kimliğini ve kullanıcının kimlik bilgilerini kimlik sağlayıcısına gönderir ve karşılığında belirteçleri alır. İstemci, bunu yapmadan önce kullanıcının e-posta adresini (UPN) ve parolasını istemelidir. Başarılı bir istekten hemen sonra istemci, kullanıcının kimlik bilgilerini bellekten güvenli bir şekilde atmalıdır. Onları asla kurtarmamalı.

HTTP
// Line breaks and spaces are for legibility only.  This is a public client, so no secret is required.

POST {tenant}/oauth2/v2.0/token
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope=user.read%20openid%20profile%20offline_access
&username=MyUsername@myTenant.com
&password=SuperS3cret
&grant_type=password
Parametre Koşul Açıklama
tenant Gerekli Kullanıcının giriş yapmasını istediğiniz dizin kiracısı. Kiracı GUID veya kolay ad biçiminde olabilir. Ancak parametresi common veya consumersolarak ayarlanamaz, ancak organizationsolarak ayarlanabilir.
client_id Gerekli Microsoft Entra yönetim merkezi - Uygulama kayıtları sayfasının uygulamanıza atandığı Uygulama (istemci) kimliği.
grant_type Gerekli passwordolarak ayarlanmalıdır.
username Gerekli Kullanıcının e-posta adresi.
password Gerekli Kullanıcının parolası.
scope Önerilen kapsamlarının veya uygulamanın gerektirdiği izinlerin boşlukla ayrılmış listesi. Etkileşimli bir akışta, yöneticinin veya kullanıcının bu kapsamları önceden onaylaması gerekir.
client_secret Bazen gerekli Uygulamanız genel istemciyse client_secret veya client_assertion eklenemez. Uygulama gizli bir istemciyse dahil edilmelidir.
client_assertion Bazen gerekli Sertifika kullanılarak oluşturulan farklı bir client_secretbiçimi. Daha fazla bilgi için bkz: sertifika kimlik bilgileri.

Başarılı kimlik doğrulaması yanıtı

Aşağıdaki örnekte başarılı bir belirteç yanıtı gösterilmektedir:

JSON
{
    "token_type": "Bearer",
    "scope": "User.Read profile openid email",
    "expires_in": 3599,
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
    "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD..."
}
Parametre Biçim Açıklama
token_type Dizgi Her zaman Bearerolarak ayarlayın.
scope Boşlukla ayrılmış ifadeler Erişim belirteci döndürüldüyse, bu parametre erişim belirtecinin geçerli olduğu kapsamları listeler.
expires_in Int Eklenen erişim belirtecinin geçerli olduğu saniye sayısı.
access_token Opak metin İstenen kapsamları için verilir.
id_token JWT Özgün scope parametresi openid kapsamını dahil ettiyse verilir.
refresh_token Opak dizi Özgün scope parametresi offline_accessdahil edilmişse verilir.

yenileme belirtecini kullanarak yeni erişim belirteçleri alabilir ve OAuth Code akışı belgelerinde açıklanan akışı kullanarak belirteçleri yenileyebilirsiniz.

Uyarı

Bu örnekteki belirteçler de dahil olmak üzere sahip olmadığınız API'lerin belirteçlerini kodunuzda doğrulamayı veya okumayı denemeyin. Microsoft hizmetleri için belirteçler JWT olarak doğrulanmayacak özel bir biçim kullanabilir ve tüketici (Microsoft hesabı) kullanıcıları için de şifrelenebilir. Belirteçleri okumak yararlı bir hata ayıklama ve öğrenme aracı olsa da, kodunuzda buna bağımlılıkları almayın veya denetlediğiniz bir API için olmayan belirteçlerle ilgili belirli bilgileri varsaymayın.

Hata yanıtı

Kullanıcı doğru kullanıcı adını veya parolayı sağlamadıysa veya istemci istenen onayı almadıysa, kimlik doğrulaması başarısız olur.

Hata Açıklama Müşteri eylemi
invalid_grant Kimlik doğrulaması başarısız oldu Kimlik bilgileri yanlıştı veya istemcinin istenen kapsamlar için izni yok. Kapsamlar verilmediyse, bir consent_required hatası döndürülür. Bu hatayı düzeltmek için istemcinin kullanıcıyı webview veya tarayıcı kullanarak etkileşimli bir ekrana göndermesi gerekir.
invalid_request İstek yanlış oluşturuldu verme türü /common veya /consumers kimlik doğrulaması bağlamlarında desteklenmez. Bunun yerine /organizations veya kiracı kimliği kullanın.

Daha fazla bilgi edinin

ROPC akışının örnek bir uygulaması için GitHub'da .NET konsol uygulaması kod örneğine bakın.