Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Important
À compter du 1er mai 2025, Azure AD B2C ne sera plus disponible pour les nouveaux clients. Pour plus d’informations, consultez notre FAQ.
Avant de commencer, utilisez le sélecteur Choisir un type de stratégie en haut de cette page pour choisir le type de stratégie que vous configurez. Azure Active Directory B2C offre deux possibilités pour définir la façon dont les utilisateurs interagissent avec vos applications : via des flux utilisateurs prédéfinis ou via des stratégies personnalisées entièrement configurables. La procédure donnée dans cet article est différente pour chaque méthode.
Utilisez un e-mail personnalisé dans Azure Active Directory B2C (Azure AD B2C) pour envoyer un e-mail personnalisé aux utilisateurs qui s’inscrivent pour utiliser vos applications. En utilisant le fournisseur de messagerie tiers SendGrid, vous pouvez utiliser votre propre modèle de messagerie et From : adresse et objet, ainsi que prendre en charge les paramètres de localisation et de mot de passe à usage unique (OTP).
Cette fonctionnalité est disponible uniquement pour les stratégies personnalisées. Pour les étapes de configuration, sélectionnez Stratégie personnalisée dans le sélecteur précédent.
La vérification de l’e-mail personnalisée nécessite l’utilisation d’un fournisseur de messagerie tiers tel que SendGrid, Mailjet ou SparkPost, une API REST personnalisée ou n’importe quel fournisseur de messagerie basé sur HTTP (y compris votre propre). Cet article décrit la configuration d’une solution qui utilise SendGrid.
Créer un compte SendGrid
Si vous n’en avez pas déjà un, commencez par configurer un compte SendGrid. Pour obtenir des instructions de configuration, consultez la section Créer un compte SendGrid de l’envoi de courrier électronique à l’aide d’SendGrid avec Azure.
Veillez à terminer la section dans laquelle vous créez une clé API SendGrid. Enregistrez la clé API à utiliser dans une étape ultérieure.
Important
SendGrid offre aux clients la possibilité d’envoyer des e-mails à partir d’adresses IP partagées et d’adresses IP dédiées. Lorsque vous utilisez des adresses IP dédiées, vous devez créer votre propre réputation correctement grâce à un processus de préchauffage de l'adresse IP. Pour plus d’informations, consultez Réchauffement d’une adresse IP.
Créer une clé de stratégie Azure AD B2C
Ensuite, stockez la clé API SendGrid dans une clé de stratégie Azure AD B2C pour que vos stratégies puissent y faire référence.
- Connectez-vous au portail Azure.
- 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.
- Dans le coin supérieur gauche du portail Azure, choisissez Tous les services, puis recherchez et sélectionnez Azure AD B2C.
- Dans la page Vue d’ensemble, sélectionnez Identity Experience Framework.
- Sélectionnez Clés de stratégie , puis sélectionnez Ajouter.
- Pour options, choisissez Manuel.
- Entrez un nom pour la clé de stratégie. Par exemple :
SendGridSecret
. Le préfixeB2C_1A_
est ajouté automatiquement au nom de votre clé. - Dans Secret, entrez la clé API SendGrid que vous avez enregistrée précédemment.
- Pour l’utilisation de la clé, sélectionnez Signature.
- Cliquez sur Créer.
Créer un modèle SendGrid
Avec un compte SendGrid créé et une clé API SendGrid stockée dans une clé de stratégie Azure AD B2C, créez un modèle transactionnel dynamique SendGrid.
Sur le site SendGrid, ouvrez la page modèles transactionnels et sélectionnez Créer un modèle dynamique.
Entrez un nom de modèle unique, par exemple
Verification email
, puis sélectionnez Créer.Pour commencer à modifier votre nouveau modèle, sélectionnez le modèle,
Verification email
puis sélectionnez Ajouter une version.Sélectionnez Modèle vide , puis Éditeur de code.
Dans l’éditeur HTML, collez le modèle HTML suivant ou utilisez votre propre modèle. Les paramètres
{{otp}}
et{{email}}
sont remplacés dynamiquement par la valeur du mot de passe à usage unique et l'adresse e-mail de l'utilisateur.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en"><head id="Head1"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Contoso demo account email verification code</title><meta name="ROBOTS" content="NOINDEX, NOFOLLOW"> <style> table td {border-collapse:collapse;margin:0;padding:0;} </style> </head> <body dir="ltr" lang="en"> <table width="100%" cellpadding="0" cellspacing="0" border="0" dir="ltr" lang="en"> <tr> <td valign="top" width="50%"></td> <td valign="top"> <!-- Email Header --> <table width="640" cellpadding="0" cellspacing="0" border="0" dir="ltr" lang="en" style="border-left:1px solid #e3e3e3;border-right: 1px solid #e3e3e3;"> <tr style="background-color: #0072C6;"> <td width="1" style="background:#0072C6; border-top:1px solid #e3e3e3;"></td> <td width="24" style="border-top:1px solid #e3e3e3;border-bottom:1px solid #e3e3e3;"> </td> <td width="310" valign="middle" style="border-top:1px solid #e3e3e3; border-bottom:1px solid #e3e3e3;padding:12px 0;"> <h1 style="line-height:20pt;font-family:Segoe UI Light; font-size:18pt; color:#ffffff; font-weight:normal;"> <span id="HeaderPlaceholder_UserVerificationEmailHeader"><font color="#FFFFFF">Verify your email address</font></span> </h1> </td> <td width="24" style="border-top: 1px solid #e3e3e3;border-bottom: 1px solid #e3e3e3;"> </td> </tr> </table> <!-- Email Content --> <table width="640" cellpadding="0" cellspacing="0" border="0" dir="ltr" lang="en"> <tr> <td width="1" style="background:#e3e3e3;"></td> <td width="24"> </td> <td id="PageBody" width="640" valign="top" colspan="2" style="border-bottom:1px solid #e3e3e3;padding:10px 0 20px;border-bottom-style:hidden;"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td width="630" style="font-size:10pt; line-height:13pt; color:#000;"> <table cellpadding="0" cellspacing="0" border="0" width="100%" style="" dir="ltr" lang="en"> <tr> <td> <div style="font-family:'Segoe UI', Tahoma, sans-serif; font-size:14px; color:#333;"> <span id="BodyPlaceholder_UserVerificationEmailBodySentence1">Thanks for verifying your {{email}} account!</span> </div> <br> <div style="font-family:'Segoe UI', Tahoma, sans-serif; font-size:14px; color:#333; font-weight: bold"> <span id="BodyPlaceholder_UserVerificationEmailBodySentence2">Your code is: {{otp}}</span> </div> <br> <br> <div style="font-family:'Segoe UI', Tahoma, sans-serif; font-size:14px; color:#333;"> Sincerely, </div> <div style="font-family:'Segoe UI', Tahoma, sans-serif; font-size:14px; font-style:italic; color:#333;"> Contoso </div> </td> </tr> </table> </td> </tr> </table> </td> <td width="1"> </td> <td width="1"></td> <td width="1"> </td> <td width="1" valign="top"></td> <td width="29"> </td> <td width="1" style="background:#e3e3e3;"></td> </tr> <tr> <td width="1" style="background:#e3e3e3; border-bottom:1px solid #e3e3e3;"></td> <td width="24" style="border-bottom:1px solid #e3e3e3;"> </td> <td id="PageFooterContainer" width="585" valign="top" colspan="6" style="border-bottom:1px solid #e3e3e3;padding:0px;"> </td> <td width="29" style="border-bottom:1px solid #e3e3e3;"> </td> <td width="1" style="background:#e3e3e3; border-bottom:1px solid #e3e3e3;"></td> </tr> </table> </td> <td valign="top" width="50%"></td> </tr> </table> </body> </html>
Développez le menu Paramètres et, pour le nom de la version, entrez une version de modèle.
Pour Objet, entrez
{{subject}}
.Cliquez sur Enregistrer.
Revenez à la page Modèles transactionnels en sélectionnant la flèche arrière.
Enregistrez l’ID du modèle que vous avez créé pour une utilisation ultérieure. Par exemple :
d-989077fbba9746e89f3f6411f596fb96
. Vous spécifiez cet ID lorsque vous ajoutez la transformation de revendications.
Important
Les étapes suivantes vous montrent comment créer vos fichiers XML de stratégie personnalisée. Nous vous recommandons d’utiliser un exemple de stratégie personnalisée de vérification de messagerie personnalisée disponible sur GitHub.
DisplayControl_TrustFrameworkExtensions.xml
utilise TrustFrameworkExtensions.xml
comme fichier de base ; veillez donc à inclure les fichiers TrustFrameworkBase.xml
, TrustFrameworkLocalization.xml
et TrustFrameworkExtensions.xml
à partir du SocialAndLocalAccountspack de démarrage dans votre stratégie.
Ajouter des types de revendications Azure AD B2C
Dans votre stratégie, ajoutez les types de revendications suivants à l’élément <ClaimsSchema>
dans <BuildingBlocks>
.
Ces types de revendications sont nécessaires pour générer et vérifier l’adresse e-mail à l’aide d’un code de mot de passe unique (OTP).
<!--
<BuildingBlocks>
<ClaimsSchema> -->
<ClaimType Id="Otp">
<DisplayName>Secondary One-time password</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="emailRequestBody">
<DisplayName>SendGrid request body</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="VerificationCode">
<DisplayName>Secondary Verification Code</DisplayName>
<DataType>string</DataType>
<UserHelpText>Enter your email verification code</UserHelpText>
<UserInputType>TextBox</UserInputType>
</ClaimType>
<!--
</ClaimsSchema>
</BuildingBlocks> -->
Ajouter la transformation de revendications
Ensuite, vous avez besoin d’une transformation de revendications pour générer une revendication de chaîne JSON qui forme le corps de la requête envoyée à SendGrid.
La structure de l'objet JSON est définie par les ID en notation par points des éléments InputParameters et des éléments TransformationClaimTypes de InputClaims. Les nombres dans la notation par points impliquent des tableaux. Les valeurs proviennent des valeurs InputClaims et des propriétés « Value » des éléments InputParameters. Pour plus d’informations sur les transformations de revendications JSON, consultez transformations de revendications JSON.
Ajoutez la transformation de revendications suivante à l’élément <ClaimsTransformations>
dans <BuildingBlocks>
. Effectuez les mises à jour suivantes pour la transformation de demandes XML :
- Mettez à jour la
template_id
valeur InputParameter avec l’ID du modèle transactionnel SendGrid que vous avez créé précédemment dans le modèle Create SendGrid. - Mettez à jour la valeur d’adresse
from.email
. Utilisez une adresse e-mail valide pour empêcher l’e-mail de vérification d’être marqué comme courrier indésirable.Remarque
Cette adresse e-mail doit être vérifiée dans SendGrid sous Authentification de l’expéditeur avec l’authentification de domaine ou l’authentification par expéditeur unique.
- Mettez à jour la valeur du
personalizations.0.dynamic_template_data.subject
paramètre d’entrée de ligne d’objet avec une ligne d’objet appropriée pour votre organisation.
<!--
<BuildingBlocks>
<ClaimsTransformations> -->
<ClaimsTransformation Id="GenerateEmailRequestBody" TransformationMethod="GenerateJson">
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" TransformationClaimType="personalizations.0.to.0.email" />
<InputClaim ClaimTypeReferenceId="otp" TransformationClaimType="personalizations.0.dynamic_template_data.otp" />
<InputClaim ClaimTypeReferenceId="email" TransformationClaimType="personalizations.0.dynamic_template_data.email" />
</InputClaims>
<InputParameters>
<!-- Update the template_id value with the ID of your SendGrid template. -->
<InputParameter Id="template_id" DataType="string" Value="d-989077fbba9746e89f3f6411f596fb96"/>
<InputParameter Id="from.email" DataType="string" Value="my_email@mydomain.com"/>
<!-- Update with a subject line appropriate for your organization. -->
<InputParameter Id="personalizations.0.dynamic_template_data.subject" DataType="string" Value="Contoso account email verification code"/>
</InputParameters>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="emailRequestBody" TransformationClaimType="outputClaim"/>
</OutputClaims>
</ClaimsTransformation>
<!--
</ClaimsTransformations>
</BuildingBlocks> -->
Ajouter une définition de contenu DataUri
Sous les transformations de revendications dans <BuildingBlocks>
, ajoutez l’élément ContentDefinition suivant pour faire référence à l’URI de données de la version 2.1.2 :
<!--
<BuildingBlocks> -->
<ContentDefinitions>
<ContentDefinition Id="api.localaccountsignup">
<DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.2</DataUri>
</ContentDefinition>
<ContentDefinition Id="api.localaccountpasswordreset">
<DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.2</DataUri>
</ContentDefinition>
</ContentDefinitions>
<!--
</BuildingBlocks> -->
Créer un DisplayControl
Un contrôle d’affichage de vérification est utilisé pour vérifier l’adresse e-mail à l’aide d’un code de vérification reçu par l’utilisateur.
Cet exemple de contrôle d’affichage est configuré pour :
Recueillir le type de revendication d'adresse
email
auprès de l'utilisateur.À l’aide de l’action
SendCode
, générez un code OTP et envoyez un e-mail avec le code OTP à l’utilisateur.Attendez que l’utilisateur fournisse le type de réclamation avec le code qui lui a été envoyé.
Retourner l’élément
email
au profil technique auto-déclaré qui a une référence à ce contrôle d'affichage.
Sous les définitions de contenu, toujours dans <BuildingBlocks>
, ajoutez le DisplayControl suivant de type VerificationControl à votre stratégie.
<!--
<BuildingBlocks> -->
<DisplayControls>
<DisplayControl Id="emailVerificationControl" UserInterfaceControlType="VerificationControl">
<DisplayClaims>
<DisplayClaim ClaimTypeReferenceId="email" Required="true" />
<DisplayClaim ClaimTypeReferenceId="verificationCode" ControlClaimType="VerificationCode" Required="true" />
</DisplayClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="email" />
</OutputClaims>
<Actions>
<Action Id="SendCode">
<ValidationClaimsExchange>
<ValidationClaimsExchangeTechnicalProfile TechnicalProfileReferenceId="GenerateOtp" />
<ValidationClaimsExchangeTechnicalProfile TechnicalProfileReferenceId="SendOtp" />
</ValidationClaimsExchange>
</Action>
<Action Id="VerifyCode">
<ValidationClaimsExchange>
<ValidationClaimsExchangeTechnicalProfile TechnicalProfileReferenceId="VerifyOtp" />
</ValidationClaimsExchange>
</Action>
</Actions>
</DisplayControl>
</DisplayControls>
<!--
</BuildingBlocks> -->
Ajouter des profils techniques OTP
Le GenerateOtp
profil technique génère un code pour l’adresse e-mail. Le VerifyOtp
profil technique vérifie le code associé à l’adresse e-mail. Vous pouvez modifier la configuration du format et l’expiration du mot de passe à usage unique. Pour plus d’informations sur les profils techniques otP, consultez Définir un profil technique de mot de passe unique.
Remarque
Les codes OTP générés par le protocole Web.TPEngine.Providers.OneTimePasswordProtocolProvider sont liés à la session du navigateur. Cela signifie qu’un utilisateur peut générer des codes OTP uniques dans différentes sessions de navigateur valides pour leurs sessions correspondantes. En revanche, un code OTP généré par le fournisseur de messagerie intégré est indépendant de la session du navigateur. Par conséquent, si un utilisateur génère un nouveau code OTP dans une nouvelle session de navigateur, il remplace le code OTP précédent.
Ajoutez les profils techniques suivants à l’élément <ClaimsProviders>
.
<!--
<ClaimsProviders> -->
<ClaimsProvider>
<DisplayName>One time password technical profiles</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="GenerateOtp">
<DisplayName>Generate one time password</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.OneTimePasswordProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="Operation">GenerateCode</Item>
<Item Key="CodeExpirationInSeconds">600</Item>
<Item Key="CodeLength">6</Item>
<Item Key="CharacterSet">0-9</Item>
<Item Key="NumRetryAttempts">5</Item>
<Item Key="NumCodeGenerationAttempts">10</Item>
<Item Key="ReuseSameCode">false</Item>
</Metadata>
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" PartnerClaimType="identifier" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="otp" PartnerClaimType="otpGenerated" />
</OutputClaims>
</TechnicalProfile>
<TechnicalProfile Id="VerifyOtp">
<DisplayName>Verify one time password</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.OneTimePasswordProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="Operation">VerifyCode</Item>
</Metadata>
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" PartnerClaimType="identifier" />
<InputClaim ClaimTypeReferenceId="verificationCode" PartnerClaimType="otpToVerify" />
</InputClaims>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
<!--
</ClaimsProviders> -->
Ajouter un profil technique d’API REST
Ce profil technique de l’API REST génère le contenu de l’e-mail (au format SendGrid). Pour plus d’informations sur les profils techniques RESTful, consultez Définir un profil technique RESTful.
Comme pour les profils techniques OTP, ajoutez les profils techniques suivants à l’élément <ClaimsProviders>
.
<ClaimsProvider>
<DisplayName>RestfulProvider</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="SendOtp">
<DisplayName>Use SendGrid's email API to send the code to the user</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://api.sendgrid.com/v3/mail/send</Item>
<Item Key="AuthenticationType">Bearer</Item>
<Item Key="SendClaimsIn">Body</Item>
<Item Key="ClaimUsedForRequestPayload">emailRequestBody</Item>
</Metadata>
<CryptographicKeys>
<Key Id="BearerAuthenticationToken" StorageReferenceId="B2C_1A_SendGridSecret" />
</CryptographicKeys>
<InputClaimsTransformations>
<InputClaimsTransformation ReferenceId="GenerateEmailRequestBody" />
</InputClaimsTransformations>
<InputClaims>
<InputClaim ClaimTypeReferenceId="emailRequestBody" />
</InputClaims>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
Faire référence à DisplayControl
À l’étape finale, ajoutez une référence à DisplayControl que vous avez créée. Remplacez vos profils techniques existants LocalAccountSignUpWithLogonEmail
et LocalAccountDiscoveryUsingEmailAddress
autodéclarés qui sont configurés dans la stratégie de base avec l’extrait de code XML suivant. Si vous avez utilisé une version antérieure de la stratégie Azure AD B2C, ces profils techniques s’utilisent DisplayClaims
avec une référence au DisplayControl
.
Pour plus d’informations, consultez profil technique autodéclaré et DisplayControl.
<ClaimsProvider>
<DisplayName>Local Account</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
<DisplayClaims>
<DisplayClaim DisplayControlReferenceId="emailVerificationControl" />
<DisplayClaim ClaimTypeReferenceId="displayName" Required="true" />
<DisplayClaim ClaimTypeReferenceId="givenName" Required="true" />
<DisplayClaim ClaimTypeReferenceId="surName" Required="true" />
<DisplayClaim ClaimTypeReferenceId="newPassword" Required="true" />
<DisplayClaim ClaimTypeReferenceId="reenterPassword" Required="true" />
</DisplayClaims>
</TechnicalProfile>
<TechnicalProfile Id="LocalAccountDiscoveryUsingEmailAddress">
<DisplayClaims>
<DisplayClaim DisplayControlReferenceId="emailVerificationControl" />
</DisplayClaims>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
[Facultatif] Localiser votre e-mail
Pour localiser l’e-mail, vous devez envoyer des chaînes localisées à SendGrid ou à votre fournisseur de messagerie. Par exemple, vous pouvez localiser l’objet de l’e-mail, le corps, le message de code ou la signature de l’e-mail. Pour ce faire, vous pouvez utiliser la transformation de revendications GetLocalizedStringsTransformation pour copier les chaînes localisées dans les types de revendications. La transformation de revendications GenerateEmailRequestBody
, qui génère la charge utile JSON, utilise des revendications d’entrée qui contiennent les chaînes localisées.
Dans votre stratégie, définissez les revendications de chaîne suivantes : objet, message, codeIntro et signature.
Définissez une transformation de revendications GetLocalizedStringsTransformation pour remplacer les valeurs de chaîne localisées dans les revendications de l’étape 1.
Modifiez la
GenerateEmailRequestBody
transformation des réclamations afin d'utiliser des réclamations d'entrée avec l’extrait de code XML suivant.Mettez à jour votre modèle SendGrid pour utiliser des paramètres dynamiques à la place de toutes les chaînes localisées par Azure AD B2C.
<ClaimsTransformation Id="GetLocalizedStringsForEmail" TransformationMethod="GetLocalizedStringsTransformation"> <OutputClaims> <OutputClaim ClaimTypeReferenceId="subject" TransformationClaimType="email_subject" /> <OutputClaim ClaimTypeReferenceId="message" TransformationClaimType="email_message" /> <OutputClaim ClaimTypeReferenceId="codeIntro" TransformationClaimType="email_code" /> <OutputClaim ClaimTypeReferenceId="signature" TransformationClaimType="email_signature" /> </OutputClaims> </ClaimsTransformation> <ClaimsTransformation Id="GenerateEmailRequestBody" TransformationMethod="GenerateJson"> <InputClaims> <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="personalizations.0.to.0.email" /> <InputClaim ClaimTypeReferenceId="subject" TransformationClaimType="personalizations.0.dynamic_template_data.subject" /> <InputClaim ClaimTypeReferenceId="otp" TransformationClaimType="personalizations.0.dynamic_template_data.otp" /> <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="personalizations.0.dynamic_template_data.email" /> <InputClaim ClaimTypeReferenceId="message" TransformationClaimType="personalizations.0.dynamic_template_data.message" /> <InputClaim ClaimTypeReferenceId="codeIntro" TransformationClaimType="personalizations.0.dynamic_template_data.codeIntro" /> <InputClaim ClaimTypeReferenceId="signature" TransformationClaimType="personalizations.0.dynamic_template_data.signature" /> </InputClaims> <InputParameters> <InputParameter Id="template_id" DataType="string" Value="d-1234567890" /> <InputParameter Id="from.email" DataType="string" Value="my_email@mydomain.com" /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="emailRequestBody" TransformationClaimType="outputClaim" /> </OutputClaims> </ClaimsTransformation>
Ajoutez l’élément Localisation suivant.
<!-- <BuildingBlocks> --> <Localization Enabled="true"> <SupportedLanguages DefaultLanguage="en" MergeBehavior="ReplaceAll"> <SupportedLanguage>en</SupportedLanguage> <SupportedLanguage>es</SupportedLanguage> </SupportedLanguages> <LocalizedResources Id="api.custom-email.en"> <LocalizedStrings> <!--Email template parameters--> <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_subject">Contoso account email verification code</LocalizedString> <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_message">Thanks for validating the account</LocalizedString> <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_code">Your code is</LocalizedString> <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_signature">Sincerely</LocalizedString> </LocalizedStrings> </LocalizedResources> <LocalizedResources Id="api.custom-email.es"> <LocalizedStrings> <!--Email template parameters--> <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_subject">Código de verificación del correo electrónico de la cuenta de Contoso</LocalizedString> <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_message">Gracias por comprobar la cuenta de </LocalizedString> <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_code">Su código es</LocalizedString> <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_signature">Sinceramente</LocalizedString> </LocalizedStrings> </LocalizedResources> </Localization> <!-- </BuildingBlocks> -->
Ajoutez des références aux éléments LocalizedResources en mettant à jour l’élément ContentDefinitions .
<!-- <BuildingBlocks> --> <ContentDefinitions> <ContentDefinition Id="api.localaccountsignup"> <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.2</DataUri> <LocalizedResourcesReferences MergeBehavior="Prepend"> <LocalizedResourcesReference Language="en" LocalizedResourcesReferenceId="api.custom-email.en" /> <LocalizedResourcesReference Language="es" LocalizedResourcesReferenceId="api.custom-email.es" /> </LocalizedResourcesReferences> </ContentDefinition> <ContentDefinition Id="api.localaccountpasswordreset"> <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.2</DataUri> <LocalizedResourcesReferences MergeBehavior="Prepend"> <LocalizedResourcesReference Language="en" LocalizedResourcesReferenceId="api.custom-email.en" /> <LocalizedResourcesReference Language="es" LocalizedResourcesReferenceId="api.custom-email.es" /> </LocalizedResourcesReferences> </ContentDefinition> </ContentDefinitions> <!-- </BuildingBlocks> -->
Enfin, ajoutez la transformation de revendications d’entrée suivante aux profils techniques
LocalAccountSignUpWithLogonEmail
etLocalAccountDiscoveryUsingEmailAddress
.<InputClaimsTransformations> <InputClaimsTransformation ReferenceId="GetLocalizedStringsForEmail" /> </InputClaimsTransformations>
[Facultatif] Localiser l’interface utilisateur
L’élément Localisation vous permet de prendre en charge plusieurs paramètres régionaux ou langues dans la stratégie pour les parcours utilisateur. La prise en charge de la localisation dans les stratégies vous permet de fournir des chaînes spécifiques à la langue à la fois pour les Éléments de l’interface utilisateur du contrôle de l’affichage de vérification et les Messages d’erreur du mot de passe à usage unique. Ajoutez la propriété LocalizedString suivante à vos LocalizedResources.
<LocalizedResources Id="api.custom-email.en">
<LocalizedStrings>
...
<!-- Display control UI elements-->
<LocalizedString ElementType="DisplayControl" ElementId="emailVerificationControl" StringId="intro_msg">Verification is necessary. Please click Send button.</LocalizedString>
<LocalizedString ElementType="DisplayControl" ElementId="emailVerificationControl" StringId="success_send_code_msg">Verification code has been sent to your inbox. Please copy it to the input box below.</LocalizedString>
<LocalizedString ElementType="DisplayControl" ElementId="emailVerificationControl" StringId="failure_send_code_msg">We are having trouble verifying your email address. Please enter a valid email address and try again.</LocalizedString>
<LocalizedString ElementType="DisplayControl" ElementId="emailVerificationControl" StringId="success_verify_code_msg">E-mail address verified. You can now continue.</LocalizedString>
<LocalizedString ElementType="DisplayControl" ElementId="emailVerificationControl" StringId="failure_verify_code_msg">We are having trouble verifying your email address. Please try again.</LocalizedString>
<LocalizedString ElementType="DisplayControl" ElementId="emailVerificationControl" StringId="but_send_code">Send verification code</LocalizedString>
<LocalizedString ElementType="DisplayControl" ElementId="emailVerificationControl" StringId="but_verify_code">Verify code</LocalizedString>
<LocalizedString ElementType="DisplayControl" ElementId="emailVerificationControl" StringId="but_send_new_code">Send new code</LocalizedString>
<LocalizedString ElementType="DisplayControl" ElementId="emailVerificationControl" StringId="but_change_claims">Change e-mail</LocalizedString>
<!-- Claims-->
<LocalizedString ElementType="ClaimType" ElementId="VerificationCode" StringId="DisplayName">Verification Code</LocalizedString>
<LocalizedString ElementType="ClaimType" ElementId="VerificationCode" StringId="UserHelpText">Verification code received in the email.</LocalizedString>
<LocalizedString ElementType="ClaimType" ElementId="VerificationCode" StringId="AdminHelpText">Verification code received in the email.</LocalizedString>
<LocalizedString ElementType="ClaimType" ElementId="email" StringId="DisplayName">Email</LocalizedString>
<!-- Email validation error messages-->
<LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfSessionDoesNotExist">You have exceeded the maximum time allowed.</LocalizedString>
<LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfMaxRetryAttempted">You have exceeded the number of retries allowed.</LocalizedString>
<LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfMaxNumberOfCodeGenerated">You have exceeded the number of code generation attempts allowed.</LocalizedString>
<LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfInvalidCode">You have entered the wrong code.</LocalizedString>
<LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfSessionConflict">Cannot verify the code, please try again later.</LocalizedString>
<LocalizedString ElementType="ErrorMessage" StringId="UserMessageIfVerificationFailedRetryAllowed">The verification has failed, please try again.</LocalizedString>
</LocalizedStrings>
</LocalizedResources>
Contenu connexe
- Trouvez un exemple de Vérification d’email personnalisée - Stratégie personnalisée DisplayControls sur GitHub.
- Découvrez comment utiliser une API REST personnalisée ou n’importe quel fournisseur de messagerie SMTP basé sur HTTP, consultez Définir un profil technique RESTful dans une stratégie personnalisée Azure AD B2C.