Partager via


Écrivez votre première stratégie personnalisée Azure Active Directory B2C - Hello World !

Important

À compter du 1er mai 2025, Azure AD B2C ne sera plus disponible pour les nouveaux clients. Pour plus d’informations, consultez notre FAQ.

Dans votre application, vous pouvez utiliser des flux d’utilisateurs qui permettent aux utilisateurs d’inscrire, de se connecter ou de gérer leur profil. Lorsque les flux utilisateur ne couvrent pas tous vos besoins spécifiques à votre entreprise, vous pouvez utiliser des stratégies personnalisées.

Bien que vous puissiez utiliser le pack de démarrage de stratégie personnalisé prédéfini pour écrire des stratégies personnalisées, il est important de comprendre comment une stratégie personnalisée est générée. Dans cet article, vous allez apprendre à créer votre première stratégie personnalisée à partir de zéro.

Conditions préalables

Remarque

Cet article fait partie de la série de guides de création et d’exécution de vos propres stratégies personnalisées dans Azure Active Directory B2C. Nous vous recommandons de commencer cette série à partir du premier article.

Étape 1 : configurer les clés de signature et de chiffrement

Si ce n’est déjà fait, créez les clés de chiffrement suivantes. Pour automatiser la procédure pas à pas ci-dessous, consultez l’application de configuration IEF et suivez les instructions suivantes :

  1. Utilisez les étapes décrites dans Ajouter des clés de signature et de chiffrement pour les applications Identity Experience Framework pour créer la clé de signature.

  2. Utilisez les étapes décrites dans Ajouter des clés de signature et de chiffrement pour les applications Identity Experience Framework pour créer la clé de chiffrement.

Étape 2 : Générer le fichier de stratégie personnalisé

  1. Dans VS Code, créez et ouvrez le fichier ContosoCustomPolicy.XML.

  2. Dans le ContosoCustomPolicy.XML fichier, ajoutez le 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>
                <!-- 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>
    
    

    Remplacez yourtenant par la partie sous-domaine de votre nom de locataire, par contosoexemple . Découvrez comment obtenir le nom de votre locataire.

    Les éléments XML définissent l'élément supérieur de niveau TrustFrameworkPolicy d’un fichier de politique comportant son ID de politique et son nom de locataire. L’élément TrustFrameworkPolicy contient d’autres éléments XML que vous utiliserez dans cette série.

  3. Pour déclarer une revendication, ajoutez le code suivant dans BuildingBlocks la section du ContosoCustomPolicy.XML fichier :

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

    Une assertion est semblable à une variable. La déclaration de la revendication affiche également le type de données de la revendication.

  4. Dans la ClaimsProviders section du ContosoCustomPolicy.XML fichier, ajoutez le code suivant :

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

    Nous avons déclaré un émetteur JWT. Dans la CryptographicKeys section, si vous avez utilisé différents noms pour configurer les clés de signature et de chiffrement à l’étape 1, veillez à utiliser la valeur correcte pour le StorageReferenceId.

  5. Dans la UserJourneys section du ContosoCustomPolicy.XML fichier, ajoutez le code suivant :

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

    Nous avons ajouté un UserJourney. Le parcours utilisateur spécifie la logique métier que l’utilisateur final passe en tant qu’Azure AD B2C traite une demande. Ce parcours utilisateur n’a qu’une seule étape qui émet un jeton JTW avec les revendications que vous allez définir à l’étape suivante.

  6. Dans la RelyingParty section du ContosoCustomPolicy.XML fichier, ajoutez le code suivant :

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

    La section RelyingParty est le point d’entrée de votre stratégie. Il spécifie l’élément UserJourney à exécuter et les revendications à inclure dans le jeton retourné quand la stratégie est exécutée.

Une fois l’étape 2 terminée, le ContosoCustomPolicy.XML fichier 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="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>

Étape 3 - Charger un fichier de stratégie personnalisé

  1. Connectez-vous au portail Azure.
  2. Si vous avez accès à plusieurs tenants (locataires), sélectionnez l’icône Paramètres dans le menu supérieur pour basculer vers votre tenant Azure AD B2C à partir du menu Annuaires + abonnements.
  3. Dans le portail Azure, recherchez et sélectionnez Azure AD B2C.
  4. Dans le menu de gauche, sous Stratégies, sélectionnez Identity Experience Framework.
  5. Sélectionnez Charger une stratégie personnalisée, parcourez et sélectionnez, puis chargez le fichier ContosoCustomPolicy.XML.

Une fois que vous avez chargé le fichier, Azure AD B2C ajoute le préfixe B2C_1A_, de sorte que les noms ressemblent à B2C_1A_CONTOSOCUSTOMPOLICY.

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

  1. Sous Stratégies personnalisées, sélectionnez B2C_1A_CONTOSOCUSTOMPOLICY.
  2. Pour Sélectionner une application sur la page 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 la valeur Sélectionner l’URL de réponse est définie sur https://jwt.ms.
  3. Sélectionnez Le bouton Exécuter maintenant .

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

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

Notez les revendications message et sub, que nous définissons comme revendications de sortie dans la section RelyingParty.

Dans cet article, vous avez appris et utilisé quatre sections incluses dans une stratégie personnalisée Azure AD B2C. Ces sections sont ajoutées comme éléments enfants de l’élément racine TrustFrameworkPolicy :

  • BuildingBlocks
  • FournisseursDeRéclamations
  • UserJourneys
  • Parti Contributeur

Découvrez ensuite :