Aangepaste e-mailverificatie met Mailjet

Voordat u begint, gebruikt u de selector Een beleidstype kiezen om het type beleid te kiezen dat u instelt. U kunt in Azure Active Directory B2C op twee manieren definiëren hoe gebruikers met uw toepassingen communiceren: via vooraf gedefinieerde gebruikersstromen of via volledig configureerbaar aangepast beleid. De stappen die in dit artikel zijn vereist, verschillen voor elke methode.

Gebruik aangepaste e-mails in Azure Active Directory B2C (Azure AD B2C) om aangepaste e-mails te verzenden naar gebruikers die zich aanmelden om uw toepassingen te gebruiken. Door het gebruik van de externe e-mailproviders Mailjet kunt u gebruikmaken van uw eigen e-mailsjabloon en Van:-adres en onderwerp, evenals van lokalisatie van ondersteuning en aangepaste OTP-instellingen (eenmalig wachtwoord).

Deze functie is alleen beschikbaar voor aangepast beleid. Voor configuratiestappen selecteert u Aangepast beleid in de voorgaande selector.

Voor aangepaste e-mailverificatie is het gebruik van een externe e-mailprovider vereist, zoals Mailjet, SendGrid of SparkPost, een aangepaste REST-API of een e-mailprovider op HTTP-basis (inclusief uw eigen e-mailprovider). In dit artikel wordt beschreven hoe u een oplossing instelt die gebruikmaakt van Mailjet.

Een Mailjet-account maken

Als u er nog geen hebt, begint u met het instellen van een Mailjet-account (Azure-klanten kunnen 6000 e-mailberichten ontgrendelen met een limiet van 200 e-mails/dag).

  1. Volg de installatie-instructies bij Een Mailjet-account maken.
  2. Als u e-mails wilt verzenden, registreert en valideert u het e-mailadres of domein van de afzender.
  3. Navigeer naar de pagina API Key Management. Noteer de API-sleutel en geheime sleutel voor gebruik in een latere stap. Er worden twee sleutels gegenereerd als uw Azure Maps-account wordt gemaakt.

Belangrijk

Mailjet biedt klanten de mogelijkheid om e-mailberichten te verzenden vanaf gedeelde IP-adressen en toegewezen IP-adressen. Wanneer u toegewezen IP-adressen gebruikt, moet u uw eigen reputatie goed opbouwen met een IP-adreswarmer. Zie Hoe kan ik mijn IP opwarmen?voor meer informatie.

Een Azure AD B2C-beleidssleutel maken

Sla vervolgens de Mailjet-API-sleutel op in een Azure AD B2C-beleidssleutel waarnaar u kunt verwijzen.

  1. Meld u aan bij de Azure-portal.
  2. Als u toegang hebt tot meerdere tenants, selecteert u het pictogram Instellingen in het bovenste menu om over te schakelen naar uw Azure AD B2C-tenant in het menu Mappen en abonnementen.
  3. Kies Alle services linksboven in de Azure Portal, zoek Azure AD B2C en selecteer deze.
  4. Selecteer Identity Experience Framework op de pagina Overzicht.
  5. Selecteer Beleidssleutels en vervolgens Toevoegen.
  6. Kies Handmatig voor Opties.
  7. Voer een naam in voor de beleidssleutel. Bijvoorbeeld MailjetApiKey. Het voorvoegsel B2C_1A_ wordt automatisch toegevoegd aan de naam van uw sleutel.
  8. Voer bij Geheim uw API-sleutel van Mailjet in die u eerder hebt vastgelegd.
  9. Selecteer Handtekening voor sleutelgebruik.
  10. Selecteer Maken.
  11. Selecteer Beleidssleutels en vervolgens Toevoegen.
  12. Kies Handmatig voor Opties.
  13. Voer een naam in voor de beleidssleutel. Bijvoorbeeld MailjetSecretKey. Het voorvoegsel B2C_1A_ wordt automatisch toegevoegd aan de naam van uw sleutel.
  14. Voer bij Geheim uw geheime sleutel van Mailjet in die u eerder hebt vastgelegd.
  15. Selecteer Handtekening voor sleutelgebruik.
  16. Selecteer Maken.

Een Mailjet-sjabloon maken

Wanneer een Mailjet-account is gemaakt en de Mailjet-API-sleutel is opgeslagen in een Azure AD B2C-beleidssleutel, maakt u een dynamische transactiesjabloon voor Mailjet.

  1. Open op de Mailjet-website de pagina transactionele sjablonen en selecteer Een nieuwe sjabloon maken.

  2. Selecteer Door te coderen in HTML en selecteer vervolgens Vanaf het begin coderen.

  3. Voer een unieke sjabloonnaam in zoals Verification email en selecteer vervolgens Maken.

  4. Plak in de HTML-editor de volgende HTML-sjabloon of gebruik uw eigen sjabloon. De parameters {{var:otp:""}} en {{var:email:""}} worden dynamisch vervangen door de eenmalige wachtwoordwaarde en het e-mailadres van de gebruiker.

    <!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">
       <!-- Template B O365 -->
       <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;">&nbsp;</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;">&nbsp;</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">&nbsp;</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 {{var: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: {{var: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">&nbsp;</td>
                       <td width="1"></td>
                       <td width="1">&nbsp;</td>
                       <td width="1" valign="top"></td>
                       <td width="29">&nbsp;</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;">&nbsp;</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;">&nbsp;</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>
    
  5. Vouw Onderwerp bewerken in de linkerbovenhoek uit

    1. Voer voor Onderwerp een standaardwaarde in voor het onderwerp. Mailjet gebruikt deze waarde wanneer de API geen onderwerpparameter bevat.
    2. Voer bij de Naam de naam van uw bedrijf in.
    3. Selecteer bij het Adres uw e-mailadres
    4. Selecteer Opslaan.
  6. Selecteer in de rechterbovenhoek Opslaan & Publiceren en vervolgens Ja, wijzigingen publiceren

  7. Noteer de sjabloon-id van de sjabloon die u hebt gemaakt voor gebruik in een latere stap. U geeft deze id op wanneer u de claimtransformatie toevoegt.

Belangrijk

In de volgende stappen ziet u hoe u xml-bestanden voor aangepast beleid bouwt. U wordt aangeraden een aangepast voorbeeldbeleid voor verificatie van aangepaste e-mails te gebruiken dat beschikbaar is op GitHub. DisplayControl_TrustFrameworkExtensions.xml gebruikt TrustFrameworkExtensions.xml als basisbestand. Zorg er daarom voor dat u bestanden TrustFrameworkBase.xml, TrustFrameworkLocalization.xml en TrustFrameworkExtensions.xml uit het starterspakketSocialAndLocalAccounts in uw beleid opneemt.

Azure AD B2C-claimtypen toevoegen

Voeg in uw beleid de volgende claimtypen toe aan het element <ClaimsSchema> in <BuildingBlocks>.

Deze claimtypen zijn nodig om het e-mailadres te genereren en te verifiëren met behulp van een eenmalige wachtwoordcode (OTP).

<!--
<BuildingBlocks>
  <ClaimsSchema> -->
    <ClaimType Id="Otp">
      <DisplayName>Secondary One-time password</DisplayName>
      <DataType>string</DataType>
    </ClaimType>
    <ClaimType Id="emailRequestBody">
      <DisplayName>Mailjet 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> -->

De claimtransformatie aanroepen

Vervolgens hebt u een claimtransformatie nodig om een JSON-tekenreeksclaim uit te voeren die de hoofdtekst van de aanvraag is die naar Mailjet wordt verzonden.

De structuur van het JSON-object wordt gedefinieerd door de id's in puntnotatie van de InputParameters en de TransformationClaimTypes van de InputClaims. Getallen in de puntnotatie impliceren matrices. De waarden zijn afkomstig uit de waarden van InputClaims en de eigenschappen 'Value' van InputParameters. Zie JSON-claimtransformaties voor meer informatie over JSON-claimtransformaties.

Voeg de volgende claimtransformatie toe aan het element <ClaimsTransformations> in <BuildingBlocks>. Voer de volgende updates uit voor de XML van de claimtransformatie:

  • Werk de InputParameter-waarde Messages.0.TemplateID bij met de id van de Mailjet-transactionele sjabloon die u eerder hebt gemaakt in Een Mailjet-sjabloon maken.
  • Werk de adreswaarde Messages.0.From.Email bij. Gebruik een geldig e-mailadres om te voorkomen dat de verificatie-e-mail als spam wordt gemarkeerd.
  • Werk de waarde van de invoerparameter voor de onderwerpregel Messages.0.Subject bij met een onderwerpregel die geschikt is voor uw organisatie.
<!-- 
<BuildingBlocks>
  <ClaimsTransformations> -->
    <ClaimsTransformation Id="GenerateEmailRequestBody" TransformationMethod="GenerateJson">
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="Messages.0.To.0.Email" />
        <InputClaim ClaimTypeReferenceId="otp" TransformationClaimType="Messages.0.Variables.otp" />
        <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="Messages.0.Variables.email" />
      </InputClaims>
      <InputParameters>
        <!-- Update the template_id value with the ID of your Mailjet template. -->
        <InputParameter Id="Messages.0.TemplateID" DataType="int" Value="1234567"/>
        <InputParameter Id="Messages.0.TemplateLanguage" DataType="boolean" Value="true"/>

        <!-- Update with an email appropriate for your organization. -->
        <InputParameter Id="Messages.0.From.Email" DataType="string" Value="my_email@mydomain.com"/>

        <!-- Update with a subject line appropriate for your organization. -->
        <InputParameter Id="Messages.0.Subject" DataType="string" Value="Contoso account email verification code"/>
      </InputParameters>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="emailRequestBody" TransformationClaimType="outputClaim"/>
      </OutputClaims>
    </ClaimsTransformation>
  <!--
  </ClaimsTransformations>
</BuildingBlocks> -->

Definitie voor DataUri-inhoud toevoegen

Voeg onder de claimtransformaties binnen <BuildingBlocks> de volgende ContentDefinition toe om te verwijzen naar de gegevens-URI van versie 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> -->

Een DisplayControl maken

Er wordt een controle over verificatieweergave gebruikt om het e-mailadres te verifiëren met een verificatiecode die naar de gebruiker wordt verzonden.

Dit voorbeeldweergavebeheer is geconfigureerd om:

  1. Het adresclaimtype email van de gebruiker te verzamelen.

  2. Genereer met behulp van de actie SendCode een OTP-code en verzend een e-mail met de OTP-code naar de gebruiker.

    Send verification code email action

  3. Wacht totdat de gebruiker het claimtype verificationCode heeft opgegeven met de code die naar de gebruiker is verzonden.

  4. Geef email op bij het zelfbeheerde technische profiel met een verwijzing naar dit weergavebesturingselement.

Voeg onder inhoudsdefinities, nog steeds binnen <BuildingBlocks>, de volgende DisplayControl van het type VerificationControl toe aan uw beleid.

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

OTP-technische profielen toevoegen

Het technische profiel GenerateOtp genereert een code voor het e-mailadres. Het technische profiel VerifyOtp controleert de code die is gekoppeld aan het e-mailadres. U kunt de configuratie van de indeling en het verlopen van het eenmalige wachtwoord wijzigen. Zie Een eenmalig wachtwoord voor een technisch profiel definiëren voor meer informatie over OTP-technische profielen.

Notitie

OTP-codes die worden gegenereerd door het protocol Web.TPEngine.Providers.OneTimePasswordProtocolProvider, zijn gekoppeld aan de browsersessie. Dit betekent dat een gebruiker unieke OTP-codes kan genereren in verschillende browsersessies die elk geldig zijn voor hun bijbehorende sessies. Een OTP-code die wordt gegenereerd door de ingebouwde e-mailprovider, is daarentegen onafhankelijk van de browsersessie, dus als een gebruiker een nieuwe OTP-code in een nieuwe browsersessie genereert, vervangt deze de vorige OTP-code.

Voeg de volgende technische profielen toe aan het element <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> -->

Een technisch REST API-profiel toevoegen

Dit technische REST API-profiel genereert de e-mailinhoud (met behulp van de Mailjet-indeling). Zie Een technisch RESTful-profiel definiëren voor meer informatie over technische RESTful-profielen.

Voeg, net als bij de technische OTP-profielen, de volgende technische profielen toe aan het element <ClaimsProviders>.

<ClaimsProvider>
  <DisplayName>RestfulProvider</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="sendOtp">
      <DisplayName>Use 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.mailjet.com/v3.1/send</Item>
        <Item Key="AuthenticationType">Basic</Item>
        <Item Key="SendClaimsIn">Body</Item>
        <Item Key="ClaimUsedForRequestPayload">emailRequestBody</Item>
      </Metadata>
      <CryptographicKeys>
        <Key Id="BasicAuthenticationUsername" StorageReferenceId="B2C_1A_MailjetApiKey" />
        <Key Id="BasicAuthenticationPassword" StorageReferenceId="B2C_1A_MailjetSecretKey" />
      </CryptographicKeys>
      <InputClaimsTransformations>
        <InputClaimsTransformation ReferenceId="GenerateEmailRequestBody" />
      </InputClaimsTransformations>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="emailRequestBody" />
      </InputClaims>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

Een verwijzing maken naar DisplayControl

Voeg in de laatste stap een verwijzing toe naar de DisplayControl die u hebt gemaakt. Overschrijf uw bestaande LocalAccountSignUpWithLogonEmail en LocalAccountDiscoveryUsingEmailAddress zelfbewuste technische profielen die zijn geconfigureerd in het basisbeleid met het volgende XML-fragment. Als u een eerdere versie van Azure AD B2C-beleid hebt gebruikt, gebruiken deze technische profielen DisplayClaims met een verwijzing naar de DisplayControl.

Zie voor meer informatie Zelfbewust technisch profiel en 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>

[Optioneel] Uw e-mail lokaliseren

Als u de e-mail wilt lokaliseren, moet u gelokaliseerde tekenreeksen verzenden naar Mailjet of uw e-mailprovider. U kunt bijvoorbeeld het e-mailonderwerp, de hoofdtekst, het codebericht of de handtekening van het e-mailbericht lokaliseren. Hiervoor kunt u de claimstransformatie getLocalizedStringsTransformation gebruiken om gelokaliseerde tekenreeksen te kopiëren naar claimtypen. De claimtransformatie GenerateEmailRequestBody, die de JSON-payload genereert, maakt gebruik van invoerclaims die de gelokaliseerde tekenreeksen bevatten.

  1. Definieer in uw beleid de volgende tekenreeksclaims: onderwerp, bericht, codeIntro en handtekening.

  2. Definieer een claimstransformatie GetLocalizedStringsTransformation om gelokaliseerde tekenreekswaarden in de claims van stap 1 te vervangen.

  3. Wijzig de claimstransformatie GenerateEmailRequestBody om invoerclaims te gebruiken met het volgende XML-fragment.

  4. Werk uw Mailjet-sjabloon bij om dynamische parameters te gebruiken in plaats van alle tekenreeksen die worden gelokaliseerd door 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="Messages.0.To.0.Email" />
        <InputClaim ClaimTypeReferenceId="subject" TransformationClaimType="Messages.0.Subject" />
        <InputClaim ClaimTypeReferenceId="otp" TransformationClaimType="Messages.0.Variables.otp" />
        <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="Messages.0.Variables.email" />
        <InputClaim ClaimTypeReferenceId="message" TransformationClaimType="Messages.0.Variables.otpmessage" />
        <InputClaim ClaimTypeReferenceId="codeIntro" TransformationClaimType="Messages.0.Variables.otpcodeIntro" />
        <InputClaim ClaimTypeReferenceId="signature" TransformationClaimType="Messages.0.Variables.otpsignature" />
      </InputClaims>
      <InputParameters>
        <!-- Update the template_id value with the ID of your Mailjet template. -->
        <InputParameter Id="Messages.0.TemplateID" DataType="int" Value="1234567"/>
        <InputParameter Id="Messages.0.TemplateLanguage" DataType="boolean" Value="true"/>
    
        <!-- Update with an email appropriate for your organization. -->
        <InputParameter Id="Messages.0.From.Email" DataType="string" Value="my_email@mydomain.com"/>
      </InputParameters>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="emailRequestBody" TransformationClaimType="outputClaim"/>
      </OutputClaims>
    </ClaimsTransformation>
    
  5. Voeg het volgende lokalisatie-element toe.

    <!--
    <BuildingBlocks> -->
      <Localization Enabled="true">
        <SupportedLanguages DefaultLanguage="en" MergeBehavior="ReplaceAll">
          <SupportedLanguage>en</SupportedLanguage>
          <SupportedLanguage>es</SupportedLanguage>
        </SupportedLanguages>
        <LocalizedResources Id="api.custom-email.en">
          <LocalizedStrings>
            <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>
            <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> -->
    
  6. Voeg verwijzingen toe naar de elementen LocalizedResources door het element ContentDefinitions bij te werken.

    <!--
    <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> -->
    
  7. Voeg ten slotte de volgende transformatie van invoerclaims toe aan de technische profielen LocalAccountSignUpWithLogonEmail en LocalAccountDiscoveryUsingEmailAddress.

    <InputClaimsTransformations>
      <InputClaimsTransformation ReferenceId="GetLocalizedStringsForEmail" />
    </InputClaimsTransformations>
    

[Optioneel] De gebruikersinterface lokaliseren

Met het lokalisatie-element kunt u meerdere landinstellingen of talen in het beleid voor de gebruikerstrajecten ondersteunen. Met de lokalisatieondersteuning in beleidsregels kunt u taalspecifieke tekenreeksen opgeven voor zowel elementen van de gebruikersinterface voor verificatieweergave als eenmalige wachtwoordfoutberichten. Voeg de volgende LocalizedString toe aan 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="emailVerificationCode" StringId="DisplayName">Verification Code</LocalizedString>
    <LocalizedString ElementType="ClaimType" ElementId="emailVerificationCode" StringId="UserHelpText">Verification code received in the email.</LocalizedString>
    <LocalizedString ElementType="ClaimType" ElementId="emailVerificationCode" 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>

Volgende stappen