Erstellen Ihrer ersten benutzerdefinierten Azure Active Directory B2C-Richtlinie – Hallo Welt!
In Ihrer Anwendung können Sie Benutzerflows verwenden, mit denen sich Benutzer*innen registrieren und anmelden oder ihr Profil verwalten können. Wenn die Benutzerflows nicht alle Ihre unternehmensspezifischen Anforderungen abdecken, können Sie benutzerdefinierte Richtlinien verwenden.
Sie können zwar ein vordefiniertes Starter Pack für benutzerdefinierte Richtlinien verwenden, aber wenn Sie eine benutzerdefinierte Richtlinie entwerfen möchten, ist es wichtig, dass Sie verstehen, wie eine solche Richtlinie erstellt wird. In diesem Artikel erfahren Sie, wie Sie Ihre erste benutzerdefinierte Richtlinie von Grund auf erstellen.
Voraussetzungen
Wenn Sie noch nicht über einen Azure AD B2C-Mandanten verfügen, erstellen Sie einen, der mit Ihrem Azure-Abonnement verknüpft ist.
Registrieren Sie eine Webanwendung, und aktivieren Sie die implizite Gewährung von ID-Token. Verwenden Sie https://jwt.ms für den Umleitungs-URI.
Auf Ihrem Computer muss Visual Studio Code (VS Code) installiert sein.
Hinweis
Dieser Artikel ist Teil der Schrittanleitungsreihe „Erstellen und Ausführen Ihrer eigenen benutzerdefinierten Richtlinien in Azure Active Directory B2C“. Wir empfehlen Ihnen, diese Reihe mit dem ersten Artikel zu beginnen.
Schritt 1: Konfigurieren der Signatur- und Verschlüsselungsschlüssel
Erstellen Sie die folgenden Verschlüsselungsschlüssel, sofern Sie dies nicht bereits getan haben. Besuchen Sie die Website IEF-Setup-App, und folgen Sie den Anweisungen, um die nachfolgende exemplarische Vorgehensweise zu automatisieren:
Führen Sie die unter Hinzufügen von Signatur- und Verschlüsselungsschlüsseln für Identity Experience Framework-Anwendungen aufgeführten Schritte aus, um den Signaturschlüssel zu erstellen.
Führen Sie die unter Hinzufügen von Signatur- und Verschlüsselungsschlüsseln für Identity Experience Framework-Anwendungen aufgeführten Schritte aus, um den Verschlüsselungsschlüssel zu erstellen.
Schritt 2: Erstellen der benutzerdefinierten Richtliniendatei
Erstellen und öffnen Sie in VS Code die Datei
ContosoCustomPolicy.XML
.Fügen Sie in der Datei
ContosoCustomPolicy.XML
den folgenden Code hinzu:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" PolicySchemaVersion="0.3.0.0" TenantId="yourtenant.onmicrosoft.com" PolicyId="B2C_1A_ContosoCustomPolicy" PublicPolicyUri="http://yourtenant.onmicrosoft.com/B2C_1A_ContosoCustomPolicy"> <BuildingBlocks> <!-- Building Blocks Here--> </BuildingBlocks> <ClaimsProviders> <!-- Claims Providers Here--> </ClaimsProviders> <UserJourneys> <!-- User Journeys Here--> </UserJourneys> <RelyingParty> <!-- Relying Party Here that's your policy’s entry point Specify the User Journey to execute Specify the claims to include in the token that is returned when the policy runs --> </RelyingParty> </TrustFrameworkPolicy>
Ersetzen Sie
yourtenant
durch den Teil der Unterdomäne Ihres Mandantennamens, z. B.contoso
. Erfahren Sie, wie Sie den Mandantennamen abrufen.Die XML-Elemente definieren das in einer Richtliniendatei enthaltene
TrustFrameworkPolicy
-Element der obersten Ebene mit seiner Richtlinien-ID und dem Mandantennamen. Das „TrustFrameworkPolicy“-Element enthält weitere XML-Elemente, die Sie in dieser Reihe verwenden.Um einen Anspruch zu deklarieren, fügen Sie in der Datei
ContosoCustomPolicy.XML
im AbschnittBuildingBlocks
den folgenden Code hinzu:<ClaimsSchema> <ClaimType Id="objectId"> <DisplayName>unique object Id for subject of the claims being returned</DisplayName> <DataType>string</DataType> </ClaimType> <ClaimType Id="message"> <DisplayName>Will hold Hello World message</DisplayName> <DataType>string</DataType> </ClaimType> </ClaimsSchema>
Ein Anspruch ist wie eine Variable. In der Deklaration des Anspruchs ist auch der Datentyp des Anspruchs angegeben.
Fügen Sie in der Datei
ContosoCustomPolicy.XML
im AbschnittClaimsProviders
den folgenden Code hinzu:<ClaimsProvider> <DisplayName>Token Issuer</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="JwtIssuer"> <DisplayName>JWT Issuer</DisplayName> <Protocol Name="None" /> <OutputTokenFormat>JWT</OutputTokenFormat> <Metadata> <Item Key="client_id">{service:te}</Item> <Item Key="issuer_refresh_token_user_identity_claim_type">objectId</Item> <Item Key="SendTokenResponseBodyWithJsonNumbers">true</Item> </Metadata> <CryptographicKeys> <Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer" /> <Key Id="issuer_refresh_token_key" StorageReferenceId="B2C_1A_TokenEncryptionKeyContainer" /> </CryptographicKeys> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider> <ClaimsProvider> <!-- The technical profile(s) defined in this section is required by the framework to be included in all custom policies. --> <DisplayName>Trustframework Policy Engine TechnicalProfiles</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="TpEngine_c3bd4fe2-1775-4013-b91d-35f16d377d13"> <DisplayName>Trustframework Policy Engine Default Technical Profile</DisplayName> <Protocol Name="None" /> <Metadata> <Item Key="url">{service:te}</Item> </Metadata> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
Wir haben einen JWT-Tokenaussteller deklariert. Wenn Sie in Schritt 1 andere Namen zum Konfigurieren der Signatur- und Verschlüsselungsschlüssel verwendet haben, stellen Sie sicher, dass Sie im Abschnitt
CryptographicKeys
den richtigen Wert für dieStorageReferenceId
verwenden.Fügen Sie in der Datei
ContosoCustomPolicy.XML
im AbschnittUserJourneys
den folgenden Code hinzu:<UserJourney Id="HelloWorldJourney"> <OrchestrationSteps> <OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" /> </OrchestrationSteps> </UserJourney>
Wir haben ein UserJourneys-Element hinzugefügt. Die User Journey gibt die Geschäftslogik an, die der Endbenutzer durchläuft, während Azure AD B2C eine Anforderung verarbeitet. Diese User Journey umfasst nur einen Schritt, mit dem ein JTW-Token mit den Ansprüchen ausgestellt wird, die Sie im nächsten Schritt definieren.
Fügen Sie in der Datei
ContosoCustomPolicy.XML
im AbschnittRelyingParty
den folgenden Code hinzu:<DefaultUserJourney ReferenceId="HelloWorldJourney"/> <TechnicalProfile Id="HelloWorldPolicyProfile"> <DisplayName>Hello World Policy Profile</DisplayName> <Protocol Name="OpenIdConnect" /> <OutputClaims> <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" DefaultValue="abcd-1234-efgh-5678-ijkl-etc."/> <OutputClaim ClaimTypeReferenceId="message" DefaultValue="Hello World!"/> </OutputClaims> <SubjectNamingInfo ClaimType="sub" /> </TechnicalProfile>
Der Abschnitt RelyingParty ist der Einstiegspunkt Ihrer Richtlinie. Darin werden die auszuführende UserJourney und die Ansprüche angegeben, die das Token enthalten soll, das bei der Ausführung der Richtlinie zurückgegeben wird.
Nachdem Sie Schritt 2 abgeschlossen haben, sollte der Inhalt der Datei ContosoCustomPolicy.XML
in etwa wie der folgende Code aussehen:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<TrustFrameworkPolicy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.microsoft.com/online/cpim/schemas/2013/06" PolicySchemaVersion="0.3.0.0" TenantId="Contosob2c2233.onmicrosoft.com" PolicyId="B2C_1A_ContosoCustomPolicy" PublicPolicyUri="http://Contosob2c2233.onmicrosoft.com/B2C_1A_ContosoCustomPolicy">
<BuildingBlocks>
<ClaimsSchema>
<ClaimType Id="objectId">
<DisplayName>unique object Id for subject of the claims being returned</DisplayName>
<DataType>string</DataType>
</ClaimType>
<ClaimType Id="message">
<DisplayName>Will hold Hello World message</DisplayName>
<DataType>string</DataType>
</ClaimType>
</ClaimsSchema>
</BuildingBlocks>
<ClaimsProviders><!--Claims Providers Here-->
<ClaimsProvider>
<DisplayName>Token Issuer</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="JwtIssuer">
<DisplayName>JWT Issuer</DisplayName>
<Protocol Name="None"/>
<OutputTokenFormat>JWT</OutputTokenFormat>
<Metadata>
<Item Key="client_id">{service:te}</Item>
<Item Key="issuer_refresh_token_user_identity_claim_type">objectId</Item>
<Item Key="SendTokenResponseBodyWithJsonNumbers">true</Item>
</Metadata>
<CryptographicKeys>
<Key Id="issuer_secret" StorageReferenceId="B2C_1A_TokenSigningKeyContainer"/>
<Key Id="issuer_refresh_token_key" StorageReferenceId="B2C_1A_TokenEncryptionKeyContainer"/>
</CryptographicKeys>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
<ClaimsProvider>
<DisplayName>Trustframework Policy Engine TechnicalProfiles</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="TpEngine_c3bd4fe2-1775-4013-b91d-35f16d377d13">
<DisplayName>Trustframework Policy Engine Default Technical Profile</DisplayName>
<Protocol Name="None" />
<Metadata>
<Item Key="url">{service:te}</Item>
</Metadata>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
</ClaimsProviders>
<UserJourneys>
<UserJourney Id="HelloWorldJourney">
<OrchestrationSteps>
<OrchestrationStep Order="1" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
</OrchestrationSteps>
</UserJourney>
</UserJourneys>
<RelyingParty><!--
Relying Party Here that's your policy’s entry point
Specify the User Journey to execute
Specify the claims to include in the token that is returned when the policy runs
-->
<DefaultUserJourney ReferenceId="HelloWorldJourney"/>
<TechnicalProfile Id="HelloWorldPolicyProfile">
<DisplayName>Hello World Policy Profile</DisplayName>
<Protocol Name="OpenIdConnect"/>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" DefaultValue="abcd-1234-efgh-5678-ijkl-etc."/>
<OutputClaim ClaimTypeReferenceId="message" DefaultValue="Hello World!"/>
</OutputClaims>
<SubjectNamingInfo ClaimType="sub"/>
</TechnicalProfile>
</RelyingParty>
</TrustFrameworkPolicy>
Schritt 3: Hochladen der benutzerdefinierten Richtliniendatei
- Melden Sie sich beim Azure-Portal an.
- Wenn Sie Zugriff auf mehrere Mandanten haben, wählen Sie das Symbol Einstellungen im Menü oben, um über das Menü Verzeichnisse + Abonnements zu Ihrem Azure AD B2C Mandanten zu wechseln.
- Suchen Sie im Azure-Portal nach Azure AD B2C, und wählen Sie diese Option dann aus.
- Wählen Sie im linken Menü unter Richtlinien die Option Identity Experience Framework aus.
- Wählen Sie Benutzerdefinierte Richtlinie hochladen aus, suchen Sie die Datei
ContosoCustomPolicy.XML
, wählen Sie die Datei aus, und laden Sie diese dann hoch.
Nachdem Sie die Datei hochgeladen haben, fügt Azure AD B2C das Präfix B2C_1A_
hinzu, sodass der Name beispielsweise B2C_1A_CONTOSOCUSTOMPOLICY lautet.
Schritt 4: Testen der benutzerdefinierten Richtlinie
- Wählen Sie unter Benutzerdefinierte Richtlinien die Richtlinie B2C_1A_CONTOSOCUSTOMPOLICY aus.
- Wählen Sie auf der Übersichtsseite der benutzerdefinierten Richtlinie unter Anwendung auswählen die Webanwendung aus, die Sie zuvor registriert haben, z. B. webapp1. Stellen Sie sicher, dass der Wert von Antwort-URL auswählen auf
https://jwt.ms
festgelegt ist. - Wählen Sie die Schaltfläche Jetzt ausführen aus.
Nach der Ausführung der Richtlinie werden Sie zu https://jwt.ms
weitergeleitet, und es wird ein decodiertes JWT-Token angezeigt. Es sieht ähnlich wie der folgende JWT-Tokenausschnitt aus:
{
"typ": "JWT",
"alg": "RS256",
"kid": "pxLOMWFg...."
}.{
...
"sub": "abcd-1234-efgh-5678-ijkl-etc.",
...
"acr": "b2c_1a_contosocustompolicy",
...
"message": "Hello World!"
}.[Signature]
Beachten Sie die Ansprüche message
und sub
, die wir als Ausgabeansprüche im Abschnitt RelyingParty
festgelegt haben.
Nächste Schritte
In diesem Artikel haben Sie vier Abschnitte kennengelernt und verwendet, die in einer benutzerdefinierten Azure AD B2C-Richtlinie enthalten sind. Diese Abschnitte werden dem Stammelement TrustFrameworkPolicy
als untergeordnete Elemente hinzugefügt:
- BuildingBlocks
- ClaimsProviders
- UserJourneys
- RelyingParty
Als Nächstes werden die folgenden Themen behandelt:
Sammeln und Bearbeiten von Benutzereingaben mithilfe einer benutzerdefinierten Richtlinie
Deklarieren eines Anspruchs in einer benutzerdefinierten Richtlinie
Benutzerdefiniertes Richtlinienschema – ClaimsSchema: DataType-Element
Benutzerdefiniertes Richtlinienschema – ClaimsSchema: Benutzereingabetypen