Microsoft kimlik platformu ve OAuth 2.0 Kaynak Sahibi Parola Kimlik Bilgileri

Microsoft kimlik platformu, bir uygulamanın kullanıcı parolasını doğrudan işleyerek oturum açmasına olanak tanıyan OAuth 2.0 Kaynak Sahibi Parola Kimlik Bilgileri (ROPC) verme işlemini destekler. Bu makalede uygulamanızda doğrudan protokol için programlama işlemi açıklanır. Mümkün olduğunda, belirteçleri almak ve güvenli web API’lerini aramak yerine desteklenen Microsoft Kimlik Doğrulama Kitaplıklarını (MSAL) kullanmanızı öneririz. Ayrıca MSAL kullanan örnek uygulamalara da göz atın.

Uyarı

Microsoft, ROPC akışını kullanmamanızı önerir. Ç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 riskleri taşır. Bu akışı yalnızca diğer daha güvenli akışlar uygun olmadığında kullanmalısınız.

Önemli

  • Microsoft kimlik platformu yalnızca Microsoft Entra kiracılarında ROPC iznini destekler, kişisel hesapları desteklemez. Bu, kiracıya özgü bir uç nokta (https://login.microsoftonline.com/{TenantId_or_Name}) veya organizations uç nokta 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ı gerekirse, bu kullanıcılar engellenir.
  • ROPC, karma kimlik federasyon 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 şirket içi kimlik sağlayıcıya tam sayfa yönlendirmesiyle karşılaşırsa Microsoft Entra Kimliği söz konusu kimlik sağlayıcısında kullanıcı adı ve parolayı test edemez. Öte yandan ROPC ile geçiş kimlik doğrulaması desteklenir.
  • Karma kimlik federasyon senaryosu için bir özel durum şu olabilir: AllowCloudPasswordValidation değeri TRUE olarak ayarlanmış Olan Home Realm Discovery 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ının doğrudan ROPC kimlik doğrulamasını etkinleştirme.
  • Baştaki veya sondaki boşluklara sahip parolalar ROPC akışı tarafından desteklenmez.

Protokol diyagramı

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

Diagram showing the resource owner password credential flow

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ı.

// 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 oturumunu açmak istediğiniz dizin kiracısı. Kiracı GUID veya kolay ad biçiminde olabilir. Ancak parametresi veya consumersolarak ayarlanamazcommon, ancak olarak organizationsayarlanabilir.
client_id Zorunlu Microsoft Entra yönetim merkezi - Uygulama kayıtları sayfasının uygulamanıza atandığı Uygulama (istemci) kimliği.
grant_type Zorunlu olarak ayarlanmalıdır password.
username Zorunlu Kullanıcının e-posta adresi.
password Zorunlu Kullanıcının parolası.
scope Önerilir Uygulamanın gerektirdiği alanla ayrılmış kapsamların veya izinlerin 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 bir istemciyse client_secret veya client_assertion eklenemez. Uygulama gizli bir istemciyse dahil edilmelidir.
client_assertion Bazen gerekli Sertifika kullanılarak oluşturulan farklı bir biçimi client_secret. 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:

{
    "token_type": "Bearer",
    "scope": "User.Read profile openid email",
    "expires_in": 3599,
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
    "id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD..."
}
Parametre Biçimlendir Açıklama
token_type String Her zaman olarak Bearerayarlayın.
scope Boşlukla ayrılmış dizeler 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 dize İstenen kapsamlar için verildi.
id_token JWT Özgün scope parametre kapsamı dahil ettiyse verilir openid .
refresh_token Opak dize Özgün scope parametre dahil offline_accessedilmişse verilir.

Yenileme belirtecini, OAuth Code akışı belgelerinde açıklanan akışı kullanarak yeni erişim belirteçleri almak ve belirteçleri yenilemek için kullanabilirsiniz.

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 belirteçleri 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 İstemci eylemi
invalid_grant Kimlik doğrulaması başarısız oldu Kimlik bilgileri yanlıştı veya istemcinin istenen kapsamlar için izni yok. Kapsamlar verilmezse bir consent_required hata döndürülür. Bu hatayı düzeltmek için istemcinin kullanıcıyı web görünümü veya tarayıcı kullanarak etkileşimli bir isteme göndermesi gerekir.
invalid_request İstek yanlış oluşturuldu verme türü veya /consumers kimlik doğrulama bağlamlarında desteklenmez/common. Bunun yerine veya bir kiracı kimliği kullanın /organizations .

Daha fazla bilgi edinin

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