Delen via


De stroom voor het instellen van de OAuth 2.0-clientreferentiestroom in Azure Active Directory B2C

Voordat u begint, gebruikt u de selector Een beleidstype kiezen om het type beleid te kiezen dat u instelt. U kunt in Azure Active Directory B2C op twee manieren definiëren hoe gebruikers met uw toepassingen communiceren: via vooraf gedefinieerde gebruikersstromen of via volledig configureerbaar aangepast beleid. De stappen die in dit artikel zijn vereist, verschillen voor elke methode.

Met de stroom voor het verlenen van OAuth 2.0-clientreferenties kan een app (vertrouwelijke client) de eigen referenties gebruiken in plaats van een gebruiker te imiteren, om te verifiëren bij het aanroepen van een webresource, zoals REST API. Dit type toekenning wordt meestal gebruikt voor server-naar-server-interacties die op de achtergrond moeten worden uitgevoerd, zonder directe interactie met een gebruiker. Deze typen toepassingen worden vaak daemons of serviceaccounts genoemd.

In de clientreferentiestroom worden machtigingen rechtstreeks aan de toepassing zelf verleend door een beheerder. Wanneer de app een token aan een resource presenteert, dwingt de resource af dat de app zelf autorisatie heeft om een actie uit te voeren, omdat er geen gebruiker betrokken is bij de verificatie. In dit artikel worden de stappen beschreven die nodig zijn om een toepassing te autoriseren om een API aan te roepen en leest u hoe u de tokens kunt ophalen die nodig zijn om die API aan te roepen.

Deze functie is beschikbaar als openbare preview.

Overzicht van app-registratie

Als u wilt dat uw app zich aanmeldt met clientreferenties en vervolgens een web-API aanroept, registreert u twee toepassingen in de Azure AD B2C-directory.

  • Met de registratie van de toepassing kan uw app zich aanmelden met Azure AD B2C. Het app-registratieproces genereert een toepassings-id, ook wel client-id genoemd, waarmee uw toepassing op unieke wijze wordt aangeduid. U maakt ook een clientgeheim dat door uw app wordt gebruikt om de tokens veilig te verkrijgen.

  • Met de registratie van een web-API kan de app een beveiligde web-API aanroepen. De registratie omvat de web-API-bereiken. De bereiken bieden een manier om machtigingen tot beveiligde resources te beheren, zoals uw web-API. U verleent de webtoepassing vervolgens machtigingen voor de web-API-bereiken. Wanneer een toegangstoken wordt aangevraagd, geeft uw app de bereikparameter .default van de aanvraag. Azure AD B2C retourneert de web-API-bereiken die zijn verleend aan uw app.

De app-architectuur en -registraties worden geïllustreerd in het volgende diagram:

Diagram of a web app with web A P I call registrations and tokens.

Stap 1: De web-API-app registreren

In deze stap registreert u de web-API (App 2) met de bijbehorende bereiken. Later verleent u uw toepassing (App 1) toestemming voor deze bereiken. Als u al een dergelijke app-registratie hebt, slaat u deze stap over en gaat u naar de volgende stap, stap 1.1 Web-API-rollen (bereiken) definiëren.

Voer de volgende stappen uit om de web-API-app (app-id: 2) te registreren:

  1. Meld u aan bij de Azure-portal.

  2. Zorg ervoor dat u de map gebruikt die uw Azure AD B2C-tenant bevat. Selecteer op de portalwerkbalk het pictogram Mappen + abonnementen.

  3. Ga op de pagina Portalinstellingen | Directory's en abonnementen naar uw Azure AD B2C-directory in de lijst Mapnaam en selecteer vervolgens Omzetten.

  4. Zoek en selecteer Azure AD B2C in de Azure-portal.

  5. Selecteer App-registraties en selecteer vervolgens Nieuwe registratie.

  6. Voer bij Naam een naam in voor de toepassing (bijvoorbeeld my-api1). Laat de standaardwaarden voor omleidings-URI en ondersteunde accounttypen staan.

  7. Selecteer Registreren.

  8. Nadat de app-registratie is voltooid, selecteert u Overzicht.

  9. Noteer voor later gebruik de waarde van de toepassings-id (client) wanneer u de webtoepassing configureert.

    Screenshot that demonstrates how to get a web A P I application I D.

Stap 1.1: web-API-rollen (bereiken) definiëren

In deze stap configureert u de URI voor de web-API-toepassings-id en definieert u vervolgens app-rollen. De app-rollen die worden gebruikt door de OAuth 2.0-bereiken en die zijn gedefinieerd voor een toepassingsregistratie die uw API vertegenwoordigt. Uw toepassing gebruikt de toepassings-id-URI met het .default-bereik. Volg deze stappen om app-rollen te definiëren:

  1. Selecteer de web-API die u hebt gemaakt, bijvoorbeeld my-api1.

  2. Selecteer onder BeherenEen API beschikbaar maken.

  3. Selecteer naast URI voor de toepassings-id de link Instellen. Vervang de standaardwaarde (GUID) door een unieke naam (bijvoorbeeld api) en selecteer Opslaan.

  4. Kopieer de toepassings-id-URI. In de volgende schermopname ziet u hoe u de toepassings-id-URI kopieert.

    Screenshot shows how to copy the application I D.

  5. Selecteer onder Beheren de optie Manifest om de editor voor het toepassingsmanifest te openen. Zoek in de editor de instelling appRoles en definieer app-rollen die op applications zijn gericht. Elke app-roldefinitie moet een globale unieke id (GUID) hebben voor de waarde id. Genereer een nieuwe GUID door de opdracht new-guid uit te voeren in Microsoft PowerShell of een online GUID-generator. De value eigenschap van elke app-roldefinitie wordt weergegeven in het bereik, de scp claim. De eigenschap value mag geen spaties bevatten. In het volgende voorbeeld ziet u twee app-rollen, lezen en schrijven:

    "appRoles": [
    {
      "allowedMemberTypes": ["Application"],
      "displayName": "Read",
      "id": "d6a15e20-f83c-4264-8e61-5082688e14c8",
      "isEnabled": true,
      "description": "Readers have the ability to read tasks.",
      "value": "app.read"
    },
    {
      "allowedMemberTypes": ["Application"],
      "displayName": "Write",
      "id": "204dc4ab-51e1-439f-8c7f-31a1ebf3c7b9",
      "isEnabled": true,
      "description": "Writers have the ability to create tasks.",
      "value": "app.write"
    }],
    
  6. Selecteer bovenaan de pagina de optie Opslaan om de manifestwijzigingen op te slaan.

Stap 2: Een toepassing registreren

Als u wilt dat uw app zich kan aanmelden met Azure AD B2C met behulp van een clientreferentiestroom, kunt u een bestaande toepassing gebruiken of een nieuwe toepassing registreren (App 1).

Als u een bestaande app gebruikt, controleert u of de accessTokenAcceptedVersion van de app is ingesteld op 2:

  1. Zoek en selecteer Azure AD B2C in de Azure-portal.
  2. Selecteer App-registraties en selecteer vervolgens uw bestaande app in de lijst.
  3. Selecteer in het linkermenu onder Beheren de optie Manifest om de manifesteditor te openen.
  4. Zoek het element accessTokenAcceptedVersion en stel de waarde in op 2.
  5. Selecteer bovenaan de pagina de optie Opslaan om de wijzigingen op te slaan.

Volg deze stappen om een nieuwe web-app-registratie te maken:

  1. Zoek en selecteer Azure AD B2C in Azure Portal

  2. Selecteer App-registraties en selecteer vervolgens Nieuwe registratie.

  3. Voer een naam in voor de toepassing. Bijvoorbeeld ClientCredentials_app.

  4. Laat de andere waarden ongewijzigd en selecteer Registreren.

  5. Noteer de Toepassings-id (client) voor gebruik in een latere stap.

    Screenshot shows how to get the application I D.

Stap 2.1: een clientgeheim maken

Maak vervolgens een clientgeheim voor de geregistreerde toepassing. Uw app gebruikt het clientgeheim om de identiteit te bewijzen wanneer er tokens worden aangevraagd.

  1. Selecteer onder Beheren de optie Certificaten & Geheimen.

  2. Selecteer Nieuw clientgeheim.

  3. Voer in het vak Beschrijving een beschrijving in voor het clientgeheim (bijvoorbeeld clientsecret1).

  4. Selecteer onder Verloopt een duur waarvoor het geheim geldig is en selecteer vervolgens Toevoegen.

  5. Noteer de Waarde van het geheim. U gebruikt deze waarde voor configuratie in een latere stap.

    Screenshot shows how to copy the application secret.

Stap 2.2: de machtigingen voor de app verlenen voor de web-API

Voer de volgende stappen uit om uw app (App 1) machtigingen te verlenen:

  1. Selecteer App-registraties en selecteer vervolgens de app die u hebt gemaakt (App 1).

  2. Selecteer onder Beheren de optie API-machtigingen.

  3. Selecteer onder Geconfigureerde machtigingen de optie Een machtiging toevoegen.

  4. Selecteer het tabblad Mijn API's.

  5. Selecteer de API (App 2) waarvoor aan de webtoepassing toegang moet worden verleend. Voer bijvoorbeeld my-api1 in.

  6. Selecteer Toepassingsmachtiging.

  7. Vouw onder Machtiging de optie app uit en selecteer vervolgens de bereiken die u eerder hebt gedefinieerd (bijvoorbeeld app.read en app.write).

    Screenshot shows how to grant the application A P I permissions.

  8. Selecteer Machtigingen toevoegen.

  9. Selecteer Beheerderstoestemming verlenen voor <uw tenantnaam>.

  10. Selecteer Ja.

  11. Selecteer Vernieuwen en controleer vervolgens of voor beide bereiken Verleend voor... wordt weergegeven onder Status.

Stap 3: Een toegangstoken verkrijgen

Er zijn geen specifieke acties om de clientreferenties in te schakelen voor gebruikersstromen of aangepaste beleidsregels. Zowel Azure AD B2C-gebruikersstromen als aangepaste beleidsregels ondersteunen de clientreferentiestroom. Maak een gebruikersstroom of een aangepast beleid als u dit nog niet hebt gedaan. Gebruik vervolgens uw favoriete API-ontwikkeltoepassing om een autorisatieaanvraag te genereren. Maak een aanroep zoals in dit voorbeeld met de volgende informatie als de hoofdtekst van de POST-aanvraag:

https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy>/oauth2/v2.0/token

  • Vervang <tenant-name> door de naam van uw Azure AD B2C-tenant. Bijvoorbeeld contoso.b2clogin.com.
  • Vervang <policy> door de volledige naam van uw gebruikersstroom of aangepaste beleid. Opmerking: alle typen gebruikersstromen en aangepaste beleidsregels ondersteunen de clientreferentiestroom. U kunt elke gebruikersstroom of aangepaste beleidsregel gebruiken die u hebt, of een nieuw beleid maken, zoals registreren of aanmelden.
Sleutel Weergegeven als
grant_type client_credentials
client_id De client-id uit stap 2: een toepassing registreren.
client_secret De waarde Clientgeheim uit stap 2.1: een clientgeheim maken.
bereik De toepassings-id-URI uit stap 1.1: web-API-rollen (bereiken) definiëren en .default. Bijvoorbeeld https://contoso.onmicrosoft.com/api/.default of https://contoso.onmicrosoft.com/12345678-0000-0000-0000-000000000000/.default.

De werkelijke POST-aanvraag ziet eruit als in het volgende voorbeeld:

Aanvraag:

POST /<tenant-name>.onmicrosoft.com/B2C_1A_SUSI/oauth2/v2.0/token HTTP/1.1
Host: <tenant-name>.b2clogin.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials
&client_id=33333333-0000-0000-0000-000000000000
&client_secret=FyX7Q~DuPJ...
&scope=https%3A%2F%2Fcontoso.onmicrosoft.com%2Fapi%2F.default

Antwoord:

{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IlBFcG5OZDlnUkNWWUc2dUs...",
    "token_type": "Bearer",
    "not_before": 1645172292,
    "expires_in": 3600,
    "expires_on": 1645175892,
    "resource": "33333333-0000-0000-0000-000000000000"
}

Krijg meer informatie over de geretourneerde toegangstoken-claims. De volgende tabel bevat de claims die betrekking hebben op de clientreferentiestroom.

Claimen Beschrijving Weergegeven als
aud Identificeert de beoogde ontvanger van het token. De client-id van de API.
sub De service-principal die is gekoppeld aan de toepassing die de aanvraag heeft gestart. Dit is de service-principal van de client_id van de autorisatieaanvraag.
azp Geautoriseerde partij: de partij waaraan het toegangstoken is uitgegeven. De client-id van de toepassing die de aanvraag heeft gestart. Dit is dezelfde waarde die u hebt opgegeven in de client_id van de autorisatieaanvraag.
scp De set bereiken die worden weergegeven door uw toepassings-API (spatie als scheidingsteken). In de clientreferentiestroom vraagt de autorisatieaanvraag om het .default-bereik, terwijl het token de lijst met bereiken bevat die door de API worden weergegeven (en waarvoor de beheerder toestemming heeft gegeven). Bijvoorbeeld app.read app.write.

Stap 3.1: een toegangstoken verkrijgen met script

Gebruik het volgende PowerShell-script om uw configuratie te testen:

$appId = "<client ID>"
$secret = "<client secret>"
$endpoint = "https://<tenant-name>.b2clogin.com/<tenant-name>.onmicrosoft.com/<policy>/oauth2/v2.0/token"
$scope = "<Your API id uri>/.default"
$body = "grant_type=client_credentials&scope=" + $scope + "&client_id=" + $appId + "&client_secret=" + $secret

$token = Invoke-RestMethod -Method Post -Uri $endpoint -Body $body

Gebruik het volgende cURL-script om uw configuratie te testen:

curl --location --request POST 'https://<your-tenant>.b2clogin.com/<your-tenant>.onmicrosoft.com/<policy>/oauth2/v2.0/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--form 'grant_type="client_credentials"' \
--form 'client_id="<client ID>"' \
--form 'client_secret="<client secret>"' \
--form 'scope="<Your API id uri>/.default"'

Stap 4: het token aanpassen

Deze functie is alleen beschikbaar voor aangepast beleid. Voor configuratiestappen selecteert u Aangepast beleid in de voorgaande selector.

Aangepaste beleidsregels bieden een manier om het tokenuitgifteproces uit te breiden. Als u het gebruikerstraject van de OAuth 2.0-clientreferenties wilt aanpassen, volgt u de richtlijnen voor het configureren van een gebruikerstraject voor clientreferenties. Voeg vervolgens in het technische profiel JwtIssuer de metagegevens van ClientCredentialsUserJourneyId toe met een verwijzing naar het gebruikerstraject dat u hebt gemaakt.

In het volgende voorbeeld ziet u hoe u de ClientCredentialsUserJourneyId toevoegt aan het technische profiel van de tokenverlener.

<TechnicalProfile Id="JwtIssuer">
  <Metadata>
    <Item Key="ClientCredentialsUserJourneyId">ClientCredentialsJourney</Item>
  </Metadata>
</TechnicalProfile>

In het volgende voorbeeld ziet u een gebruikerstraject met clientreferenties. De eerste en de laatste indelingsstappen zijn vereist.

<UserJourneys>
  <UserJourney Id="ClientCredentialsJourney">
    <OrchestrationSteps>
      <!-- [Required] Do the client credentials -->
      <OrchestrationStep Order="1" Type="ClaimsExchange">
        <ClaimsExchanges>
          <ClaimsExchange Id="ClientCredSetupExchange" TechnicalProfileReferenceId="ClientCredentials_Setup" />
        </ClaimsExchanges>
      </OrchestrationStep>

      <!-- [Optional] Call a REST API or claims transformation -->
      <OrchestrationStep Order="2" Type="ClaimsExchange">
        <ClaimsExchanges>
          <ClaimsExchange Id="TokenAugmentation" TechnicalProfileReferenceId="TokenAugmentation" />
        </ClaimsExchanges>
      </OrchestrationStep>

      <!-- [Required] Issue the access token -->
      <OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
    </OrchestrationSteps>
  </UserJourney>
</UserJourneys>

Volgende stappen

Krijg meer informatie over het instellen van een wachtwoordreferentiestroom voor resource-eigenaars in Azure AD B2C