Dela via


Begära en åtkomsttoken i Azure Active Directory B2C

Viktigt!

Från och med den 1 maj 2025 är Azure AD B2C inte längre tillgängligt att köpa för nya kunder. Läs mer i våra vanliga frågor och svar.

En åtkomsttoken innehåller anspråk som du kan använda i Azure Active Directory B2C (Azure AD B2C) för att identifiera de beviljade behörigheterna för dina API:er. Om du vill anropa en resursserver måste HTTP-begäran innehålla en åtkomsttoken. En åtkomsttoken anges som access_token i svaren från Azure AD B2C.

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

Anmärkning

Webb-API-kedjor (på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 i klienter som har en webb-API-serverdel, som i sin tur anropar en annan tjänst. Det här länkade webb-API-scenariot kan stödjas med hjälp av OAuth 2.0 JWT Bearer Credential-beviljandet, även kallat on-Behalf-Of-flödet. För närvarande implementeras dock inte On-Behalf-Of-flödet 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

  • Skapa ett användarflöde så att användarna kan registrera sig och logga in på ditt program.
  • Om du inte redan har gjort det kan du lägga till ett webb-API i din Azure Active Directory B2C-klientorganisation.

Tillämpningsområden

Scopes erbjuder ett sätt att hantera behörigheter till skyddade resurser. När en åtkomsttoken begärs måste klientprogrammet ange önskade behörigheter i omfångsparametern för begäran. Om du till exempel vill ange omfångsvärdet för read för det API som har app-ID-URIhttps://contoso.onmicrosoft.com/api, skulle omfånget vara https://contoso.onmicrosoft.com/api/read.

Omfång används av webb-API:et för att implementera omfångsbaserad åtkomstkontroll. Användare av webb-API:et kan till exempel ha både läs- och skrivåtkomst, eller så har användare av webb-API:et kanske bara läsåtkomst. Om du vill hämta flera behörigheter i samma begäran kan du lägga till flera poster i den enskilda omfångsparametern för begäran, avgränsad med blanksteg.

I följande exempel visas omfång som avkodas i en URL:

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

I följande exempel visas områden som är kodade i en URL:

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

Om du begär fler behörigheter än vad som har beviljats för din klientapplikation, lyckas anropet om minst en behörighet beviljas. Scp-anspråket i den resulterande åtkomsttoken fylls i med endast de behörigheter som har beviljats.

OpenID Connect-omfång

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

  • openid – begär en ID-token.
  • offline_access – Begär en refresh token genom att använda autentiseringskodflöden.
  • 000000000-00000-0000-0000000000000000 – Om du använder klient-ID:t som omfång anger du att din app behöver en åtkomsttoken som kan användas mot din egen tjänst eller webb-API, som representeras av samma klient-ID.

Om response_type-parametern 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

För att begära en åtkomsttoken behöver du en auktoriseringskod. 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-klient. 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 användarflöde.
  • <application-ID> – Programidentifieraren för det webbprogram som du registrerade för att stödja användarflödet.
  • <application-ID-URI> – URI för programidentifierare som du anger under Exponera ett API-blad för klientprogrammet.
  • <scope-name> – Namnet på omfånget som du lade till under Exponera ett API-blad för klientprogrammet.
  • <redirect-uri>Den omdirigerings-URI 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 det här exemplet:

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 den här POST HTTP-begäran kan du använda valfri HTTP-klient, till exempel Microsoft PowerShell.

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