A Microsoft Identitásplatform és az OAuth 2.0 hitelesítési kódfolyamat
Az OAuth 2.0 engedélyezési kód megadásának típusa vagy hitelesítési kódfolyama lehetővé teszi, hogy az ügyfélalkalmazás jogosult hozzáférést kapjon a védett erőforrásokhoz, például a webes API-khoz. A hitelesítési kódfolyamathoz olyan felhasználói ügynök szükséges, amely támogatja az engedélyezési kiszolgálóról (a Microsoft Identitásplatform) való visszairányítást az alkalmazásba. Például egy olyan webböngésző, asztali vagy mobilalkalmazás, amelyet egy felhasználó üzemeltet az alkalmazásba való bejelentkezéshez és az adataik eléréséhez.
Ez a cikk csak a folyamat végrehajtásához szükséges nyers HTTP-kérések manuális létrehozásakor és kiállításakor szükséges alacsony szintű protokolladatokat ismerteti, amelyeket nem ajánlunk. Ehelyett használja a Microsoft által létrehozott és támogatott hitelesítési kódtárat a biztonsági jogkivonatok lekéréséhez és a védett webes API-k meghívásához az alkalmazásokban.
A hitelesítési kódfolyamatot támogató alkalmazások
A Kódcsere ellenőrző kulcsával (PKCE) és az OpenID Connecttel (OIDC) párosított hitelesítési kódfolyamat használatával szerezze be a hozzáférési jogkivonatokat és az azonosító jogkivonatokat az alábbi típusú alkalmazásokban:
- Egyoldalas webalkalmazás (SPA)
- Standard (kiszolgálóalapú) webalkalmazás
- Asztali és mobilalkalmazások
Protokoll részletei
Az OAuth 2.0 engedélyezési kódfolyamatát az OAuth 2.0 specifikációjának 4.1. szakasza ismerteti. Az OAuth 2.0 engedélyezési kód folyamatot használó alkalmazások megszereznek egy access_token
-t, amelyet belefoglaltak olyan kérelmekbe, amelyek a Microsoft identitásplatform által védett erőforrásokra (általában API-kra) irányulnak. Az alkalmazások frissítési mechanizmussal új azonosítókat és hozzáférési jogkivonatokat is kérhetnek a korábban hitelesített entitásokhoz.
Ez az ábra a hitelesítési folyamat magas szintű nézetét mutatja be:
Átirányítási URI-k egyoldalas alkalmazásokhoz (SPA)
Az auth kódfolyamatot használó SLA-k átirányítási URI-i speciális konfigurációt igényelnek.
- Adjon hozzá egy átirányítási URI-t , amely támogatja a hitelesítési kódfolyamatot a PKCE-vel és a forrásközi erőforrás-megosztással (CORS): Kövesse az átirányítási URI lépéseit : MSAL.js 2.0 hitelesítésű kódfolyamattal.
-
Frissítsen egy átirányítási URI-t: Az átirányítási URI
type
beállításaspa
értékűre a Microsoft Entra Felügyeleti központ alkalmazásjegyzék-szerkesztőjével.
Az spa
átirányítás típusa visszamenőlegesen kompatibilis az implicit folyamattal. Az implicit folyamatot jogkivonatok lekérésére jelenleg használó alkalmazások probléma nélkül áttérhetnek az spa
átirányítási URI típusra, és folytathatják az implicit folyamatot. A visszamenőleges kompatibilitás ellenére javasoljuk, hogy használja a hitelesítési kódfolyamot a PKCE-vel az SLA-khoz.
Ha az engedélyezési kódfolyamatot anélkül próbálja meg használni, hogy beállítja a CORS-t az átirányítási URI-hoz, a következő hibaüzenet jelenik meg a konzolon:
access to XMLHttpRequest at 'https://login.microsoftonline.com/common/oauth2/v2.0/token' from origin 'yourApp.com' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Ha igen, keresse fel az alkalmazásregisztrációt, és frissítse az alkalmazás átirányítási URI-ját a spa
típus használatára.
Az alkalmazások nem használhatnak spa
átirányítási URI-t az SPA-n kívüli folyamatok esetén, például natív alkalmazások vagy ügyfél hitelesítési folyamatok esetében. A biztonság és az ajánlott eljárások érdekében a Microsoft identitásplatform hibaüzenetet ad vissza, ha megpróbál fejléc nélkül használni egy spa
átirányítási URI-t Origin
. Hasonlóképpen, a Microsoft Identitásplatform is megakadályozza az ügyfél hitelesítő adatainak használatát az összes folyamatban egy fejléc jelenlétébenOrigin
, hogy a titkos kulcsok ne legyenek használatban a böngészőben.
Engedélyezési kód kérése
Az engedélyezési kód folyamata azzal kezdődik, hogy az ügyfél a végponthoz irányítja a felhasználót /authorize
. Ebben a példakérésben az ügyfél a felhasználótól kéri a openid
, offline_access
és https://graph.microsoft.com/mail.read
az engedélyeket.
Egyes engedélyek rendszergazdai korlátozással vannak korlátozva, például adatok írása a szervezet címtárába a használatával Directory.ReadWrite.All
. Ha az alkalmazás hozzáférést kér egy szervezeti felhasználótól ezen engedélyek egyikéhez, a felhasználó hibaüzenetet kap, amely szerint nem jogosult az alkalmazás engedélyeinek jóváhagyására. Ha hozzáférést szeretne kérni a rendszergazda által korlátozott hatókörökhöz, közvetlenül egy globális rendszergazdától kell kérnie őket. További információ: Rendszergazda által korlátozott engedélyek.
Ha másként nincs megadva, az opcionális paraméterekhez nincs alapértelmezett érték. A kérések alapértelmezett viselkedése azonban kihagyja az opcionális paramétereket. Az alapértelmezett viselkedés az egyetlen jelenlegi felhasználó bejelentkezése, a fiókválasztó megjelenítése több felhasználó esetén, vagy a bejelentkezési oldal megjelenítése, ha nincsenek bejelentkezve felhasználók.
// Line breaks for legibility only
https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&response_mode=query
&scope=https%3A%2F%2Fgraph.microsoft.com%2Fmail.read
&state=12345
&code_challenge=YTFjNjI1OWYzMzA3MTI4ZDY2Njg5M2RkNmVjNDE5YmEyZGRhOGYyM2IzNjdmZWFhMTQ1ODg3NDcxY2Nl
&code_challenge_method=S256
Paraméter | Kötelező/nem kötelező | Leírás |
---|---|---|
tenant |
kötelező | A {tenant} kérés elérési útjának értéke határozza meg, hogy ki jelentkezhet be az alkalmazásba. Az érvényes értékek a common , organizations és consumers a bérlőazonosítók. Olyan vendégforgatókönyvek esetén, amikor egy felhasználót bejelentkeztet egy bérlőtől egy másik bérlőhöz, meg kell adnia a bérlőazonosítót, hogy beléphessenek az erőforrás-bérlőhöz. További információ: Végpontok. |
client_id |
kötelező | Az alkalmazás (ügyfél) azonosítója, amelyet a Microsoft Entra felügyeleti központ – Alkalmazásregisztrációk élmény rendelt az alkalmazásodhoz. |
response_type |
kötelező | Az engedélyezési kód folyamatának tartalmaznia code kell. Tartalmazhat id_token vagy token elemet, ha a hibrid folyamatot használja. |
redirect_uri |
kötelező | Az redirect_uri alkalmazás, ahol a hitelesítési válaszokat elküldheti és fogadhatja az alkalmazás. Ennek pontosan meg kell egyeznie a Microsoft Entra felügyeleti központban regisztrált átirányítási URI-k egyikével, kivéve, hogy URL-kóddal kell rendelkeznie. Natív és mobilalkalmazások esetén használja az egyik ajánlott értéket: https://login.microsoftonline.com/common/oauth2/nativeclient beágyazott böngészőt használó alkalmazásokhoz vagy http://localhost rendszerböngészőket használó alkalmazásokhoz. |
scope |
kötelező | Azoknak a hatóköröknek a szóközzel tagolt listája, amelyeket a felhasználónak engedélyeznie kell. A kérés szakaszára vonatkozóan ez a paraméter több erőforrást is lefedhet. Ez az érték lehetővé teszi, hogy az alkalmazás jóváhagyást kapjon több meghívni kívánt webes API-hoz. |
response_mode |
ajánlott | Meghatározza, hogy az identitásplatform hogyan adja vissza a kért jogkivonatot az alkalmazásnak. Támogatott értékek: - query : Hozzáférési jogkivonat kérésekor alapértelmezés. A kódot lekérdezési sztringparaméterként adja meg az átirányítási URI-n. A query paraméter nem támogatott, ha azonosító tokent kér az implicit módszer használatával. - fragment : Alapértelmezett, ha az implicit folyamat használatával kér egy azonosító jogkivonatot. Akkor is támogatott, ha csak egy kódot kér.- form_post : Végrehajt egy POST-et, amely tartalmazza a kódot az átirányítási URI-nak. Kód kérése esetén támogatott. |
state |
ajánlott | A kérésben szereplő érték, ami a jogkivonat válaszában is visszatér. Tetszőleges tartalom sztringje lehet. A véletlenszerűen generált egyedi érték általában a keresztoldali kérelem-hamisítási támadások megelőzésére szolgál. Az érték a felhasználó állapotával kapcsolatos információkat is kódolhatja az alkalmazásban a hitelesítési kérés előtt. Kódolhatja például azt a lapot vagy nézetet, amelyen éppen tartózkodtak. |
prompt |
választható | A szükséges felhasználói beavatkozás típusát jelzi. Az érvényes értékek a következőklogin : , none consent és select_account .- prompt=login kényszeríti a felhasználót, hogy adja meg a hitelesítő adatait a kéréshez, és ne kapcsolja be az egyszeri bejelentkezést.- prompt=none az ellenkezője. Biztosítja, hogy a felhasználónak ne jelenjen meg interaktív kérdés. Ha a kérés nem hajtható végre csendben egyszeri bejelentkezéssel, a Microsoft Identitásplatform hibát interaction_required ad vissza.- prompt=consent aktiválja az OAuth hozzájárulási párbeszédpanelt, miután a felhasználó bejelentkezett, és megkéri a felhasználót, hogy adjon engedélyeket az alkalmazásnak.- prompt=select_account megszakítja az egyszeri bejelentkezést, így a fiókválasztási felület felsorolja az összes fiókot a munkamenetben, vagy bármely megjegyezett fiókot, vagy egy másik fiók teljes használatára vonatkozó lehetőséget. |
login_hint |
választható | Ezzel a paraméterlel előre kitöltheti a felhasználó bejelentkezési oldalának felhasználónevét és e-mail-címét. Az alkalmazások az újrahitelesítés során használhatják ezt a paramétert, miután már kinyerték az login_hint opcionális jogcímet egy korábbi bejelentkezésből. |
domain_hint |
választható | Ha tartalmazza, az alkalmazás kihagyja az e-mail-alapú felderítési folyamatot, amelyen a felhasználó végighalad a bejelentkezési oldalon, ami kissé leegyszerűsített felhasználói élményt eredményez. Például elküldheti őket az összevont identitásszolgáltatónak. Az alkalmazások ezt a paramétert az újrahitelesítés során használhatják egy korábbi bejelentkezésből kinyerve tid . |
code_challenge |
ajánlott /kötelező | Az engedélyezési kód megadásának védelmére szolgál a Code Exchange -hez (PKCE) készült Proof Key használatával. Kötelező, ha code_challenge_method szerepel benne. További információ: PKCE RFC. Ez a paraméter mostantól minden alkalmazástípushoz ajánlott, mind a nyilvános, mind a bizalmas ügyfelek számára, és a Microsoft Identitásplatform megköveteli az engedélyezési kódfolyamatot használó egyoldalas alkalmazásokhoz. |
code_challenge_method |
ajánlott /kötelező | A code_challenge paraméterhez code_verifier kódolásához használt módszer. Ennek S256 , de a specifikáció lehetővé teszi annak használatátplain , ha az ügyfél nem tudja támogatni az SHA256-ot. Ha code_challenge ki van zárva, akkor egyszerű szövegnek tekintjük, ha code_challenge tartalmazva van. A Microsoft Identitásplatform támogatja mind plain a S256 . További információ: PKCE RFC. Ez a paraméter az engedélyezési kódfolyamatot használó egyoldalas alkalmazásokhoz szükséges. |
Ezen a ponton a rendszer felkéri a felhasználót, hogy adja meg a hitelesítő adatait, és fejezze be a hitelesítést. A Microsoft Identitásplatform azt is biztosítja, hogy a felhasználó hozzájárult a scope
lekérdezési paraméterben megadott engedélyekhez. Ha a felhasználó egyik engedélyhez sem járult hozzá, megkéri a felhasználót, hogy járuljon hozzá a szükséges engedélyekhez. További információ: Engedélyek és hozzájárulás a Microsoft Identitásplatform.
Miután a felhasználó hitelesíti és hozzájárulást ad, a Microsoft Identitásplatform a megadott redirect_uri
időpontban választ ad vissza az alkalmazásra a paraméterben response_mode
megadott módszerrel.
Sikeres válasz
Ez a példa egy sikeres választ mutat be a(z) response_mode=query
használata után.
GET http://localhost?
code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...
&state=12345
Paraméter | Leírás |
---|---|
code |
Az alkalmazás által kért authorization_code . Az alkalmazás az engedélyezési kód használatával kérheti le a hozzáférési jogkivonatot a célerőforráshoz. Az engedélyezési kódok rövid élettartamúak. Általában körülbelül 10 perc elteltével lejárnak. |
state |
Ha egy state paraméter szerepel a kérelemben, akkor ugyanaz az érték jelenik meg a válaszban. Az alkalmazásnak ellenőriznie kell, hogy a kérés és a válasz állapotértékei azonosak-e. |
Akkor is kaphat azonosító jogkivonatot, ha kér egyet, és az implicit hozzáférés engedélyezve van az alkalmazásregisztrációban. Ezt a viselkedést néha hibrid folyamatnak is nevezik. Olyan keretrendszerek használják, mint a ASP.NET.
Hibaválasz
Hibajelentések is elküldhetők a redirect_uri
-nek, hogy az alkalmazás megfelelően kezelhesse őket.
GET http://localhost?
error=access_denied
&error_description=the+user+canceled+the+authentication
Paraméter | Leírás |
---|---|
error |
Hibakódsztring, amely a hibák típusainak besorolására és a hibákra való reagálásra használható. A hiba ezen része azért van megadva, hogy az alkalmazás megfelelően reagáljon a hibára, de nem magyarázza meg részletesen, hogy miért történt hiba. |
error_description |
Egy adott hibaüzenet, amely segíthet a fejlesztőknek a hitelesítési hiba okának azonosításában. A hiba ezen része a hiba okával kapcsolatos legtöbb hasznos információt tartalmazza. |
Az engedélyezési végpont hibáinak hibakódjai
Az alábbi táblázat a hibaválasz paraméterében error
visszaadható különböző hibakódokat ismerteti.
Hibakód | Leírás | Ügyfélművelet |
---|---|---|
invalid_request |
Protokollhiba, például hiányzó kötelező paraméter. | Javítsa ki és küldje el újra a kérést. Ez a hiba általában a kezdeti tesztelés során észlelt fejlesztési hiba. |
unauthorized_client |
Az ügyfélalkalmazás nem kérhet engedélyezési kódot. | Ez a hiba általában akkor fordul elő, ha az ügyfélalkalmazás nincs regisztrálva a Microsoft Entra-azonosítóban, vagy nem kerül a felhasználó Microsoft Entra-bérlőjére. Az alkalmazás megkérheti a felhasználót az alkalmazás telepítésére és a Microsoft Entra-azonosítóhoz való hozzáadására vonatkozó utasítással. |
access_denied |
Az erőforrás tulajdonosa megtagadta a hozzájárulást | Az ügyfélalkalmazás értesítheti a felhasználót, hogy csak akkor folytathatja a műveletet, ha a felhasználó beleegyezik. |
unsupported_response_type |
Az engedélyezési kiszolgáló nem támogatja a kérés választípusát. | Javítsa ki és küldje el újra a kérést. Ez a hiba általában a kezdeti tesztelés során észlelt fejlesztési hiba. A hibrid folyamatban ez a hiba azt jelzi, hogy engedélyeznie kell az azonosító jogkivonat implicit engedélyezési beállítását az ügyfélalkalmazás-regisztrációban. |
server_error |
A kiszolgáló váratlan hibát észlelt. | Ismételje meg a kérést. Ezek a hibák átmeneti feltételekből adódhatnak. Az ügyfélalkalmazás elmagyarázhatja a felhasználónak, hogy a válasza ideiglenes hibára késik. |
temporarily_unavailable |
A kiszolgáló átmenetileg túl elfoglalt a kérés kezeléséhez. | Ismételje meg a kérést. Az ügyfélalkalmazás elmagyarázhatja a felhasználónak, hogy a válasza egy ideiglenes feltétel miatt késik. |
invalid_resource |
A célerőforrás érvénytelen, mert nem létezik, a Microsoft Entra-azonosító nem találja, vagy nincs megfelelően konfigurálva. | Ez a hiba azt jelzi, hogy az erőforrás , ha létezik, nem lett konfigurálva a bérlőben. Az alkalmazás megkérheti a felhasználót az alkalmazás telepítésére és a Microsoft Entra-azonosítóhoz való hozzáadására vonatkozó utasítással. |
login_required |
Túl sok felhasználó vagy egy sincs megtalálva. | Az ügyfél csendes hitelesítést kért (prompt=none ), de egyetlen felhasználó nem található. Ez a hiba azt jelentheti, hogy több felhasználó is aktív a munkamenetben, vagy nincs felhasználó. Ez a hiba figyelembe veszi a kiválasztott bérlőt. Ha például két Aktív Microsoft Entra-fiók és egy Microsoft-fiók van kiválasztva, consumers a csendes hitelesítés működik. |
interaction_required |
A kérés felhasználói beavatkozást igényel. | Egy másik hitelesítési lépésre vagy hozzájárulásra van szükség. Próbálkozzon újra a kéréssel prompt=none nélkül. |
Azonosító jogkivonat kérése vagy hibrid folyamat
Ha szeretné megtudni, hogy ki a felhasználó az engedélyezési kód beváltása előtt, gyakran előfordul, hogy az alkalmazások is kérnek azonosító jogkivonatot, amikor az engedélyezési kódot kérik. Ezt a megközelítést hibrid folyamatnak nevezzük, mivel az OIDC-t az OAuth2 engedélyezési kódfolyamattal keveri.
A hibrid áramlást gyakran használják webalkalmazásokban egy felhasználó oldalának megjelenítésére anélkül, hogy blokkolná a kód beváltását, különösen az ASP.NET-ben. A modellben az egyoldalas és a hagyományos webalkalmazások is kihasználják a kisebb késést.
A hibrid folyamat megegyezik a korábban ismertetett engedélyezési kódfolyamattal, de három kiegészítéssel. Ezen kiegészítések mindegyike szükséges az azonosító jogkivonatának lekéréséhez: új hatókörök, új response_type és új nonce
lekérdezési paraméter.
// Line breaks for legibility only
https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&response_type=code%20id_token
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&response_mode=fragment
&scope=openid%20offline_access%20https%3A%2F%2Fgraph.microsoft.com%2Fuser.read
&state=12345
&nonce=abcde
&code_challenge=YTFjNjI1OWYzMzA3MTI4ZDY2Njg5M2RkNmVjNDE5YmEyZGRhOGYyM2IzNjdmZWFhMTQ1ODg3NDcxY2Nl
&code_challenge_method=S256
Frissített paraméter | Kötelező/nem kötelező | Leírás |
---|---|---|
response_type |
kötelező | A id_token hozzáfűzése azt jelzi a kiszolgálónak, hogy az alkalmazás egy azonosító tokent szeretne a /authorize végpont válaszában. |
scope |
kötelező | Az azonosító jogkivonatok esetében ezt a paramétert frissíteni kell, hogy tartalmazza az azonosító jogkivonat hatóköreit: openid és opcionálisan profile és email . |
nonce |
kötelező | Az alkalmazás által létrehozott kérelmen szereplő érték, amely az eredményként kapott id_token jogcímként van feltüntetve. Az alkalmazás ezután ellenőrizheti ezt az értéket a tokenek visszajátszási támadásainak csökkentése érdekében. Az érték általában véletlenszerű, egyedi sztring, amely a kérés eredetének azonosítására használható. |
response_mode |
ajánlott | Megadja azt a metódust, amellyel az eredményül kapott jogkivonatot vissza kell küldeni az alkalmazásnak. Az alapértelmezett érték query csak egy engedélyezési kódra vonatkozik, de fragment ha a kérelem tartalmaz egy id_token response_type , az OpenID-specifikációban megadott értéket. Javasoljuk, hogy az alkalmazásokat használja form_post , különösen átirányítási URI-ként való használat http://localhost esetén. |
A válasz mód használata fragment
problémákat okoz az olyan webalkalmazások esetében, amelyek beolvasják a kódot az átirányításból. A böngészők nem adják át a töredéket a webkiszolgálónak. Ilyen helyzetekben az alkalmazásoknak válasz form_post
móddal kell biztosítaniuk, hogy az összes adat a kiszolgálóra legyen elküldve.
Sikeres válasz
Az alábbi példa egy sikeres választ mutat be a response_mode=fragment
használatával.
GET https://login.microsoftonline.com/common/oauth2/nativeclient#
code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...
&id_token=eYj...
&state=12345
Paraméter | Leírás |
---|---|
code |
Az alkalmazás által kért engedélyezési kód. Az alkalmazás az engedélyezési kód használatával kérheti le a hozzáférési jogkivonatot a célerőforráshoz. Az engedélyezési kódok rövid élettartamúak, általában körülbelül 10 perc elteltével lejárnak. |
id_token |
A felhasználó azonosító tokenje, amelyet implicit jóváhagyással adnak ki. Egy különleges c_hash jogcímet tartalmaz, amely ugyannak a kérelemnek a code hash-értéke. |
state |
Ha egy state paraméter szerepel a kérelemben, akkor ugyanaz az érték jelenik meg a válaszban. Az alkalmazásnak ellenőriznie kell, hogy a kérés és a válasz állapotértékei azonosak-e. |
Kód beváltása hozzáférési jogkivonathoz
Minden bizalmas ügyfélnek lehetősége van az ügyfél titkos kulcsainak vagy tanúsítványának hitelesítő adatainak használatára. A szimmetrikus megosztott titkos kulcsokat a Microsoft Identitásplatform hozza létre. A tanúsítvány hitelesítő adatai a fejlesztő által feltöltött aszimmetrikus kulcsok. További információ: Microsoft Identitásplatform alkalmazáshitelesítési tanúsítvány hitelesítő adatai.
A legjobb biztonság érdekében javasoljuk a tanúsítvány hitelesítő adatainak használatát. A natív alkalmazásokat és egyoldalas alkalmazásokat tartalmazó nyilvános ügyfelek nem használhatnak titkos kódokat vagy tanúsítványokat egy engedélyezési kód beváltásakor. Mindig győződjön meg arról, hogy az átirányítási URI-k tartalmazzák az alkalmazás típusát, és egyediek.
Hozzáférési token igénylése a client_secret használatával
Most, hogy már beszerezett egy authorization_code
-t, és a felhasználó engedélyt adott, beválthatja a code
-t egy access_token
-re az erőforráshoz. Küldjön egy POST
kérést a /token
végpontra a code
beváltásához.
// Line breaks for legibility only
POST /{tenant}/oauth2/v2.0/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=11112222-bbbb-3333-cccc-4444dddd5555
&scope=https%3A%2F%2Fgraph.microsoft.com%2Fmail.read
&code=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq3n8b2JRLk4OxVXr...
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&grant_type=authorization_code
&code_verifier=ThisIsntRandomButItNeedsToBe43CharactersLong
&client_secret=sampleCredentia1s // NOTE: Only required for web apps. This secret needs to be URL-Encoded.
Paraméter | Kötelező/nem kötelező | Leírás |
---|---|---|
tenant |
kötelező | A {tenant} kérés elérési útjának értéke határozza meg, hogy ki jelentkezhet be az alkalmazásba. Az érvényes értékek a common , organizations és consumers a bérlőazonosítók. További információ: Végpontok. |
client_id |
kötelező | Az alkalmazás (ügyfél)azonosító, amelyet a Microsoft Entra felügyeleti központ – alkalmazásregisztrációk oldal hozzárendelt az Ön alkalmazásához. |
scope |
választható | A hatókörök szóközzel elválasztott listája. A hatóköröknek egyetlen erőforrásból kell származniuk, az OIDC-hatókörökkel együtt (profile , openid , email ). További információ: Engedélyek és hozzájárulás a Microsoft Identitásplatform. Ez a paraméter egy Microsoft-bővítmény az engedélyezési kód folyamatához, amely lehetővé teszi az alkalmazások számára, hogy deklarálják a jogkivonathoz szükséges erőforrást a jogkivonat beváltása során. |
code |
kötelező | Az authorization_code , amit a folyamat első szakaszában szereztél be. |
redirect_uri |
kötelező | Ugyanaz redirect_uri érték, amelyet a authorization_code megszerzéséhez használtak. |
grant_type |
kötelező | Az engedélyezési kód folyamatának kell lennie authorization_code . |
code_verifier |
ajánlott | Ugyanazt code_verifier használták, mint amit az engedélyezési kód beszerzéséhez. Kötelező, ha a PKCE-t az engedélyezési kód megadására vonatkozó kérelemben használták. További információ: PKCE RFC. |
client_secret |
bizalmas webalkalmazásokhoz szükséges | Az alkalmazásregisztrációs portálon létrehozott alkalmazás titok. Ne használja az alkalmazás titkos kódját natív vagy egyoldalas alkalmazásokban, mert client_secret nem lehet megbízhatóan tárolni az eszközökön vagy weblapokon. Ez szükséges a webalkalmazásokhoz és a webes API-khoz, amelyek biztonságosan tárolhatják a client_secret kiszolgálóoldalon. Az összes paraméterhez hasonlóan az ügyfél titkos kódjának URL-kódolásúnak kell lennie az elküldés előtt. Ezt a lépést az SDK végzi. Az URI kódolásával kapcsolatos további információkért tekintse meg az URI Általános szintaxis specifikációját. Az alapszintű hitelesítési minta, amely az RFC 6749 szerint a hitelesítő adatok megadását az Engedélyezés fejlécben helyettesíti, szintén támogatott. |
Hozzáférési jogkivonat kérése tanúsítvány-hitelesítő adatokkal
// Line breaks for legibility only
POST /{tenant}/oauth2/v2.0/token HTTP/1.1
Host: login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope=https%3A%2F%2Fgraph.microsoft.com%2Fmail.read
&code=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq3n8b2JRLk4OxVXr...
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&grant_type=authorization_code
&code_verifier=ThisIsntRandomButItNeedsToBe43CharactersLong
&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
&client_assertion=eyJhbGciOiJSUzI1NiIsIng1dCI6Imd4OHRHeXN5amNScUtqRlBuZDdSRnd2d1pJMCJ9.eyJ{a lot of characters here}M8U3bSUKKJDEg
Paraméter | Kötelező/nem kötelező | Leírás |
---|---|---|
tenant |
kötelező | A {tenant} kérés elérési útjának értéke határozza meg, hogy ki jelentkezhet be az alkalmazásba. Az érvényes értékek a common , organizations és consumers a bérlőazonosítók. További részletekért lásd : Végpontok. |
client_id |
kötelező | A (ügyfél) alkalmazás-azonosító, amelyet a Microsoft Entra Felügyeleti központ – Alkalmazásregisztrációk oldal rendelt az alkalmazásához. |
scope |
választható | A hatókörök szóközzel elválasztott listája. A hatóköröknek egyetlen erőforrásból, az OIDC-hatókörökkel együtt (profile , openid , email ) kell származniuk. További információkért tekintse meg az engedélyeket, a hozzájárulásokat és a hatóköröket. Ez a paraméter egy Microsoft-bővítmény az engedélyezési kód folyamatához. Ez a bővítmény lehetővé teszi az alkalmazások számára, hogy deklarálják azt az erőforrást, amelyhez a jogkivonatot használni szeretnék a jogkivonat beváltása során. |
code |
kötelező | Az a authorization_code , amit a folyamat első szakaszában szereztél be. |
redirect_uri |
kötelező | Ugyanaz redirect_uri érték, amelyet a authorization_code megszerzéséhez használtak. |
grant_type |
kötelező | Az engedélyezési kód folyamatának kell lennie authorization_code . |
code_verifier |
ajánlott | Az a code_verifier , amelyet a authorization_code megszerzésére használtak. Kötelező, ha a PKCE-t az engedélyezési kód megadására vonatkozó kérelemben használták. További információ: PKCE RFC. |
client_assertion_type |
bizalmas webalkalmazásokhoz szükséges | Az értéket úgy kell beállítani, hogy urn:ietf:params:oauth:client-assertion-type:jwt-bearer tanúsítvány-hitelesítő adatokat használjon. |
client_assertion |
bizalmas webalkalmazásokhoz szükséges | Egy JSON webes jogkivonat (JWT), amelyet létre kell hoznia és alá kell írnia az alkalmazás hitelesítő adataiként regisztrált tanúsítvánnyal. A tanúsítvány hitelesítő adatairól a tanúsítvány regisztrálásának módjáról és az állítás formátumáról olvashat. |
A paraméterek megegyeznek a megosztott titkos kód kérésével, azzal a kivételrel, hogy a client_secret
paramétert két paraméter váltja fel: a client_assertion_type
és client_assertion
.
Sikeres válasz
Ez a példa egy sikeres token-választ mutat be:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
"token_type": "Bearer",
"expires_in": 3599,
"scope": "https%3A%2F%2Fgraph.microsoft.com%2Fmail.read",
"refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD..."
}
Paraméter | Leírás |
---|---|
access_token |
A kért hozzáférési jogkivonat. Az alkalmazás ezzel a jogkivonattal hitelesítheti magát a védett erőforráson, például egy webes API-n. |
token_type |
A token típusértékét jelzi. A Microsoft Entra ID által támogatott egyetlen típus a Bearer . |
expires_in |
Mennyi ideig érvényes a hozzáférési jogkivonat másodpercben. |
scope |
Azok a hatókörök, amelyekre a access_token érvényes. Opcionális. Ez a paraméter nem szabványos, és ha nincs megadva, a jogkivonat a folyamat kezdeti szakaszában kért hatókörökhöz tartozik. |
refresh_token |
OAuth 2.0 frissítési azonosító. Az alkalmazás ezt a jogkivonatot használhatja más hozzáférési jogkivonatok beszerzésére az aktuális hozzáférési jogkivonat lejárta után. A frissítési jogkivonatok hosszú ideig érvényesek. Hosszabb ideig fenntarthatják az erőforrásokhoz való hozzáférést. A hozzáférési jogkivonat frissítésével kapcsolatos további információkért tekintse meg a hozzáférési jogkivonat frissítését a cikk későbbi részében. Megjegyzés: Csak akkor van megadva, ha offline_access a hatókört kérték. |
id_token |
Egy JSON webtoken. Az alkalmazás dekódolhatja ennek a jogkivonatnak a szegmenseit, hogy információt kérjen a bejelentkezett felhasználóról. Az alkalmazás képes gyorsítótárazni és megjeleníteni az értékeket, a bizalmas ügyfelek pedig ezt a jogkivonatot használhatják a hitelesítéshez. A id_tokens kapcsolatos további információkért lásd a id_token reference . Megjegyzés: Csak akkor van megadva, ha openid a hatókört kérték. |
Hibaválasz
Ez a példa egy hibaválasz:
{
"error": "invalid_scope",
"error_description": "AADSTS70011: The provided value for the input parameter 'scope' is not valid. The scope https://foo.microsoft.com/mail.read is not valid.\r\nTrace ID: 0000aaaa-11bb-cccc-dd22-eeeeee333333\r\nCorrelation ID: aaaa0000-bb11-2222-33cc-444444dddddd\r\nTimestamp: 2016-01-09 02:02:12Z",
"error_codes": [
70011
],
"timestamp": "2016-01-09 02:02:12Z",
"trace_id": "0000aaaa-11bb-cccc-dd22-eeeeee333333",
"correlation_id": "aaaa0000-bb11-2222-33cc-444444dddddd"
}
Paraméter | Leírás |
---|---|
error |
Hibakódsztring, amely a hibák típusainak besorolására és a hibákra való reagálásra használható. |
error_description |
Egy adott hibaüzenet, amely segíthet a fejlesztőknek a hitelesítési hiba okának azonosításában. |
error_codes |
Az STS-specifikus hibakódok listája, amelyek segíthetnek a diagnosztikában. |
timestamp |
A hiba előfordulásának időpontja. |
trace_id |
A kérés egyedi azonosítója, amely segíthet a diagnosztikában. |
correlation_id |
A kérés egyedi azonosítója, amely segíthet az összetevők közötti diagnosztikában. |
Token-végpont hibakódjai
Hibakód | Leírás | Ügyfélművelet |
---|---|---|
invalid_request |
Protokollhiba, például hiányzó kötelező paraméter. | Javítsa ki a kérést vagy az alkalmazásregisztrációt, és küldje el újra a kérést. |
invalid_grant |
Az engedélyezési kód vagy A PKCE-kód ellenőrzője érvénytelen vagy lejárt. | Próbálkozzon egy új kéréssel a /authorize végponthoz, és ellenőrizze, hogy a code_verifier paraméter helyes volt-e. |
unauthorized_client |
A hitelesített ügyfél nem jogosult erre az engedélyezési jogosultság típusra. | Ez a hiba általában akkor fordul elő, ha az ügyfélalkalmazás nincs regisztrálva a Microsoft Entra-azonosítóban, vagy nem kerül a felhasználó Microsoft Entra-bérlőjére. Az alkalmazás megkérheti a felhasználót az alkalmazás telepítésére és a Microsoft Entra-azonosítóhoz való hozzáadására vonatkozó utasítással. |
invalid_client |
Az ügyfélhitelesítés nem sikerült. | Az ügyfél hitelesítő adatai érvénytelenek. A javításhoz az alkalmazásadminisztrátor frissíti a hitelesítő adatokat. |
unsupported_grant_type |
Az engedélyezési kiszolgáló nem támogatja az engedélyezési jogosultság típust. | Módosítsa a támogatási típust a kérelemben. Ez a hibatípus csak a fejlesztés során fordulhat elő, és az első tesztelés során észlelhető. |
invalid_resource |
A célerőforrás érvénytelen, mert nem létezik, a Microsoft Entra-azonosító nem találja, vagy nincs megfelelően konfigurálva. | Ez a kód azt jelzi, hogy az erőforrás , ha létezik, nem lett konfigurálva a bérlőben. Az alkalmazás megkérheti a felhasználót az alkalmazás telepítésére és a Microsoft Entra-azonosítóhoz való hozzáadására vonatkozó utasítással. |
interaction_required |
Nem szabványos, mivel az OIDC-specifikáció csak a végponton kéri ezt a /authorize kódot. A kérés felhasználói beavatkozást igényel. Például egy másik hitelesítési lépésre van szükség. |
Próbálkozzon újra a /authorize kéréssel ugyanazokkal a hatókörökkel. |
temporarily_unavailable |
A kiszolgáló átmenetileg túl elfoglalt a kérés kezeléséhez. | Kis késés után próbálkozzon újra a kéréssel. Az ügyfélalkalmazás elmagyarázhatja a felhasználónak, hogy a válasza egy ideiglenes feltétel miatt késik. |
consent_required |
A kéréshez felhasználói hozzájárulás szükséges. Ez a hiba nem szabványos. Általában csak a /authorize végponton adódik vissza az OIDC-specifikációk szerint. Akkor lett visszaadva, amikor egy scope paramétert használtak a kód beváltásához, amelyet az ügyfélalkalmazás nem kérhet le. |
Az ügyfélnek vissza kell küldenie a felhasználót a /authorize végpontra a megfelelő hatókörrel a hozzájárulás aktiválásához. |
invalid_scope |
Az alkalmazás által kért hatókör érvénytelen. | Frissítse a scope paraméter értékét egy érvényes értékre a hitelesítési kérelemben. |
Feljegyzés
Az egylapos alkalmazások hibaüzenetet invalid_request
kaphatnak, amely azt jelzi, hogy a cross-origin jogkivonat beváltása csak az "egylapos alkalmazás" ügyféltípus esetében engedélyezett. Ez azt jelzi, hogy a jogkivonat kéréséhez használt átirányítási URI nincs spa
átirányítási URI-ként megjelölve. Tekintse át a folyamat engedélyezésének alkalmazásregisztrációs lépéseit .
A hozzáférési jogkivonat használata
Most, hogy sikeresen beszerezte a tokent access_token
, használhatja a tokent a webes API-kra irányuló kérelmekben a fejlécbe Authorization
történő beillesztéssel.
GET /v1.0/me/messages
Host: https://graph.microsoft.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...
A hozzáférési jogkivonat frissítése
A hozzáférési jogkivonatok rövid élettartamúak. A lejáratuk után frissítse őket, hogy továbbra is hozzáférhessenek az erőforrásokhoz. Ezt úgy teheti meg, hogy egy másik POST
kérést küld a /token
végpontnak. A refresh_token
-t adja meg a code
helyett. A frissítési jogkivonatok minden olyan engedélyre érvényesek, amelyekhez az ügyfél már kapott hozzájárulást. Egy kérelemre scope=mail.read
kiadott frissítési jogkivonat például használható új hozzáférési jogkivonat scope=api://contoso.com/api/UseResource
igénylésére.
A webalkalmazások és natív alkalmazások frissítő jogkivonatai nem rendelkeznek megadott élettartammal. A frissítési jogkivonatok élettartama általában viszonylag hosszú. Bizonyos esetekben azonban a frissítési jogkivonatok lejárnak, visszavonják vagy nem rendelkeznek megfelelő jogosultságokkal a művelethez. Az alkalmazásnak a jogkivonat kiállítási végpontja által visszaadott hibákat kell várnia és kezelnie. Az egyoldalas alkalmazások egy 24 órás élettartamú jogkivonatot kapnak, amely minden nap új hitelesítést igényel. Ez a művelet csendesen elvégezhető egy iframe-ben, ha a harmadik féltől származó cookie-k engedélyezve vannak. Ezt egy legfelső szintű keretben kell elvégezni, akár teljes oldalú navigációban, akár előugró ablakban, külső cookie-kat nem tartalmazó böngészőkben, például a Safariban.
A frissítési jogkivonatok nem lesznek visszavonva új hozzáférési jogkivonatok beszerzésekor. Elvárás, hogy dobd el a régi frissítési token-t. Az OAuth 2.0 specifikációja a következőt mondja: "Az engedélyezési kiszolgáló új frissítési jogkivonatot bocsát ki, ebben az esetben az ügyfélnek el kell vetnie a régi frissítési jogkivonatot, és le kell cserélnie az új frissítési jogkivonatra. Az engedélyezési kiszolgáló visszavonhatja a régi frissítési jogkivonatot, miután új frissítési jogkivonatot adott ki az ügyfélnek."
Fontos
A regisztrált átirányítási URI-nak spa
küldött frissítési jogkivonatok esetében a frissítési jogkivonat 24 óra elteltével lejár. A kezdeti frissítési jogkivonattal beszerzett további frissítési jogkivonatok a lejárati időt is átviszik, ezért az alkalmazásoknak fel kell készülniük az engedélyezési kód folyamatának interaktív hitelesítéssel történő újrafuttatására, hogy 24 óránként új frissítési jogkivonatot kapjanak. A felhasználóknak nem kell megadniuk a hitelesítő adataikat, és általában nem is látnak felhasználói élményt, csak az alkalmazás újratöltését. A böngészőnek meg kell látogatnia a bejelentkezési oldalt egy felső szintű keretben a bejelentkezési munkamenet megtekintéséhez. Ez a harmadik féltől származó cookie-kat letiltó böngészők adatvédelmi funkcióinak köszönhető.
// Line breaks for legibility only
POST /{tenant}/oauth2/v2.0/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope=https%3A%2F%2Fgraph.microsoft.com%2Fmail.read
&refresh_token=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq...
&grant_type=refresh_token
&client_secret=sampleCredentia1s // NOTE: Only required for web apps. This secret needs to be URL-Encoded
Paraméter | Típus | Leírás |
---|---|---|
tenant |
kötelező | A {tenant} kérés elérési útjának értéke határozza meg, hogy ki jelentkezhet be az alkalmazásba. Az érvényes értékek a common , organizations és consumers a bérlőazonosítók. További információ: Végpontok. |
client_id |
kötelező | A |
grant_type |
kötelező | Az engedélyezési kód folyamatában ennek refresh_token kötelező lennie. |
scope |
választható | A hatókörök szóközzel elválasztott listája. Az ebben a szakaszban kért hatóköröknek meg kell felelniük az eredeti authorization_code kérelemben kért hatóköröknek, vagy azok részhalmazának. Ha a kérelemben megadott hatókörök több erőforrás-kiszolgálóra is kiterjednek, akkor a Microsoft Identitásplatform az első hatókörben megadott erőforrás jogkivonatát adja vissza. További információ: Engedélyek és hozzájárulás a Microsoft Identitásplatform. |
refresh_token |
kötelező | A refresh_token -t, amelyet a folyamat második szakaszában szereztél meg. |
client_secret |
webalkalmazásokhoz szükséges | Az alkalmazásregisztrációs portálon létrehozott titkos alkalmazáskulcs az alkalmazásához. Nem szabad natív alkalmazásokban használni, mert a client_secret nem tárolható megbízhatóan az eszközökön. Ez szükséges a webalkalmazásokhoz és a webes API-khoz, amelyek biztonságosan tárolhatják a client_secret kiszolgálóoldalon. Ennek a titkos kódnak URL-kódolásúnak kell lennie. További információkért tekintse meg az URI általános szintaxisának specifikációját. |
Sikeres válasz
Ez a példa egy sikeres token választ mutat be.
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
"token_type": "Bearer",
"expires_in": 3599,
"scope": "https%3A%2F%2Fgraph.microsoft.com%2Fmail.read",
"refresh_token": "AwABAAAAvPM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4...",
"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJub25lIn0.eyJhdWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctOD..."
}
Paraméter | Leírás |
---|---|
access_token |
A kért hozzáférési jogkivonat. Az alkalmazás ezt a jogkivonatot használhatja a védett erőforrás elérése során történő hitelesítéshez, például egy webes API esetén. |
token_type |
Az érvényesítési token típusértékét jelzi. A Microsoft Entra ID által támogatott egyetlen típus a Bearer. |
expires_in |
Mennyi ideig érvényes a hozzáférési jogkivonat másodpercben. |
scope |
A hatókörök, amelyekre érvényes access_token . |
refresh_token |
Új OAuth 2.0 frissítési jogkivonat. Cserélje le a régi frissítési jogkivonatot erre az újonnan beszerzett frissítési jogkivonatra, hogy a frissítési jogkivonatok a lehető leghamarabb érvényesek maradjanak. Megjegyzés: Csak akkor van megadva, ha offline_access a hatókört kérték. |
id_token |
Egy aláíratlan JSON-webjogkivonat. Az alkalmazás dekódolhatja ennek a jogkivonatnak a szegmenseit, hogy információt kérjen a bejelentkezett felhasználóról. Az alkalmazás gyorsítótárazhatja az értékeket, és megjelenítheti őket, de nem támaszkodhat rájuk semmilyen engedélyezési vagy biztonsági határ esetén. További információért a id_token -ról, lásd a Microsoft identitásplatform azonosító jogkivonatait. Megjegyzés: Csak akkor van megadva, ha openid a hatókört kérték. |
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 a fogyasztói (Microsoft-fiók) 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
{
"error": "invalid_scope",
"error_description": "AADSTS70011: The provided value for the input parameter 'scope' is not valid. The scope https://foo.microsoft.com/mail.read is not valid.\r\nTrace ID: 0000aaaa-11bb-cccc-dd22-eeeeee333333\r\nCorrelation ID: aaaa0000-bb11-2222-33cc-444444dddddd\r\nTimestamp: 2016-01-09 02:02:12Z",
"error_codes": [
70011
],
"timestamp": "2016-01-09 02:02:12Z",
"trace_id": "0000aaaa-11bb-cccc-dd22-eeeeee333333",
"correlation_id": "aaaa0000-bb11-2222-33cc-444444dddddd"
}
Paraméter | Leírás |
---|---|
error |
Hibakódsztring, amely a hibák típusainak besorolására és a hibákra való reagálásra használható. |
error_description |
Egy adott hibaüzenet, amely segíthet a fejlesztőknek a hitelesítési hibák kiváltó okának azonosításában. |
error_codes |
Az STS-specifikus hibakódok listája, amelyek segíthetnek a diagnosztikában. |
timestamp |
A hiba előfordulásának időpontja. |
trace_id |
A kérés egyedi azonosítója, amely segíthet a diagnosztikában. |
correlation_id |
A kérés egyedi azonosítója, amely segíthet az összetevők közötti diagnosztikában. |
A hibakódok és az ajánlott ügyfélművelet leírásáért tekintse meg a jogkivonatvégpontok hibáinak hibakódjait.
Következő lépések
- A kódolás megkezdéséhez tekintse át az MSAL JS-mintákat .
- Tudnivalók a jogkivonatok cseréjének forgatókönyveiről.