Erstellen Ihrer ersten benutzerdefinierten Azure Active Directory B2C-Richtlinie – Hallo Welt!

In Ihrer Anwendung können Sie Benutzerflows verwenden, mit denen sich Benutzer*innen registrieren und anmelden oder ihr Profil verwalten können. Wenn die Benutzerflows nicht alle Ihre unternehmensspezifischen Anforderungen abdecken, können Sie benutzerdefinierte Richtlinien verwenden.

Sie können zwar ein vordefiniertes Starter Pack für benutzerdefinierte Richtlinien verwenden, aber wenn Sie eine benutzerdefinierte Richtlinie entwerfen möchten, ist es wichtig, dass Sie verstehen, wie eine solche Richtlinie erstellt wird. In diesem Artikel erfahren Sie, wie Sie Ihre erste benutzerdefinierte Richtlinie von Grund auf erstellen.

Voraussetzungen

Hinweis

Dieser Artikel ist Teil der Schrittanleitungsreihe „Erstellen und Ausführen Ihrer eigenen benutzerdefinierten Richtlinien in Azure Active Directory B2C“. Wir empfehlen Ihnen, diese Reihe mit dem ersten Artikel zu beginnen.

Schritt 1: Konfigurieren der Signatur- und Verschlüsselungsschlüssel

Erstellen Sie die folgenden Verschlüsselungsschlüssel, sofern Sie dies nicht bereits getan haben. Besuchen Sie die Website IEF-Setup-App, und folgen Sie den Anweisungen, um die nachfolgende exemplarische Vorgehensweise zu automatisieren:

  1. Führen Sie die unter Hinzufügen von Signatur- und Verschlüsselungsschlüsseln für Identity Experience Framework-Anwendungen aufgeführten Schritte aus, um den Signaturschlüssel zu erstellen.

  2. Führen Sie die unter Hinzufügen von Signatur- und Verschlüsselungsschlüsseln für Identity Experience Framework-Anwendungen aufgeführten Schritte aus, um den Verschlüsselungsschlüssel zu erstellen.

Schritt 2: Erstellen der benutzerdefinierten Richtliniendatei

  1. Erstellen und öffnen Sie in VS Code die Datei ContosoCustomPolicy.XML.

  2. Fügen Sie in der Datei ContosoCustomPolicy.XML den folgenden Code hinzu:

        <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <TrustFrameworkPolicy
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema"
          xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06"
          PolicySchemaVersion="0.3.0.0"
          TenantId="yourtenant.onmicrosoft.com"
          PolicyId="B2C_1A_ContosoCustomPolicy"
          PublicPolicyUri="http://yourtenant.onmicrosoft.com/B2C_1A_ContosoCustomPolicy">
    
            <BuildingBlocks>
                <!-- Building Blocks Here-->
            </BuildingBlocks>
    
            <ClaimsProviders>
                <!-- Claims Providers Here-->
            </ClaimsProviders>
    
            <UserJourneys>
                <!-- User Journeys Here-->
            </UserJourneys>
    
            <RelyingParty>
                <!-- 
                    Relying Party Here that's your policy’s entry point
                    Specify the User Journey to execute 
                    Specify the claims to include in the token that is returned when the policy runs
                -->
            </RelyingParty>
        </TrustFrameworkPolicy>
    
    

    Ersetzen Sie yourtenant durch den Teil der Unterdomäne Ihres Mandantennamens, z. B. contoso. Erfahren Sie, wie Sie den Mandantennamen abrufen.

    Die XML-Elemente definieren das in einer Richtliniendatei enthaltene TrustFrameworkPolicy-Element der obersten Ebene mit seiner Richtlinien-ID und dem Mandantennamen. Das „TrustFrameworkPolicy“-Element enthält weitere XML-Elemente, die Sie in dieser Reihe verwenden.

  3. Um einen Anspruch zu deklarieren, fügen Sie in der Datei ContosoCustomPolicy.XML im Abschnitt BuildingBlocks den folgenden Code hinzu:

      <ClaimsSchema>
        <ClaimType Id="objectId">
            <DisplayName>unique object Id for subject of the claims being returned</DisplayName>
            <DataType>string</DataType>
        </ClaimType>        
        <ClaimType Id="message">
            <DisplayName>Will hold Hello World message</DisplayName>
            <DataType>string</DataType>
        </ClaimType>
      </ClaimsSchema>
    

    Ein Anspruch ist wie eine Variable. In der Deklaration des Anspruchs ist auch der Datentyp des Anspruchs angegeben.

  4. Fügen Sie in der Datei ContosoCustomPolicy.XML im Abschnitt ClaimsProviders den folgenden Code hinzu:

        <ClaimsProvider>
          <DisplayName>Token Issuer</DisplayName>
          <TechnicalProfiles>
            <TechnicalProfile Id="JwtIssuer">
              <DisplayName>JWT Issuer</DisplayName>
              <Protocol Name="None" />
              <OutputTokenFormat>JWT</OutputTokenFormat>
              <Metadata>
                <Item Key="client_id">{service:te}</Item>
                <Item Key="issuer_refresh_token_user_identity_claim_type">objectId</Item>
                <Item Key="SendTokenResponseBodyWithJsonNumbers">true</Item>
              </Metadata>
              <CryptographicKeys>
                <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" />
                <Key Id="issuer_refresh_token_key" StorageReferenceId="B2C_1A_TokenEncryptionKeyContainer" />
              </CryptographicKeys>
            </TechnicalProfile>
          </TechnicalProfiles>
        </ClaimsProvider>
    
        <ClaimsProvider>
          <!-- The technical profile(s) defined in this section is required by the framework to be included in all custom policies. -->
          <DisplayName>Trustframework Policy Engine TechnicalProfiles</DisplayName>
          <TechnicalProfiles>
            <TechnicalProfile Id="TpEngine_c3bd4fe2-1775-4013-b91d-35f16d377d13">
              <DisplayName>Trustframework Policy Engine Default Technical Profile</DisplayName>
              <Protocol Name="None" />
              <Metadata>
                <Item Key="url">{service:te}</Item>
              </Metadata>
            </TechnicalProfile>
          </TechnicalProfiles>
        </ClaimsProvider>
    

    Wir haben einen JWT-Tokenaussteller deklariert. Wenn Sie in Schritt 1 andere Namen zum Konfigurieren der Signatur- und Verschlüsselungsschlüssel verwendet haben, stellen Sie sicher, dass Sie im Abschnitt CryptographicKeys den richtigen Wert für die StorageReferenceId verwenden.

  5. Fügen Sie in der Datei ContosoCustomPolicy.XML im Abschnitt UserJourneys den folgenden Code hinzu:

      <UserJourney Id="HelloWorldJourney">
        <OrchestrationSteps>
          <OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
        </OrchestrationSteps>
      </UserJourney>
    

    Wir haben ein UserJourneys-Element hinzugefügt. Die User Journey gibt die Geschäftslogik an, die der Endbenutzer durchläuft, während Azure AD B2C eine Anforderung verarbeitet. Diese User Journey umfasst nur einen Schritt, mit dem ein JTW-Token mit den Ansprüchen ausgestellt wird, die Sie im nächsten Schritt definieren.

  6. Fügen Sie in der Datei ContosoCustomPolicy.XML im Abschnitt RelyingParty den folgenden Code hinzu:

      <DefaultUserJourney ReferenceId="HelloWorldJourney"/>
      <TechnicalProfile Id="HelloWorldPolicyProfile">
        <DisplayName>Hello World Policy Profile</DisplayName>
        <Protocol Name="OpenIdConnect" />
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" DefaultValue="abcd-1234-efgh-5678-ijkl-etc."/>
          <OutputClaim ClaimTypeReferenceId="message" DefaultValue="Hello World!"/>
        </OutputClaims>
        <SubjectNamingInfo ClaimType="sub" />
      </TechnicalProfile>
    

    Der Abschnitt RelyingParty ist der Einstiegspunkt Ihrer Richtlinie. Darin werden die auszuführende UserJourney und die Ansprüche angegeben, die das Token enthalten soll, das bei der Ausführung der Richtlinie zurückgegeben wird.

Nachdem Sie Schritt 2 abgeschlossen haben, sollte der Inhalt der Datei ContosoCustomPolicy.XML in etwa wie der folgende Code aussehen:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" PolicySchemaVersion="0.3.0.0" TenantId="Contosob2c2233.onmicrosoft.com" PolicyId="B2C_1A_ContosoCustomPolicy" PublicPolicyUri="http://Contosob2c2233.onmicrosoft.com/B2C_1A_ContosoCustomPolicy">
        <BuildingBlocks>
            <ClaimsSchema>
            <ClaimType Id="objectId">
                <DisplayName>unique object Id for subject of the claims being returned</DisplayName>
                <DataType>string</DataType>
            </ClaimType>        
            <ClaimType Id="message">
                <DisplayName>Will hold Hello World message</DisplayName>
                <DataType>string</DataType>
            </ClaimType>
            </ClaimsSchema>
        </BuildingBlocks>
        <ClaimsProviders><!--Claims Providers Here-->
            <ClaimsProvider>
                <DisplayName>Token Issuer</DisplayName>
                <TechnicalProfiles>
                    <TechnicalProfile Id="JwtIssuer">
                        <DisplayName>JWT Issuer</DisplayName>
                        <Protocol Name="None"/>
                        <OutputTokenFormat>JWT</OutputTokenFormat>
                        <Metadata>
                            <Item Key="client_id">{service:te}</Item>
                            <Item Key="issuer_refresh_token_user_identity_claim_type">objectId</Item>
                            <Item Key="SendTokenResponseBodyWithJsonNumbers">true</Item>
                        </Metadata>
                        <CryptographicKeys>
                            <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer"/>
                            <Key Id="issuer_refresh_token_key" StorageReferenceId="B2C_1A_TokenEncryptionKeyContainer"/>
                        </CryptographicKeys>
                    </TechnicalProfile>
                </TechnicalProfiles>
            </ClaimsProvider>
    
            <ClaimsProvider>
            <DisplayName>Trustframework Policy Engine TechnicalProfiles</DisplayName>
            <TechnicalProfiles>
                <TechnicalProfile Id="TpEngine_c3bd4fe2-1775-4013-b91d-35f16d377d13">
                <DisplayName>Trustframework Policy Engine Default Technical Profile</DisplayName>
                <Protocol Name="None" />
                <Metadata>
                    <Item Key="url">{service:te}</Item>
                </Metadata>
                </TechnicalProfile>
            </TechnicalProfiles>
            </ClaimsProvider>
        </ClaimsProviders>
      <UserJourneys>
        <UserJourney Id="HelloWorldJourney">
          <OrchestrationSteps>
            <OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
          </OrchestrationSteps>
        </UserJourney>
      </UserJourneys>
        <RelyingParty><!-- 
                Relying Party Here that's your policy’s entry point
                Specify the User Journey to execute 
                Specify the claims to include in the token that is returned when the policy runs
            -->
            <DefaultUserJourney ReferenceId="HelloWorldJourney"/>
            <TechnicalProfile Id="HelloWorldPolicyProfile">
                <DisplayName>Hello World Policy Profile</DisplayName>
                <Protocol Name="OpenIdConnect"/>
                <OutputClaims>
                    <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" DefaultValue="abcd-1234-efgh-5678-ijkl-etc."/>
                    <OutputClaim ClaimTypeReferenceId="message" DefaultValue="Hello World!"/>
                </OutputClaims>
                <SubjectNamingInfo ClaimType="sub"/>
            </TechnicalProfile>
        </RelyingParty>
    </TrustFrameworkPolicy>

Schritt 3: Hochladen der benutzerdefinierten Richtliniendatei

  1. Melden Sie sich beim Azure-Portal an.
  2. Wenn Sie Zugriff auf mehrere Mandanten haben, wählen Sie das Symbol Einstellungen im Menü oben, um über das Menü Verzeichnisse + Abonnements zu Ihrem Azure AD B2C Mandanten zu wechseln.
  3. Suchen Sie im Azure-Portal nach Azure AD B2C, und wählen Sie diese Option dann aus.
  4. Wählen Sie im linken Menü unter Richtlinien die Option Identity Experience Framework aus.
  5. Wählen Sie Benutzerdefinierte Richtlinie hochladen aus, suchen Sie die Datei ContosoCustomPolicy.XML, wählen Sie die Datei aus, und laden Sie diese dann hoch.

Nachdem Sie die Datei hochgeladen haben, fügt Azure AD B2C das Präfix B2C_1A_ hinzu, sodass der Name beispielsweise B2C_1A_CONTOSOCUSTOMPOLICY lautet.

Schritt 4: Testen der benutzerdefinierten Richtlinie

  1. Wählen Sie unter Benutzerdefinierte Richtlinien die Richtlinie B2C_1A_CONTOSOCUSTOMPOLICY aus.
  2. Wählen Sie auf der Übersichtsseite der benutzerdefinierten Richtlinie unter Anwendung auswählen die Webanwendung aus, die Sie zuvor registriert haben, z. B. webapp1. Stellen Sie sicher, dass der Wert von Antwort-URL auswählen auf https://jwt.ms festgelegt ist.
  3. Wählen Sie die Schaltfläche Jetzt ausführen aus.

Nach der Ausführung der Richtlinie werden Sie zu https://jwt.ms weitergeleitet, und es wird ein decodiertes JWT-Token angezeigt. Es sieht ähnlich wie der folgende JWT-Tokenausschnitt aus:

    {
      "typ": "JWT",
      "alg": "RS256",
      "kid": "pxLOMWFg...."
    }.{
      ...
      "sub": "abcd-1234-efgh-5678-ijkl-etc.",
      ...
      "acr": "b2c_1a_contosocustompolicy",
      ...
      "message": "Hello World!"
    }.[Signature]

Beachten Sie die Ansprüche message und sub, die wir als Ausgabeansprüche im Abschnitt RelyingParty festgelegt haben.

Nächste Schritte

In diesem Artikel haben Sie vier Abschnitte kennengelernt und verwendet, die in einer benutzerdefinierten Azure AD B2C-Richtlinie enthalten sind. Diese Abschnitte werden dem Stammelement TrustFrameworkPolicy als untergeordnete Elemente hinzugefügt:

  • BuildingBlocks
  • ClaimsProviders
  • UserJourneys
  • RelyingParty

Als Nächstes werden die folgenden Themen behandelt: