Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Microsoft identitásplatformja támogatja az eszközengedélyezési engedélyt, amely lehetővé teszi a felhasználók számára, hogy bejelentkezhessenek a bemenetre korlátozott eszközökre, például intelligens TV-be, IoT-eszközre vagy nyomtatóra. A folyamat engedélyezéséhez az eszköz egy másik eszközön lévő böngészőben egy weblapot látogat meg a bejelentkezéshez. Miután a felhasználó bejelentkezett, az eszköz szükség szerint lekérheti a hozzáférési jogkivonatokat és frissítheti a jogkivonatokat.
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. Példákért tekintse meg az MSAL-t használó mintaalkalmazásokat .
Protokolldiagram
A teljes eszközkód-folyamat az alábbi ábrán látható. A cikk minden lépését ismerteti.
Eszközengedélyezési kérelem
Az ügyfélnek először meg kell keresnie a hitelesítési kiszolgálót a hitelesítés indításához használt eszköz- és felhasználói kóddal kapcsolatban. Az ügyfél a végpontról gyűjti be ezt a kérést /devicecode
. A kérelemben az ügyfélnek tartalmaznia kell a felhasználótól beszerezni kívánt engedélyeket is.
A kérés elküldése után a felhasználónak 15 perce van bejelentkezni. Ez a beállítás alapértelmezett értéke expires_in
. A kérés csak akkor hajtható végre, ha a felhasználó jelzi, hogy készen áll a bejelentkezésre.
// Line breaks are for legibility only.
POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/devicecode
Content-Type: application/x-www-form-urlencoded
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope=user.read%20openid%20profile
Paraméter | Állapot | Leírás |
---|---|---|
tenant |
Kötelező |
/common Lehet , /consumers vagy /organizations . Ez lehet az a címtár-bérlő is, amelytől guid vagy rövid névformátumban szeretne engedélyt kérni. |
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. |
scope |
Kötelező | Azoknak a hatóköröknek a szóközzel tagolt listája, amelyeket a felhasználónak engedélyeznie kell. |
Eszközengedélyezési válasz
A sikeres válasz egy JSON-objektum, amely tartalmazza a felhasználó bejelentkezéséhez szükséges információkat.
Paraméter | Formátum | Leírás |
---|---|---|
device_code |
Lánc | Az ügyfél és az engedélyezési kiszolgáló közötti munkamenet ellenőrzésére használt hosszú sztring. Az ügyfél ezzel a paraméterrel kéri le a hozzáférési jogkivonatot az engedélyezési kiszolgálótól. |
user_code |
Lánc | Egy rövid sztring, amely egy másodlagos eszközön található munkamenet azonosítására szolgál a felhasználó számára. |
verification_uri |
URI | A felhasználó user_code által a bejelentkezéshez szükséges URI. |
expires_in |
Int | A lejárat előtti és user_code a lejárat előtti device_code másodpercek száma. |
interval |
Int | Az ügyfél által a lekérdezési kérelmek között várakozó másodpercek száma. |
message |
Lánc | Egy emberi olvasásra alkalmas sztring, amely a felhasználó utasításait tartalmazza. Ez honosítható úgy, hogy az űrlap ?mkt=xx-XX kérésében egy lekérdezési paramétert is beszúr, és kitölti a megfelelő nyelvi kulturális kódot. |
Megjegyzés
A verification_uri_complete
válaszmező jelenleg nem szerepel vagy nem támogatott. Ezt azért említjük, mert ha elolvassa a szabványt , az verification_uri_complete
az eszközkód-folyamat szabványának választható részeként jelenik meg.
A felhasználó hitelesítése
Miután az ügyfél megkapta user_code
és verification_uri
megjelenítette az értékeket, a rendszer arra utasítja a felhasználót, hogy jelentkezzen be a mobil- vagy PC-böngészőn keresztül.
Ha a felhasználó egy személyes fiókkal hitelesít, a rendszer arra kéri, /common
/consumers
hogy jelentkezzen be újra, hogy a hitelesítési állapotot átvihesse az eszközre. Ennek az az oka, hogy az eszköz nem tudja elérni a felhasználó cookie-ját. A rendszer arra kéri őket, hogy járuljanak hozzá az ügyfél által kért engedélyekhez. Ez azonban nem vonatkozik a hitelesítéshez használt munkahelyi vagy iskolai fiókokra.
Amíg a felhasználó hitelesíti a verification_uri
címet, az ügyfélnek le kell kérnie a /token
kért jogkivonat végpontjának lekérdezését a device_code
használatával.
POST https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded
grant_type=urn:ietf:params:oauth:grant-type:device_code&client_id=00001111-aaaa-2222-bbbb-3333cccc4444&device_code=GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8...
Paraméter | Kötelező | Leírás |
---|---|---|
tenant |
Kötelező | Az eredeti kérelemben használt bérlői vagy bérlői alias. |
grant_type |
Kötelező | Kell lennie urn:ietf:params:oauth:grant-type:device_code |
client_id |
Kötelező | Meg kell egyeznie a client_id kezdeti kérelemben használtval. |
device_code |
Kötelező | Az device_code eszközengedélyezési kérelemben visszaadott érték. |
Várt hibák
Az eszközkód-folyamat egy lekérdezési protokoll, ezért az ügyfélnek kézbesített hibákat a felhasználói hitelesítés befejezése előtt kell elvárni.
Hiba | Leírás | Ügyfélművelet |
---|---|---|
authorization_pending |
A felhasználó még nem fejezte be a hitelesítést, de nem törölte a folyamatot. | Ismételje meg a kérést legalább interval másodperc elteltével. |
authorization_declined |
A végfelhasználó megtagadta az engedélyezési kérelmet. | Állítsa le a lekérdezést, és állítsa vissza a hitelesítés nélküli állapotot. |
bad_verification_code |
A device_code végpontra /token küldött üzenet nem lett felismerve. |
Ellenőrizze, hogy az ügyfél a helyes device_code üzenetet küldi-e a kérésben. |
expired_token |
A rendszer túllépte az expires_in értéket, és a hitelesítés már nem lehetséges.device_code |
Állítsa le a lekérdezést, és állítsa vissza a hitelesítés nélküli állapotot. |
Sikeres hitelesítési válasz
A sikeres jogkivonat-válasz a következőképpen néz ki:
{
"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 |
Lánc | Mindig Bearer . |
scope |
Szóközzel elválasztott karakterláncok | Ha egy hozzáférési jogkivonatot ad vissza, ez felsorolja azokat a hatóköröket, amelyekre a hozzáférési jogkivonat érvényes. |
expires_in |
Int | A belefoglalt hozzáférési jogkivonat érvényessége 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 jogkivonatokat szerezhet be az OAuth Code folyamatdokumentációjában dokumentált 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.