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.
Im Artikel Erstellen und Lesen eines Benutzerkontos mithilfe der benutzerdefinierten Richtlinie von Azure Active Directory B2C erstellt ein Benutzer ein neues Benutzerkonto, meldet sich jedoch nicht darin an.
In diesem Artikel erfahren Sie, wie Sie eine benutzerdefinierte Azure Active Directory B2C(Azure AD B2C)-Richtlinie schreiben, mit der ein Benutzer entweder ein lokales Azure AD B2C-Konto erstellen oder sich bei einem konto anmelden kann. Ein lokales Konto bezieht sich auf ein Konto, das in Ihrem Azure AD B2C-Mandanten erstellt wird, wenn sich ein Benutzer bei Ihrer Anwendung anmeldet.
Überblick
Azure AD B2C verwendet das OpenID Connect-Authentifizierungsprotokoll, um Benutzeranmeldeinformationen zu überprüfen. In Azure AD B2C senden Sie die Benutzeranmeldeinformationen zusammen mit anderen Informationen an einen sicheren Endpunkt, der dann bestimmt, ob die Anmeldeinformationen gültig sind oder nicht. Kurz gesagt, wenn Sie die Implementierung von OpenID Connect von Azure AD B2C verwenden, können Sie die Registrierung, Anmeldung und andere Identitätsverwaltungsfunktionen in Ihren Webanwendungen an Microsoft Entra ID auslagern.
Die benutzerdefinierte Azure AD B2C-Richtlinie stellt ein technisches OpenID Connect-Profil bereit, das Sie zum Tätigen eines Anrufs an einen sicheren Microsoft-Endpunkt verwenden. Erfahren Sie mehr über das technische Profil von OpenID Connect.
Voraussetzungen
Wenn Sie noch keins haben, erstellen Sie einen Azure AD B2C-Mandanten , der mit Ihrem Azure-Abonnement verknüpft ist.
Sie müssen Visual Studio Code (VS Code) auf Ihrem Computer installiert haben.
Führen Sie die Schritte unter Erstellen und Lesen eines Benutzerkontos mithilfe der benutzerdefinierten Azure Active Directory B2C-Richtlinie aus. Dieser Artikel ist Teil von Create and run your own custom policies how-to guide series.
Hinweis
Dieser Artikel ist Teil der Anleitungsreihe "Erstellen und Ausführen eigener benutzerdefinierter Richtlinien" in Azure Active Directory B2C. Es wird empfohlen, diese Reihe aus dem ersten Artikel zu starten.
Schritt 1 : Konfigurieren des technischen Profils von OpenID Connect
Um ein technisches OpenID Connect-Profil zu konfigurieren, müssen Sie drei Schritte ausführen:
- Deklarieren Sie weitere Ansprüche.
- Registrieren Sie Apps in Ihrem Azure-Portal.
- Konfigurieren Sie schließlich das technische Profil von OpenID Connect selbst.
Schritt 1.1 – Deklarieren weiterer Ansprüche
Suchen Sie in der ContosoCustomPolicy.XML
Datei den Abschnitt "ClaimsSchema ", und fügen Sie dann weitere Ansprüche hinzu, indem Sie den folgenden Code verwenden:
<!--<ClaimsSchema>-->
...
<ClaimType Id="grant_type">
<DisplayName>grant_type</DisplayName>
<DataType>string</DataType>
<UserHelpText>Special parameter passed for local account authentication to login.microsoftonline.com.</UserHelpText>
</ClaimType>
<ClaimType Id="scope">
<DisplayName>scope</DisplayName>
<DataType>string</DataType>
<UserHelpText>Special parameter passed for local account authentication to login.microsoftonline.com.</UserHelpText>
</ClaimType>
<ClaimType Id="nca">
<DisplayName>nca</DisplayName>
<DataType>string</DataType>
<UserHelpText>Special parameter passed for local account authentication to login.microsoftonline.com.</UserHelpText>
</ClaimType>
<ClaimType Id="client_id">
<DisplayName>client_id</DisplayName>
<DataType>string</DataType>
<AdminHelpText>Special parameter passed to EvoSTS.</AdminHelpText>
<UserHelpText>Special parameter passed to EvoSTS.</UserHelpText>
</ClaimType>
<ClaimType Id="resource_id">
<DisplayName>resource_id</DisplayName>
<DataType>string</DataType>
<AdminHelpText>Special parameter passed to EvoSTS.</AdminHelpText>
<UserHelpText>Special parameter passed to EvoSTS.</UserHelpText>
</ClaimType>
<!--</ClaimsSchema>-->
Schritt 1.2 : Registrieren von Identity Experience Framework-Anwendungen
Azure AD B2C erfordert, dass Sie zwei Anwendungen registrieren, die zum Registrieren und Anmelden von Benutzern mit lokalen Konten verwendet werden: IdentityExperienceFramework, eine Web-API und ProxyIdentityExperienceFramework, eine native App mit delegierter Berechtigung für die IdentityExperienceFramework-App.
Wenn Sie dies noch nicht getan haben, registrieren Sie die folgenden Anwendungen. Um die folgende Anleitung zu automatisieren, besuchen Sie die IEF-Setup-App und befolgen Sie die Anweisungen:
Führen Sie die Schritte in "Registrieren der IdentityExperienceFramework"-Anwendung aus, um die Identity Experience Framework-Anwendung zu registrieren. Kopieren Sie die Anwendungs-ID (Client-ID, appID) für die Registrierung der Identity Experience Framework-Anwendung für die Verwendung im nächsten Schritt.
Führen Sie die Schritte in der Registrierung der ProxyIdentityExperienceFramework-Anwendung aus, um die Anwendung Proxy Identity Experience Framework zu registrieren. Kopieren Sie die Anwendungs-ID (Client-ID,proxyAppID) für die Registrierung der Proxy Identity Experience Framework-Anwendung für die Verwendung im nächsten Schritt.
Schritt 1.3 – Konfigurieren des technischen Profils von OpenID Connect
Suchen Sie in der ContosoCustomPolicy.XML
Datei den Abschnitt "ClaimsProviders ", und fügen Sie dann ein Claims Provider-Element hinzu, das Ihr OpenID Connect Technical Profile enthält, indem Sie den folgenden Code verwenden:
<!--<ClaimsProviders>-->
...
<ClaimsProvider>
<DisplayName>OpenID Connect Technical Profiles</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="SignInUser">
<DisplayName>Sign in with Local Account</DisplayName>
<Protocol Name="OpenIdConnect" />
<Metadata>
<Item Key="UserMessageIfClaimsPrincipalDoesNotExist">We didn't find this account</Item>
<Item Key="UserMessageIfInvalidPassword">Your password or username is incorrect</Item>
<Item Key="UserMessageIfOldPasswordUsed">You've used an old password.</Item>
<Item Key="ProviderName">https://sts.windows.net/</Item>
<Item Key="METADATA">https://login.microsoftonline.com/{tenant}/.well-known/openid-configuration</Item>
<Item Key="authorization_endpoint">https://login.microsoftonline.com/{tenant}/oauth2/token</Item>
<Item Key="response_types">id_token</Item>
<Item Key="response_mode">query</Item>
<Item Key="scope">email openid</Item>
<!-- Policy Engine Clients -->
<Item Key="UsePolicyInRedirectUri">false</Item>
<Item Key="HttpBinding">POST</Item>
<Item Key="client_id">proxyAppID</Item>
<Item Key="IdTokenAudience">appID</Item>
</Metadata>
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" PartnerClaimType="username" Required="true" />
<InputClaim ClaimTypeReferenceId="password" PartnerClaimType="password" Required="true" />
<InputClaim ClaimTypeReferenceId="grant_type" DefaultValue="password" />
<InputClaim ClaimTypeReferenceId="scope" DefaultValue="openid" />
<InputClaim ClaimTypeReferenceId="nca" PartnerClaimType="nca" DefaultValue="1" />
<InputClaim ClaimTypeReferenceId="client_id" DefaultValue="proxyAppID" />
<InputClaim ClaimTypeReferenceId="resource_id" PartnerClaimType="resource" DefaultValue="appID" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="oid" />
</OutputClaims>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
<!--</ClaimsProviders>-->
Ersetzen Sie beide Instanzen von:
appID mit Anwendungs-ID (Client) der Identity Experience Framework-Anwendung, die Sie in Schritt 1.2 kopiert haben.
proxyAppID mit Anwendungs-ID (Client) der Proxy Identity Experience Framework-Anwendung, die Sie in Schritt 1.2 kopiert haben.
Schritt 2: Konfigurieren der Anmeldebenutzeroberfläche
Wenn Ihre Richtlinie ausgeführt wird, muss der Benutzer eine Benutzeroberfläche sehen, über die sie sich anmelden können. Die Benutzeroberfläche hat auch die Möglichkeit, sich anzumelden, wenn sie noch kein Konto besitzen. Dazu müssen Sie zwei Schritte ausführen:
- Konfigurieren Sie ein selbst bestätigtes technisches Profil, das das Anmeldeformular für den Benutzer anzeigt.
- Konfigurieren Sie die Inhaltsdefinition für die Anmeldebenutzeroberfläche.
Schritt 2.1 – Konfigurieren eines technischen Profils für die Anmeldebenutzeroberfläche
Suchen Sie in der ContosoCustomPolicy.XML
Datei nach dem SignInUser
technischen Profil, und fügen Sie anschließend mithilfe des folgenden Codes ein SelfAsserted Technical Profile hinzu:
<TechnicalProfile Id="UserSignInCollector">
<DisplayName>Local Account Signin</DisplayName>
<Protocol Name="Proprietary"
Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="setting.operatingMode">Email</Item>
<Item Key="SignUpTarget">AccountTypeInputCollectorClaimsExchange</Item>
</Metadata>
<DisplayClaims>
<DisplayClaim ClaimTypeReferenceId="email" Required="true" />
<DisplayClaim ClaimTypeReferenceId="password" Required="true" />
</DisplayClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="email" />
<OutputClaim ClaimTypeReferenceId="password" />
<OutputClaim ClaimTypeReferenceId="objectId" />
</OutputClaims>
<ValidationTechnicalProfiles>
<ValidationTechnicalProfile ReferenceId="SignInUser" />
</ValidationTechnicalProfiles>
</TechnicalProfile>
Wir haben das technische SelfAsserted-Profil UserSignInCollector hinzugefügt, das Benutzenden das Anmeldeformular anzeigt. Wir haben das technische Profil so konfiguriert, dass die E-Mail-Adresse des Benutzers wie in den setting.operatingMode
Metadaten angegeben als Anmeldename erfasst wird. Das Anmeldeformular enthält einen Registrierungslink, der den Benutzer zu einem Registrierungsformular führt, wie durch die SignUpTarget
Metadaten angegeben. In den Orchestrierungsschritten sehen Sie, wie SignUpWithLogonEmailExchangeClaimsExchange
eingerichtet wird.
Außerdem haben wir das technische Profil "SignInUser OpenID Connect" als ValidationTechnicalProfile hinzugefügt. Das technische Profil "SignInUser " wird also ausgeführt, wenn der Benutzer die Schaltfläche " Anmelden " auswählt (siehe Screenshot in Schritt 5).
Im nächsten Schritt (Schritt 2.2) konfigurieren wir eine Inhaltsdefinition, die wir in diesem SelfAsserted Technical Profile verwenden.
Schritt 2.2 – Konfigurieren der Inhaltsdefinition der Anmeldeschnittstelle
Suchen Sie in der ContosoCustomPolicy.XML
Datei den ContentDefinitions-Abschnitt, und registrieren Sie dann die Content-Definition mithilfe des folgenden Codes:
<!--<ContentDefinitions>-->
...
<ContentDefinition Id="SignupOrSigninContentDefinition">
<LoadUri>~/tenant/templates/AzureBlue/unified.cshtml</LoadUri>
<RecoveryUri>~/common/default_page_error.html</RecoveryUri>
<DataUri>urn:com:microsoft:aad:b2c:elements:contract:unifiedssp:2.1.7</DataUri>
<Metadata>
<Item Key="DisplayName">Signin and Signup</Item>
</Metadata>
</ContentDefinition>
<!--</ContentDefinitions>-->
Wir haben eine Inhaltsdefinition für unser selbst bestätigtes technisches Profil konfiguriert. SignupOrSigninContentDefinition
Wir können es im technischen Profil mithilfe des Metadatenelements angeben oder angeben, wenn wir in den Orchestrierungsschritten auf das technische Profil verweisen. Zuvor haben wir gelernt, wie Sie eine Inhaltsdefinition direkt im selbst bestätigten technischen Profil angeben. In diesem Artikel erfahren wir also, wie sie angegeben wird, wenn wir in den Orchestrierungsschritten auf das technische Profil verweisen, Schritt 3.
Schritt 3 – Aktualisieren der Schritte zur Benutzerreise-Orchestrierung
Suchen Sie in der Datei ContosoCustomPolicy.XML
nach der User Journey HelloWorldJourney, und ersetzen Sie deren Orchestrierungsschritte-Auflistung durch den folgenden Code:
<!--<OrchestrationSteps>-->
...
<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="SignupOrSigninContentDefinition">
<ClaimsProviderSelections>
<ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
</ClaimsProviderSelections>
<ClaimsExchanges>
<ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="UserSignInCollector" />
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="true">
<Value>objectId</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="AccountTypeInputCollectorClaimsExchange" TechnicalProfileReferenceId="AccountTypeInputCollector"/>
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="3" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="true">
<Value>objectId</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
<Precondition Type="ClaimEquals" ExecuteActionsIf="true">
<Value>accountType</Value>
<Value>company</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="GetAccessCodeClaimsExchange" TechnicalProfileReferenceId="AccessCodeInputCollector" />
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="4" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="true">
<Value>objectId</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="SignUpWithLogonEmailExchange" TechnicalProfileReferenceId="UserInformationCollector" />
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="5" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="AADUserReaderExchange" TechnicalProfileReferenceId="AAD-UserRead"/>
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="6" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="GetMessageClaimsExchange" TechnicalProfileReferenceId="UserInputMessageClaimGenerator"/>
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="7" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
<!--</OrchestrationSteps>-->
In den Orchestrierungsschritten von 2 bis fünf haben wir Vorbedingungen verwendet, um zu bestimmen, ob der Orchestrierungsschritt ausgeführt werden soll. Wir müssen ermitteln, ob sich der Benutzer anmeldet oder registriert.
Wenn die benutzerdefinierte Richtlinie ausgeführt wird:
Orchestrierungsschritt 1 – Zeigt die Anmeldeseite an, damit sich der Benutzer anmelden oder den Link "Jetzt registrieren " auswählen kann. Beachten Sie, dass wir die Inhaltsdefinition angeben, die vom selbst bestätigten technischen Profil von UserSignInCollector zum Anzeigen des Anmeldeformulars verwendet wird.
Orchestrierungsschritt 2 – Dieser Schritt wird ausgeführt, wenn sich der Benutzer anmeldet (
objectId
nicht vorhanden), sodass wir das Auswahlformular des Kontotyps anzeigen, indem wir das selbstbetätigte technische Profil von AccountTypeInputCollector aufrufen.Orchestrierungsschritt 3 – Dieser Schritt wird ausgeführt, wenn sich der Benutzer anmeldet (
objectId
nicht vorhanden), und dass ein Benutzer kein UnternehmenaccountType
auswählt. Daher müssen Sie die Benutzenden bitten, einaccessCode
einzugeben, indem das selbstbestätigte technische Profil AccessCodeInputCollector aufgerufen wird.Orchestrierungsschritt 4 – Dieser Schritt wird ausgeführt, wenn sich der Benutzer anmeldet (objectId ist nicht vorhanden), sodass wir das Registrierungsformular anzeigen, indem wir das selbst bestätigte technische Profil von UserInformationCollector aufrufen.
Orchestrierungsschritt 5 – In diesem Schritt werden Kontoinformationen aus Microsoft Entra ID gelesen (wir rufen das technische Profil von Microsoft Entra ID auf), und wird unabhängig davon ausgeführt, ob sich ein Benutzer registriert oder einloggt.
Orchestrierungsschritt 6 – In diesem Schritt wird das technische Profil userInputMessageClaimGenerator aufgerufen, um die Begrüßungsnachricht des Benutzers zusammenzustellen.
Orchestrierungsschritt 7: Abschließend wird in Schritt 8 das JWT am Ende der Ausführung der Richtlinie zusammengesetzt und zurückgegeben.
Schritt 4 – Uploadrichtlinie
Folgen Sie den Schritten in Datei für benutzerdefinierte Richtlinien hochladen, um Ihre Richtliniendatei hochzuladen. Wenn Sie eine Datei mit demselben Namen wie die datei hochladen, die sich bereits im Portal befindet, stellen Sie sicher, dass Sie die benutzerdefinierte Richtlinie überschreiben, falls sie bereits vorhanden ist.
Schritt 5 – Testrichtlinie
Führen Sie die Schritte unter "Testen der benutzerdefinierten Richtlinie " aus, um Ihre benutzerdefinierte Richtlinie zu testen. Sobald die Richtlinie ausgeführt wird, sehen Sie eine Schnittstelle, die dem folgenden Screenshot ähnelt:
Sie können sich anmelden, indem Sie die E-Mail-Adresse und das Kennwort eines vorhandenen Kontos eingeben. Wenn Sie noch nicht über ein Konto verfügen, müssen Sie den Link "Jetzt registrieren" auswählen, um ein neues Benutzerkonto zu erstellen.
Verwandte Inhalte
Erfahren Sie, wie Sie mithilfe einer benutzerdefinierten Azure Active Directory B2C-Richtlinie einen Registrierungs- und Anmeldeablauf mit einem konto für soziale Netzwerke einrichten.
Erfahren Sie, wie Sie den Registrierungslink entfernen, damit sich Benutzer einfach anmelden können.
Erfahren Sie mehr über das technische Profil von OpenID Connect.