Megosztás a következőn keresztül:


Egyéni e-mail-ellenőrzés a SendGrid használatával

Mielőtt hozzákezdene, a Szabályzattípus kiválasztása választóval válassza ki a beállított szabályzat típusát. Az Azure Active Directory B2C két módszert kínál annak meghatározására, hogy a felhasználók hogyan használják az alkalmazásokat: előre definiált felhasználói folyamatokon vagy teljesen konfigurálható egyéni szabályzatokon keresztül. A cikkben szereplő lépések különbözőek az egyes metódusok esetében.

Egyéni e-maileket az Azure Active Directory B2C-ben (Azure AD B2C) használva testre szabott e-maileket küldhet az alkalmazások használatára regisztráló felhasználóknak. A SendGrid külső e-mail-szolgáltató használatával használhatja saját e-mail-sablonját és Feladó: címét és tárgyát, valamint támogathatja a honosítást és az egyszeri jelszó (OTP) egyéni beállításait.

Ez a funkció csak egyéni szabályzatokhoz érhető el. A beállítási lépésekhez válassza az egyéni szabályzatot az előző választóban.

Az egyéni e-mail-ellenőrzéshez külső e-mail-szolgáltató, például SendGrid, Mailjet vagy SparkPost, egyéni REST API vagy HTTP-alapú e-mail-szolgáltató (a sajátját is beleértve) kell használnia. Ez a cikk a SendGridet használó megoldás beállítását ismerteti.

SendGrid-fiók létrehozása

Ha még nem rendelkezik ilyen fiókkal, először állítson be egy SendGrid-fiókot. A beállítási utasításokért tekintse meg a SendGrid-fiók létrehozása című szakaszt, amely bemutatja, hogyan küldhet e-maileket a SendGrid és az Azure használatával.

Győződjön meg arról, hogy befejezi azt a szakaszt, amelyben Létrehoz egy SendGrid API-kulcsot. Rögzítse az API-kulcsot egy későbbi lépésben való használatra.

Fontos

A SendGrid lehetővé teszi az ügyfelek számára, hogy megosztott IP-címről és dedikált IP-címekről küldjenek e-maileket. Dedikált IP-címek használata esetén az IP-címek bemelegítésével megfelelően kell felépítenie a saját hírnevét. További információ: Ip-cím bemelegítése.

Azure AD B2C szabályzatkulcs létrehozása

Ezután tárolja a SendGrid API-kulcsot egy Azure AD B2C-szabályzatkulcsban, amelyre a szabályzatok hivatkozni szeretnének.

  1. Jelentkezzen be az Azure Portalra.
  2. Ha több bérlőhöz is hozzáfér, a felső menüben válassza a Gépház ikont az Azure AD B2C-bérlőre való váltáshoz a Címtárak + előfizetések menüből.
  3. Az Azure Portal bal felső sarkában válassza a Minden szolgáltatás lehetőséget, majd keresse meg és válassza az Azure AD B2C-t.
  4. Az Áttekintés lapon válassza az Identity Experience Framework lehetőséget.
  5. Válassza a Házirendkulcsok lehetőséget, majd válassza a Hozzáadás lehetőséget.
  6. A Beállítások beállításnál válassza a Manuális lehetőséget.
  7. Adja meg a szabályzatkulcs nevét. For example, SendGridSecret. A rendszer automatikusan hozzáadja az előtagot B2C_1A_ a kulcs nevéhez.
  8. A Titkos kód mezőbe írja be a korábban rögzített SendGrid API-kulcsot.
  9. Kulcshasználat esetén válassza az Aláírás lehetőséget.
  10. Válassza a Létrehozás lehetőséget.

SendGrid-sablon létrehozása

Egy Azure AD B2C-szabályzatkulcsban tárolt SendGrid-fiók és SendGrid API-kulcs létrehozása után hozzon létre egy SendGrid dinamikus tranzakciós sablont.

  1. A SendGrid webhelyen nyissa meg a tranzakciós sablonok lapot, és válassza a Dinamikus sablon létrehozása lehetőséget.

  2. Adjon meg egy egyedi sablonnevet, és Verification email válassza a Létrehozás lehetőséget.

  3. Az új sablon szerkesztésének megkezdéséhez jelölje ki a sablont, Verification emailmajd válassza a Verzió hozzáadása lehetőséget.

  4. Válassza az Üres sablon , majd a Kódszerkesztő lehetőséget.

  5. A HTML-szerkesztőben illessze be a következő HTML-sablont, vagy használja a sajátját. {{email}} A {{otp}} rendszer dinamikusan lecseréli a paramétereket az egyszeri jelszóértékre és a felhasználói e-mail-címre.

    <!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;">&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 {{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">&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>
    
  6. Bontsa ki Gépház menüt, és a Verzió neve mezőben adjon meg egy sablonverziót.

  7. A Tárgy mezőbe írja be a következőt{{subject}}:

  8. Válassza a Mentés parancsot.

  9. Térjen vissza a Tranzakciós sablonok lapra a vissza nyíl kiválasztásával.

  10. Jegyezze fel a sablon egy későbbi lépésben való használatához létrehozott azonosítóját . For example, d-989077fbba9746e89f3f6411f596fb96. Ezt az azonosítót a jogcímátalakítás hozzáadásakor adja meg.

Fontos

A következő lépések bemutatják, hogyan hozhatja létre egyéni szabályzat XML-fájljait. Javasoljuk, hogy a GitHubon elérhető egyéni e-mail-ellenőrzési egyéni szabályzatmintát használja. DisplayControl_TrustFrameworkExtensions.xmlalapfájlként használjaTrustFrameworkExtensions.xml, ezért ügyeljen arra, TrustFrameworkLocalization.xml TrustFrameworkExtensions.xml hogy a házirendbe belefoglalja TrustFrameworkBase.xmla SocialAndLocalAccounts kezdőcsomagból származó fájlokat.

Azure AD B2C-jogcímtípusok hozzáadása

A szabályzatban adja hozzá a következő jogcímtípusokat a <ClaimsSchema> benne lévő <BuildingBlocks>elemhez.

Ezek a jogcímtípusok szükségesek az e-mail-cím egyszeri jelszó (OTP) kóddal történő létrehozásához és ellenőrzéséhez.

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

A jogcímátalakítás hozzáadása

Ezután szüksége lesz egy jogcímátalakításra egy JSON-sztringre vonatkozó jogcím kimenetéhez, amely a SendGridnek küldött kérés törzsét képezi.

A JSON-objektum struktúráját az InputParameters és az InputClaims TransformationClaimTypes pontjegyzetében szereplő azonosítók határozzák meg. A pont jelölésében szereplő számok tömbökre utalnak. Az értékek az InputClaims értékeiből és az InputParameters "Érték" tulajdonságaiból származnak. További információ a JSON-jogcímek átalakításáról: JSON-jogcímátalakítások.

Adja hozzá a következő jogcímátalakítást a következő elemhez a <ClaimsTransformations> következőben <BuildingBlocks>: Végezze el a következő frissítéseket a jogcím-átalakítási XML-fájlban:

  • Frissítse az template_id InputParameter értéket a SendGrid-sablon létrehozásakor korábban létrehozott SendGrid tranzakciós sablon azonosítójával.
  • Frissítse a from.email cím értékét. Érvényes e-mail-címmel megakadályozhatja, hogy az ellenőrző e-mail levélszemétként legyen megjelölve.

    Megjegyzés:

    Ezt az e-mail-címet a SendGridben kell ellenőrizni a Feladó hitelesítése területen tartomány-hitelesítéssel vagy önálló feladó-hitelesítéssel.

  • Frissítse a tárgysor bemeneti paraméterének personalizations.0.dynamic_template_data.subject értékét a szervezetnek megfelelő tárgysorra.
<!-- 
<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> -->

DataUri-tartalomdefiníció hozzáadása

A jogcímátalakítások <BuildingBlocks>alatt adja hozzá a következő ContentDefinitiont a 2.1.2-es adat URI-ra való hivatkozáshoz:

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

DisplayControl létrehozása

Az ellenőrző megjelenítési vezérlővel ellenőrizheti az e-mail-címet a felhasználó által kapott ellenőrző kóddal.

Ez a példamegjelenítési vezérlő a következőre van konfigurálva:

  1. Gyűjtse össze a email cím jogcímtípusát a felhasználótól.

  2. SendCode A művelettel hozzon létre egy OTP-kódot, és küldjön egy e-mailt az OTP-kóddal a felhasználónak.

    Send verification code email action

  3. Várja meg, amíg a felhasználó megadja a verificationCode jogcímtípust a felhasználónak küldött kóddal.

  4. Adja vissza a vissza az email önaláírt műszaki profilhoz, amely hivatkozik erre a megjelenítési vezérlőre.

A tartalomdefiníciók alatt adja <BuildingBlocks>hozzá a következő, VerificationControl típusú DisplayControlt a szabályzathoz.

<!--
<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 technikai profilok hozzáadása

A GenerateOtp technikai profil létrehoz egy kódot az e-mail-címhez. A VerifyOtp technikai profil ellenőrzi az e-mail-címhez társított kódot. Módosíthatja a formátum konfigurációját és az egyszeri jelszó lejáratát. Az OTP technikai profiljaival kapcsolatos további információkért lásd az egyszeri jelszó technikai profiljának definiálása című témakört.

Megjegyzés:

A Web.TPEngine.Providers.OneTimePasswordProtocolProvider protokoll által létrehozott OTP-kódok a böngésző munkamenetéhez vannak kötve. Ez azt jelenti, hogy a felhasználó egyedi OTP-kódokat hozhat létre különböző böngésző munkamenetekben, amelyek mindegyike érvényes a megfelelő munkamenetekre. Ezzel szemben a beépített e-mail-szolgáltató által létrehozott OTP-kód független a böngésző munkamenetétől, így ha egy felhasználó új OTP-kódot hoz létre egy új böngésző munkamenetben, az felülírja a korábbi OTP-kódot.

Adja hozzá a következő technikai profilokat az <ClaimsProviders> elemhez.

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

REST API technikai profil hozzáadása

Ez a REST API technikai profilja létrehozza az e-mail-tartalmat (a SendGrid formátum használatával). A RESTful technikai profilokról további információt a RESTful műszaki profil definiálása című témakörben talál.

Az OTP technikai profiljaihoz hasonlóan adja hozzá az alábbi technikai profilokat az <ClaimsProviders> elemhez.

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

Hivatkozás készítése a DisplayControlra

Az utolsó lépésben adjon hozzá egy hivatkozást a létrehozott DisplayControlhoz. Felülbírálja az alapszabályzatban konfigurált meglévő LocalAccountSignUpWithLogonEmail és LocalAccountDiscoveryUsingEmailAddress önaláért technikai profilokat az alábbi XML-kódrészlettel. Ha az Azure AD B2C-szabályzat egy korábbi verzióját használta, ezek a technikai profilok DisplayClaims a DisplayControl.

További információkért tekintse meg az önérvényesített műszaki profilt és a DisplayControlt.

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

[Nem kötelező] Az e-mail honosítása

Az e-mail honosításához honosított sztringeket kell küldenie a SendGridnek vagy az e-mail-szolgáltatónak. Honosíthatja például az e-mail tárgyát, törzsét, kódüzenetét vagy aláírását. Ehhez a GetLocalizedStringsTransformation jogcímátalakítással honosított sztringeket másolhat jogcímtípusokba. A GenerateEmailRequestBody JSON hasznos adatait generáló jogcímátalakítás a honosított sztringeket tartalmazó bemeneti jogcímeket használja.

  1. A szabályzatban adja meg a következő sztring jogcímeket: tárgy, üzenet, codeIntro és aláírás.

  2. GetLocalizedStringsTransformation jogcímátalakítás definiálása honosított sztringértékek helyettesítéséhez az 1. lépésben szereplő jogcímekre.

  3. Módosítsa a jogcímátalakítást GenerateEmailRequestBody úgy, hogy bemeneti jogcímeket használjon az alábbi XML-kódrészlettel.

  4. Frissítse a SendGrid-sablont, hogy dinamikus paramétereket használjon az Azure AD B2C által honosított összes sztring helyett.

    <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>
    
  5. Adja hozzá a következő honosítási elemet.

    <!--
    <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> -->
    
  6. A ContentDefinitions elem frissítésével hivatkozásokat adhat a LocalizedResources elemekhez .

    <!--
    <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. Végül adja hozzá a következő bemeneti jogcímek átalakítását a LocalAccountSignUpWithLogonEmail műszaki profilokhoz LocalAccountDiscoveryUsingEmailAddress .

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

[Nem kötelező] A felhasználói felület honosítása

A Honosítás elem lehetővé teszi több területi beállítás vagy nyelv támogatását a házirendben a felhasználói folyamatokhoz. A házirendek honosítási támogatása lehetővé teszi, hogy nyelvspecifikus sztringeket biztosítson mind az Ellenőrzés megjelenítési vezérlő felhasználói felület elemeihez, mind az Egyszeri jelszó hibaüzenetekhez. Adja hozzá a következő LocalizedString parancsot a LocalizedResource-hoz.

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

További lépések