Vlastní ověření e-mailu pomocí Mailjetu

Než začnete, pomocí selektoru Zvolit typ zásady zvolte typ zásady, kterou nastavujete. Azure Active Directory B2C nabízí dvě metody pro definování způsobu interakce uživatelů s vašimi aplikacemi: prostřednictvím předdefinovaných toků uživatelů nebo prostřednictvím plně konfigurovatelných vlastních zásad. Kroky vyžadované v tomto článku se pro každou metodu liší.

Pomocí vlastního e-mailu v Azure Active Directory B2C (Azure AD B2C) můžete uživatelům, kteří se zaregistrují k používání vašich aplikací, odesílat přizpůsobené e-maily. Pomocí poskytovatele e-mailu třetí strany Mailjet můžete použít vlastní e-mailovou šablonu a odesílatele: adresu a předmět a také podporovat lokalizaci a vlastní nastavení jednorázového hesla (OTP).

Tato funkce je dostupná jenom pro vlastní zásady. Pro kroky nastavení vyberte v předchozím selektoru vlastní zásady .

Vlastní ověření e-mailu vyžaduje použití poskytovatele e-mailu třetí strany, jako je Mailjet, SendGrid nebo SparkPost, vlastní rozhraní REST API nebo libovolného poskytovatele e-mailu založeného na protokolu HTTP (včetně vašeho vlastního). Tento článek popisuje nastavení řešení, které používá Mailjet.

Vytvoření účtu Mailjet

Pokud ho ještě nemáte, začněte nastavením účtu Mailjet (zákazníci Azure můžou odemknout 6 000 e-mailů s limitem 200 e-mailů za den).

  1. Postupujte podlepokynůch
  2. Abyste mohli odesílat e-maily, zaregistrovat a ověřit e-mailovou adresu nebo doménu odesílatele.
  3. Přejděte na stránku SLUŽBY API Key Management. Zaznamenejte klíč rozhraní API a tajný klíč pro použití v pozdějším kroku. Při vytvoření účtu se oba klíče vygenerují automaticky.

Důležité

Mailjet nabízí zákazníkům možnost odesílat e-maily ze sdílených IP adres a vyhrazených IP adres. Při použití vyhrazených IP adres je potřeba správně vytvořit vlastní reputaci pomocí zahřátí IP adresy. Další informace najdete v tématu Návody zahřátí IP adresy ?.

Vytvoření klíče zásad Azure AD B2C

Dále uložte klíč rozhraní API Mailjet do klíče zásad Azure AD B2C, na který se mají zásady odkazovat.

  1. Přihlaste se k portálu Azure.
  2. Pokud máte přístup k více tenantům, v horní nabídce vyberte ikonu Nastavení a v nabídce Adresáře a předplatná přepněte do svého tenanta Azure AD B2C.
  3. V levém horním rohu webu Azure Portal zvolte Všechny služby a pak vyhledejte a vyberte Azure AD B2C.
  4. Na stránce Přehled vyberte rozhraní Identity Experience Framework.
  5. Vyberte Klíče zásad a pak vyberte Přidat.
  6. V nabídce Možnosti zvolte Ručně.
  7. Zadejte název klíče zásady. Například, MailjetApiKey. Předpona B2C_1A_ se automaticky přidá do názvu klíče.
  8. V tajném kódu zadejte klíč rozhraní API Mailjet, který jste předtím nahráli.
  9. V případě použití klíče vyberte Podpis.
  10. Vyberte Vytvořit.
  11. Vyberte Klíče zásad a pak vyberte Přidat.
  12. V nabídce Možnosti zvolte Ručně.
  13. Zadejte název klíče zásady. Například, MailjetSecretKey. Předpona B2C_1A_ se automaticky přidá do názvu klíče.
  14. V tajném kódu zadejte tajný klíč Mailjet, který jste předtím nahráli.
  15. V případě použití klíče vyberte Podpis.
  16. Vyberte Vytvořit.

Vytvoření šablony Mailjet

Pomocí účtu Mailjet vytvořeného a klíče rozhraní API Mailjet uloženého v klíči zásad Azure AD B2C vytvořte dynamickou transakční šablonu Mailjet.

  1. Na webu Mailjet otevřete stránku transakčních šablon a vyberte Vytvořit novou šablonu.

  2. Vyberte Možnost Kódováním v HTML a pak vyberte Kód od začátku.

  3. Zadejte jedinečný název šablony, například Verification emaila pak vyberte Vytvořit.

  4. V editoru HTML vložte následující šablonu HTML nebo použijte vlastní. Parametry {{var:otp:""}} se {{var:email:""}} budou dynamicky nahrazovat hodnotou jednorázového hesla a e-mailovou adresou uživatele.

    <!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. Rozbalení předmětu pro úpravy v levém horním rohu

    1. Do pole Předmět zadejte výchozí hodnotu předmětu. Mailjet používá tuto hodnotu, pokud rozhraní API neobsahuje parametr předmětu.
    2. Jako název zadejte název vaší společnosti.
    3. Jako adresu vyberte svoji e-mailovou adresu.
    4. Zvolte Uložit.
  6. V pravém horním rohu vyberte Uložit & publikování a pak Ano, publikujte změny.

  7. Poznamenejte si ID šablony šablony, kterou jste vytvořili pro použití v pozdějším kroku. Toto ID zadáte při přidání transformace deklarací identity.

Důležité

V dalších krocích se dozvíte, jak vytvořit vlastní soubory XML zásad. Doporučujeme použít ukázkovou vlastní zásadu vlastního ověření e-mailu dostupnou na GitHubu. DisplayControl_TrustFrameworkExtensions.xmlpoužívá TrustFrameworkExtensions.xml jako základní soubor, proto nezapomeňte do zásad zahrnout TrustFrameworkLocalization.xmlTrustFrameworkBase.xmlsoubory z TrustFrameworkExtensions.xml úvodního balíčku SocialAndLocalAccounts.

Přidání typů deklarací identity Azure AD B2C

V zásadách přidejte následující typy deklarací identity do elementu <ClaimsSchema> v rámci <BuildingBlocks>.

Tyto typy deklarací identity jsou nezbytné k vygenerování a ověření e-mailové adresy pomocí jednorázového hesla (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> -->

Přidání transformace deklarací identity

Dále potřebujete transformaci deklarací identity pro výstup deklarace řetězce JSON, která bude textem požadavku odeslaného do mailjetu.

Struktura objektu JSON je definována ID v tečkované notaci InputParameters a TransformationClaimTypes InputClaimTypes InputClaims. Čísla v zápisu tečky znamenají pole. Hodnoty pocházejí z hodnot InputClaims' a InputParameters' "Value" vlastnosti. Další informace o transformacích deklarací identity JSON najdete v tématu Transformace deklarací identity JSON.

Přidejte následující transformaci deklarací identity do elementu <ClaimsTransformations> v rámci <BuildingBlocks>. Proveďte následující aktualizace xml transformace deklarací identity:

  • Messages.0.TemplateID Aktualizujte hodnotu InputParameter pomocí ID transakční šablony Mailjet, kterou jste vytvořili dříve v šabloně Create a Mailjet.
  • Aktualizujte Messages.0.From.Email hodnotu adresy. Použijte platnou e-mailovou adresu, abyste zabránili označení ověřovacího e-mailu jako spamu.
  • Aktualizujte hodnotu vstupního parametru Messages.0.Subject řádku předmětu pomocí řádku předmětu, který je vhodný pro vaši organizaci.
<!-- 
<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> -->

Přidání definice obsahu identifikátoru DataUri

Pod transformace deklarací identity v rámci <BuildingBlocks>přidejte následující ContentDefinition odkaz na identifikátor URI dat verze 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> -->

Vytvoření DisplayControl

Ověřovací ovládací prvek zobrazení slouží k ověření e-mailové adresy s ověřovacím kódem, který se odešle uživateli.

Tento příklad ovládacího prvku zobrazení je nakonfigurován na:

  1. Shromážděte email typ deklarace identity adresy od uživatele.

  2. SendCode Pomocí akce vygenerujte kód jednorázového hesla a odešlete uživateli e-mail s kódem jednorázového hesla.

    Send verification code email action

  3. Počkejte, až uživatel zadá verificationCode typ deklarace identity s kódem odeslaným uživateli.

  4. email Vraťte se k vlastnímu technickému profilu s odkazem na tento ovládací prvek zobrazení.

V části definice obsahu, stále uvnitř <BuildingBlocks>, přidejte následující DisplayControl typu VerificationControl do zásad.

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

Přidání technických profilů jednorázového hesla

Technický GenerateOtp profil vygeneruje kód pro e-mailovou adresu. VerifyOtp Technický profil ověří kód přidružený k e-mailové adrese. Můžete změnit konfiguraci formátu a vypršení platnosti jednorázového hesla. Další informace o technických profilech jednorázového hesla najdete v tématu Definování jednorázového technického profilu hesla.

Poznámka:

Kódy jednorázového hesla vygenerované protokolem Web.TPEngine.Providers.OneTimePasswordProtocolProvider jsou svázané s relací prohlížeče. To znamená, že uživatel může vygenerovat jedinečné kódy jednorázového hesla v různých relacích prohlížeče, které jsou platné pro odpovídající relace. Naproti tomu kód jednorázového hesla vygenerovaný předdefinovaným poskytovatelem e-mailu je nezávislý na relaci prohlížeče, takže pokud uživatel vygeneruje nový kód jednorázového hesla v nové relaci prohlížeče, nahradí předchozí kód jednorázového hesla.

Do elementu <ClaimsProviders> přidejte následující technické profily.

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

Přidání technického profilu rozhraní REST API

Tento technický profil rozhraní REST API generuje obsah e-mailu (ve formátu Mailjet). Další informace o technických profilech RESTful najdete v tématu Definování technického profilu RESTful.

Stejně jako u technických profilů jednorázového hesla přidejte do <ClaimsProviders> prvku následující technické profily.

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

Vytvoření odkazu na DisplayControl

V posledním kroku přidejte odkaz na DisplayControl, který jste vytvořili. Přepište stávající LocalAccountSignUpWithLogonEmail technické profily s LocalAccountDiscoveryUsingEmailAddress vlastním kontrolním výrazem, které jsou nakonfigurované v základní zásadě, následujícím fragmentem kódu XML. Pokud jste použili starší verzi zásad Azure AD B2C, tyto technické profily se používají DisplayClaims s odkazem na zásadu DisplayControl.

Další informace naleznete v tématu Self-asserted technického profilu a 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>

[Volitelné] Lokalizace e-mailu

Pokud chcete e-mail lokalizovat, musíte odeslat lokalizované řetězce na Mailjet nebo poskytovatele e-mailu. Můžete například lokalizovat předmět e-mailu, text, zprávu s kódem nebo podpis e-mailu. Uděláte to tak, že pomocí transformace deklarací identity GetLocalizedStringsTransformation zkopírujete lokalizované řetězce do typů deklarací. Transformace GenerateEmailRequestBody deklarací identity, která generuje datovou část JSON, používá vstupní deklarace identity, které obsahují lokalizované řetězce.

  1. V zásadách definujte následující řetězcové deklarace identity: předmět, zpráva, codeIntro a podpis.

  2. Definujte transformaci deklarací identity GetLocalizedStringsTransformation, která nahradí lokalizované řetězcové hodnoty do deklarací identity z kroku 1.

  3. GenerateEmailRequestBody Změňte transformaci deklarací identity tak, aby používala vstupní deklarace identity s následujícím fragmentem kódu XML.

  4. Aktualizujte šablonu Mailjet tak, aby používala dynamické parametry místo všech řetězců, které budou lokalizovány službou 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. Přidejte následující element lokalizace .

    <!--
    <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. Přidejte odkazy na elementy LocalizedResources aktualizací ContentDefinitions elementu.

    <!--
    <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. Nakonec do profilů a LocalAccountDiscoveryUsingEmailAddress technických profilů přidejte následující vstupní transformaci LocalAccountSignUpWithLogonEmail deklarací identity.

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

[Volitelné] Lokalizace uživatelského rozhraní

Element Lokalizace umožňuje podporovat více národních prostředí nebo jazyků v zásadách pro cesty uživatele. Podpora lokalizace v zásadách umožňuje poskytovat řetězce specifické pro jazyk pro prvky uživatelského rozhraní pro ovládací prvek zobrazení ověření i chybové zprávy Jednorázové heslo. Přidejte následující LocalizedString do vašich 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>

Další kroky