Collecter et manipuler des entrées utilisateur à l’aide d’une stratégie Azure Active Directory B2C personnalisée

Les stratégies personnalisées Azure Active Directory B2C (Azure AD B2C) vous permettent de collecter des entrées utilisateur. Vous pouvez ensuite utiliser des méthodes intégrées pour manipuler les entrées utilisateur.

Dans cet article, vous apprenez à écrire une stratégie personnalisée qui collecte des entrées utilisateur via une interface graphique utilisateur. Vous accéderez ensuite aux entrées, vous les traiterez, puis vous les retournerez en tant que revendications dans un jeton JWT. Pour effectuer cette tâche, vous effectuerez ce qui suit :

  • Déclarez des revendications. Une revendication fournit un stockage temporaire de données lors d’une exécution de stratégie Azure AD B2C. Elles peuvent stocker des informations sur l’utilisateur, telles que son prénom, son nom ou toute autre revendication obtenue de l’utilisateur ou d’autres systèmes. Pour en savoir plus sur les revendications, consultez la Vue d’ensemble de la stratégie Azure AD B2C personnalisée.

  • Ajoutez des profils techniques. Un profil technique fournit une interface pour communiquer avec différents types de parties. Par exemple, il vous permet d’interagir avec l’utilisateur pour collecter des données.

  • Configurez les transformations de revendications que vous utilisez pour manipuler les revendications que vous déclarez.

  • Configurez les définitions de contenu. Une définition de contenu définit l’interface utilisateur à charger. Plus tard, vous pourrez personnaliser l’interface utilisateur en fournissant votre propre contenu HTML personnalisé.

  • Configurez et affichez les interfaces utilisateur pour l’utilisateur à l’aide de profils techniques autodéclarés et de DisplayClaims.

  • Appelez des profils techniques dans une séquence donnée en utilisant des étapes d’orchestration.

Prérequis

Notes

Cet article fait partie de la série de guides pratiques Créer et exécuter vos propres stratégies personnalisées dans Azure Active Directory B2C. Nous vous recommandons de commencer cette série par le premier article.

Étape 1 : Déclarer des revendications

Déclarez des revendications supplémentaires avec objectId et message :

  1. Dans VS Code, ouvrez le fichier ContosoCustomPolicy.XML.

  2. Dans la section ClaimsSchema, ajoutez les déclarations ClaimType suivantes :

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

Nous avons déclaré trois types de revendication, givenName, surname et displayName. Ces déclarations incluent les éléments DataType, UserInputType et DisplayName :

  • DataType spécifie le type de données de la valeur contenue dans les revendications. En savoir plus sur les types de données pris en charge par les éléments DataType.
  • UserInputType spécifie le contrôle d’interface utilisateur qui s’affiche sur l’interface utilisateur si vous souhaitez collecter la valeur de la revendication auprès de l’utilisateur. En savoir plus sur les types d’entrée utilisateur pris en charge par Azure AD B2C.
  • DisplayName spécifie l’étiquette pour le contrôle d’interface utilisateur qui s’affiche sur l’interface utilisateur si vous souhaitez collecter la valeur de la revendication auprès de l’utilisateur.

Étape 2 : Définir les transformations de revendications

Une ClaimsTransformation contient une fonction que vous utilisez pour convertir une revendication donnée en une autre. Par exemple, vous pouvez modifier une revendication de chaîne de minuscules en majuscules. En savoir plus sur les Transformations de revendications prises en charge par Azure AD B2C.

  1. Dans le fichier ContosoCustomPolicy.XML, ajoutez un élément <ClaimsTransformations> en tant qu’enfant de la section BuildingBlocks.

        <ClaimsTransformations>
    
        </ClaimsTransformations>
    
  2. Ajoutez le code suivant dans l’élément 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> 
    

    Nous avons configuré trois transformations de revendications :

    • GenerateRandomObjectIdTransformation génère une chaîne aléatoire comme spécifié par la méthode CreateRandomString. La revendication objectId est mise à jour avec la chaîne générée comme spécifié par l’élément OutputClaim.

    • CreateDisplayNameTransformation concatène givenName et surname pour former displayName.

    • CreateMessageTransformation concatène Hello et displayName pour former un message.

Étape 3 : Configurer des définitions de contenu

Les ContentDefinitions vous permettent de spécifier l’URL des modèles HTML qui contrôlent la disposition des pages web que vous affichez à vos utilisateurs. Vous pouvez spécifier des interfaces utilisateur spécifiques pour chaque étape, telles que la connexion ou l’inscription, la réinitialisation de mot de passe ou les pages d’erreur.

Pour ajouter une définition de contenu, ajoutez le code suivant dans la section BuildingBlocks du fichier ContosoCustomPolicy.XML :

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

Étape 4 : Configurer des profils techniques

Dans une stratégie personnalisée, un TechnicalProfile est l’élément qui implémente une fonctionnalité. Maintenant que vous avez défini des revendications et des transformations de revendications, vous avez besoin de profils techniques pour exécuter vos définitions. Un profil technique est déclaré à l’intérieur des éléments ClaimsProvider.

Azure AD B2C fournit un ensemble de profils techniques. Chaque profil technique joue un rôle spécifique. Par exemple, vous utilisez un profil technique REST pour effectuer un appel HTTP à un point de terminaison de service. Vous pouvez utiliser un profil technique de transformation de revendications pour exécuter l’opération que vous définissez dans une transformation de revendications. En savoir plus sur les types de profils techniques fournis par les stratégies Azure AD B2C personnalisées.

Définir des valeurs pour vos revendications

Pour définir des valeurs pour les revendications objectId, displayName et message, vous configurez un profil technique qui exécute les transformations de revendications GenerateRandomObjectIdTransformation, CreateDisplayNameTransformation et CreateMessageTransformation. Les transformations de revendications sont exécutées selon l’ordre défini dans l’élément OutputClaimsTransformations. Par exemple, il crée d’abord le nom complet, puis le message.

  1. Ajoutez l’élément ClaimsProvider suivant en tant qu’enfant de la section ClaimsProviders.

        <ClaimsProvider>
    
            <DisplayName>Technical Profiles to generate claims</DisplayName>
        </ClaimsProvider>
    
    
  2. Pour définir des valeurs pour les revendications objectId, displayName et message, ajoutez le code suivant dans l’élément ClaimsProvider que vous venez de créer :

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

Collecter des entrées utilisateur

Comme vous générez la revendication displayName à partir de givenName et de surname, vous devez collecter ensuite en tant qu’entrées utilisateur. Pour collecter une entrée utilisateur, vous utilisez un type de profil technique appelé Autodéclaré. Lorsque vous configurez un profil technique autodéclaré, vous devez référencer les définitions de contenu, car le profil technique déclaré automatiquement est responsable de l’affichage d’une interface utilisateur.

  1. Ajoutez l’élément ClaimsProvider suivant en tant qu’enfant de la section ClaimsProviders.

        <ClaimsProvider>
    
            <DisplayName>Technical Profiles to collect user's details </DisplayName>
        </ClaimsProvider>
    
  2. Ajoutez le code suivant dans l’élément ClaimsProvider que vous venez de créer :

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

    Notez les deux revendications d’affichage pour les revendications givenName et le name. Les deux revendications étant marquées comme obligatoires, l’utilisateur doit entrer les valeurs avant de soumettre le formulaire qui lui est ensuite affiché. Les revendications s’affichent à l’écran dans l’ordre défini dans l’élément DisplayClaims, tel que le GivenName, puis le Surname.

Étape 5 : Définir des parcours utilisateur

Vous utilisez des parcours utilisateur pour définir l’ordre dans lequel les profils techniques sont appelés. Vous utilisez l’élément OrchestrationSteps pour spécifier les étapes d’un parcours utilisateur.

Remplacez le contenu du parcours utilisateur HelloWorldJourney existant par le code suivant :

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

Selon les étapes d’orchestration, nous collectons des entrées utilisateur, définissons des valeurs pour les revendications objectId, displayName et message, puis nous envoyons le jeton JWT.

Étape 6 : Mettre à jour la partie de confiance

Remplacez le contenu de l’élément OutputClaims de la section RelyingParty par le code suivant :

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

Une fois l’étape 6 terminée, le fichier ContosoCustomPolicy.XML doit ressembler au code suivant :

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

Si vous ne l’avez pas déjà fait, remplacez yourtenant par la partie de sous-domaine de votre nom de locataire, telle que contoso. Découvrez comment Récupérer votre nom de locataire.

Étape 3 : Charger le fichier de stratégie personnalisée

Suivez les étapes décrites dans Charger un fichier de stratégie personnalisée. Si vous chargez un fichier portant le même nom que celui déjà présent dans le portail, veillez à sélectionner Remplacer la stratégie personnalisée si elle existe déjà.

Étape 4 : Tester la stratégie personnalisée

  1. Sous les Stratégies personnalisées, sélectionnez B2C_1A_CONTOSOCUSTOMPOLICY.

  2. Pour l’élément Sélectionner une application dans la page de vue d’ensemble de la stratégie personnalisée, sélectionnez l’application web telle que webapp1 que vous avez précédemment inscrite. Vérifiez que l’élément Sélectionner l’URL de réponse est défini sur https://jwt.ms.

  3. Sélectionnez le bouton Exécuter maintenant.

  4. Entrez le Given Name et le Surname, puis sélectionnez Continuer.

    screenshot of accepting user inputs in custom policy.

Une fois l’exécution de la stratégie terminée, vous êtes redirigé vers https://jwt.ms et le jeton JWT décodé s’affiche. Il ressemble à l’extrait de jeton JWT suivant :

    {
      "typ": "JWT",
      "alg": "RS256",
      "kid": "pxLOMWFg...."
    }.{
      ...
      "sub": "c7ae4515-f7a7....",
      ...
      "acr": "b2c_1a_contosocustompolicy",
      ...
      "name": "Maurice Paulet",
      "message": "Hello Maurice Paulet"
    }.[Signature]

Étapes suivantes

Découvrez ensuite :