Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Viktigt!
Från och med den 1 maj 2025 är Azure AD B2C inte längre tillgängligt att köpa för nya kunder. Läs mer i våra vanliga frågor och svar.
Innan du börjar använder du väljaren Välj en principtyp överst på den här sidan för att välja den typ av princip som du konfigurerar. Azure Active Directory B2C erbjuder två metoder för att definiera hur användare interagerar med dina program: via fördefinierade användarflöden eller genom fullständigt konfigurerbara anpassade principer. De steg som krävs i den här artikeln skiljer sig åt för varje metod.
Använd anpassad e-post i Azure Active Directory B2C (Azure AD B2C) för att skicka anpassad e-post till användare som registrerar sig för att använda dina program. Genom att använda e-postleverantören SendGrid från tredje part kan du använda din egen e-postmall och Från: adress och ämne, samt stöd för lokalisering och anpassade inställningar för engångslösenord (OTP).
Den här funktionen är endast tillgänglig för anpassade principer. För installationsinstruktioner väljer du Anpassad princip i ovanstående väljare.
Anpassad e-postverifiering kräver användning av en e-postleverantör från tredje part som SendGrid, Mailjet eller SparkPost, ett anpassat REST-API eller någon HTTP-baserad e-postleverantör (inklusive din egen). I den här artikeln beskrivs hur du konfigurerar en lösning som använder SendGrid.
Skapa ett SendGrid-konto
Om du inte redan har ett börjar du med att konfigurera ett SendGrid-konto. Installationsinstruktioner finns i avsnittet Skapa ett SendGrid-konto i Så här skickar du e-post med SendGrid med Azure.
Se till att du slutför avsnittet där du skapar en SendGrid API-nyckel. Registrera API-nyckeln för användning i ett senare steg.
Viktigt!
SendGrid ger kunderna möjlighet att skicka e-postmeddelanden från delade IP-adresser och dedikerade IP-adresser. När du använder egna IP-adresser måste du bygga upp ditt rykte ordentligt med att värma upp IP-adressen. Mer information finns i Uppvärmning av en IP-adress.
Skapa Azure AD B2C-principnyckel
Därefter lagrar du SendGrid API-nyckeln i en Azure AD B2C-principnyckel som dina principer ska referera till.
- Logga in på Azure-portalen.
- Om du har åtkomst till flera klientorganisationer väljer du ikonen Inställningar på den översta menyn för att växla till din Azure AD B2C-klientorganisation från menyn Kataloger + prenumerationer.
- I det övre vänstra hörnet i Azure-portalen väljer du Alla tjänster och söker sedan efter och väljer Azure AD B2C.
- På sidan Översikt väljer du Identity Experience Framework.
- Välj Principnycklar och välj sedan Lägg till.
- För Alternativ väljer du Manuell.
- Ange ett Namn för principnyckeln. Till exempel
SendGridSecret. PrefixetB2C_1A_läggs automatiskt till i namnet på din nyckel. - I Hemlighet anger du den SendGrid API-nyckel som du registrerade tidigare.
- För Nyckelanvändning väljer du Signatur.
- Välj Skapa.
Skapa SendGrid-mall
Med ett SendGrid-konto skapat och En SendGrid API-nyckel lagrad i en Azure AD B2C-principnyckel skapar du en dynamisk SendGrid-transaktionsmall.
På webbplatsen SendGrid öppnar du sidan transaktionsmallar och väljer Skapa en dynamisk mall.
Ange ett unikt mallnamn som
Verification emailoch välj sedan Skapa.Om du vill börja redigera den nya mallen väljer du den mall som är,
Verification emailoch väljer sedan Lägg till version.Välj Tom mall och sedan Kodredigerare.
I HTML-redigeraren klistrar du in följande HTML-mall eller använder din egen. Parametrarna
{{otp}}och{{email}}ersätts dynamiskt med engångslösenordvärdet och användarens e-postadress.<!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>Expandera menyn Inställningar och ange en mallversion för Versionsnamn.
För Ämne anger du
{{subject}}.Välj Spara.
Gå tillbaka till sidan Transaktionsmallar genom att välja bakåtpilen.
Registrera ID :t för mallen som du skapade för användning i ett senare steg. Till exempel
d-989077fbba9746e89f3f6411f596fb96. Du anger det här ID:t när du lägger till anspråkstransformeringen.
Viktigt!
Nästa steg visar hur du skapar XML-filer för anpassade policyer. Vi rekommenderar att du använder en anpassad princip för anpassad e-postverifiering som är tillgänglig på GitHub.
DisplayControl_TrustFrameworkExtensions.xml använder TrustFrameworkExtensions.xml som basfil och se därför till att inkludera TrustFrameworkBase.xml, TrustFrameworkLocalization.xml och TrustFrameworkExtensions.xml filer från startpaketetSocialAndLocalAccounts i din policy.
Lägga till Azure AD B2C-anspråkstyper
I din strategi, lägg till följande anspråkstyper i elementet <ClaimsSchema> i <BuildingBlocks>.
Dessa anspråkstyper är nödvändiga för att generera och verifiera e-postadressen med hjälp av en engångslösenordkod (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> -->
Lägg till anspråkstransformeringen
Därefter behöver du en anspråkstransformering för att mata ut ett JSON-stränganspråk som utgör brödtexten i begäran som skickas till SendGrid.
JSON-objektets struktur definieras av ID:erna i punktnotationen för InputParameters och TransformationClaimTypes för InputClaims. Tal i punkt notation innebär matriser. Värdena kommer från InputClaims-värdena och InputParameters "Value"-egenskaper. Mer information om JSON-anspråkstransformeringar finns i JSON-anspråkstransformeringar.
Lägg till följande anspråkstransformering till elementet <ClaimsTransformations> i <BuildingBlocks>. Gör följande uppdateringar av anspråkstransformeringens XML:
-
template_idUppdatera värdet InputParameter med ID:t för transaktionsmallen SendGrid som du skapade tidigare i Skapa SendGrid-mall. - Uppdatera
from.emailadressvärdet. Använd en giltig e-postadress för att förhindra att verifieringsmeddelandet markeras som skräppost.Anmärkning
Den här e-postadressen måste verifieras i SendGrid under Avsändarautentisering med antingen domänautentisering eller autentisering med enskild avsändare.
- Uppdatera värdet för indataparametern för ämnesraden
personalizations.0.dynamic_template_data.subjectmed en ämnesrad som är lämplig för din organisation.
<!--
<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> -->
Lägg till DataUri-innehållsdefinition
Under anspråkstransformeringarna i <BuildingBlocks>lägger du till följande ContentDefinition för att referera till data-URI:n version 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> -->
Skapa en DisplayControl
En kontroll för verifieringsvisning används för att verifiera e-postadressen med en verifieringskod som användaren tar emot.
Den här exempelvisningskontrollen har konfigurerats för att:
Samla in adresskravstypen
emailfrån användaren.Med hjälp av åtgärden
SendCodegenererar du en OTP-kod och skickar ett e-postmeddelande med OTP-koden till användaren.
Vänta tills användaren anger anspråkstypen
verificationCodemed koden som skickas till användaren.emailGå tillbaka till den självsäkra tekniska profilen som har en referens till den här visningskontrollen.
Under innehållsdefinitioner, fortfarande inom <BuildingBlocks>, lägg till följande DisplayControl av typen VerificationControl till din policy.
<!--
<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> -->
Lägga till tekniska OTP-profiler
Den GenerateOtp tekniska profilen genererar en kod för e-postadressen. Den VerifyOtp tekniska profilen verifierar koden som är associerad med e-postadressen. Du kan ändra konfigurationen av formatet och förfallodatumet för engångslösenordet. Mer information om tekniska OTP-profiler finns i Definiera en teknisk profil för engångslösenord.
Anmärkning
OTP-koder som genereras av protokollet Web.TPEngine.Providers.OneTimePasswordProtocolProvider är knutna till webbläsarsessionen. Det innebär att en användare kan generera unika OTP-koder i olika webbläsarsessioner som var och en är giltiga för motsvarande sessioner. Däremot är en OTP-kod som genereras av den inbyggda e-postprovidern oberoende av webbläsarsessionen, så om en användare genererar en ny OTP-kod i en ny webbläsarsession ersätter den tidigare OTP-koden.
Lägg till följande tekniska profiler i elementet <ClaimsProviders> .
<!--
<ClaimsProviders> -->
<ClaimsProvider>
<DisplayName>One time password technical profiles</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="GenerateOtp">
<DisplayName>Generate one time password</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.OneTimePasswordProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="Operation">GenerateCode</Item>
<Item Key="CodeExpirationInSeconds">600</Item>
<Item Key="CodeLength">6</Item>
<Item Key="CharacterSet">0-9</Item>
<Item Key="NumRetryAttempts">5</Item>
<Item Key="NumCodeGenerationAttempts">10</Item>
<Item Key="ReuseSameCode">false</Item>
</Metadata>
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" PartnerClaimType="identifier" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="otp" PartnerClaimType="otpGenerated" />
</OutputClaims>
</TechnicalProfile>
<TechnicalProfile Id="VerifyOtp">
<DisplayName>Verify one time password</DisplayName>
<Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.OneTimePasswordProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="Operation">VerifyCode</Item>
</Metadata>
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" PartnerClaimType="identifier" />
<InputClaim ClaimTypeReferenceId="verificationCode" PartnerClaimType="otpToVerify" />
</InputClaims>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
<!--
</ClaimsProviders> -->
Lägga till en teknisk REST API-profil
Den här tekniska REST API-profilen genererar e-postinnehållet (med SendGrid-formatet). Mer information om RESTful-tekniska profiler finns i Definiera en RESTful-teknisk profil.
Precis som med de tekniska OTP-profilerna lägger du till följande tekniska profiler i elementet <ClaimsProviders> .
<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>
Referera till DisplayControl
I det sista steget lägger du till en referens till Den DisplayControl som du skapade. Åsidosätt befintliga LocalAccountSignUpWithLogonEmail och LocalAccountDiscoveryUsingEmailAddress självdeklarerade tekniska profiler som har konfigurerats i baspolicyn med följande XML-kodfragment. Om du använde en tidigare version av Azure AD B2C-principen använder DisplayClaims dessa tekniska profiler med en referens till DisplayControl.
Mer information finns i Självsäkrad teknisk profil och 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>
[Valfritt] Lokalisera din e-post
Om du vill lokalisera e-postmeddelandet måste du skicka lokaliserade strängar till SendGrid eller din e-postleverantör. Du kan till exempel lokalisera e-postämnet, brödtexten, kodmeddelandet eller signaturen för e-postmeddelandet. För att göra det kan du använda anspråkstransformationen GetLocalizedStringsTransformation för att kopiera lokaliserade strängar till anspråkstyper. Anspråksomvandlingen GenerateEmailRequestBody , som genererar JSON-nyttolasten, använder indataanspråk som innehåller de lokaliserade strängarna.
I din policy definierar du följande strängfordringar: ämne, meddelande, codeIntro och signatur.
Definiera en GetLocalizedStringsTransformation-anspråkstransformation för att ersätta lokaliserade strängvärden i anspråken från steg 1.
GenerateEmailRequestBodyÄndra anspråkstransformeringen så att den använder indataanspråk med följande XML-kodfragment.Uppdatera SendGrid-mallen så att den använder dynamiska parametrar i stället för alla strängar som Azure AD B2C lokaliserar.
<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>Lägg till följande lokaliseringselement .
<!-- <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> -->Lägg till referenser till elementen LocalizedResources genom att uppdatera elementet 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> -->Lägg slutligen till följande transformering av indatabegäran till
LocalAccountSignUpWithLogonEmailochLocalAccountDiscoveryUsingEmailAddresstekniska profiler.<InputClaimsTransformations> <InputClaimsTransformation ReferenceId="GetLocalizedStringsForEmail" /> </InputClaimsTransformations>
[Valfritt] Lokalisera användargränssnittet
Med elementet Lokalisering kan du stödja flera språk eller lokaliteter i policyn för användarresor. Med stöd för lokalisering i principer kan du ange språkspecifika strängar för både verifieringsgränssnittselement för visningskontroll och felmeddelanden om engångslösenord. Lägg till följande LocalizedString i 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="VerificationCode" StringId="DisplayName">Verification Code</LocalizedString>
<LocalizedString ElementType="ClaimType" ElementId="VerificationCode" StringId="UserHelpText">Verification code received in the email.</LocalizedString>
<LocalizedString ElementType="ClaimType" ElementId="VerificationCode" 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>
Relaterat innehåll
- Hitta ett exempel på anpassad e-postverifiering – Anpassad Princip för DisplayControls på GitHub.
- Lär dig hur du använder ett anpassat REST API eller en HTTP-baserad SMTP-e-postprovider, se Definiera en RESTful-teknisk profil i en anpassad Azure AD B2C-princip.