A Microsoft identitásplatformja és az OAuth 2.0 erőforrás-tulajdonosi jelszó hitelesítő adatai
A Microsoft identitásplatformja támogatja az OAuth 2.0 Erőforrás Tulajdonosi Jelszó Hitelesítő Adatatok (ROPC) támogatását, amely lehetővé teszi az alkalmazás számára, hogy közvetlenül kezelje a felhasználó jelszavát, ezáltal bejelentkeztesse a felhasználót. Ez a cikk azt ismerteti, hogyan alkalmazhatja közvetlenül a protokollt az alkalmazásában. Ha lehetséges, javasoljuk, hogy a microsoftos hitelesítési kódtárak (MSAL) használatával jogkivonatokat szerezzen be, és biztonságos webes API-kat hívjon. Tekintse meg az MSAL használómintaalkalmazásokat is.
Figyelmeztetés
A Microsoft azt javasolja, hogy ne használja a ROPC-folyamatot; nem kompatibilis a többtényezős hitelesítéssel (MFA). A legtöbb forgatókönyvben biztonságosabb alternatívák érhetők el és ajánlottak. Ez a folyamat nagyon nagy fokú bizalmat igényel az alkalmazásban, és olyan kockázatokat hordoz, amelyek más folyamatokban nem jelennek meg. Ezt a folyamatot csak akkor érdemes használni, ha a biztonságosabb folyamatok nem életképesek.
Fontos
- A Microsoft identitásplatform csak a Microsoft Entra-bérlőken belüli ROPC-támogatást támogatja, a személyes fiókokat nem. Ez azt jelenti, hogy bérlőspecifikus végpontot (
https://login.microsoftonline.com/{TenantId_or_Name}
) vagyorganizations
végpontot kell használnia. - A Microsoft Entra-bérlőre meghívott személyes fiókok nem használhatják a ROPC-folyamatot.
- A jelszóval nem rendelkező fiókok nem tudnak bejelentkezni a ROPC-val, ami azt jelenti, hogy az olyan funkciók, mint az SMS-bejelentkezés, a FIDO és az Authenticator alkalmazás nem fognak működni ezzel a folyamattal. Ha az alkalmazás vagy a felhasználók igénylik ezeket a funkciókat, a ROPC-n kívül más támogatási típust használjon.
- Ha a felhasználóknak többtényezős hitelesítést (MFA) kell használniuk az alkalmazásba való bejelentkezéshez, a rendszer letiltja őket.
- A ROPC nem támogatott hibrid identitás-összevonási forgatókönyvekben (például a helyszíni fiókok hitelesítéséhez használt Microsoft Entra-azonosító és AD FS). Ha a felhasználók egy helyszíni identitásszolgáltatóhoz irányítják át a teljes oldalt, a Microsoft Entra-azonosító nem tudja tesztelni a felhasználónevet és a jelszót az identitásszolgáltatón. továbbításos hitelesítési azonban a ROPC támogatja.
- A hibrid identitás-összevonási forgatókönyv alóli kivétel a következő: A Home Realm Discovery szabályzat, ahol a AllowCloudPasswordValidation értéke TRUE, lehetővé teszi, hogy a ROPC-folyamat működjön a federált felhasználók számára, amikor egy helyszíni jelszó szinkronizálásra kerül a felhőbe. További információért lásd: Összevont felhasználók közvetlen ROPC-hitelesítésének engedélyezése régebbi alkalmazásokhoz.
- A kezdő vagy záró szóközöket tartalmazó jelszavakat a ROPC-folyamat nem támogatja.
Migrálás a ROPC-ból
Ahogy az MFA egyre elterjedtebbé válik, egyes Microsoft webes API-k csak akkor fogadnak el hozzáférési jogkivonatokat, ha megfeleltek az MFA-követelményeknek. A ROPC-ra támaszkodó alkalmazások és teszttornyok ki lesznek zárva. A Microsoft Entra vagy nem adja ki a jogkivonatot, vagy az erőforrás elutasítja a kérést.
Ha ROPC-t használ a védett alsóbb rétegbeli API-k meghívásához szükséges jogkivonatok beszerzéséhez, migráljon egy biztonságos jogkivonat-beszerzési stratégiába.
Ha a felhasználói környezet elérhető
Ha egy végfelhasználónak hozzá kell férnie egy erőforráshoz, a nevében eljáró ügyfélalkalmazásnak interaktív hitelesítést kell használnia. A végfelhasználó csak akkor kérheti az MFA-t, ha a böngésző kéri.
- Webalkalmazások esetén:
- Ha a hitelesítés a kliens oldalon történik, lásd egyoldalas alkalmazás.
- Ha a hitelesítés a háttérrendszerben történik, tekintse meg webalkalmazásokcímű témakört.
- A webes API-k nem tudnak böngészőt megjeleníteni. Ehelyett vissza kell adniuk egy feladatot az ügyfélalkalmazásnak. További információ: webes API-k és a webes API-kban a felhasználók által tapasztalt kihívások .
- Az asztali alkalmazásoknak közvetítőalapú hitelesítést kell használniuk. A közvetítők böngészőalapú hitelesítést használnak, hogy kikényszeríthessék az MFA-t, és a lehető legbiztonságosabb állapotot tegyék lehetővé.
- A mobilalkalmazásokat úgy is konfigurálni kell, hogy közvetítőalapú hitelesítést (Authenticator, Céges portál) használjanak.
Ha a felhasználói környezet nem érhető el
Példák olyan esetekre, ahol nincs felhasználói környezet, de nem korlátozódik a következőkre:
- CI-folyamat részeként futó szkript.
- Egy szolgáltatásnak saját nevében kell meghívnia egy erőforrást, felhasználói adatok nélkül.
Az alkalmazásfejlesztőknek Szolgáltatási főhivatkozási hitelesítéstkell használniuk, amelyet a démon példákszemléltetnek. Az MFA nem vonatkozik a szolgáltatásnevekre.
Szolgáltatásprincipálisként többféleképpen is lehet hitelesítést végezni.
- Ha az alkalmazás Azure-infrastruktúrán fut, használja felügyelt identitás. A felügyelt identitás kiküszöböli a titkos kódok és tanúsítványok karbantartásának és elforgatásának többletterhelését.
- Ha az alkalmazás egy másik OAuth2-kompatibilis identitásszolgáltató, például a GitHub által felügyelt rendszeren fut, használja összevont identitás hitelesítő adatait.
- Ha nem tud felügyelt identitást vagy összevont identitást használni, használjon tanúsítvány hitelesítő.
Figyelmeztetés
Ne használjon szolgáltatásazonosító hitelesítést, ha egy felhasználói környezet elérhető. A csak alkalmazáshoz való hozzáférés eredendően magas jogosultsági szintű, gyakran bérlőszintű hozzáférést biztosít, és potenciálisan lehetővé teszi egy rossz szereplő számára az ügyféladatok elérését bármely felhasználó számára.
Protokolldiagram
Az alábbi ábrán a ROPC-folyamat látható.
Engedélyezési kérelem
A ROPC-folyamat egyetlen kérelem; elküldi az ügyfél azonosítást és a felhasználó hitelesítő adatait az identitásszolgáltatónak, és cserébe tokeneket kap. Ehhez az ügyfélnek meg kell kérnie a felhasználó e-mail-címét (UPN) és jelszavát. Közvetlenül a sikeres kérés után az ügyfélnek biztonságosan el kell távolítania a felhasználó hitelesítő adatait a memóriából. Soha nem mentheti meg őket.
// 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
Paraméter | Feltétel | Leírás |
---|---|---|
tenant |
Szükséges | A címtár-bérlő, amelybe a felhasználót be szeretné jelentkeztetni. A bérlő lehet GUID vagy barátságos név formátumban. Paramétere azonban nem állítható be common vagy consumers értékre, de lehet, hogy organizations . |
client_id |
Szükséges | Az alkalmazás (ügyfél) azonosítója, amelyet a Microsoft Entra felügyeleti központ – Alkalmazásregisztrációk alkalmazáshoz rendelt oldal. |
grant_type |
Szükséges | A értéknek password kell lennie. |
username |
Szükséges | A felhasználó e-mail-címe. |
password |
Szükséges | A felhasználó jelszava. |
scope |
Ajánlott | Az alkalmazás által igényelt vagy engedélyekhatókörök szóközzel elválasztott listája. Az interaktív folyamatokban a rendszergazdának vagy a felhasználónak előre hozzá kell adnia ezeket a hatóköröket. |
client_secret |
Néha szükséges | Ha az alkalmazás nyilvános ügyfél, akkor a client_secret vagy a client_assertion nem szerepelhet. Ha az alkalmazás bizalmas kliens, akkor szükséges, hogy az szerepeljen. |
client_assertion |
Néha szükséges | A client_secret egy másik formája, amely tanúsítvány használatával jön létre. További információért lásd a tanúsítványszámú hitelesítő adatait. |
Sikeres hitelesítési válasz
Az alábbi példa egy sikeres token választ mutat be:
{
"token_type": "Bearer",
"scope": "User.Read profile openid email",
"expires_in": 3599,
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
"refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD..."
}
Paraméter | Formátum | Leírás |
---|---|---|
token_type |
Szál | Mindig Bearer értékre van állítva. |
scope |
Szóközzel elválasztott karakterláncok | Ha egy hozzáférési jogkivonatot ad vissza, ez a paraméter felsorolja azokat a hatóköröket, amelyekhez a hozzáférési jogkivonat érvényes. |
expires_in |
Int | A belefoglalt hozzáférési jogkivonat érvényességi ideje másodpercben. |
access_token |
Átlátszatlan karakterlánc | A kért hatókörökhöz kiadva. |
id_token |
JWT | Akkor jelenik meg, ha az eredeti scope paraméter tartalmazza a openid hatókört. |
refresh_token |
Átlátszatlan karakterlánc | Ki van állítva, ha az eredeti scope paraméter tartalmazza offline_access . |
A frissítési jogkivonattal új hozzáférési jogkivonatokat és új frissítési jogkivonatokat szerezhet be az OAuth Code-folyamat dokumentációjában ismertetett folyamattal .
Figyelmeztetés
Ne kísérelje meg a jogkivonatok érvényesítését vagy olvasását a kódban a nem birtokolt API-k esetében, beleértve az ebben a példában szereplő jogkivonatokat is. A Microsoft-szolgáltatások jogkivonatai olyan speciális formátumot használhatnak, amely nem érvényesíthető JWT-ként, és titkosíthatók az egyéni (Microsoft-fiókos) felhasználók számára is. Bár a jogkivonatok olvasása hasznos hibakeresési és tanulási eszköz, ne vegyen fel függőségeket a kódban, és ne feltételezze a nem ön által vezérelt API-khoz tartozó jogkivonatokat.
Hibaválasz
Ha a felhasználó nem adta meg a megfelelő felhasználónevet vagy jelszót, vagy az ügyfél nem kapta meg a kért hozzájárulást, a hitelesítés sikertelen lesz.
Hiba | Leírás | Ügyfélművelet |
---|---|---|
invalid_grant |
A hitelesítés nem sikerült | A hitelesítő adatok helytelenek voltak, vagy az ügyfél nem járult hozzá a kért hatókörökhöz. Ha a hatókörök nincsenek megadva, consent_required hibaüzenet kerül visszaadásra. A hiba megoldásához az ügyfélnek webnézet vagy böngésző használatával kell elküldenie a felhasználót egy interaktív kérdésre. |
invalid_request |
A kérés nem megfelelően lett létrehozva | Az engedélyezési típus nem támogatott a /common vagy /consumers hitelesítési környezetekben. Használjon inkább /organizations vagy bérlőazonosítót. |
Tudj meg többet
A ROPC-folyamat példamegvalósítását a GitHubon található .NET-konzolalkalmazás kódmintájában tekintheti meg.