Teilen über


Sammeln und Bearbeiten von Benutzereingaben mithilfe einer benutzerdefinierten Azure Active Directory B2C-Richtlinie

Mit benutzerdefinierten Richtlinien von Azure Active Directory B2C (Azure AD B2C) können Sie Benutzereingaben sammeln. Anschließend können Sie integrierte Methoden verwenden, um die Benutzereingaben zu bearbeiten.

In diesem Artikel erfahren Sie, wie Sie eine benutzerdefinierte Richtlinie schreiben, die Benutzereingaben über eine grafische Benutzeroberfläche sammelt. Anschließend greifen Sie auf die Eingaben zu, verarbeiten sie und geben sie schließlich als Ansprüche in einem JWT-Token zurück. Um diese Aufgabe zu lösen, führen Sie folgende Schritte aus:

  • Deklarieren von Ansprüchen. Ein Anspruch bietet eine temporäre Speicherung von Daten während der Ausführung einer Azure AD B2C-Richtlinie. Ansprüche können Informationen zum Benutzer, wie z. B. Vorname oder Nachname, oder andere Ansprüche speichern, die vom Benutzer oder anderen Systemen stammen. Weitere Informationen zu Ansprüchen finden Sie unter Übersicht über benutzerdefinierte Azure AD B2C-Richtlinien.

  • Definieren von technischen Profilen. Ein technisches Profil bietet eine Schnittstelle für die Kommunikation mit verschiedenen Typen von Parteien. Sie ermöglichen Ihnen beispielsweise mit dem Benutzer zu interagieren, um Daten zu sammeln.

  • Konfigurieren von Anspruchstransformationen, die Sie verwenden, um die von Ihnen deklarierten Ansprüche zu bearbeiten.

  • Konfigurieren von Inhaltsdefinitionen. Eine Inhaltsdefinition definiert die zu ladende Benutzeroberfläche. Später können Sie die Benutzeroberfläche anpassen, indem Sie Ihren eigenen angepassten HTML-Inhalt bereitstellen.

  • Konfigurieren und Anzeigen von Benutzeroberflächen für den Benutzer mithilfe von selbstbestätigten technischen Profilen und DisplayClaims.

  • Aufrufen von technischen Profilen in einer bestimmten Sequenz mithilfe von Orchestrierungsschritten.

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: Deklarieren von Ansprüchen

Deklarieren Sie zusätzliche Ansprüche neben objectId und message:

  1. Öffnen Sie in VS Code die Datei ContosoCustomPolicy.XML.

  2. Fügen Sie im Abschnitt ClaimsSchema die folgenden ClaimType-Deklarationen hinzu:

        <ClaimType Id="givenName">
            <DisplayName>Given Name</DisplayName>
            <DataType>string</DataType>
            <UserHelpText>Your given name (also known as first name).</UserHelpText>
            <UserInputType>TextBox</UserInputType>
        </ClaimType>
    
        <ClaimType Id="surname">
            <DisplayName>Surname</DisplayName>
            <DataType>string</DataType>
            <UserHelpText>Your surname (also known as family name or last name).</UserHelpText>
            <UserInputType>TextBox</UserInputType>
        </ClaimType>
        <ClaimType Id="displayName">
            <DisplayName>Display Name</DisplayName>
            <DataType>string</DataType>
            <UserHelpText>Your display name.</UserHelpText>
            <UserInputType>TextBox</UserInputType>
        </ClaimType>
    

Wir haben drei Anspruchstypen deklariert: givenName, name und displayName. Diese Deklarationen enthalten die Elemente DataType, UserInputType und DisplayName:

  • DataType gibt den Datentyp des Werts an, den die Ansprüche enthalten. Erfahren Sie mehr über die Datentypen, die die DataType-Elemente unterstützen.
  • UserInputType gibt das UI-Steuerelement an, das auf der Benutzeroberfläche angezeigt wird, wenn Sie den Wert des Anspruchs vom Benutzer erfassen möchten. Erfahren Sie mehr über die Von Azure AD B2C unterstützten Eingabetypen für Benutzer.
  • DisplayName gibt die Bezeichnung für das UI-Steuerelement an, das auf der Benutzeroberfläche angezeigt wird, wenn Sie den Wert des Anspruchs vom Benutzer erfassen möchten.

Schritt 2: Definieren von Anspruchstransformationen

Eine ClaimsTransformation enthält eine Funktion, die Sie verwenden, um einen bestimmten Anspruch in einen anderen zu konvertieren. Beispielsweise können Sie einen Zeichenfolgenanspruch von Kleinbuchstaben in Großbuchstaben ändern. Erfahren Sie mehr über Von Azure AD B2C unterstützte Anspruchstransformationen.

  1. Fügen Sie in der Datei ContosoCustomPolicy.XML das Element<ClaimsTransformations> als untergeordnetes Element von Abschnitt BuildingBlocks hinzu.

        <ClaimsTransformations>
    
        </ClaimsTransformations>
    
  2. Fügen Sie dem Element ClaimsTransformations den folgenden Code hinzu:

        <ClaimsTransformation Id="GenerateRandomObjectIdTransformation" TransformationMethod="CreateRandomString">
            <InputParameters>
            <InputParameter Id="randomGeneratorType" DataType="string" Value="GUID"/>
            </InputParameters>
            <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="objectId" TransformationClaimType="outputClaim"/>
            </OutputClaims>
        </ClaimsTransformation>
    
        <ClaimsTransformation Id="CreateDisplayNameTransformation" TransformationMethod="FormatStringMultipleClaims">
            <InputClaims>
            <InputClaim ClaimTypeReferenceId="givenName" TransformationClaimType="inputClaim1"/>
            <InputClaim ClaimTypeReferenceId="surname" TransformationClaimType="inputClaim2"/>
            </InputClaims>
            <InputParameters>
            <InputParameter Id="stringFormat" DataType="string" Value="{0} {1}"/>
            </InputParameters>
            <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="outputClaim"/>
            </OutputClaims>
        </ClaimsTransformation>
    
        <ClaimsTransformation Id="CreateMessageTransformation" TransformationMethod="FormatStringClaim">
            <InputClaims>
            <InputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="inputClaim"/>
            </InputClaims>
            <InputParameters>
            <InputParameter Id="stringFormat" DataType="string" Value="Hello {0}"/>
            </InputParameters>
            <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="message" TransformationClaimType="outputClaim"/>
            </OutputClaims>
        </ClaimsTransformation> 
    

    Wir haben drei Anspruchstransformationen konfiguriert:

    • GenerateRandomObjectIdTransformation generiert eine zufällige Zeichenfolge, wie in der Methode CreateRandomString angegeben. Der Anspruch objectId wird mit der generierten Zeichenfolge aktualisiert, wie vom Element OutputClaim angegeben.

    • CreateDisplayNameTransformation verkettet givenName und surname zu displayName.

    • CreateMessageTransformation verkettet Hello und displayName zu message.

Schritt 3: Konfigurieren der Inhaltsdefinition

Mit ContentDefinitions können Sie URLs für HTML-Vorlagen angeben, die das Layout der Webseiten steuern, die Sie Ihren Benutzern anzeigen. Sie können für jeden Schritt bestimmte Benutzeroberflächen angeben, z. B. Anmeldung oder Registrierung, Kennwortzurücksetzung oder Fehlerseiten.

Fügen Sie zum Hinzufügen einer Inhaltsdefinition den folgenden Code der Datei ContosoCustomPolicy.XML im Abschnitt BuildingBlocks hinzu:

    <ContentDefinitions>
        <ContentDefinition Id="SelfAssertedContentDefinition">
            <LoadUri>~/tenant/templates/AzureBlue/selfAsserted.cshtml</LoadUri>
            <RecoveryUri>~/common/default_page_error.html</RecoveryUri>
            <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.7</DataUri>
        </ContentDefinition>
    </ContentDefinitions>

Schritt 4: Konfigurieren von technischen Profilen

In einer benutzerdefinierten Richtlinie ist ein TechnicalProfile das Element, das die Funktionalität implementiert. Nachdem Sie nun Ansprüche und Anspruchstransformationen definiert haben, benötigen Sie technische Profile, um Ihre Definitionen auszuführen. Innerhalb der ClaimsProvider-Elemente wird ein technisches Profil deklariert.

Azure AD B2C stellt eine Reihe von technischen Profilen bereit. Jedes technische Profil führt eine bestimmte Rolle aus. Beispielsweise verwenden Sie ein technisches REST-Profil, um einen HTTP-Aufruf an einen Dienstendpunkt zu tätigen. Sie können ein technisches Profil für die Anspruchstransformation verwenden, um den Vorgang auszuführen, den Sie in einer Anspruchstransformation definieren. Erfahren Sie mehr über die technischen Profiltypen, die benutzerdefinierte Azure AD B2C-Richtlinien bereitstellen.

Festlegen von Werten für Ansprüche

Zum Festlegen von Werten für objectId-, displayName- und message-Ansprüchen konfigurieren Sie ein technisches Profil, das die Ansprüche Transformationen GenerateRandomObjectIdTransformation, CreateDisplayNameTransformation und CreateMessageTransformation ausführt. Die Anspruchstransformationen werden durch die im Element OutputClaimsTransformations definierte Reihenfolge ausgeführt. Beispielsweise wird zuerst der Anzeigename und dann die Nachricht erstellt.

  1. Fügen Sie den folgenden ClaimsProvider als untergeordnetes Element des Abschnitts ClaimsProviders hinzu.

        <ClaimsProvider>
    
            <DisplayName>Technical Profiles to generate claims</DisplayName>
        </ClaimsProvider>
    
    
  2. Fügen Sie dem soeben erstellten Element den folgenden Code ClaimsProvider hinzu, um Werte für die Ansprüche objectId, displayName und message festzulegen:

        <!--<ClaimsProvider>-->
            <TechnicalProfiles>
                <TechnicalProfile Id="ClaimGenerator">
                    <DisplayName>Generate Object ID, displayName and message Claims Technical Profile.</DisplayName>
                    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
                    <OutputClaims>
                        <OutputClaim ClaimTypeReferenceId="objectId"/>
                        <OutputClaim ClaimTypeReferenceId="displayName"/>
                        <OutputClaim ClaimTypeReferenceId="message"/>
                    </OutputClaims>
                    <OutputClaimsTransformations>
                        <OutputClaimsTransformation ReferenceId="GenerateRandomObjectIdTransformation"/>
                        <OutputClaimsTransformation ReferenceId="CreateDisplayNameTransformation"/>
                        <OutputClaimsTransformation ReferenceId="CreateMessageTransformation"/>
                    </OutputClaimsTransformations>
                </TechnicalProfile>
            </TechnicalProfiles>
        <!--</ClaimsProvider>-->
    

Sammeln von Benutzereingaben

Sie generieren den Anspruch displayName aus givenName und surname, also müssen Sie diese als Benutzereingaben erfassen. Um die Benutzereingaben zu sammeln, verwenden Sie einen technischen Profiltyp namens Self-Asserted. Wenn Sie ein selbstbestätigtes technisches Profil konfigurieren, müssen Sie auf die Inhaltsdefinitionen verweisen, da ein selbstbestätigtes technisches Profil für die Anzeige einer Benutzeroberfläche verantwortlich ist.

  1. Fügen Sie den folgenden ClaimsProvider als untergeordnetes Element des Abschnitts ClaimsProviders hinzu.

        <ClaimsProvider>
    
            <DisplayName>Technical Profiles to collect user's details </DisplayName>
        </ClaimsProvider>
    
  2. Fügen Sie dem soeben erstellten Element ClaimsProvider den folgenden Code hinzu:

        <TechnicalProfiles>
            <TechnicalProfile Id="UserInformationCollector">
                <DisplayName>Collect User Input Technical Profile</DisplayName>
                <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
                <Metadata>
                    <Item Key="ContentDefinitionReferenceId">SelfAssertedContentDefinition</Item>
                </Metadata>
                <DisplayClaims>
                    <DisplayClaim ClaimTypeReferenceId="givenName" Required="true"/>
                    <DisplayClaim ClaimTypeReferenceId="surname" Required="true"/>
                </DisplayClaims>
                <OutputClaims>
                    <OutputClaim ClaimTypeReferenceId="givenName"/>
                    <OutputClaim ClaimTypeReferenceId="surname"/>
                </OutputClaims>
            </TechnicalProfile>
        </TechnicalProfiles>
    

    Beachten Sie, dass die beiden Anzeigeansprüche für die Ansprüche givenName und surname angezeigt werden. Beide Ansprüche sind als obligatorisch gekennzeichnet, sodass der Benutzer die Werte eingeben muss, bevor er das angezeigte Formular übermittelt. Die Ansprüche werden auf dem Bildschirm in der im Element DisplayClaims definierten Reihenfolge angezeigt, z. B . Vorname und dann der Nachname.

Schritt 5: Definieren von User Journeys

Mithilfe von User Journeys definieren Sie die Reihenfolge, in der die technischen Profile aufgerufen werden. Sie verwenden das Element OrchestrationSteps, um die Schritte in einer User Journey anzugeben.

Ersetzen Sie den vorhandenen Inhalt der User Journey HelloWorldJourney durch den folgenden Code:

    <OrchestrationSteps>
        <OrchestrationStep Order="1" Type="ClaimsExchange">
            <ClaimsExchanges>
                <ClaimsExchange Id="GetUserInformationClaimsExchange" TechnicalProfileReferenceId="UserInformationCollector"/>
            </ClaimsExchanges>
        </OrchestrationStep>
        <OrchestrationStep Order="2" Type="ClaimsExchange">
            <ClaimsExchanges>
                <ClaimsExchange Id="GetMessageClaimsExchange" TechnicalProfileReferenceId="ClaimGenerator"/>
            </ClaimsExchanges>
        </OrchestrationStep>
        <OrchestrationStep Order="3" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer"/>
    </OrchestrationSteps>

Gemäß den Orchestrierungsschritten sammeln wir Benutzereingaben, legen Werte für die Ansprüche objectId, displayName und message fest und senden schließlich das JWT-Token.

Schritt 6: Aktualisieren der vertrauenden Seite

Ersetzen Sie den Inhalt des Abschnitts RelyingParty des Elements OutputClaims durch den folgenden Code:

    <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
    <OutputClaim ClaimTypeReferenceId="displayName"/>
    <OutputClaim ClaimTypeReferenceId="message"/>

Nachdem Sie Schritt 6 abgeschlossen haben, sollte die Datei ContosoCustomPolicy.XML 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="yourtenant.onmicrosoft.com" 
    PolicyId="B2C_1A_ContosoCustomPolicy" 
    PublicPolicyUri="http://yourtenant.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>

            <ClaimType Id="givenName">
                <DisplayName>Given Name</DisplayName>
                <DataType>string</DataType>
                <UserHelpText>Your given name (also known as first name).</UserHelpText>
                <UserInputType>TextBox</UserInputType>
            </ClaimType>
            <ClaimType Id="surname">
                <DisplayName>Surname</DisplayName>
                <DataType>string</DataType>
                <UserHelpText>Your surname (also known as family name or last name).</UserHelpText>
                <UserInputType>TextBox</UserInputType>
            </ClaimType>
            <ClaimType Id="displayName">
                <DisplayName>Display Name</DisplayName>
                <DataType>string</DataType>
                <UserHelpText>Your display name.</UserHelpText>
                <UserInputType>TextBox</UserInputType>
            </ClaimType>
        </ClaimsSchema>
        <ClaimsTransformations>
            <ClaimsTransformation Id="GenerateRandomObjectIdTransformation" TransformationMethod="CreateRandomString">
                <InputParameters>
                    <InputParameter Id="randomGeneratorType" DataType="string" Value="GUID"/>
                </InputParameters>
                <OutputClaims>
                    <OutputClaim ClaimTypeReferenceId="objectId" TransformationClaimType="outputClaim"/>
                </OutputClaims>
            </ClaimsTransformation>

            <ClaimsTransformation Id="CreateDisplayNameTransformation" TransformationMethod="FormatStringMultipleClaims">
                <InputClaims>
                    <InputClaim ClaimTypeReferenceId="givenName" TransformationClaimType="inputClaim1"/>
                    <InputClaim ClaimTypeReferenceId="surname" TransformationClaimType="inputClaim2"/>
                </InputClaims>
                <InputParameters>
                    <InputParameter Id="stringFormat" DataType="string" Value="{0} {1}"/>
                </InputParameters>
                <OutputClaims>
                    <OutputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="outputClaim"/>
                </OutputClaims>
            </ClaimsTransformation>

            <ClaimsTransformation Id="CreateMessageTransformation" TransformationMethod="FormatStringClaim">
                <InputClaims>
                    <InputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="inputClaim"/>
                </InputClaims>
                <InputParameters>
                    <InputParameter Id="stringFormat" DataType="string" Value="Hello {0}"/>
                </InputParameters>
                <OutputClaims>
                    <OutputClaim ClaimTypeReferenceId="message" TransformationClaimType="outputClaim"/>
                </OutputClaims>
            </ClaimsTransformation> 
        </ClaimsTransformations>
        <ContentDefinitions>
            <ContentDefinition Id="SelfAssertedContentDefinition">
                <LoadUri>~/tenant/templates/AzureBlue/selfAsserted.cshtml</LoadUri>
                <RecoveryUri>~/common/default_page_error.html</RecoveryUri>
                <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.7</DataUri>
            </ContentDefinition>
        </ContentDefinitions>
    </BuildingBlocks>
    <!--Claims Providers Here-->
    <ClaimsProviders>
        <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>

        <ClaimsProvider>
            <DisplayName>Claim Generator Technical Profiles</DisplayName>
            <TechnicalProfiles>
                <TechnicalProfile Id="ClaimGenerator">
                    <DisplayName>Generate Object ID, displayName and  message Claims Technical Profile.</DisplayName>
                    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
                    <OutputClaims>
                        <OutputClaim ClaimTypeReferenceId="objectId"/>
                        <OutputClaim ClaimTypeReferenceId="displayName"/>
                        <OutputClaim ClaimTypeReferenceId="message"/>
                    </OutputClaims>
                    <OutputClaimsTransformations>
                        <OutputClaimsTransformation ReferenceId="GenerateRandomObjectIdTransformation"/>
                        <OutputClaimsTransformation ReferenceId="CreateDisplayNameTransformation"/>
                        <OutputClaimsTransformation ReferenceId="CreateMessageTransformation"/>
                    </OutputClaimsTransformations>
                </TechnicalProfile>
            </TechnicalProfiles>            
        </ClaimsProvider>

        <ClaimsProvider>
            <DisplayName>Technical Profiles to collect user's details</DisplayName>
            <TechnicalProfiles>
                <TechnicalProfile Id="UserInformationCollector">
                    <DisplayName>Collect User Input Technical Profile</DisplayName>
                    <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
                    <Metadata>
                        <Item Key="ContentDefinitionReferenceId">SelfAssertedContentDefinition</Item>
                    </Metadata>
                    <DisplayClaims>
                        <DisplayClaim ClaimTypeReferenceId="givenName" Required="true"/>
                        <DisplayClaim ClaimTypeReferenceId="surname" Required="true"/>
                    </DisplayClaims>
                    <OutputClaims>
                        <OutputClaim ClaimTypeReferenceId="givenName"/>
                        <OutputClaim ClaimTypeReferenceId="surname"/>
                    </OutputClaims>
                </TechnicalProfile>
            </TechnicalProfiles>
        </ClaimsProvider>
    </ClaimsProviders>

    <UserJourneys>
        <UserJourney Id="HelloWorldJourney">
            <OrchestrationSteps>
                <OrchestrationStep Order="1" Type="ClaimsExchange">
                    <ClaimsExchanges>
                        <ClaimsExchange Id="GetUserInformationClaimsExchange" TechnicalProfileReferenceId="UserInformationCollector"/>
                    </ClaimsExchanges>
                </OrchestrationStep>
                <OrchestrationStep Order="2" Type="ClaimsExchange">
                    <ClaimsExchanges>
                        <ClaimsExchange Id="GetMessageClaimsExchange" TechnicalProfileReferenceId="ClaimGenerator"/>
                    </ClaimsExchanges>
                </OrchestrationStep>
                <OrchestrationStep Order="3" 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"/>
                <OutputClaim ClaimTypeReferenceId="displayName"/>
                <OutputClaim ClaimTypeReferenceId="message"/>
            </OutputClaims>
            <SubjectNamingInfo ClaimType="sub"/>
        </TechnicalProfile>
    </RelyingParty>
</TrustFrameworkPolicy>

Wenn Sie dies noch nicht getan haben, ersetzen Sie yourtenant durch den Unterdomänenteil Ihres Mandantennamens, z. B. contoso. Erfahren Sie, wie Sie den Mandantennamen abrufen.

Schritt 3: Hochladen der benutzerdefinierten Richtliniendatei

Führen Sie die Schritte unter Hochladen der benutzerdefinierten Richtliniendatei aus. Wenn Sie eine Datei mit demselben Namen wie die Datei hochladen, die bereits im Portal vorhanden ist, stellen Sie sicher, dass Sie Überschreiben der benutzerdefinierten Richtlinie, sofern sie bereits vorhanden ist auswählen.

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.

  4. Geben Sie Vorname und Nachname ein, und wählen Sie dann Weiter aus.

    screenshot of accepting user inputs in custom policy.

Nachdem die Ausführung der Richtlinie abgeschlossen ist, 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": "c7ae4515-f7a7....",
      ...
      "acr": "b2c_1a_contosocustompolicy",
      ...
      "name": "Maurice Paulet",
      "message": "Hello Maurice Paulet"
    }.[Signature]

Nächste Schritte

Als Nächstes wird behandelt: