Hozzáférési jogkivonat kérése az Azure Active Directory B2C-ben
A hozzáférési jogkivonat olyan jogcímeket tartalmaz, amelyet az Azure Active Directory B2C-ben (Azure AD B2C) használhat az API-knak megadott engedélyek azonosítására. Erőforrás-kiszolgáló meghívásához a HTTP-kérésnek tartalmaznia kell egy hozzáférési jogkivonatot. A hozzáférési jogkivonatot az access_token sztring jelöli az Azure AD B2C-től kapott válaszban.
Ez a cikk bemutatja, hogyan kérhet hozzáférési jogkivonatot a webalkalmazások és webes API-k számára. Az Azure AD B2C-ben használt jogkivonatokról az Azure Active Directory B2C-ben használt jogkivonatok áttekintését ismertető cikkben talál további információt.
Megjegyzés
A webes API-láncokat (a nevében) nem támogatja Azure AD B2C – Számos architektúra tartalmaz egy webes API-t, amelyet egy másik alsóbb rétegbeli webes API-nak kell meghívnia, mindkettőt Azure AD B2C védi. A forgatókönyv olyan ügyfelekben gyakori, amelyek webes API-háttérrel rendelkeznek, amely egy másik szolgáltatást hív meg. Ez a láncolatba fűzött webes API-megoldás az OAuth 2.0 JWT tulajdonosi hitelesítő adatok megadásával (vagy más néven a meghatalmazásos folyamat segítségével) valósítható meg. A meghatalmazásos folyamatot azonban még nem implementáltuk az Azure AD B2C-ben. Bár az on-behalf-of a Microsoft Entra ID-ben regisztrált alkalmazások esetében működik, nem működik a Azure AD B2C-ben regisztrált alkalmazások esetében, függetlenül attól, hogy a bérlő (Microsoft Entra azonosító vagy Azure AD B2C), amely a jogkivonatokat bocsátja ki.
Előfeltételek
- Hozzon létre egy felhasználói folyamatot, amellyel a felhasználók regisztrálhatnak és bejelentkezhetnek az alkalmazásba.
- Ha még nem tette meg, adjon hozzá egy webes API-alkalmazást az Azure Active Directory B2C-bérlőhöz.
Hatókörök
A hatókörök lehetőséget nyújtanak a védett erőforrásokra vonatkozó engedélyek kezelésére. Hozzáférési jogkivonat kérésekor az ügyfélalkalmazásnak meg kell adni a kívánt engedélyeket a kérés scope paraméterében. Ha például a(z) read
hatókörértéket szeretné megadni a(z) https://contoso.onmicrosoft.com/api
alkalmazásazonosító URI-vel rendelkező API-ra vonatkozóan, a hatókör https://contoso.onmicrosoft.com/api/read
lenne.
A hatóköröket a webes API a hatóköralapú hozzáférés-vezérlés megvalósításához használja. A webes API-k bizonyos felhasználói például rendelkezhetnek olvasási és írási hozzáféréssel is, míg mások csak olvasási hozzáféréssel. Ha több engedélyt szeretne beszerezni ugyanabban a kérésben, hozzáadhat több bejegyzést is a kérés scope paraméteréhez, szóközzel elválasztva.
Az alábbi példában URL-címben dekódolt hatókörök láthatók:
scope=https://contoso.onmicrosoft.com/api/read openid offline_access
Az alábbi példában URL-címben dekódolt hatókörök láthatók:
scope=https%3A%2F%2Fcontoso.onmicrosoft.com%2Fapi%2Fread%20openid%20offline_access
Ha az ügyfélalkalmazásnak megadottnál több hatókört kér, a hívás akkor lesz sikeres, ha legalább egy engedély megadása megtörténik. Az eredményül kapott hozzáférési jogkivonatban található scp jogcímhez csak a sikeresen megadott engedélyeket adja hozzá a rendszer.
OpenID Connect-hatókörök
Az OpenID Connect szabvány több speciális hatókörértéket megad. Az alábbi hatókörök a felhasználó profiljának elérését lehető tévő engedélyt jelölik:
- openid – Azonosító jogkivonatot kér.
- offline_access – Frissítési jogkivonatot kér hitelesítésikód-folyamatokkal.
- 00000000-0000-0000-0000-00000000000 – Az ügyfélazonosító használata a hatókörben azt jelzi, hogy az alkalmazásnak szüksége van egy hozzáférési jogkivonatra, amely a saját szolgáltatása vagy webes API-ja ellen használható, ugyanazzal az ügyfél-azonosítóval.
Ha egy /authorize
kérésben található response_type paraméterben az token
szerepel, a hatókör paraméternek tartalmaznia kell legalább egy olyan erőforrás-hatókört, amely meg lesz adva, és amely nem az openid
vagy az offline_access
. Az /authorize
kérés ellenkező esetben meghiúsul.
Jogkivonat kérése
Hozzáférési jogkivonat kéréséhez engedélyezési kódra van szüksége. Az alábbi példa egy engedélyezési kód végpontjára irányuló kérésre /authorize
mutat be példát:
GET https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/authorize?
client_id=<application-ID>
&nonce=anyRandomValue
&redirect_uri=https://jwt.ms
&scope=<application-ID-URI>/<scope-name>
&response_type=code
Cserélje le a lekérdezési sztring értékeit az alábbiak szerint:
-
<tenant-name>
- A Azure AD B2C-bérlő neve. Ha egyéni tartományt használ, cserélje le a elemettenant-name.b2clogin.com
a saját tartományára, példáulcontoso.com
: . -
<policy-name>
– Az egyéni szabályzatának vagy felhasználói folyamatának neve. -
<application-ID>
– A felhasználói folyamat támogatása érdekében regisztrált webalkalmazás alkalmazásazonosítója. -
<application-ID-URI>
– Az ügyfélalkalmazás API-paneljének közzététele területen beállított alkalmazásazonosító URI. -
<scope-name>
– Az ügyfélalkalmazás API-paneljének közzététele területen hozzáadott hatókör neve. -
<redirect-uri>
– Az ügyfélalkalmazás regisztrálásakor megadott átirányítási URI.
A kérés működésének megismeréséhez illessze be a kérést a böngészőbe, és futtassa.
Ez a folyamat interaktív része, ahol lépéseket hajthat végre. A rendszer felkéri, hogy fejezze be a felhasználói folyamat munkafolyamatát. Ehhez be kell írnia a felhasználónevét és a jelszavát egy bejelentkezési űrlapon vagy bármilyen más lépésben. A végrehajtott lépések a felhasználói folyamat definiálásától függenek.
Az engedélyezési kódot tartalmazó válasznak a következő példához hasonlónak kell lennie:
https://jwt.ms/?code=eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMC...
Miután sikeresen megkapta az engedélyezési kódot, a használatával hozzáférési jogkivonatot kérhet. A paraméterek a HTTP POST-kérelem törzsében találhatók:
POST <tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy-name>/oauth2/v2.0/token HTTP/1.1
Host: <tenant-name>.b2clogin.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&client_id=<application-ID>
&scope=<application-ID-URI>/<scope-name>
&code=eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMC...
&redirect_uri=https://jwt.ms
&client_secret=2hMG2-_:y12n10vwH...
Ha tesztelni szeretné ezt a POST HTTP-kérést, bármilyen HTTP-ügyfelet használhat, például a Microsoft PowerShellt vagy a Postmant.
A sikeres jogkivonat-válasz a következőképpen néz ki:
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrN...",
"token_type": "Bearer",
"not_before": 1549647431,
"expires_in": 3600,
"expires_on": 1549651031,
"resource": "f2a76e08-93f2-4350-833c-965c02483b11",
"profile_info": "eyJ2ZXIiOiIxLjAiLCJ0aWQiOiJjNjRhNGY3ZC0zMDkxLTRjNzMtYTcyMi1hM2YwNjk0Z..."
}
Amikor a visszaadott hozzáférési jogkivonatot vizsgálja a https://jwt.ms használatával, az alábbi példához hasonló eredménynek kell megjelennie:
{
"typ": "JWT",
"alg": "RS256",
"kid": "X5eXk4xyojNFum1kl2Ytv8dl..."
}.{
"iss": "https://contoso0926tenant.b2clogin.com/c64a4f7d-3091-4c73-a7.../v2.0/",
"exp": 1549651031,
"nbf": 1549647431,
"aud": "f2a76e08-93f2-4350-833c-965...",
"oid": "1558f87f-452b-4757-bcd1-883...",
"sub": "1558f87f-452b-4757-bcd1-883...",
"name": "David",
"tfp": "B2C_1_signupsignin1",
"nonce": "anyRandomValue",
"scp": "read",
"azp": "38307aee-303c-4fff-8087-d8d2...",
"ver": "1.0",
"iat": 1549647431
}.[Signature]