Vyžádání přístupového tokenu ve službě Azure Active Directory B2C

Přístupový token obsahuje deklarace identity, pomocí kterých můžete v Azure Active Directory B2C (Azure AD B2C) identifikovat oprávnění udělená vašim rozhraním API. Pokud chcete volat server prostředků, požadavek HTTP musí obsahovat přístupový token. Přístupový token se v odpovědích služby Azure AD B2C označuje textem access_token.

V tomto článku se dozvíte, jak požádat o přístupový token pro webovou aplikaci a webové rozhraní API. Další informace o tokenech v Azure AD B2C najdete v přehledu tokenů v Azure Active Directory B2C.

Poznámka

Řetězy webového rozhraní API (On-Behalf-Of) nepodporují Azure AD B2C – řada architektur zahrnuje webové rozhraní API, které potřebuje volat jiné podřízené webové rozhraní API, a to jak zabezpečené Azure AD B2C. Tento scénář je běžný u klientů, které mají back-end s webovým rozhraním API, který volá zase jinou službu. Podporu tohoto scénáře se zřetězenými webovými rozhraními API umožňuje udělení přihlašovacích údajů nosného tokenu OAuth 2.0 JWT, označovaného také jako tok On-Behalf-Of. V Azure AD B2C nicméně není tok On-Behalf-Of v současné době implementovaný. I když funkce On-Behalf-Of funguje pro aplikace zaregistrované v Microsoft Entra ID, nefunguje pro aplikace zaregistrované v Azure AD B2C bez ohledu na tenanta (ID Microsoft Entra nebo Azure AD B2C), který tokeny vydává.

Předpoklady

Obory

Obory představují způsob, jak spravovat oprávnění k chráněným prostředkům. Při žádosti o přístupový token musí klientská aplikace uvést požadovaná oprávnění v parametru scope požadavku. Pokud například chcete u rozhraní API, které má identifikátor URI aplikacehttps://contoso.onmicrosoft.com/api, určit hodnotu oboruread, bude obor https://contoso.onmicrosoft.com/api/read.

Webové rozhraní API používá obory k implementaci řízení přístupu na základě oboru. Například uživatelé webového rozhraní API můžou mít přístup ke čtení i zápisu nebo přístup pouze ke čtení. Pokud chcete ve stejném požadavku získat více oprávnění, můžete do jednoho parametru scope požadavku zadat více položek oddělených mezerami.

Následující příklad ukazuje dekódované obory v adrese URL:

scope=https://contoso.onmicrosoft.com/api/read openid offline_access

Následující příklad ukazuje zakódované obory v adrese URL:

scope=https%3A%2F%2Fcontoso.onmicrosoft.com%2Fapi%2Fread%20openid%20offline_access

Pokud zadáte požadavek na více oborů, než kolik se pro danou klientskou aplikaci uděluje, bude volání úspěšné, pokud dojde k udělení alespoň jednoho oprávnění. V deklaraci identity scp ve výsledném přístupovém tokenu se automaticky uvedou jednom úspěšně udělená oprávnění.

Obory OpenID Connect

Standard OpenID Connect určuje několik speciálních hodnot oboru. Následující obory reprezentují oprávnění pro přístup k profilu uživatele:

  • openid – Vyžádá token ID.
  • offline_access – Vyžádá token obnovení pomocí toků autorizačního kódu.
  • 00000000-0000-0000-00000-00000000000000000000000000000000000000000000000000000000000000000000000000000 znamená , že vaše aplikace potřebuje přístupový token, který se dá použít proti vaší vlastní službě nebo webovému rozhraní API reprezentovaný stejným ID klienta.

Pokud parametr response_type požadavku /authorize obsahuje token, musí parametr scope obsahovat nejméně jeden jiný obor prostředku než openid a offline_access, který se má udělit. V opačném případě nebude požadavek /authorize úspěšný.

Vyžádání tokenu

K vyžádání přístupového tokenu potřebujete autorizační kód. Následuje příklad požadavku na autorizační kód od koncového /authorize bodu:

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

Nahraďte hodnoty v řetězci dotazu následujícím způsobem:

  • <tenant-name>– Název vašeho tenanta Azure AD B2C. Pokud používáte vlastní doménu, nahraďte tenant-name.b2clogin.com ji svojí doménou, například contoso.com.
  • <policy-name> – název vlastní zásady nebo toku uživatele.
  • <application-ID> – identifikátor webové aplikace, kterou jste zaregistrovali za účelem zpracování toku uživatele.
  • <application-ID-URI> – Identifikátor URI aplikace, který nastavíte v okně Vystavit rozhraní API klientské aplikace.
  • <scope-name> – Název oboru, který jste přidali v okně Vystavit rozhraní API klientské aplikace.
  • <redirect-uri>identifikátor URI pro přesměrování, který jste zadali při registraci klientské aplikace.

Pokud chcete získat přehled o tom, jak požadavek funguje, vložte ho do prohlížeče a spusťte ho.

Jedná se o interaktivní část toku, ve které můžete provádět akce. Zobrazí se výzva k dokončení pracovního postupu toku uživatele. To může zahrnovat zadání uživatelského jména a hesla do přihlašovacího formuláře nebo jakéhokoli jiného počtu kroků. Kroky, které provedete, závisí na tom, jak je definován tok uživatele.

Odpověď s autorizačním kódem by se měla podobat tomuto příkladu:

https://jwt.ms/?code=eyJraWQiOiJjcGltY29yZV8wOTI1MjAxNSIsInZlciI6IjEuMC...

Po úspěšném přijetí autorizačního kódu ho můžete použít k vyžádání přístupového tokenu. Parametry jsou v textu požadavku HTTP POST:

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

Pokud chcete otestovat tento požadavek POST HTTP, můžete použít libovolného klienta HTTP, jako je Microsoft PowerShell nebo Postman.

Úspěšná odpověď tokenu vypadá takto:

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Ilg1ZVhrN...",
    "token_type": "Bearer",
    "not_before": 1549647431,
    "expires_in": 3600,
    "expires_on": 1549651031,
    "resource": "f2a76e08-93f2-4350-833c-965c02483b11",
    "profile_info": "eyJ2ZXIiOiIxLjAiLCJ0aWQiOiJjNjRhNGY3ZC0zMDkxLTRjNzMtYTcyMi1hM2YwNjk0Z..."
}

Když zkusíte vrácený přístupový token zadat do nástroje https://jwt.ms, měl by se zobrazit podobný výstup jako v tomto příkladu:

{
  "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]

Další kroky