Delen via


OAuth 2.0-autorisatiecodestroom in Azure Active Directory B2C

Belangrijk

Vanaf 1 mei 2025 is Azure AD B2C niet meer beschikbaar voor nieuwe klanten. Meer informatie vindt u in onze veelgestelde vragen.

U kunt de OAuth 2.0-autorisatiecode verlenen in apps die op een apparaat zijn geïnstalleerd om toegang te krijgen tot beveiligde resources, zoals web-API's. Met behulp van de Azure Active Directory B2C-implementatie (Azure AD B2C) van OAuth 2.0 kunt u registratie-, aanmeldings- en andere identiteitsbeheertaken toevoegen aan uw apps met één pagina, mobiel en desktop. In dit artikel wordt beschreven hoe u HTTP-berichten verzendt en ontvangt zonder opensource-bibliotheken te gebruiken. Dit artikel is taalonafhankelijk. Indien mogelijk raden we u aan de ondersteunde Microsoft Authentication Libraries (MSAL) te gebruiken. Bekijk de voorbeeld-apps die GEBRUIKMAKEN van MSAL.

De OAuth 2.0-autorisatiecodestroom wordt beschreven in sectie 4.1 van de OAuth 2.0-specificatie. U kunt deze gebruiken voor verificatie en autorisatie in de meeste toepassingstypen, waaronder webtoepassingen, toepassingen met één pagina en systeemeigen geïnstalleerde toepassingen. U kunt de OAuth 2.0-autorisatiecodestroom gebruiken om veilig toegangstokens te verkrijgen en tokens te vernieuwen voor uw toepassingen, die kunnen worden gebruikt voor toegang tot resources die zijn beveiligd door een autorisatieserver. Met het vernieuwingstoken kan de client nieuwe toegangstokens verkrijgen (en vernieuwen) zodra het toegangstoken is verlopen, meestal na één uur.

Dit artikel is gericht op de OAuth 2.0-autorisatiecodestroom voor openbare clients . Een openbare client is een clienttoepassing die niet kan worden vertrouwd om de integriteit van een geheim wachtwoord veilig te behouden. Dit omvat toepassingen met één pagina, mobiele apps, bureaubladtoepassingen en in wezen elke toepassing die niet op een server wordt uitgevoerd.

Opmerking

Als u identiteitsbeheer wilt toevoegen aan een web-app met behulp van Azure AD B2C, gebruikt u OpenID Connect in plaats van OAuth 2.0.

Azure AD B2C breidt de standaard OAuth 2.0-stromen uit om meer te doen dan eenvoudige verificatie en autorisatie. De gebruikersstroom wordt geïntroduceerd. Met gebruikersstromen kunt u OAuth 2.0 gebruiken om gebruikerservaringen toe te voegen aan uw toepassing, zoals registreren, aanmelden en profielbeheer. Id-providers die gebruikmaken van het OAuth 2.0-protocol zijn Amazon, Microsoft Entra ID, Facebook, GitHub, Google en LinkedIn.

Ga als volgt te werk om de HTTP-aanvragen in dit artikel uit te proberen:

  1. Vervang door {tenant} de naam van uw Azure AD B2C-tenant.
  2. Vervang 00001111-aaaa-2222-bbbb-3333cccc4444 door de app-id van een toepassing die u eerder hebt geregistreerd in uw Azure AD B2C-tenant.
  3. Vervang {policy} door de naam van een beleid dat u bijvoorbeeld in uw tenant hebt gemaakt, zoals b2c_1_sign_in.

Instellen van omleidings-URI vereist voor single-page applicaties

Voor de autorisatiecodestroom voor toepassingen met één pagina is een extra installatie vereist. Volg de instructies voor het maken van uw toepassing met één pagina om uw omleidings-URI correct te markeren als ingeschakeld voor CORS. Als u een bestaande omleidings-URI wilt bijwerken om CORS in te schakelen, klikt u op de migratieprompt in de sectie Web van het tabblad Verificatie van de app-registratie. U kunt ook de manifesteditor voor app-registraties openen en het type veld voor uw omleidings-URI spa instellen in de replyUrlsWithType sectie.

Het spa omleidingstype is achterwaarts compatibel met de impliciete stroom. Apps die momenteel de impliciete stroom gebruiken om tokens op te halen, kunnen zonder problemen worden verplaatst naar het spa type omleidings-URI en de impliciete stroom blijven gebruiken.

1. Een autorisatiecode ophalen

De autorisatiecodestroom begint met de client die de gebruiker naar het /authorize eindpunt leidt. Dit is het interactieve deel van de stroom, waarbij de gebruiker actie onderneemt. In deze aanvraag geeft de client in de scope parameter de machtigingen aan die de client moet verkrijgen van de gebruiker. In de volgende voorbeelden (met regeleinden voor leesbaarheid) ziet u hoe u een autorisatiecode kunt verkrijgen. Als u deze GET HTTP-aanvraag test, gebruikt u uw browser.

GET https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/authorize?
client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&response_type=code
&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob
&response_mode=query
&scope=00001111-aaaa-2222-bbbb-3333cccc4444%20offline_access%20https://{tenant-name}/{app-id-uri}/{scope}
&state=arbitrary_data_you_can_receive_in_the_response
&code_challenge=YTFjNjI1OWYzMzA3MTI4ZDY2Njg5M2RkNmVjNDE5YmEyZGRhOGYyM2IzNjdmZWFhMTQ1ODg3NDcxY2Nl
&code_challenge_method=S256
Maatstaf Vereist? Beschrijving
{huurder} Verplicht Naam van uw Azure AD B2C-tenant
Beleid Verplicht De gebruikersstroom die moet worden uitgevoerd. Geef de naam op van een gebruikersstroom die u hebt gemaakt in uw Azure AD B2C-tenant. Bijvoorbeeld: b2c_1_sign_in, b2c_1_sign_upof b2c_1_edit_profile.
client-id Verplicht De toepassings-id die is toegewezen aan uw app in Azure Portal.
reactietype Verplicht Het antwoordtype, dat moet bevatten code voor de autorisatiecodestroom. U kunt een ID-token ontvangen als u het opneemt in het antwoordtype, zoals code+id_token, en in dit geval moet de scope openid bevatten.
omleidings_uri Verplicht De omleidings-URI van uw app, waar verificatiereacties worden verzonden en ontvangen door uw app. Deze moet exact overeenkomen met een van de omleidings-URI's die u hebt geregistreerd in de portal, behalve dat deze URL-gecodeerd moet zijn.
omvang Verplicht Een door spaties gescheiden lijst van scopes. Het openid bereik geeft een machtiging aan om de gebruiker aan te melden en gegevens over de gebruiker op te halen in de vorm van id-tokens. Het offline_access bereik is optioneel voor webtoepassingen. Het geeft aan dat uw toepassing een vernieuwingstoken nodig heeft voor uitgebreide toegang tot resources. De client-id geeft aan dat het uitgegeven token is bedoeld voor gebruik door de geregistreerde Azure AD B2C-client. Hiermee https://{tenant-name}/{app-id-uri}/{scope} wordt een machtiging voor beveiligde resources aangegeven, zoals een web-API. Zie Een toegangstoken aanvragenvoor meer informatie.
reactiemodus Aanbevolen De methode die u gebruikt om de resulterende autorisatiecode terug te sturen naar uw app. Het kan query, form_post of fragment zijn.
staat Aanbevolen Een waarde opgenomen in het verzoek, die een tekenreeks van willekeurige inhoud kan zijn die u wilt gebruiken. Meestal wordt een willekeurig gegenereerde unieke waarde gebruikt om vervalsingsaanvallen op meerdere sites te voorkomen. De status wordt ook gebruikt om informatie over de status van de gebruiker in de app te coderen voordat de verificatieaanvraag is opgetreden. Bijvoorbeeld de pagina waarop de gebruiker zich bevond of de gebruikersstroom die werd uitgevoerd.
aanmoediging Optioneel Het type gebruikersinteractie dat vereist is. Momenteel is loginde enige geldige waarde, waardoor de gebruiker zijn referenties op die aanvraag invoert. Eenmalige aanmelding wordt niet van kracht.
code-uitdaging aanbevolen/vereist Wordt gebruikt om autorisatiecode te beveiligen via Proof Key for Code Exchange (PKCE). Vereist als code_challenge_method is opgenomen. U moet logica toevoegen in uw toepassing om de code_verifier en code_challengete genereren. Het code_challenge is een Base64-URL-gecodeerde SHA256-hash van de code_verifier. U slaat code_verifier op in uw applicatie voor later gebruik en verzendt code_challenge samen met het autorisatieverzoek. Zie de PKCE RFC voor meer informatie. Dit wordt nu aanbevolen voor alle toepassingstypen: systeemeigen apps, SPA's en vertrouwelijke clients, zoals web-apps.
code_challenge_method aanbevolen/vereist De methode die wordt gebruikt om de code_verifier voor de code_challenge-parameter te coderen. Dit moet zijn S256, maar de specificatie staat het gebruik toe plain van als de client om een of andere reden SHA256 niet kan ondersteunen.

Als u de code_challenge_method uitsluit, maar de code_challenge wel opneemt, dan wordt ervan uitgegaan dat het code_challenge tekst zonder opmaak is. Microsoft Identity Platform ondersteunt zowel plain als S256. Zie de PKCE RFC voor meer informatie. Dit is vereist voor apps met één pagina met behulp van de autorisatiecodestroom.
inlog-hint Nee. Kan worden gebruikt om het aanmeldingsnaamveld van de aanmeldingspagina vooraf in te vullen. Voor meer informatie, zie "De aanmeldingsnaam vooraf ingevuld" .
domein_hint Nee. Biedt een hint voor Azure AD B2C over de id-provider voor sociale netwerken die moet worden gebruikt voor aanmelding. Als er een geldige waarde is opgenomen, gaat de gebruiker rechtstreeks naar de aanmeldingspagina van de id-provider. Zie Aanmelding omleiden naar een sociale providervoor meer informatie.
Aangepaste parameters Nee. Aangepaste parameters die kunnen worden gebruikt met aangepaste beleidsregels . Bijvoorbeeld dynamische URI voor aangepaste pagina-inhoudof sleutel-waarde claims-verwerkers.

Op dit moment wordt de gebruiker gevraagd de werkstroom te voltooien. Dit kan betrekking hebben op de gebruiker die zijn gebruikersnaam en wachtwoord invoert, zich aanmeldt met een sociale identiteit, zich registreert voor de directory of een ander aantal stappen. Gebruikersacties zijn afhankelijk van de wijze waarop de gebruikersstroom wordt gedefinieerd.

Nadat de gebruiker de gebruikersstroom heeft voltooid, retourneert Microsoft Entra ID een antwoord naar uw app op de door u gebruikte waarde.redirect_uri Hierbij wordt de methode gebruikt die is opgegeven in de response_mode parameter. Het antwoord is precies hetzelfde voor elk van de scenario's voor gebruikersacties, onafhankelijk van de gebruikersstroom die is uitgevoerd.

Een geslaagd antwoord dat response_mode=query gebruikt, ziet er als volgt uit:

GET urn:ietf:wg:oauth:2.0:oob?
code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...        // the authorization_code, truncated
&state=arbitrary_data_you_can_receive_in_the_response                // the value provided in the request
Maatstaf Beschrijving
code De autorisatiecode die de app heeft aangevraagd. De app kan de autorisatiecode gebruiken om een toegangstoken voor een doelresource aan te vragen. Autorisatiecodes zijn kortlevend. Normaal gesproken verlopen ze na ongeveer 10 minuten.
staat Zie de volledige beschrijving in de tabel in de vorige sectie. Als een state-parameter is opgenomen in de aanvraag, zou dezelfde waarde moeten verschijnen in de reactie. De app moet controleren of de state waarden in de aanvraag en het antwoord identiek zijn.

Foutreacties kunnen ook worden verzonden naar de omleidings-URI, zodat de app ze op de juiste manier kan afhandelen:

GET urn:ietf:wg:oauth:2.0:oob?
error=access_denied
&error_description=The+user+has+cancelled+entering+self-asserted+information
&state=arbitrary_data_you_can_receive_in_the_response
Maatstaf Beschrijving
fout Een foutcodetekenreeks die u kunt gebruiken om de typen fouten te classificeren die optreden. U kunt de tekenreeks ook gebruiken om te reageren op fouten.
foutbeschrijving Een specifiek foutbericht waarmee u de hoofdoorzaak van een verificatiefout kunt identificeren.
staat Zie de volledige beschrijving in de voorgaande tabel. Als een state-parameter is opgenomen in de aanvraag, zou dezelfde waarde moeten verschijnen in de reactie. De app moet controleren of de state waarden in de aanvraag en het antwoord identiek zijn.

2. Een toegangstoken ophalen

Nu u een autorisatiecode hebt verkregen, kunt u het code voor een token inwisselen voor de beoogde resource door een POST-aanvraag naar het /token eindpunt te verzenden. In Azure AD B2C kunt u toegangstokens aanvragen voor andere API's zoals gebruikelijk door hun bereik(en) in de aanvraag op te geven.

U kunt ook een toegangstoken aanvragen voor de eigen back-endweb-API van uw app volgens de conventie van het gebruik van de client-id van de app als het aangevraagde bereik (wat resulteert in een toegangstoken met die client-id als de doelgroep):

POST https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/token HTTP/1.1

Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code
&client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope=00001111-aaaa-2222-bbbb-3333cccc4444 offline_access
&code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...
&redirect_uri=urn:ietf:wg:oauth:2.0:oob
&code_verifier=ThisIsntRandomButItNeedsToBe43CharactersLong 
Maatstaf Vereist? Beschrijving
{huurder} Verplicht Naam van uw Azure AD B2C-tenant
Beleid Verplicht De gebruikersstroom die is gebruikt om de autorisatiecode te verkrijgen. U kunt in deze aanvraag geen andere gebruikersstroom gebruiken.
client-id Verplicht De toepassings-id die is toegewezen aan uw app in Azure Portal.
cliëntgeheim Ja, in Web Apps Het applicatiegeheim dat is gegenereerd in de Azure portal. Clientgeheimen worden gebruikt in deze stroom voor web-app-scenario's, waarbij de client veilig een clientgeheim kan opslaan. Voor systeemeigen app-scenario's (openbare client) kunnen clientgeheimen niet veilig worden opgeslagen en worden daarom niet gebruikt in deze aanroep. Als u een clientgeheim gebruikt, wijzigt u het periodiek.
toekennings_type Verplicht Het type subsidie. Voor de autorisatiecodestroom moet het toekenningstype zijn authorization_code.
omvang Aanbevolen Een door spaties gescheiden lijst van scopes. Een enkele bereikwaarde geeft aan dat azure AD B2C beide machtigingen heeft die worden aangevraagd. Het gebruik van de client-id als toepassingsgebied geeft aan dat uw app een toegangstoken nodig heeft dat kan worden toegepast op uw eigen service of web-API, die wordt vertegenwoordigd door dezelfde client-id. Het offline_access bereik geeft aan dat uw app een vernieuwings-token nodig heeft voor langdurige toegang tot bronnen. U kunt ook het openid bereik gebruiken om een id-token aan te vragen vanuit Azure AD B2C.
code Verplicht De autorisatiecode die u hebt verkregen van het /authorize eindpunt.
omleidings_uri Verplicht De omleidings-URI van de toepassing waar u de autorisatiecode hebt ontvangen.
code_verifier aanbevolen Dezelfde code_verifier die wordt gebruikt om de autorisatiecode te verkrijgen. Vereist als PKCE is gebruikt in de toekenningsaanvraag van de autorisatiecode. Zie de PKCE RFC voor meer informatie.

Als u deze POST HTTP-aanvraag test, kunt u elke HTTP-client zoals Microsoft PowerShell gebruiken.

Een geslaagd tokenantwoord ziet er als volgt uit:

{
    "not_before": "1442340812",
    "token_type": "Bearer",
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "scope": "00001111-aaaa-2222-bbbb-3333cccc4444 offline_access",
    "expires_in": "3600",
    "refresh_token": "AAQfQmvuDy8WtUv-sd0TBwWVQs1rC-Lfxa_NDkLqpg50Cxp5Dxj0VPF1mx2Z...",
}
Maatstaf Beschrijving
niet_vóór Het tijdstip waarop het token als geldig wordt beschouwd, in epoche-tijd.
token-type De waarde van het tokentype. Het enige type dat door Microsoft Entra ID wordt ondersteund, is Bearer.
toegangstoken Het ondertekende JSON Web Token (JWT) dat u hebt aangevraagd.
omvang De toepassingen waarvoor het token geldig is. U kunt ook scopes gebruiken om tokens te cachen voor later gebruik.
verloopt_in De tijdsduur waarop het token geldig is (in seconden).
vernieuw_token Een OAuth 2.0-vernieuwingstoken. De app kan dit token gebruiken om extra tokens te verkrijgen nadat het huidige token is verlopen. Refresh tokens, oftewel vernieuwingstokens, hebben een lange levensduur. U kunt ze gebruiken om de toegang tot resources gedurende langere tijd te behouden. Zie de naslaginformatie voor Azure AD B2C-token voor meer informatie.

Foutberichten zien er als volgt uit:

{
    "error": "access_denied",
    "error_description": "The user revoked access to the app.",
}
Maatstaf Beschrijving
fout Een foutcodetekenreeks die u kunt gebruiken om de typen fouten te classificeren die optreden. U kunt de tekenreeks ook gebruiken om te reageren op fouten.
foutbeschrijving Een specifiek foutbericht waarmee u de hoofdoorzaak van een verificatiefout kunt identificeren.

3. Het token gebruiken

Nu u een toegangstoken hebt verkregen, kunt u het token gebruiken in aanvragen voor uw back-endweb-API's door het op te slaan in de Authorization header:

GET /tasks
Host: mytaskwebapi.com
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...

4. Vernieuw het token

Toegangstokens en id-tokens zijn kortlevend. Nadat ze zijn verlopen, moet u ze vernieuwen om toegang te blijven krijgen tot resources. Wanneer u het toegangstoken vernieuwt, retourneert Azure AD B2C een nieuw token. Het vernieuwde toegangstoken heeft nbf bijgewerkt (niet eerder), iat (uitgegeven op) en exp claimwaarden (vervaldatum). Alle andere claimwaarden zijn hetzelfde als het oorspronkelijk uitgegeven toegangstoken.

Als u het token wilt vernieuwen, dient u een andere POST-aanvraag in bij het /token eindpunt. Geef deze keer het refresh_token op in plaats van het code.

POST https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/oauth2/v2.0/token HTTP/1.1

Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token
&client_id=00001111-aaaa-2222-bbbb-3333cccc4444
&scope=00001111-aaaa-2222-bbbb-3333cccc4444 offline_access
&refresh_token=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMPGYuNHSUYBrq...
&redirect_uri=urn:ietf:wg:oauth:2.0:oob
Maatstaf Vereist? Beschrijving
{huurder} Verplicht Naam van uw Azure AD B2C-tenant
Beleid Verplicht De gebruikersstroom die is gebruikt om het oorspronkelijke refresh token te verkrijgen. U kunt in deze aanvraag geen andere gebruikersstroom gebruiken.
client-id Verplicht De toepassings-id die is toegewezen aan uw app in Azure Portal.
cliëntgeheim Ja, in Web Apps Het applicatiegeheim dat is gegenereerd in de Azure portal. Clientgeheimen worden gebruikt in deze stroom voor web-app-scenario's, waarbij de client veilig een clientgeheim kan opslaan. Voor systeemeigen app-scenario's (openbare client) kunnen clientgeheimen niet veilig worden opgeslagen en worden daarom niet gebruikt in deze aanroep. Als u een clientsecret gebruikt, dient u dit periodiek te wijzigen.
toekennings_type Verplicht Het type subsidie. Voor dit deel van de autorisatiecodestroom moet het toekenningstype zijn refresh_token.
omvang Aanbevolen Een door spaties gescheiden lijst van scopes. Een enkele bereikwaarde geeft aan Microsoft Entra ID de beide aangevraagde machtigingen aan. Het gebruik van de client-id als toepassingsgebied geeft aan dat uw app een toegangstoken nodig heeft dat kan worden toegepast op uw eigen service of web-API, die wordt vertegenwoordigd door dezelfde client-id. Het offline_access bereik geeft aan dat uw app een vernieuwings-token nodig heeft voor langdurige toegang tot bronnen. U kunt ook het openid bereik gebruiken om een id-token aan te vragen vanuit Azure AD B2C.
omleidings_uri Optioneel De omleidings-URI van de toepassing waar u de autorisatiecode hebt ontvangen.
vernieuw_token Verplicht Het oorspronkelijke ‘refresh token’ dat u in het tweede deel van de workflow hebt verkregen.

Een geslaagd tokenantwoord ziet er als volgt uit:

{
    "not_before": "1442340812",
    "token_type": "Bearer",
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1Q...",
    "scope": "00001111-aaaa-2222-bbbb-3333cccc4444 offline_access",
    "expires_in": "3600",
    "refresh_token": "AAQfQmvuDy8WtUv-sd0TBwWVQs1rC-Lfxa_NDkLqpg50Cxp5Dxj0VPF1mx2Z...",
}
Maatstaf Beschrijving
niet_vóór Het tijdstip waarop het token als geldig wordt beschouwd, in epoche-tijd.
token-type De waarde van het tokentype. Het enige type dat door Microsoft Entra ID wordt ondersteund, is Bearer.
toegangstoken De ondertekende JWT die u hebt aangevraagd.
omvang De toepassingen waarvoor het token geldig is. U kunt ook de scopes gebruiken om tokens te cachen voor later gebruik.
verloopt_in De tijdsduur waarop het token geldig is (in seconden).
vernieuw_token Een OAuth 2.0-vernieuwingstoken. De app kan dit token gebruiken om extra tokens te verkrijgen nadat het huidige token is verlopen. Verversingstokens hebben een lange levensduur en kunnen worden gebruikt om toegang tot bronnen voor langere perioden te behouden. Zie de naslaginformatie voor Azure AD B2C-token voor meer informatie.

Foutberichten zien er als volgt uit:

{
    "error": "access_denied",
    "error_description": "The user revoked access to the app.",
}
Maatstaf Beschrijving
fout Een tekenreeks met foutcodes die u kunt gebruiken om typen fouten te classificeren die optreden. U kunt de tekenreeks ook gebruiken om te reageren op fouten.
foutbeschrijving Een specifiek foutbericht waarmee u de hoofdoorzaak van een verificatiefout kunt identificeren.

Uw eigen Azure AD B2C-directory gebruiken

Voer de volgende stappen uit om deze aanvragen zelf uit te voeren. Vervang de voorbeeldwaarden die we in dit artikel hebben gebruikt door uw eigen waarden.

  1. Maak een Azure AD B2C-directory. Gebruik de naam van uw map in de aanvragen.
  2. Maak een toepassing om een toepassings-id en een omleidings-URI te verkrijgen. Neem een systeemeigen client op in uw app.
  3. Maak uw gebruikersstromen om uw gebruikersstroomnamen op te halen.