Niestandardowa weryfikacja poczty e-mail za pomocą usługi SendGrid
Przed rozpoczęciem użyj selektora Wybierz typ zasad, aby wybrać typ konfigurowanych zasad. Usługa Azure Active Directory B2C oferuje dwie metody definiowania sposobu interakcji użytkowników z aplikacjami: za pomocą wstępnie zdefiniowanych przepływów użytkowników lub w pełni konfigurowalnych zasad niestandardowych. Kroki wymagane w tym artykule są różne dla każdej metody.
Użyj niestandardowej poczty e-mail w usłudze Azure Active Directory B2C (Azure AD B2C), aby wysłać niestandardową wiadomość e-mail do użytkowników, którzy zarejestrują się w celu korzystania z aplikacji. Korzystając z dostawcy poczty e-mail innej firmy SendGrid, możesz użyć własnego szablonu poczty e-mail i od: adresu i tematu, a także obsługiwać lokalizację i niestandardowe ustawienia jednorazowego hasła (OTP).
Ta funkcja jest dostępna tylko dla zasad niestandardowych. Aby uzyskać instrukcje konfiguracji, wybierz pozycję Zasady niestandardowe w poprzednim selektorze.
Niestandardowa weryfikacja poczty e-mail wymaga użycia dostawcy poczty e-mail innej firmy, takiego jak SendGrid, Mailjet lub SparkPost, niestandardowy interfejs API REST lub dowolny dostawca poczty e-mail oparty na protokole HTTP (w tym własny). W tym artykule opisano konfigurowanie rozwiązania korzystającego z usługi SendGrid.
Tworzenie konta usługi SendGrid
Jeśli jeszcze go nie masz, zacznij od skonfigurowania konta usługi SendGrid. Aby uzyskać instrukcje dotyczące konfiguracji, zobacz sekcję Tworzenie konta usługi SendGrid w temacie Jak wysyłać wiadomości e-mail przy użyciu usługi SendGrid z platformą Azure.
Upewnij się, że ukończono sekcję, w której utworzono klucz interfejsu API usługi SendGrid. Zarejestruj klucz interfejsu API do użycia w późniejszym kroku.
Ważne
Usługa SendGrid oferuje klientom możliwość wysyłania wiadomości e-mail z udostępnionych adresów IP i dedykowanych adresów IP. W przypadku korzystania z dedykowanych adresów IP należy prawidłowo utworzyć własną reputację przy użyciu rozgrzewki adresu IP. Aby uzyskać więcej informacji, zobacz Rozgrzewanie adresu IP.
Tworzenie klucza zasad usługi Azure AD B2C
Następnie zapisz klucz interfejsu API usługi SendGrid w kluczu zasad usługi Azure AD B2C, aby odwoływać się do zasad.
- Zaloguj się w witrynie Azure Portal.
- Jeśli masz dostęp do wielu dzierżaw, wybierz ikonę Ustawienia w górnym menu, aby przełączyć się do dzierżawy usługi Azure AD B2C z menu Katalogi i subskrypcje.
- W lewym górnym rogu witryny Azure Portal wybierz pozycję Wszystkie usługi, a następnie wyszukaj i wybierz pozycję Azure AD B2C.
- Na stronie Przegląd wybierz pozycję Identity Experience Framework.
- Wybierz pozycję Klucze zasad, a następnie wybierz pozycję Dodaj.
- W obszarze Opcje wybierz pozycję Ręczne.
- Wprowadź nazwę klucza zasad. Na przykład
SendGridSecret
. PrefiksB2C_1A_
jest dodawany automatycznie do nazwy klucza. - W obszarze Wpis tajny wprowadź wcześniej zarejestrowany klucz interfejsu API usługi SendGrid.
- W obszarze Użycie klucza wybierz pozycję Podpis.
- Wybierz pozycję Utwórz.
Tworzenie szablonu usługi SendGrid
Za pomocą utworzonego konta usługi SendGrid i klucza interfejsu API Usługi SendGrid przechowywanego w kluczu zasad usługi Azure AD B2C utwórz dynamiczny szablon transakcyjny usługi SendGrid.
W witrynie SendGrid otwórz stronę szablonów transakcyjnych i wybierz pozycję Utwórz szablon dynamiczny.
Wprowadź unikatową nazwę szablonu, taką jak
Verification email
, a następnie wybierz pozycję Utwórz.Aby rozpocząć edytowanie nowego szablonu, wybierz szablon ,
Verification email
a następnie wybierz pozycję Dodaj wersję.Wybierz pozycję Pusty szablon , a następnie Edytor kodu.
W edytorze HTML wklej poniższy szablon HTML lub użyj własnego szablonu. Parametry
{{otp}}
i{{email}}
są zastępowane dynamicznie wartością hasła jednorazowego i adresem e-mail użytkownika.<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en"><head id="Head1"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"><title>Contoso demo account email verification code</title><meta name="ROBOTS" content="NOINDEX, NOFOLLOW"> <style> table td {border-collapse:collapse;margin:0;padding:0;} </style> </head> <body dir="ltr" lang="en"> <table width="100%" cellpadding="0" cellspacing="0" border="0" dir="ltr" lang="en"> <tr> <td valign="top" width="50%"></td> <td valign="top"> <!-- Email Header --> <table width="640" cellpadding="0" cellspacing="0" border="0" dir="ltr" lang="en" style="border-left:1px solid #e3e3e3;border-right: 1px solid #e3e3e3;"> <tr style="background-color: #0072C6;"> <td width="1" style="background:#0072C6; border-top:1px solid #e3e3e3;"></td> <td width="24" style="border-top:1px solid #e3e3e3;border-bottom:1px solid #e3e3e3;"> </td> <td width="310" valign="middle" style="border-top:1px solid #e3e3e3; border-bottom:1px solid #e3e3e3;padding:12px 0;"> <h1 style="line-height:20pt;font-family:Segoe UI Light; font-size:18pt; color:#ffffff; font-weight:normal;"> <span id="HeaderPlaceholder_UserVerificationEmailHeader"><font color="#FFFFFF">Verify your email address</font></span> </h1> </td> <td width="24" style="border-top: 1px solid #e3e3e3;border-bottom: 1px solid #e3e3e3;"> </td> </tr> </table> <!-- Email Content --> <table width="640" cellpadding="0" cellspacing="0" border="0" dir="ltr" lang="en"> <tr> <td width="1" style="background:#e3e3e3;"></td> <td width="24"> </td> <td id="PageBody" width="640" valign="top" colspan="2" style="border-bottom:1px solid #e3e3e3;padding:10px 0 20px;border-bottom-style:hidden;"> <table cellpadding="0" cellspacing="0" border="0"> <tr> <td width="630" style="font-size:10pt; line-height:13pt; color:#000;"> <table cellpadding="0" cellspacing="0" border="0" width="100%" style="" dir="ltr" lang="en"> <tr> <td> <div style="font-family:'Segoe UI', Tahoma, sans-serif; font-size:14px; color:#333;"> <span id="BodyPlaceholder_UserVerificationEmailBodySentence1">Thanks for verifying your {{email}} account!</span> </div> <br> <div style="font-family:'Segoe UI', Tahoma, sans-serif; font-size:14px; color:#333; font-weight: bold"> <span id="BodyPlaceholder_UserVerificationEmailBodySentence2">Your code is: {{otp}}</span> </div> <br> <br> <div style="font-family:'Segoe UI', Tahoma, sans-serif; font-size:14px; color:#333;"> Sincerely, </div> <div style="font-family:'Segoe UI', Tahoma, sans-serif; font-size:14px; font-style:italic; color:#333;"> Contoso </div> </td> </tr> </table> </td> </tr> </table> </td> <td width="1"> </td> <td width="1"></td> <td width="1"> </td> <td width="1" valign="top"></td> <td width="29"> </td> <td width="1" style="background:#e3e3e3;"></td> </tr> <tr> <td width="1" style="background:#e3e3e3; border-bottom:1px solid #e3e3e3;"></td> <td width="24" style="border-bottom:1px solid #e3e3e3;"> </td> <td id="PageFooterContainer" width="585" valign="top" colspan="6" style="border-bottom:1px solid #e3e3e3;padding:0px;"> </td> <td width="29" style="border-bottom:1px solid #e3e3e3;"> </td> <td width="1" style="background:#e3e3e3; border-bottom:1px solid #e3e3e3;"></td> </tr> </table> </td> <td valign="top" width="50%"></td> </tr> </table> </body> </html>
Rozwiń menu Ustawienia, a w polu Nazwa wersji wprowadź wersję szablonu.
W polu Temat wprowadź wartość
{{subject}}
.Wybierz pozycję Zapisz.
Wróć do strony Szablony transakcyjne, wybierając strzałkę wstecz.
Zarejestruj identyfikator szablonu utworzonego do użycia w późniejszym kroku. Na przykład
d-989077fbba9746e89f3f6411f596fb96
. Ten identyfikator należy określić podczas dodawania przekształcenia oświadczeń.
Ważne
W następnych krokach pokazano, jak utworzyć niestandardowe pliki XML zasad. Zalecamy użycie przykładowych niestandardowych zasad weryfikacji niestandardowej niestandardowej weryfikacji poczty e-mail dostępnych w witrynie GitHub. DisplayControl_TrustFrameworkExtensions.xml
używa TrustFrameworkExtensions.xml
jako pliku podstawowego, dlatego upewnij się, że w zasadach dołącz TrustFrameworkBase.xml
pliki TrustFrameworkLocalization.xml
i z TrustFrameworkExtensions.xml
pakietu startowego SocialAndLocalAccounts.
Dodawanie typów oświadczeń usługi Azure AD B2C
W zasadach dodaj następujące typy oświadczeń do <ClaimsSchema>
elementu w programie <BuildingBlocks>
.
Te typy oświadczeń są niezbędne do wygenerowania i zweryfikowania adresu e-mail przy użyciu jednorazowego kodu hasła (OTP).
<!--
<BuildingBlocks>
<ClaimsSchema> -->
<ClaimType Id="Otp">
<DisplayName>Secondary One-time password</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="emailRequestBody">
<DisplayName>SendGrid request body</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="VerificationCode">
<DisplayName>Secondary Verification Code</DisplayName>
<DataType>string</DataType>
<UserHelpText>Enter your email verification code</UserHelpText>
<UserInputType>TextBox</UserInputType>
</ClaimType>
<!--
</ClaimsSchema>
</BuildingBlocks> -->
Dodawanie przekształcenia oświadczeń
Następnie potrzebne jest przekształcenie oświadczeń w celu wyprowadzenia oświadczenia ciągu JSON, które tworzy treść żądania wysłanego do usługi SendGrid.
Struktura obiektu JSON jest definiowana przez identyfikatory w notacji kropkowej parametrów InputParameters i TransformationClaimTypes elementu InputClaims. Liczby w notacji kropkowej oznaczają tablice. Wartości pochodzą z wartości InputClaims i właściwości InputParameters "Value". Aby uzyskać więcej informacji na temat przekształceń oświadczeń JSON, zobacz Przekształcenia oświadczeń JSON.
Dodaj następujące przekształcenie oświadczeń do <ClaimsTransformations>
elementu w programie <BuildingBlocks>
. Wprowadź następujące aktualizacje w pliku XML przekształcania oświadczeń:
template_id
Zaktualizuj wartość InputParameter przy użyciu identyfikatora szablonu transakcyjnego SendGrid utworzonego wcześniej w szablonie Create SendGrid (Utwórz usługę SendGrid).from.email
Zaktualizuj wartość adresu. Użyj prawidłowego adresu e-mail, aby zapobiec oznaczeniu weryfikacyjnej wiadomości e-mail jako spamu.Uwaga
Ten adres e-mail należy zweryfikować w usłudze SendGrid w obszarze Uwierzytelnianie nadawcy przy użyciu uwierzytelniania domeny lub uwierzytelniania pojedynczego nadawcy.
- Zaktualizuj wartość parametru wejściowego wiersza tematu
personalizations.0.dynamic_template_data.subject
przy użyciu wiersza tematu odpowiedniego dla twojej organizacji.
<!--
<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> -->
Dodawanie definicji zawartości identyfikatora DataUri
Poniżej przekształceń oświadczeń w programie <BuildingBlocks>
dodaj następujący element ContentDefinition , aby odwołać się do identyfikatora URI danych w wersji 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> -->
Tworzenie kontrolek wyświetlania
Kontrolka wyświetlania weryfikacji służy do weryfikowania adresu e-mail przy użyciu kodu weryfikacyjnego, który otrzymuje użytkownik.
Ta przykładowa kontrolka wyświetlania jest skonfigurowana do:
email
Zbierz typ oświadczenia adresu od użytkownika.Korzystając z akcji, wygeneruj
SendCode
kod OTP i wyślij wiadomość e-mail z kodem OTP do użytkownika.Poczekaj, aż użytkownik podać
verificationCode
typ oświadczenia z kodem wysłanym do użytkownika.email
Wróć do samodzielnego profilu technicznego, który zawiera odwołanie do tej kontrolki wyświetlania.
W obszarze definicje zawartości w obszarze <BuildingBlocks>
dodaj następujący element DisplayControl typu VerificationControl do zasad.
<!--
<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> -->
Dodawanie profilów technicznych OTP
Profil GenerateOtp
techniczny generuje kod dla adresu e-mail. Profil VerifyOtp
techniczny weryfikuje kod skojarzony z adresem e-mail. Możesz zmienić konfigurację formatu i wygaśnięcia jednorazowego hasła. Aby uzyskać więcej informacji na temat profilów technicznych OTP, zobacz Definiowanie jednorazowego profilu technicznego hasła.
Uwaga
Kody OTP generowane przez protokół Web.TPEngine.Providers.OneTimePasswordProtocolProvider są powiązane z sesją przeglądarki. Oznacza to, że użytkownik może wygenerować unikatowe kody OTP w różnych sesjach przeglądarki, które są prawidłowe dla odpowiednich sesji. Natomiast kod OTP generowany przez wbudowanego dostawcę poczty e-mail jest niezależny od sesji przeglądarki, więc jeśli użytkownik wygeneruje nowy kod OTP w nowej sesji przeglądarki, zastępuje poprzedni kod OTP.
Dodaj następujące profile techniczne do <ClaimsProviders>
elementu .
<!--
<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> -->
Dodawanie profilu technicznego interfejsu API REST
Ten profil techniczny interfejsu API REST generuje zawartość wiadomości e-mail (przy użyciu formatu SendGrid). Aby uzyskać więcej informacji na temat profilów technicznych RESTful, zobacz Definiowanie profilu technicznego RESTful.
Podobnie jak w przypadku profilów technicznych OTP, dodaj następujące profile techniczne do <ClaimsProviders>
elementu .
<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>
Tworzenie odwołania do kontrolek wyświetlania
W ostatnim kroku dodaj odwołanie do utworzonego kontrolki DisplayControl. Zastąp istniejące LocalAccountSignUpWithLogonEmail
i LocalAccountDiscoveryUsingEmailAddress
samodzielne profile techniczne skonfigurowane w zasadach podstawowych następującym fragmentem kodu XML. Jeśli użyto starszej wersji zasad usługi Azure AD B2C, te profile techniczne są używane DisplayClaims
z odwołaniem do .DisplayControl
Aby uzyskać więcej informacji, zobacz Samodzielny profil techniczny i 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>
[Opcjonalnie] Lokalizowanie wiadomości e-mail
Aby zlokalizować wiadomość e-mail, musisz wysłać zlokalizowane ciągi do usługi SendGrid lub dostawcy poczty e-mail. Możesz na przykład zlokalizować temat wiadomości e-mail, treść, wiadomość kodowa lub podpis wiadomości e-mail. W tym celu można użyć przekształcenia oświadczeń GetLocalizedStringsTransformation , aby skopiować zlokalizowane ciągi do typów oświadczeń. Przekształcenie GenerateEmailRequestBody
oświadczeń, które generuje ładunek JSON, używa oświadczeń wejściowych zawierających zlokalizowane ciągi.
W zasadach zdefiniuj następujące oświadczenia ciągów: temat, komunikat, kodIntro i podpis.
Zdefiniuj przekształcenie oświadczeń GetLocalizedStringsTransformation w celu zastąpienia zlokalizowanych wartości ciągów do oświadczeń z kroku 1.
Zmień przekształcenie oświadczeń,
GenerateEmailRequestBody
aby używać oświadczeń wejściowych przy użyciu następującego fragmentu kodu XML.Zaktualizuj szablon usługi SendGrid, aby używał parametrów dynamicznych zamiast wszystkich ciągów zlokalizowanych w usłudze Azure AD B2C.
<ClaimsTransformation Id="GetLocalizedStringsForEmail" TransformationMethod="GetLocalizedStringsTransformation"> <OutputClaims> <OutputClaim ClaimTypeReferenceId="subject" TransformationClaimType="email_subject" /> <OutputClaim ClaimTypeReferenceId="message" TransformationClaimType="email_message" /> <OutputClaim ClaimTypeReferenceId="codeIntro" TransformationClaimType="email_code" /> <OutputClaim ClaimTypeReferenceId="signature" TransformationClaimType="email_signature" /> </OutputClaims> </ClaimsTransformation> <ClaimsTransformation Id="GenerateEmailRequestBody" TransformationMethod="GenerateJson"> <InputClaims> <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="personalizations.0.to.0.email" /> <InputClaim ClaimTypeReferenceId="subject" TransformationClaimType="personalizations.0.dynamic_template_data.subject" /> <InputClaim ClaimTypeReferenceId="otp" TransformationClaimType="personalizations.0.dynamic_template_data.otp" /> <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="personalizations.0.dynamic_template_data.email" /> <InputClaim ClaimTypeReferenceId="message" TransformationClaimType="personalizations.0.dynamic_template_data.message" /> <InputClaim ClaimTypeReferenceId="codeIntro" TransformationClaimType="personalizations.0.dynamic_template_data.codeIntro" /> <InputClaim ClaimTypeReferenceId="signature" TransformationClaimType="personalizations.0.dynamic_template_data.signature" /> </InputClaims> <InputParameters> <InputParameter Id="template_id" DataType="string" Value="d-1234567890" /> <InputParameter Id="from.email" DataType="string" Value="my_email@mydomain.com" /> </InputParameters> <OutputClaims> <OutputClaim ClaimTypeReferenceId="emailRequestBody" TransformationClaimType="outputClaim" /> </OutputClaims> </ClaimsTransformation>
Dodaj następujący element Lokalizacja .
<!-- <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> -->
Dodaj odwołania do elementów LocalizedResources, aktualizując element ContentDefinitions .
<!-- <BuildingBlocks> --> <ContentDefinitions> <ContentDefinition Id="api.localaccountsignup"> <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.2</DataUri> <LocalizedResourcesReferences MergeBehavior="Prepend"> <LocalizedResourcesReference Language="en" LocalizedResourcesReferenceId="api.custom-email.en" /> <LocalizedResourcesReference Language="es" LocalizedResourcesReferenceId="api.custom-email.es" /> </LocalizedResourcesReferences> </ContentDefinition> <ContentDefinition Id="api.localaccountpasswordreset"> <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.2</DataUri> <LocalizedResourcesReferences MergeBehavior="Prepend"> <LocalizedResourcesReference Language="en" LocalizedResourcesReferenceId="api.custom-email.en" /> <LocalizedResourcesReference Language="es" LocalizedResourcesReferenceId="api.custom-email.es" /> </LocalizedResourcesReferences> </ContentDefinition> </ContentDefinitions> <!-- </BuildingBlocks> -->
Na koniec dodaj następujące przekształcenia oświadczeń wejściowych do
LocalAccountSignUpWithLogonEmail
profilów technicznych i .LocalAccountDiscoveryUsingEmailAddress
<InputClaimsTransformations> <InputClaimsTransformation ReferenceId="GetLocalizedStringsForEmail" /> </InputClaimsTransformations>
[Opcjonalnie] Lokalizowanie interfejsu użytkownika
Element Lokalizacja umożliwia obsługę wielu ustawień regionalnych lub języków w zasadach dotyczących podróży użytkownika. Obsługa lokalizacji w zasadach umożliwia udostępnianie ciągów specyficznych dla języka zarówno dla elementów interfejsu użytkownika kontrolki wyświetlania weryfikacji, jak i jednorazowych komunikatów o błędach hasła. Dodaj następujący localizedString do lokalizacjiLokalizowaneResources.
<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>
Następne kroki
- Znajdź przykład niestandardowych zasad weryfikacji poczty e-mail — DisplayControls w witrynie GitHub.
- Dowiedz się, jak używać niestandardowego interfejsu API REST lub dowolnego dostawcy poczty e-mail SMTP opartego na protokole HTTP, zobacz Definiowanie profilu technicznego RESTful w niestandardowych zasadach usługi Azure AD B2C.