Dela via


Begära en åtkomsttoken i Azure Active Directory B2C

En åtkomsttoken innehåller anspråk som du kan använda i Azure Active Directory B2C (Azure AD B2C) för att identifiera de behörigheter som dina API:er har beviljats. Http-begäran måste innehålla en åtkomsttoken för att kunna anropa en resursserver. En åtkomsttoken visas som access_token i svaren från Azure AD B2C.

Den här artikeln beskriver hur du begär en åtkomsttoken för en webbapp och ett webb-API. Mer information om token i Azure AD B2C finns i översikten över token i Azure Active Directory B2C.

Anteckning

Webb-API-kedjor (On-Behalf-Of) stöds inte av Azure AD B2C – Många arkitekturer innehåller ett webb-API som behöver anropa ett annat underordnat webb-API, som båda skyddas av Azure AD B2C. Det här scenariot är vanligt med klienter som har ett webb-API på serversidan, som i sin tur anropar en annan tjänst. Det här scenariot med länkade webb-API:er kan användas genom en tilldelning av OAuth 2.0 JWT-ägarautentiseringsuppgifter, även kallat On-Behalf-Of-flöde. Detta flöde är emellertid inte implementerat i Azure AD B2C. Även om On-Behalf-Of fungerar för program som registrerats i Microsoft Entra-ID, fungerar det inte för program som är registrerade i Azure AD B2C, oavsett klientorganisation (Microsoft Entra-ID eller Azure AD B2C) som utfärdar token.

Förutsättningar

Omfattningar

Med hjälp av omfång kan du hantera behörigheter för skyddade resurser. När en åtkomsttoken begärs måste klientprogrammet ange önskade behörigheter i scope-parametern för begäran. Om du till exempel vill ange omfångsvärdetread för API:et med ett app-ID med URI:nhttps://contoso.onmicrosoft.com/api, är omfånget https://contoso.onmicrosoft.com/api/read.

Omfång används av webb-API för att implementera omfångsbaserad åtkomststyrning. Till exempel kan användare av webb-API:et ha både läs- och skrivbehörighet, eller så har användare av webb-API:et kanske bara läsbehörighet. Om du vill hämta flera behörigheter i samma begäran kan du lägga till flera poster i samma scope-parameter i begäran, avgränsade med blanksteg.

I följande exempel visas omfång som är avkodade i en URL:

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

I följande exempel visas omfång som är kodade i en URL:

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

Om du begär fler omfång än vad ditt klientprogram beviljas, lyckas anropet om minst en behörighet beviljas. SCP-anspråket i den resulterande åtkomsttoken innehåller endast de behörigheter som beviljades.

OpenID Connect-omfång

OpenID Connect-standarden anger flera särskilda omfångsvärden. Följande omfång representerar behörigheten för att komma åt användarens profil:

  • openid – Begär en ID-token.
  • offline_access – Begär en uppdateringstoken via auktoriseringskodflöden.
  • 000000000-0000-0000-0000-000000000000 – Om du använder klient-ID som omfång anger du att din app behöver en åtkomsttoken som kan användas mot din egen tjänst eller ditt webb-API, som representeras av samma klient-ID.

Om parametern response_type i en /authorize-begäran innehåller token, måste scope-parametern innehålla minst ett annat resursomfång än openid och offline_access som kommer att beviljas. Annars misslyckas /authorize-begäran.

Begära en token

Du behöver en auktoriseringskod för att begära en åtkomsttoken. Följande är ett exempel på en begäran till /authorize slutpunkten för en auktoriseringskod:

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

Ersätt värdena i frågesträngen på följande sätt:

  • <tenant-name>– Namnet på din Azure AD B2C-klientorganisation. Om du använder en anpassad domän ersätter tenant-name.b2clogin.com du med din domän, till exempel contoso.com.
  • <policy-name> – Namnet på din anpassade princip eller ditt anpassade användarflöde.
  • <application-ID> – Programidentifieraren för webbappen som du registrerade för att stödja användarflödet.
  • <application-ID-URI> – URI:n för programidentifieraren som du anger under Exponera ett API-blad för klientprogrammet.
  • <scope-name> – Namnet på det omfång som du lade till under Exponera ett API-blad för klientprogrammet.
  • <redirect-uri>Omdirigerings-URI:n som du angav när du registrerade klientprogrammet.

Om du vill få en känsla av hur begäran fungerar klistrar du in begäran i webbläsaren och kör den.

Det här är den interaktiva delen av flödet, där du vidtar åtgärder. Du uppmanas att slutföra användarflödets arbetsflöde. Detta kan innebära att du anger ditt användarnamn och lösenord i ett inloggningsformulär eller något annat antal steg. Vilka steg du utför beror på hur användarflödet definieras.

Svaret med auktoriseringskoden bör likna följande exempel:

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

När du har fått auktoriseringskoden kan du använda den för att begära en åtkomsttoken. Parametrarna finns i brödtexten i HTTP POST-begäran:

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

Om du vill testa denna POST HTTP-begäran kan du använda valfri HTTP-klient, till exempel Microsoft PowerShell eller Postman.

Ett lyckat tokensvar ser ut så här:

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

När du använder https://jwt.ms för att undersöka den åtkomsttoken som returnerades, bör du se något som liknar följande exempel:

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

Nästa steg