Einrichten des OAuth 2.0-Clientanmeldeinformationenflows in Azure Active Directory B2C

Vorbereitung: Wählen Sie mithilfe des Selektors Richtlinientyp auswählen den Typ der einzurichtenden Richtlinie aus. Azure Active Directory B2C bietet zwei Methoden zum Definieren der Benutzerinteraktion mit Ihren Anwendungen: vordefinierte Benutzerflows oder vollständig konfigurierbare benutzerdefinierte Richtlinien. Die Schritte, die in diesem Artikel erforderlich sind, unterscheiden sich für jede Methode.

Der Flow zur Gewährung von OAuth 2.0-Clientanmeldeinformationen ermöglicht es einer Anwendung (vertraulicher Client), sich beim Aufruf von Webressourcen (z. B. einer REST-API) mit ihren eigenen Anmeldeinformationen zu authentifizieren, anstatt die Identität eines Benutzers anzunehmen. Diese Art der Gewährung wird häufig für Interaktionen zwischen Servern verwendet, die ohne Benutzereingriff im Hintergrund ausgeführt werden müssen. Diese Anwendungstypen werden oft als Daemons oder Dienstkonten bezeichnet.

Im Flow zum Gewähren von Clientanmeldeinformationen werden Berechtigungen von einem Administrator direkt an die eigentliche Anwendung erteilt. Wenn die App einer Ressource ein Token präsentiert, macht die Ressource geltend, dass die App selbst für die Durchführung einer Aktion autorisiert ist, da an der Authentifizierung kein Benutzer beteiligt ist. In diesem Artikel werden die Schritte beschrieben, die erforderlich sind, um eine Anwendung für den Aufruf einer API zu autorisieren und die für den Aufruf dieser API erforderlichen Token abzurufen.

Diese Funktion befindet sich in einem öffentlichen Vorschauzustand.

Übersicht über die App-Registrierung

Damit sich Ihre App mit Clientanmeldeinformationen anmelden und dann eine Web-API aufrufen kann, registrieren Sie im Azure AD B2C-Verzeichnis zwei Anwendungen.

  • Durch die Anwendungsregistrierung kann sich Ihre App bei Azure AD B2C anmelden. Beim App-Registrierungsprozess wird eine Anwendungs-ID generiert, die auch als Client-ID bezeichnet wird und Ihre App eindeutig identifiziert. Außerdem erstellen Sie einen geheimen Clientschlüssel, der von Ihrer App zum sicheren Abrufen der Token verwendet wird.

  • Durch die Web-API-Registrierung kann Ihre App eine sichere Web-API aufrufen. Die Registrierung umfasst die Web-API-Bereiche. Die Bereiche bieten eine Möglichkeit, Berechtigungen für geschützte Ressourcen wie Ihre Web-API zu verwalten. Dann erteilen Sie der Anwendung Berechtigungen für die Bereiche der Web-API. Wenn ein Zugriffstoken angefordert wird, gibt Ihre App im den .default-Bereichsparameter der Anforderung an. Azure AD B2C gibt die Web-API-Bereiche zurück, die Ihrer App gewährt werden.

App-Architektur und -Registrierungen sind im folgenden Diagramm dargestellt:

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

Schritt 1: Registrieren der Web-API-App

In diesem Schritt registrieren Sie die Web-API (App 2) mit ihren Bereichen. Später erteilen Sie Ihrer Anwendung (App 1) Berechtigungen für diese Bereiche. Wenn Sie bereits über eine solche App-Registrierung verfügen, überspringen Sie diesen Schritt, und fahren Sie mit dem nächsten Schritt Schritt 1.1: Definieren von Web-API-Rollen (Bereichen) fort.

Führen Sie die folgenden Schritte aus, um die Web-API-App-Registrierung (App-ID: 2) zu erstellen:

  1. Melden Sie sich beim Azure-Portal an.

  2. Stellen Sie sicher, dass Sie das Verzeichnis verwenden, das Ihren Azure AD B2C-Mandanten enthält. Wählen Sie auf der Symbolleiste des Portals das Symbol Verzeichnisse und Abonnements aus.

  3. Suchen Sie auf der Seite Portaleinstellungen > Verzeichnisse und Abonnements das Azure AD B2C-Verzeichnis in der Liste Verzeichnisname, und klicken Sie dann auf Wechseln.

  4. Suchen Sie im Azure-Portal nach Azure AD B2C, und wählen Sie diese Option dann aus.

  5. Wählen Sie App-Registrierungen aus, und wählen Sie dann Registrierung einer neuen Anwendung aus.

  6. Geben Sie für Name einen Namen für die Anwendung ein, z. B. my-api1. Behalten Sie die Standardwerte für Umleitungs-URI und Unterstützte Kontotypen bei.

  7. Wählen Sie Registrieren.

  8. Wählen Sie nach Abschluss der App-Registrierung Übersichtaus.

  9. Notieren Sie sich die Anwendungs- bzw. Client-ID, die Sie später beim Konfigurieren der Webanwendung verwenden.

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

Schritt 1.1: Definieren von Web-API-Rollen (Bereichen)

In diesem Schritt konfigurieren Sie den Anwendungs-ID-URI der Web-API und definieren dann App-Rollen. Die App-Rollen, die von den OAuth 2.0-Bereichen verwendet und für eine Anwendungsregistrierung definiert sind, die Ihre API darstellt. Ihre Anwendung verwendet den Anwendungs-ID-URI mit dem .default-Bereich. Gehen Sie folgendermaßen vor, um App-Rollen zu definieren:

  1. Wählen Sie die von Ihnen erstellte Web-API aus, z. B. my-api1.

  2. Wählen Sie unter Verwalten die Option Eine API verfügbar machen aus.

  3. Wählen Sie neben Anwendungs-ID-URI den Link Festlegen aus. Ersetzen Sie den Standardwert (GUID) durch einen eindeutigen Namen, z. B. api, und wählen Sie dann Speichern aus.

  4. Kopieren Sie den Anwendungs-ID-URI. Der folgende Screenshot zeigt, wie der Anwendungs-ID-URI kopiert wird.

    Screenshot shows how to copy the application I D.

  5. Wählen Sie unter Verwalten die Option Manifest aus, um den Anwendungsmanifest-Editor zu öffnen. Suchen Sie im Editor nach der Einstellung appRoles, und definieren Sie App-Rollen mit dem Ziel applications. Jede App-Rollendefinition im Manifest muss über einen global eindeutigen Bezeichner (GUID) für ihren id-Wert verfügen. Generieren Sie eine neue GUID, indem Sie den Befehl new-guid in Microsoft PowerShell ausführen oder einen Online-GUID-Generator verwenden. Die value-Eigenschaft jeder App-Rollendefinition wird im Bereich (scp-Anspruch) angezeigt. Die value-Eigenschaft darf keine Leerzeichen enthalten. Das folgende Beispiel zeigt zwei App-Rollen, Lese- und Schreibzugriff:

    "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. Wählen Sie oben auf der Seite Speichern aus, um die Manifeständerungen zu speichern.

Schritt 2: Registrieren einer Anwendung

Damit Ihre App sich bei Azure AD B2C mit dem Clientanmeldeinformationsflow anmelden kann, können Sie eine vorhandene Anwendung verwenden oder eine neue Anwendung registrieren (App 1).

Wenn Sie eine vorhandene App verwenden, stellen Sie sicher, dass bei der App accessTokenAcceptedVersion auf 2 festgelegt ist:

  1. Suchen Sie im Azure-Portal nach Azure AD B2C, und wählen Sie diese Option dann aus.
  2. Wählen Sie zunächst App-Registrierungen und dann die vorhandene App aus der Liste aus.
  3. Wählen Sie im Menü auf der linken Seite unter Verwalten die Option Manifest aus, um dem Manifest-Editor zu öffnen.
  4. Suchen Sie das Element accessTokenAcceptedVersion, und legen Sie dessen Wert auf 2 fest.
  5. Wählen Sie oben auf der Seite Speichern aus, um die Änderungen zu speichern.

Führen Sie die folgenden Schritte aus, um eine neue Web-App-Registrierung zu erstellen:

  1. Suchen Sie im Azure-Portal nach Azure AD B2C, und klicken Sie darauf.

  2. Wählen Sie App-Registrierungen aus, und wählen Sie dann Registrierung einer neuen Anwendung aus.

  3. Geben Sie unter Name einen Namen für die Anwendung ein. Beispiel: ClientCredentials_app.

  4. Übernehmen Sie die anderen Werte unverändert, und wählen Sie dann Registrieren aus.

  5. Notieren Sie sich die Anwendungs-ID (Client) zur Verwendung in einem späteren Schritt.

    Screenshot shows how to get the application I D.

Schritt 2.1: Erstellen eines geheimen Clientschlüssels

Erstellen Sie einen geheimen Clientschlüssel für die registrierte Anwendung. Ihre App verwendet den geheimen Clientschlüssel beim Anfordern von Token als Identitätsnachweis.

  1. Wählen Sie unter Verwalten die Option Zertifikate und Geheimnisse aus.

  2. Wählen Sie Neuer geheimer Clientschlüssel.

  3. Geben Sie im Feld Beschreibung eine Beschreibung für das Clientgeheimnis ein (z. B. clientsecret1).

  4. Wählen Sie unter Läuft ab einen Zeitraum aus, für den das Geheimnis gültig ist, und wählen Sie dann Hinzufügen aus.

  5. Notieren Sie den Wert des Geheimnisses. Dieser Wert wird in einem späteren Schritt für die Konfiguration verwendet.

    Screenshot shows how to copy the application secret.

Schritt 2.2: Erteilen von Berechtigungen für die App zur Verwendung der Web-API

Führen Sie die folgenden Schritte aus, um Ihrer App (App 1) Berechtigungen zu erteilen:

  1. Wählen Sie App-Registrierungen und dann die von Ihnen erstellte App (App 1) aus.

  2. Wählen Sie unter Verwalten die Option API-Berechtigungen.

  3. Wählen Sie unter Konfigurierte Berechtigungen die Option Berechtigung hinzufügen aus.

  4. Wählen Sie die Registerkarte Meine APIs aus.

  5. Wählen Sie die API (App 2) aus, für die der Webanwendung Zugriff gewährt werden soll. Geben Sie z. B. my-api1 ein.

  6. Wählen Sie Anwendungsberechtigung aus.

  7. Erweitern Sie unter Berechtigung den Eintrag App, und wählen Sie die zuvor definierten Bereiche aus (Beispiel: app.read und app.write).

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

  8. Wählen Sie Berechtigungen hinzufügen aus.

  9. Wählen Sie Administratorzustimmung erteilen für<Name Ihres Mandanten> aus.

  10. Wählen Sie Ja.

  11. Wählen Sie Aktualisieren aus, und vergewissern Sie sich, dass für beide Bereiche unter Status der Status Gewährt für... angezeigt wird.

Schritt 3: Abrufen eines Zugriffstokens

Es gibt keine spezifischen Aktionen, um die Clientanmeldeinformationen für Benutzerflows oder benutzerdefinierte Richtlinien zu aktivieren. Sowohl Azure AD B2C-Benutzerflows als auch benutzerdefinierte Richtlinien unterstützen den Clientanmeldeinformationenflow. Falls noch nicht geschehen, erstellen Sie einen Benutzerflow oder eine benutzerdefinierte Richtlinie. Verwenden Sie dann Ihre bevorzugte API-Entwicklungsanwendung, um eine Autorisierungsanforderung zu generieren. Erstellen Sie einen Aufruf wie das folgende Beispiel, und verwenden Sie die folgenden Informationen als Hauptteil der POST-Anforderung:

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

  • Ersetzen Sie <tenant-name> durch den Namen des Azure AD B2C-Mandanten. Beispiel: contoso.b2clogin.com.
  • Ersetzen Sie <policy> durch den vollständigen Namen Ihres Benutzerflows oder der benutzerdefinierten Richtlinie. Beachten Sie, dass alle Arten von Benutzerflows und benutzerdefinierten Richtlinien den Clientanmeldeinformationenflow unterstützen. Sie können einen beliebigen Benutzerflow oder eine benutzerdefinierte Richtlinie verwenden oder eine neue Ressource erstellen, z. B. für Registrierung oder Anmeldung.
Schlüssel Wert
grant_type client_credentials
client_id Die Client-ID aus Schritt 2: Registrieren einer Anwendung.
client_secret Der Wert geheimer Clientschlüssel aus Schritt 2.1: Erstellen eines geheimen Clientschlüssels.
scope Der Anwendungs-ID-URI aus Schritt 1.1: Definieren von Web-API-Rollen (Bereichen) und .default. Beispiel: https://contoso.onmicrosoft.com/api/.default oder https://contoso.onmicrosoft.com/12345678-0000-0000-0000-000000000000/.default.

Die tatsächliche POST-Anforderung sieht wie im folgenden Beispiel aus:

Anforderung:

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

Antwort:

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

Erfahren Sie mehr über die Ansprüche des Rückgabezugriffstokens. In der folgenden Tabelle werden die Ansprüche aufgeführt, die im Zusammenhang mit dem Clientanmeldeinformationenflow stehen.

Anspruch BESCHREIBUNG Wert
aud Identifiziert den vorgesehenen Empfänger des Tokens. Die Client-ID der API.
sub Der mit der Anwendung verknüpfte Dienstprinzipal, die die Anforderung initiiert hat. Es handelt sich um den Dienstprinzipal der client_id der Autorisierungsanforderung.
azp Autorisierte Partei: die Partei, für die das Zugriffstoken ausgestellt wurde. Die Client-ID der Anwendung, die die Anforderung initiiert hat. Es ist der gleiche Wert, den Sie in der client_id der Autorisierungsanforderung angegeben haben.
scp Der Satz von Bereichen, die von Ihrer Anwendungs-API (Leerzeichentrennzeichen) verfügbar gemacht werden. Im Clientanmeldeinformationenflow fordert die Autorisierungsanforderung den .default-Bereich an, während das Token die Liste der Bereiche enthält, die von der API bereitgestellt (und vom App-Administrator genehmigt) werden. Beispiel: app.read app.write.

Schritt 3.1: Abrufen eines Zugriffstokens mit einem Skript

Verwenden Sie das folgende PowerShell-Skript, um Ihre Konfiguration zu 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

Verwenden Sie das folgende cURL-Skript, um Ihre Konfiguration zu 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"'

Schritt 4: Anpassen des Tokens

Dieses Feature ist nur für benutzerdefinierte Richtlinien verfügbar. Wählen Sie für die Einrichtungsschritte in der vorherigen Auswahl die Option Benutzerdefinierte Richtlinie aus.

Benutzerdefinierte Richtlinien bieten eine Möglichkeit zum Erweitern des Tokenausstellungsprozesses. Um die User Journey der OAuth 2.0-Clientanmeldeinformationen anzupassen, folgen Sie den Anweisungen zum Konfigurieren einer Clientanmeldeinformationen-User Journey. Fügen Sie dann im technischen JwtIssuer-Profil die ClientCredentialsUserJourneyId-Metadaten mit einem Verweis auf die von Ihnen erstellte User Journey hinzu.

Im folgenden Beispiel wird gezeigt, wie Sie dem technischen Profil des Tokenausstellers die ClientCredentialsUserJourneyId hinzufügen.

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

Das folgende Beispiel zeigt eine Clientanmeldeinformationen-User Journey. Der erste und der letzte Orchesterschritt ist erforderlich.

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

Nächste Schritte

Erfahren Sie, wie Sie einen Flow für Kennwortanmeldeinformationen von Ressourcenbesitzern in Azure AD B2C einrichten