Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Ważne
Od 1 maja 2025 r. usługa Azure AD B2C nie będzie już dostępna do zakupu dla nowych klientów. Dowiedz się więcej w naszych często zadawanych pytaniach.
Przed rozpoczęciem użyj selektora Wybierz typ zasad w górnej części tej strony, 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 Mailjet, 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 zewnętrznego dostawcy poczty e-mail, takiego jak Mailjet, SendGrid 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 narzędzia Mailjet.
Tworzenie konta mailjet
Jeśli jeszcze go nie masz, zacznij od skonfigurowania konta Mailjet (klienci platformy Azure mogą odblokować 6000 wiadomości e-mail z limitem 200 wiadomości e-mail/dzień).
- Postępuj zgodnie z instrukcjami konfiguracji w temacie Create a Mailjet Account (Tworzenie konta Mailjet).
- Aby móc wysyłać wiadomości e-mail, zarejestruj i zweryfikuj adres e-mail lub domenę nadawcy.
- Przejdź do strony API Key Management. Zarejestruj klucz interfejsu API i klucz tajny do użycia w późniejszym kroku. Oba klucze są generowane automatycznie po utworzeniu konta.
Ważne
Firma Mailjet oferuje klientom możliwość wysyłania wiadomości e-mail z udostępnionych adresów IP i dedykowanych adresów IP. Kiedy używasz dedykowanych adresów IP, musisz odpowiednio zbudować swoją reputację poprzez rozgrzewanie adresu IP. Aby uzyskać więcej informacji, zobacz Jak rozgrzać mój adres IP ?.
Tworzenie klucza zasad usługi Azure AD B2C
Następnie zapisz klucz interfejsu API Mailjet w kluczu zasad usługi Azure AD B2C, aby odwoływać się do zasad.
- Zaloguj się do portalu Azure.
- Jeśli masz dostęp do wielu dzierżaw, wybierz ikonę Ustawienia w górnym menu, aby przełączyć się na dzierżawę Azure AD B2C z menu Katalogi + subskrypcje.
- Wybierz pozycję Wszystkie usługi w lewym górnym rogu witryny Azure Portal, a następnie wyszukaj i wybierz pozycję Azure AD B2C.
- Na stronie Przegląd wybierz pozycję Identity Experience Framework.
- Wybierz Klucze zasad, a następnie wybierz Dodaj.
- W obszarze Opcje wybierz pozycję Ręczne.
- Wprowadź nazwę klucza zasad. Na przykład
MailjetApiKey
. PrefiksB2C_1A_
jest dodawany automatycznie do nazwy klucza. - W polu 'Secret' wprowadź wcześniej zapisany klucz interfejsu API Mailjet.
- W obszarze Użycie klucza wybierz pozycję Podpis.
- Wybierz Utwórz.
- Wybierz Klucze zasad, a następnie wybierz Dodaj.
- W obszarze Opcje wybierz pozycję Ręczne.
- Wprowadź nazwę klucza zasad. Na przykład
MailjetSecretKey
. PrefiksB2C_1A_
jest dodawany automatycznie do nazwy klucza. - W sekcji Tajne wprowadź wcześniej zarejestrowany klucz tajny Mailjet.
- W obszarze Użycie klucza wybierz pozycję Podpis.
- Wybierz Utwórz.
Tworzenie szablonu mailjet
Za pomocą utworzonego konta mailjet i klucza interfejsu API Mailjet przechowywanego w kluczu zasad usługi Azure AD B2C utwórz dynamiczny szablon transakcyjny mailjet.
W witrynie Mailjet otwórz stronę szablonów transakcyjnych i wybierz pozycję Utwórz nowy szablon.
Wybierz pozycję Przez kodowanie go w kodzie HTML, a następnie wybierz pozycję Kod od podstaw.
Wprowadź unikatową nazwę szablonu, taką jak
Verification email
, a następnie wybierz pozycję Utwórz.W edytorze HTML wklej poniższy szablon HTML lub użyj własnego szablonu. Parametry
{{var:otp:""}}
i{{var: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"> <!-- 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;"> </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 {{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"> </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ń pozycję Edytuj temat w lewym górnym rogu
- W polu Temat wprowadź wartość domyślną tematu. Mailjet używa tej wartości, gdy interfejs API nie zawiera parametru tematu.
- W polu Nazwa wpisz nazwę firmy.
- W polu Adres wybierz swój adres e-mail
- Wybierz Zapisz.
W prawym górnym rogu wybierz pozycję Zapisz i opublikuj, a następnie pozycję Tak, opublikuj zmiany
Zarejestruj identyfikator szablonu utworzonego do użycia w późniejszym kroku. 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ładowej zasady niestandardowej weryfikacji poczty e-mail dostępnej w witrynie GitHub.
DisplayControl_TrustFrameworkExtensions.xml
używa TrustFrameworkExtensions.xml
jako pliku podstawowego, dlatego upewnij się, że w swojej polityce uwzględnisz pliki TrustFrameworkBase.xml
, TrustFrameworkLocalization.xml
i TrustFrameworkExtensions.xml
z SocialAndLocalAccountspakietu startowego.
Dodaj typy oświadczeń usługi Azure AD B2C
W zasadach dodaj następujące typy oświadczeń do elementu <ClaimsSchema>
w ramach <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>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> -->
Dodaj przekształcenie roszczeń
Następnie potrzebne jest przekształcenie roszczeń w celu wygenerowania oświadczenia w formacie JSON, które będzie treścią żądania wysyłanego do usługi Mailjet.
Struktura obiektu JSON jest definiowana przez identyfikatory w notacji kropkowej InputParameters i TransformationClaimTypes w InputClaims. Liczby w notacji kropkowej oznaczają tablice. Wartości pochodzą z wartości w InputClaims oraz z właściwości "Value" w InputParameters. Aby uzyskać więcej informacji na temat przekształceń oświadczeń JSON, zobacz Przekształcenia oświadczeń JSON.
Dodaj następującą transformację oświadczeń w elemencie <ClaimsTransformations>
w ramach <BuildingBlocks>
. Wprowadź następujące aktualizacje w pliku XML przekształcania oświadczeń:
-
Messages.0.TemplateID
Zaktualizuj wartość InputParameter przy użyciu identyfikatora szablonu transakcyjnego Mailjet utworzonego wcześniej w temacie Tworzenie szablonu mailjet. -
Messages.0.From.Email
Zaktualizuj wartość adresu. Użyj prawidłowego adresu e-mail, aby zapobiec oznaczeniu weryfikacyjnej wiadomości e-mail jako spamu. - Zaktualizuj wartość parametru wejściowego wiersza tematu
Messages.0.Subject
przy użyciu wiersza tematu odpowiedniego dla twojej organizacji.
<!--
<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> -->
Dodaj definicję zawartości typu 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> -->
Utwórz kontrolkę wyświetlania
Kontrolka wyświetlania weryfikacji służy do weryfikowania adresu e-mail przy użyciu kodu weryfikacyjnego wysyłanego do użytkownika.
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 pewien
verificationCode
typ oświadczenia z kodem wysłanym do użytkownika.email
Wróć do własnego profilu technicznego, który zawiera odwołanie do tej kontrolki wyświetlania.
W definicjach zawartości wewnątrz <BuildingBlocks>
dodaj następujący DisplayControl, typu VerificationControl, do swojej polityki.
<!--
<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ść poczty e-mail (przy użyciu formatu Mailjet). 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 elementu <ClaimsProviders>
.
<ClaimsProvider>
<DisplayName>RestfulProvider</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="sendOtp">
<DisplayName>Use email API to send the code to the user</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.RestfulProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="ServiceUrl">https://api.mailjet.com/v3.1/send</Item>
<Item Key="AuthenticationType">Basic</Item>
<Item Key="SendClaimsIn">Body</Item>
<Item Key="ClaimUsedForRequestPayload">emailRequestBody</Item>
</Metadata>
<CryptographicKeys>
<Key Id="BasicAuthenticationUsername" StorageReferenceId="B2C_1A_MailjetApiKey" />
<Key Id="BasicAuthenticationPassword" StorageReferenceId="B2C_1A_MailjetSecretKey" />
</CryptographicKeys>
<InputClaimsTransformations>
<InputClaimsTransformation ReferenceId="GenerateEmailRequestBody" />
</InputClaimsTransformations>
<InputClaims>
<InputClaim ClaimTypeReferenceId="emailRequestBody" />
</InputClaims>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
Odwołaj się do DisplayControl
W ostatnim kroku dodaj odwołanie do utworzonej 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 korzystają z DisplayClaims
z odwołaniem do DisplayControl
.
Aby uzyskać więcej informacji, zobacz Samopotwierdzony 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 dostosować lokalnie wiadomość e-mail, musisz wysłać zlokalizowane ciągi do usługi Mailjet 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. Aby to zrobić, możesz użyć transformacji roszczeń GetLocalizedStringsTransformation, aby skopiować zlokalizowane ciągi do typów roszczeń. Przekształcenie roszczeń GenerateEmailRequestBody
, które generuje ładunek JSON, używa roszczeń wejściowych zawierających zlokalizowane ciągi znaków.
W swojej polityce zdefiniuj następujące oświadczenia ciągów: temat, komunikat, kodIntro i podpis.
Zdefiniuj przekształcenie GetLocalizedStringsTransformation oświadczeń w celu zastąpienia zlokalizowanych wartości ciągów w oświadczeniach z kroku 1.
Zmień transformację oświadczeń
GenerateEmailRequestBody
na korzystanie z oświadczeń wejściowych przy użyciu następującego fragmentu kodu XML.Zaktualizuj szablon mailjet, aby użyć parametrów dynamicznych zamiast wszystkich ciągów, które zostaną zlokalizowane przez usługę 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>
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> <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> -->
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 profili technicznych
LocalAccountSignUpWithLogonEmail
iLocalAccountDiscoveryUsingEmailAddress
.<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 zlokalizowanyCiąg do swoich ZasobówLokalizowanych.
<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>
Powiązana zawartość
- Na GitHubie można znaleźć przykład niestandardowej polityki weryfikacji adresu e-mail - DisplayControls.
- Aby uzyskać informacje o korzystaniu z 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.