Een toegangstoken aanvragen in Azure Active Directory B2C

Een toegangstoken bevat claims die u in Azure Active Directory B2C (Azure AD B2C) kunt gebruiken om de toegekende machtigingen voor uw API's te identificeren. Als u een resourceserver wilt aanroepen, moet de HTTP-aanvraag een toegangstoken bevatten. Een toegangstoken wordt aangeduid als access_token in de reacties van Azure AD B2C.

In dit artikel wordt beschreven hoe u een toegangstoken kunt aanvragen voor een webtoepassing en web-API. Zie het overzicht van tokens in Azure Active Directory B2C voor meer informatie over tokens in Azure AD B2C.

Notitie

Web-API-ketens (On-Behalf-Of) worden niet ondersteund door Azure AD B2C: veel architecturen bevatten een web-API die een andere downstream web-API moet aanroepen, beide beveiligd door Azure AD B2C. Dit scenario is gebruikelijk bij clients met een web API-back-end, die op zijn beurt een andere service aanroept. Dit scenario met web-API-keten kan worden ondersteund met behulp van de OAuth 2.0 JWT bearer-token-referentietoekenning, ook wel de On-Behalf-Of-stroom genoemd. De On-Behalf-Of-stroom is momenteel echter niet geïmplementeerd in Azure AD B2C. Hoewel On-Behalf-Of werkt voor toepassingen die zijn geregistreerd in Microsoft Entra-id, werkt het niet voor toepassingen die zijn geregistreerd in Azure AD B2C, ongeacht de tenant (Microsoft Entra-id of Azure AD B2C) die de tokens uitgeeft.

Vereisten

Bereiken

Bereiken bieden een manier om machtigingen tot beveiligde resources te beheren. Wanneer een toegangstoken wordt aangevraagd, moet de clienttoepassing de gewenste machtigingen opgeven in de parameter bereik van de aanvraag. Als u bijvoorbeeld de Bereikwaarde wilt opgeven van read voor de API met de App-id-URI van https://contoso.onmicrosoft.com/api, zou het bereik https://contoso.onmicrosoft.com/api/read zijn.

Bereiken worden door de web-API gebruikt om toegangsbeheer op basis van een bereik te implementeren. Bijvoorbeeld: gebruikers van de web-API kunnen zowel lees- als schrijftoegang hebben of alleen leestoegang. Als u meerdere machtigingen in dezelfde aanvraag wilt ophalen, kunt u meerdere vermeldingen toevoegen in de parameter voor het enkele bereik van de aanvraag, gescheiden door spaties.

In het volgende voorbeeld ziet u de bereiken die in een URL zijn gedecodeerd:

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

In het volgende voorbeeld ziet u de bereiken die in een URL zijn gecodeerd:

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

Als u meer bereiken aanvraagt dan voor uw clienttoepassing worden verleend, wordt de aanroep uitgevoerd als er ten minste één machtiging wordt verleend. De scp-claim in het resulterende toegangstoken is gevuld met alleen de machtigingen die zijn verleend.

OpenID Connect-bereiken

De OpenID Connect-standaard specificeert verschillende speciale bereikwaarden. De volgende bereiken vertegenwoordigen de machtiging voor toegang tot het gebruikersprofiel:

  • openid - Vraagt een id-token aan.
  • offline_access - Vraagt een vernieuwingstoken aan met behulp van Auth Code-stromen.
  • 000000000-0000-0000-00000-000000000000 - De client-id gebruiken als het bereik geeft aan dat uw app een toegangstoken nodig heeft dat kan worden gebruikt voor uw eigen service of web-API, vertegenwoordigd door dezelfde client-id.

Als de parameter response_type in een /authorize aanvraag token bevat, moet de parameter bereik ten minste één resourcebereik bevatten, behalve openid en offline_access, dat wordt verleend. Anders wordt de aanvraag /authorize geweigerd.

Een token aanvragen

Als u een toegangstoken wilt aanvragen, hebt u een autorisatiecode nodig. Hier volgt een voorbeeld van een aanvraag naar het /authorize eindpunt voor een autorisatiecode:

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

Vervang de waarden in de querytekenreeks als volgt:

  • <tenant-name>- De naam van uw Azure AD B2C-tenant. Als u een aangepast domein gebruikt, vervangt u door tenant-name.b2clogin.com uw domein, zoals contoso.com.
  • <policy-name> - De naam van uw aangepaste beleid of gebruikersstroom.
  • <application-ID> - De toepassings-id van de webtoepassing die u hebt geregistreerd ter ondersteuning van de gebruikersstroom.
  • <application-ID-URI> - De toepassings-id-URI die u hebt ingesteld onder de blade Een API beschikbaar maken van de clienttoepassing.
  • <scope-name> - De naam van het bereik dat u hebt toegevoegd onder de blade Een API beschikbaar maken van de clienttoepassing.
  • <redirect-uri> - De Omleidings-URI die u hebt ingevoerd tijdens het registreren van de clienttoepassing.

Als u een idee wilt krijgen van de werking van de aanvraag, plakt u de aanvraag in uw browser en voert u deze uit.

Dit is het interactieve deel van de stroom, waar u actie onderneemt. U wordt gevraagd om de werkstroom van de gebruikersstroom te voltooien. Dit kan betekenen dat u uw gebruikersnaam en wachtwoord in een aanmeldingsformulier of een ander aantal stappen moet invoeren. De stappen die u moet uitvoeren, zijn afhankelijk van hoe de gebruikersstroom is gedefinieerd.

Het antwoord met de autorisatiecode moet vergelijkbaar zijn met dit voorbeeld:

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

Nadat u de autorisatiecode hebt ontvangen, kunt u deze gebruiken om een toegangstoken aan te vragen. De parameters bevinden zich in de hoofdtekst van de HTTP POST-aanvraag:

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

Als u deze POST HTTP-aanvraag wilt testen, kunt u elke HTTP-client gebruiken, zoals Microsoft PowerShell of Postman.

Een geslaagd tokenantwoord ziet er als volgt uit:

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

Wanneer u https://jwt.ms gebruikt om het toegangstoken te onderzoeken dat is geretourneerd, ziet u iets dat lijkt op het volgende voorbeeld:

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

Volgende stappen