Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Von Bedeutung
Ab dem 1. Mai 2025 steht Azure AD B2C nicht mehr für neue Kunden zur Verfügung. Weitere Informationen finden Sie in unseren HÄUFIG gestellten Fragen.
Bevor Sie beginnen, verwenden Sie die Auswahl eines Richtlinientyps oben auf dieser Seite, um den Typ der Richtlinie auszuwählen, die Sie einrichten. Azure Active Directory B2C bietet zwei Methoden zum Definieren der Benutzerinteraktion mit Ihren Anwendungen: vordefinierte Benutzerflows oder vollständig konfigurierbare benutzerdefinierte Richtlinien. Die Schritte, die in diesem Artikel erforderlich sind, unterscheiden sich für jede Methode.
Verwenden Sie benutzerdefinierte E-Mails in Azure Active Directory B2C (Azure AD B2C), um angepasste E-Mails an Benutzer zu senden, die sich für die Verwendung Ihrer Anwendungen registrieren. Mithilfe des E-Mailjet-Anbieters eines Drittanbieters können Sie Ihre eigene E-Mail-Vorlage und "Von: Adresse und Betreff" verwenden sowie Lokalisierung und benutzerdefinierte OTP-Einstellungen (Einmaliges Kennwort) unterstützen.
Dieses Feature ist nur für benutzerdefinierte Richtlinien verfügbar. Wählen Sie für Setupschritte im vorherigen Selektor die Option "Benutzerdefinierte Richtlinie " aus.
Für eine benutzerdefinierte E-Mail-Überprüfung ist die Verwendung eines Drittanbieters wie Mailjet, SendGrid oder SparkPost, einer benutzerdefinierten REST-API oder eines HTTP-basierten E-Mail-Anbieters (einschließlich Ihrer eigenen) erforderlich. In diesem Artikel wird das Einrichten einer Lösung beschrieben, die Mailjet verwendet.
Erstellen eines Mailjet-Kontos
Wenn Sie noch kein Konto haben, richten Sie zunächst ein Mailjet-Konto ein (Azure-Kunden können 6.000 E-Mails mit einem Grenzwert von 200 E-Mails/Tag entsperren).
- Befolgen Sie die Einrichtungsanweisungen unter "Mailjet-Konto erstellen".
- Um E-Mails senden zu können, registrieren und überprüfen Sie Ihre Absender-E-Mail-Adresse oder Domäne.
- Navigieren Sie zur Seite "API-Schlüsselverwaltung". Notieren Sie den API-Schlüssel und den geheimen Schlüssel für die Verwendung in einem späteren Schritt. Beide Schlüssel werden automatisch generiert, wenn Ihr Konto erstellt wird.
Von Bedeutung
Mailjet bietet Kunden die Möglichkeit, E-Mails von freigegebenen IP- und dedizierten IP-Adressen zu senden. Bei Verwendung dedizierter IP-Adressen müssen die IP-Adressen zunächst „aufgewärmt“ werden, um Ihre eigene Reputation aufzubauen. Weitere Informationen finden Sie unter Wie erwärme ich meine IP?.
Erstellen eines Azure AD B2C-Richtlinienschlüssels
Speichern Sie als Nächstes den Mailjet-API-Schlüssel in einem Azure AD B2C-Richtlinienschlüssel, auf den Sie verweisen möchten.
- Melden Sie sich beim Azure-Portal an.
- Wenn Sie Zugriff auf mehrere Mandanten haben, wählen Sie das Symbol Einstellungen im Menü oben aus, um über das Menü Verzeichnisse + Abonnements zu Ihrem Azure AD B2C-Mandanten zu wechseln.
- Wählen Sie "Alle Dienste " in der oberen linken Ecke des Azure-Portals aus, und suchen Sie dann nach Azure AD B2C, und wählen Sie sie aus.
- Wählen Sie auf der Seite "Übersicht " die Option "Identity Experience Framework" aus.
- Wählen Sie "Richtlinienschlüssel" und dann "Hinzufügen" aus.
- Wählen Sie unter "Optionen" die Option "Manuell" aus.
- Geben Sie einen Namen für den Richtlinienschlüssel ein. Beispiel:
MailjetApiKey
. Das PräfixB2C_1A_
wird automatisch dem Namen Des Schlüssels hinzugefügt. - Geben Sie im geheimen Schlüssel Ihren Mailjet-API-Schlüssel ein, den Sie zuvor aufgezeichnet haben.
- Wählen Sie für die Schlüsselverwendung"Signatur" aus.
- Wählen Sie "Erstellen" aus.
- Wählen Sie "Richtlinienschlüssel" und dann "Hinzufügen" aus.
- Wählen Sie unter "Optionen" die Option "Manuell" aus.
- Geben Sie einen Namen für den Richtlinienschlüssel ein. Beispiel:
MailjetSecretKey
. Das PräfixB2C_1A_
wird automatisch dem Namen Des Schlüssels hinzugefügt. - Geben Sie im geheimen Schlüssel Ihren Mailjet Secret Key ein, den Sie zuvor aufgezeichnet haben.
- Wählen Sie für die Schlüsselverwendung"Signatur" aus.
- Wählen Sie "Erstellen" aus.
Erstellen einer Mailjet-Vorlage
Erstellen Sie mit einem Mailjet-Konto und dem Mailjet-API-Schlüssel, der in einem Azure AD B2C-Richtlinienschlüssel gespeichert ist, eine dynamische Mailjet-Transaktionsvorlage.
Öffnen Sie auf der Mailjet-Website die Seite " Transaktionsvorlagen ", und wählen Sie " Neue Vorlage erstellen" aus.
Wählen Sie Indem Sie es in HTML codieren aus, und wählen Sie dann Code von Grund auf neu aus.
Geben Sie einen eindeutigen Vorlagennamen wie
Verification email
"Erstellen" ein, und wählen Sie dann "Erstellen" aus.Fügen Sie im HTML-Editor die folgende HTML-Vorlage ein, oder verwenden Sie ihre eigene. Die Parameter
{{var:otp:""}}
und{{var:email:""}}
werden dynamisch durch den Einmalkennwortwert und die E-Mail-Adresse des Benutzers ersetzt.<!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>
Erweitern Betreff bearbeiten oben links
- Geben Sie für "Betreff" einen Standardwert für den Betreff ein. Mailjet verwendet diesen Wert, wenn die API keinen Betreffparameter enthält.
- Geben Sie für den Namen Ihren Firmennamen ein.
- Wählen Sie für die Adresse Ihre E-Mail-Adresse aus.
- Wählen Sie Speichern aus.
Wählen Sie oben "Speichern und Veröffentlichen" und dann "Ja", "Änderungen veröffentlichen" aus.
Notieren Sie die Vorlagen-ID der Vorlage, die Sie in einem späteren Schritt erstellt haben. Sie geben diese ID an, wenn Sie die Anspruchstransformation hinzufügen.
Von Bedeutung
Die nächsten Schritte zeigen, wie Sie Ihre benutzerdefinierten RICHTLINIEN-XML-Dateien erstellen. Wir empfehlen Ihnen, eine Muster für benutzerdefinierte E-Mail-Überprüfungsrichtlinie zu verwenden, die auf GitHub verfügbar ist.
DisplayControl_TrustFrameworkExtensions.xml
verwendet TrustFrameworkExtensions.xml
als Ausgangsdatei, stellen Sie daher sicher, dass Sie die Dateien TrustFrameworkBase.xml
, TrustFrameworkLocalization.xml
und TrustFrameworkExtensions.xml
aus dem Startpaket 'SocialAndLocalAccounts' in Ihre Richtlinie einschließen.
Hinzufügen von Azure AD B2C-Anspruchstypen
Fügen Sie in Ihrer Richtlinie im <ClaimsSchema>
-Element in <BuildingBlocks>
die folgenden Anspruchstypen hinzu.
Diese Anspruchstypen sind erforderlich, um die E-Mail-Adresse mithilfe eines OTP-Codes (Einmaliges Kennwort) zu generieren und zu überprüfen.
<!--
<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> -->
Hinzufügen der Anspruchstransformation
Als Nächstes benötigen Sie eine Anspruchstransformation, um einen JSON-Zeichenfolgenanspruch auszugeben, der der Text der An Mailjet gesendeten Anforderung ist.
Die Struktur des JSON-Objekts wird durch die IDs in der Punktnotation der InputParameters und der TransformationClaimTypes der InputClaims definiert. Zahlen in Punktnotation implizieren Arrays. Die Werte stammen aus den Werten der InputClaims und den Value-Eigenschaften der InputParameters. Weitere Informationen zu JSON-Anspruchstransformationen finden Sie unter JSON-Anspruchstransformationen.
Fügen Sie im <ClaimsTransformations>
-Element in <BuildingBlocks>
die folgenden Anspruchstransformation hinzu. Nehmen Sie die folgenden Aktualisierungen an der Forderungstransformations-XML vor:
- Aktualisieren Sie den
Messages.0.TemplateID
InputParameter-Wert mit der ID der Mailjet-Transaktionsvorlage, die Sie zuvor in der Vorlage "Mailjet erstellen" erstellt haben. - Aktualisieren Sie den Adresswert
Messages.0.From.Email
. Verwenden Sie eine gültige E-Mail-Adresse, um zu verhindern, dass die Überprüfungs-E-Mails als Spam gekennzeichnet werden. - Aktualisieren Sie den Wert des Eingabeparameters der
Messages.0.Subject
Betreffzeile mit einer betreffzeile, die für Ihre Organisation geeignet ist.
<!--
<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> -->
Hinzufügen einer DataUri-Inhaltsdefinition
Fügen Sie unterhalb der Anspruchstransformationen innerhalb von <BuildingBlocks>
die folgende ContentDefinition hinzu, um auf den Daten-URI der Version 2.1.2 zu verweisen:
<!--
<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 erstellen
Ein Überprüfungsanzeigesteuerelement wird verwendet, um die E-Mail-Adresse mit einem Überprüfungscode zu überprüfen, der an den Benutzer gesendet wird.
Dieses Beispiel-Anzeigesteuerelement ist für Folgendes konfiguriert:
Erfassen des
email
-Adressanspruchstyps vom BenutzerGenerieren Sie mithilfe der
SendCode
Aktion einen OTP-Code, und senden Sie eine E-Mail mit dem OTP-Code an den Benutzer.Warten Sie, bis der Benutzer den
verificationCode
-Anspruchstyp mithilfe des dem Benutzer zugesandten Codes bereitstellt.Zurückgeben von
email
an das selbstbestätigte technische Profil, das einen Verweis auf dieses Anzeigesteuerelement enthält
Fügen Sie der Richtlinie unter „content definitions“ in <BuildingBlocks>
das folgende DisplayControl-Element vom Typ VerificationControl hinzu.
<!--
<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> -->
Hinzufügen technischer Profile für Einmalkennwörter
Das GenerateOtp
technische Profil generiert einen Code für die E-Mail-Adresse. Das VerifyOtp
technische Profil überprüft den Code, der der E-Mail-Adresse zugeordnet ist. Sie können die Konfiguration des Formats und das Ablaufen des einmaligen Kennworts ändern. Weitere Informationen zu technischen Profilen für Einmalpasswörter finden Sie unter Einmalpasswort-Technisches Profil definieren.
Hinweis
OTP-Codes, die vom Web.TPEngine.Providers.OneTimePasswordProtocolProvider-Protokoll generiert werden, sind an die Browsersitzung gebunden. Dies bedeutet, dass ein Benutzer eindeutige OTP-Codes in verschiedenen Browsersitzungen generieren kann, die jeweils für ihre entsprechenden Sitzungen gültig sind. Im Gegensatz dazu ist ein OTP-Code, der vom integrierten E-Mail-Anbieter generiert wird, von der Browsersitzung unabhängig. Wenn ein Benutzer also einen neuen OTP-Code in einer neuen Browsersitzung generiert, ersetzt er den vorherigen OTP-Code.
Fügen Sie dem <ClaimsProviders>
Element die folgenden technischen Profile hinzu.
<!--
<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> -->
Hinzufügen eines technischen REST-API-Profils
Dieses technische REST-API-Profil generiert den E-Mail-Inhalt (mit dem Mailjet-Format). Weitere Informationen zu RESTful technischen Profilen finden Sie unter Define a RESTful technical profile.
Wie bei den technischen OTP-Profilen fügen Sie dem <ClaimsProviders>
Element die folgenden technischen Profile hinzu.
<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>
Erstellen eines Verweises auf das DisplayControl-Element
Fügen Sie im letzten Schritt einen Verweis auf das von Ihnen erstellte DisplayControl hinzu. Überschreiben Sie Ihre bestehenden LocalAccountSignUpWithLogonEmail
und LocalAccountDiscoveryUsingEmailAddress
selbstbestätigten technischen Profile, die in der Basisrichtlinie konfiguriert sind, mit dem folgenden XML-Schnipsel. Wenn Sie eine frühere Version der Azure AD B2C-Richtlinie verwendet haben, verwenden diese technischen Profile DisplayClaims
mit einem Verweis auf die DisplayControl
.
Weitere Informationen finden Sie unter Self-asserted technical profile und 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>
[Optional] Lokalisieren Ihrer E-Mails
Um die E-Mail zu lokalisieren, müssen Sie lokalisierte Zeichenfolgen an Mailjet oder Ihren E-Mail-Anbieter senden. Sie können z. B. den E-Mail-Betreff, den Textkörper, die Codenachricht oder die Signatur der E-Mail lokalisieren. Dazu können Sie die GetLocalizedStringsTransformation-Anspruchstransformation verwenden, um lokalisierte Zeichenfolgen in Anspruchstypen zu kopieren. Die Anspruchstransformation GenerateEmailRequestBody
, die die JSON-Nutzlast generiert, verwendet Eingabeansprüche, die die lokalisierten Zeichenfolgen enthalten.
Definieren Sie in Ihrer Richtlinie die folgenden Zeichenfolgenansprüche: Betreff, Nachricht, CodeIntro und Signatur.
Definieren Sie eine GetLocalizedStringsTransformation-Anspruchstransformation , um lokalisierte Zeichenfolgenwerte in die Ansprüche aus Schritt 1 zu ersetzen.
Ändern Sie die Anspruchstransformation
GenerateEmailRequestBody
, um Eingabeansprüche mit dem folgenden XML-Codeausschnitt zu verwenden.Aktualisieren Sie Ihre Mailjet-Vorlage so, dass dynamische Parameter anstelle aller Zeichenfolgen verwendet werden, die von Azure AD B2C lokalisiert werden.
<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>
Fügen Sie das folgende Lokalisierungselement hinzu.
<!-- <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> -->
Fügen Sie Verweise auf die LocalizedResources-Elemente hinzu, indem Sie das ContentDefinitions-Element aktualisieren.
<!-- <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> -->
Fügen Sie schließlich die folgende Eingabeanspruchstransformation zu den
LocalAccountSignUpWithLogonEmail
undLocalAccountDiscoveryUsingEmailAddress
technischen Profilen hinzu.<InputClaimsTransformations> <InputClaimsTransformation ReferenceId="GetLocalizedStringsForEmail" /> </InputClaimsTransformations>
[Optional] Lokalisieren der Benutzeroberfläche
Mithilfe des Elements „Lokalisierung“ können Sie mehrere Gebietsschemas oder Sprachen in der Richtlinie für die User Journeys unterstützen. Die Lokalisierungsunterstützung in Richtlinien ermöglicht es Ihnen, sprachspezifische Zeichenfolgen sowohl für Elemente der Überprüfungsanzeigesteuerungs-Benutzeroberfläche als auch einmalige Kennwortfehlermeldungen bereitzustellen. Fügen Sie die folgende LocalizedString zu Ihren LocalizedResources hinzu.
<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>
Verwandte Inhalte
- Sie finden ein Beispiel für eine benutzerdefinierte E-Mail-Überprüfung – Benutzerdefinierte DisplayControls-Richtlinie auf GitHub.
- Informationen zur Verwendung einer benutzerdefinierten REST-API oder eines HTTP-basierten SMTP-E-Mail-Anbieters finden Sie unter Define a RESTful technical profile in an Azure AD B2C custom policy.