Konfigurieren von Azure Active Directory B2C mit Deduce zur Bekämpfung von Identitätsbetrug und zum Erstellen einer vertrauenswürdigen Benutzeroberfläche
In diesem Beispielartikel erhalten Sie eine Anleitung zum Integrieren der Azure AD B2C-Authentifizierung (Azure Active Directory B2C) in Deduce. Deduce konzentriert sich auf das Beenden von Kontoübernahmen und Registrierungsbetrug – dem am schnellsten zunehmenden Betrug im Internet. Das Deduce Identity Network wird von einem Zusammenschluss von über 150.000 Websites und Apps unterstützt, die pro Tag über 1,4 Mrd. Anmeldungen, Registrierungen und Auftragsabschlüsse mit Deduce durchführen.
Durch die daraus resultierende Identitätsauswertung werden Angriffe gestoppt, bevor sie zu einem finanziellen Problem werden und bevor Unternehmen für sie haften müssen. Sie verwendet zur traditionelle Verhaltensanalysen, um Vertrauen vorherzusagen, damit Organisationen ihren besten Kunden eine reibungslose Benutzererfahrung bieten können. Eine umfangreiche Palette von Risiko- und Vertrauenssignalen ist die Grundlage für jede Authentifizierungsentscheidung mit der Azure AD B2C-Instanz. Durch diese Integration können Organisationen ihre Azure AD B2C-Funktionen während des Registrierungs- oder Anmeldevorgangs erweitern, um über die Deduce Insights-API zusätzliche Erkenntnisse über den Benutzer zu gewinnen. Einige der Attribute, die von der Deduce-API erfasst werden, sind:
- IP-Adresse
- Benutzer-Agent
Voraussetzungen
Zunächst benötigen Sie Folgendes:
Ein Azure-Abonnement. Falls Sie noch kein Konto haben, können Sie eine kostenloses Konto verwenden.
Einen Azure AD B2C-Mandanten, der mit Ihrem Azure-Abonnement verknüpft ist
Wenden Sie sich an Deduce, um eine Test- oder Produktionsumgebung zu konfigurieren.
Möglichkeit zur Verwendung von benutzerdefinierten Azure AD B2C-Richtlinien. Wenn dies nicht möglich ist, führen Sie die Schritte unter Erste Schritte für benutzerdefinierte Richtlinien in Azure AD B2C aus, um zu erfahren, wie Sie benutzerdefinierte Richtlinien verwenden.
Beschreibung des Szenarios
Die Integration umfasst die folgenden Komponenten:
- Azure AD B2C: Der Autorisierungsserver ist für die Überprüfung der Anmeldeinformationen des Benutzers verantwortlich. Er wird auch als Identitätsanbieter bezeichnet.
- Deduce: Der Deduce-Dienst erfasst Eingaben vom Benutzer und bietet aufgrund der digitalen Aktivität Erkenntnisse über die Identität des Benutzers.
- Benutzerdefinierte REST-API: Mit dieser API wird die Integration zwischen Azure AD B2C und der Deduce Insights-API implementiert.
Im folgenden Architekturdiagramm ist die Implementierung dargestellt:
Schritte | Beschreibung |
---|---|
1. | Der Benutzer öffnet die Azure AD B2C-Anmeldeseite und meldet sich dann durch Eingabe des Benutzernamens an oder registriert sich. |
2. | Azure AD B2C ruft die API der mittleren Ebene auf und übergibt die Benutzerattribute. |
3. | Die API der mittleren Ebene sammelt Benutzerattribute und transformiert sie in ein Format, das die Deduce-API verarbeiten kann, und sendet sie dann an Deduce. |
4. | Deduce verarbeitet die Informationen, um die Benutzeridentifizierung anhand der Risikoanalyse zu überprüfen. Anschließend gibt Experian das Ergebnis an die API der mittleren Schicht zurück. |
5. | Die API der mittleren Schicht verarbeitet die Informationen und sendet Risiko-, Vertrauens- und Informationssignale im richtigen JSON-Format zurück an Azure AD B2C. |
6. | Azure AD B2C empfängt die Informationen von der API der mittleren Ebene. Bei einer Fehlerantwort wird dem Benutzer eine Fehlermeldung angezeigt. Bei einer Erfolgsantwort wird der Benutzer authentifiziert und in das Verzeichnis geschrieben. |
Onboarding mit Deduce
Um ein Deduce-Konto zu erstellen, kontaktieren Sie den Deduce-Support. Sobald ein Konto erstellt wurde, erhalten Sie eine Website-ID und einen API-Schlüssel, den Sie für die API-Konfiguration benötigen.
In den folgenden Abschnitten wird der Integrationsprozess beschrieben.
Schritt 1: Konfigurieren der Azure AD B2C-Richtlinie
Befolgen Sie die Anweisungen unter Abrufen des Starter Packs, um zu erfahren, wie Sie Ihren Azure AD B2C-Mandanten einrichten und Richtlinien konfigurieren. Dieser Beispielartikel basiert auf dem Starter Pack für lokale Konten.
Schritt 2: Anpassen der Benutzeroberfläche von Azure AD B2C
Um den clientseitigen Benutzer-Agenten zu erfassen, erstellen Sie ihre eigene **ContentDefinition**
mit einer beliebigen ID, um das zugehörige JavaScript einzubeziehen. Bestimmen Sie die Benutzer-Agenten-Zeichenfolge des Endbenutzer-Browsers, und speichern Sie sie als Anspruch in Azure AD B2C.
Laden Sie die api.selfasserted, selfAsserted.cshtml, lokal herunter.
Bearbeiten Sie die Datei selfAsserted.cshtml, um das folgende JavaScript einzubeziehen, bevor durch den Abschluss von
</head>
ein zusätzliches Style-Element definiert wird, um den Panelstandard auszublenden.<style> .panel-default { margin: 0 auto; width: 60%; height: 0px; background-color: #296ec6; opacity: 1; border-radius: .5rem; border: none; color: #fff; font-size: 1em; box-shadow: 0 0 30px 0 #dae1f7; visibility: hidden; } </style>
Fügen Sie den folgenden JavaScript-Code vor dem Abschluss von
</body>
hinzu. Mit diesem Code wird der Benutzer-Agent aus dem Browser des Benutzers ausgelesen, und die ContentDefinition wird in Kombination mit dem selbstbestätigten technischen Profil verwendet, um den Benutzer-Agent als Ausgabeanspruch an den nächsten Orchestrierungsschritt zurückzugeben.<script> $("#user_agent").hide().val(window.navigator.userAgent); var img = new Image(); img.onload = function() { document.getElementById("continue").click(); }; img.src = "https://login.microsoftonline.com/static/tenant/templates/images/logo.svg"; </script>
Schritt 3: Konfigurieren des Speicherorts
Richten Sie einen BLOB-Speichercontainer in Ihrem Speicherkonto ein, und laden Sie die zuvor bearbeitete Datei
**selfAsserted.cshtml**
in Ihren BLOB-Container hoch.Gewähren Sie CORS Zugriff auf den erstellten Speichercontainer, indem Sie diese Anweisungen befolgen:
Wechseln Sie zu Einstellungen>Zulässiger Ursprung, und geben Sie
https://your_tenant_name.b2clogin.com
ein. Ersetzen Sieyour-tenant- name
durch den Namen Ihres Azure AD B2C-Mandanten, z. B.fabrikam
. Verwenden Sie bei der Eingabe Ihres Mandantennamens ausschließlich Kleinbuchstaben.Wählen Sie für Zulässige Methoden die Optionen
GET
undPUT
aus.Wählen Sie Speichern aus.
Schritt 4: Konfigurieren der Inhaltsdefinition
Zum Anpassen der Benutzeroberfläche geben Sie im ContentDefinition
-Element eine URL mit benutzerdefiniertem HTML-Inhalt an. Verweisen Sie in dem selbstbestätigten technischen Profil oder in dem Orchestrierungsschritt auf den Bezeichner der ContentDefinition.
Öffnen Sie die
TrustFrameworksExtension.xml
und definieren Sie eine neue ContentDefinition, um das selbstbestätigte technische Profil anzupassen.Suchen Sie das
BuildingBlocks
-Element, und fügen Sie die**api.selfassertedDeduce**
-ContentDefinition hinzu:<BuildingBlocks> ... <ContentDefinitions> <ContentDefinition Id="api.selfassertedDeduce"> <LoadUri>https://<STORAGE-ACCOUNT-NAME>.blob.core.windows.net/<CONTAINER>/selfAsserted.cshtml</LoadUri> <RecoveryUri>~/common/default_page_error.html</RecoveryUri> <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.7</DataUri> <Metadata> <Item Key="DisplayName">Signin and Signup Deduce</Item> </Metadata> </ContentDefinition> </ContentDefinitions> ... </BuildingBlocks>
Ersetzen Sie LoadUri durch die URL, die auf die Datei selfAsserted.cshtml
verweist, die in Schritt 1 erstellt wurde.
Schritt 5: Hinzufügen eines zusätzlichen ClaimType
Das ClaimsSchema-Element definiert die Anspruchstypen, auf die als Teil der Richtlinie verwiesen werden kann. Es gibt zusätzliche Ansprüche, die von Deduce unterstützt werden und hinzugefügt werden können.
Öffnen Sie die Datei
TrustFrameworksExtension.xml
.Im
**BuildingBlocks**
-Element können zusätzliche Identitätsansprüche hinzugefügt werden, die von Deduce unterstützt werden.<BuildingBlocks> ... <ClaimsSchema> <!-- Claims for Deduce API request body --> <ClaimType Id="site"> <DisplayName>Site ID</DisplayName> <DataType>string</DataType> <AdminHelpText>Deduce Insight API site id</AdminHelpText> </ClaimType> <ClaimType Id="ip"> <DisplayName>IP Address</DisplayName> <DataType>string</DataType> <AdminHelpText>Add help text here</AdminHelpText> </ClaimType> <ClaimType Id="apikey"> <DisplayName>API Key</DisplayName> <DataType>string</DataType> <AdminHelpText>Add help text here</AdminHelpText> </ClaimType> <ClaimType Id="action"> <DisplayName>Contextual action</DisplayName> <DataType>string</DataType> <AdminHelpText>Add help text here</AdminHelpText> </ClaimType> <!-- End of Claims for Deduce API request body --> <!-- Rest API call request body to deduce insight API --> <ClaimType Id="deduce_requestbody"> <DisplayName>Request body for insight api</DisplayName> <DataType>string</DataType> <AdminHelpText>Request body for insight api</AdminHelpText> </ClaimType> <ClaimType Id="deduce_trust_response"> <DisplayName>Response body for insight api</DisplayName> <DataType>string</DataType> <AdminHelpText>Response body for insight api</AdminHelpText> </ClaimType> <!-- End of Rest API call request body to deduce insight API --> <!-- Response claims from Deduce Insight API --> <ClaimType Id="data.signals.trust"> <DisplayName>Trust collection</DisplayName> <DataType>stringCollection</DataType> <AdminHelpText>List of asserted trust</AdminHelpText> </ClaimType> <ClaimType Id="data.signals.info"> <DisplayName>Trust collection</DisplayName> <DataType>stringCollection</DataType> <AdminHelpText>List of asserted info</AdminHelpText> </ClaimType> <ClaimType Id="data.signals.risk"> <DisplayName>Trust collection</DisplayName> <DataType>stringCollection</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.network.company_name"> <DisplayName>data.network.company_name</DisplayName> <DataType>string</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.network.crawler_name"> <DisplayName>data.network.crawler_name</DisplayName> <DataType>string</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.network.is_corporate"> <DisplayName>data.network.is_corporate</DisplayName> <DataType>boolean</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.network.is_education"> <DisplayName>data.network.is_education</DisplayName> <DataType>boolean</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.network.is_hosting"> <DisplayName>data.network.is_hosting</DisplayName> <DataType>boolean</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.network.is_mobile"> <DisplayName>data.network.is_mobile</DisplayName> <DataType>boolean</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.network.is_proxy"> <DisplayName>data.network.is_proxy"</DisplayName> <DataType>boolean</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.network.is_tor"> <DisplayName>data.network.is_tor</DisplayName> <DataType>boolean</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.network.is_vpn_capable"> <DisplayName>data.network.is_vpn_capable</DisplayName> <DataType>boolean</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.network.is_vpn_confirmed"> <DisplayName>data.network.is_vpn_confirmed</DisplayName> <DataType>boolean</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.network.is_vpn_suspect"> <DisplayName>data.network.is_vpn_suspect</DisplayName> <DataType>boolean</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.network.isp_name"> <DisplayName>data.network.isp_name</DisplayName> <DataType>string</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.network.vpn_name"> <DisplayName>data.network.vpn_name</DisplayName> <DataType>string</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.geo.city"> <DisplayName>data.geo.city</DisplayName> <DataType>string</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.geo.country"> <DisplayName>data.geo.country</DisplayName> <DataType>string</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.geo.lat"> <DisplayName>data.geo.lat</DisplayName> <DataType>string</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.geo.long"> <DisplayName>data.geo.long</DisplayName> <DataType>string</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.geo.state"> <DisplayName>data.geo.state</DisplayName> <DataType>string</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.device.ua_brand"> <DisplayName>data.device.ua_brand</DisplayName> <DataType>string</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.device.ua_browser"> <DisplayName>data.device.ua_browser</DisplayName> <DataType>string</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.device.ua_device_type"> <DisplayName>data.device.ua_device_type</DisplayName> <DataType>string</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.device.ua_name"> <DisplayName>data.device.ua_name</DisplayName> <DataType>string</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.device.ua_os"> <DisplayName>data.device.ua_os</DisplayName> <DataType>string</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.device.ua_type"> <DisplayName>data.device.ua_type</DisplayName> <DataType>string</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.device.ua_version"> <DisplayName>data.device.ua_version</DisplayName> <DataType>string</DataType> <AdminHelpText>List of asserted risk</AdminHelpText> </ClaimType> <ClaimType Id="data.activity.email.ip_count"> <DisplayName>data.activity.email.ip_count</DisplayName> <DataType>int</DataType> <AdminHelpText>Add help text here</AdminHelpText> </ClaimType> <ClaimType Id="data.activity.email.lastseen"> <DisplayName>data.activity.email.lastseen</DisplayName> <DataType>string</DataType> <AdminHelpText>Add help text here</AdminHelpText> </ClaimType> <ClaimType Id="data.activity.email.frequency"> <DisplayName>data.activity.email.frequency</DisplayName> <DataType>int</DataType> <AdminHelpText>Add help text here</AdminHelpText> </ClaimType> <ClaimType Id="data.activity.emailip.frequency"> <DisplayName>data.activity.emailip.frequency</DisplayName> <DataType>int</DataType> <AdminHelpText>Add help text here</AdminHelpText> </ClaimType> <ClaimType Id="data.activity.emailip.lastseen"> <DisplayName>data.activity.emailip.lastseen</DisplayName> <DataType>string</DataType> <AdminHelpText>Add help text here</AdminHelpText> </ClaimType> <ClaimType Id="data.activity.emailip.match"> <DisplayName>data.activity.emailip.match</DisplayName> <DataType>boolean</DataType> <AdminHelpText>Add help text here</AdminHelpText> </ClaimType> <ClaimType Id="data.activity.emailip.rank_email"> <DisplayName>data.activity.emailip.rank_email</DisplayName> <DataType>int</DataType> <AdminHelpText>Add help text here</AdminHelpText> </ClaimType> <ClaimType Id="data.activity.emailip.rank_ip"> <DisplayName>data.activity.emailip.rank_ip</DisplayName> <DataType>int</DataType> <AdminHelpText>Add help text here</AdminHelpText> </ClaimType> <ClaimType Id="data.activity.ip.email_count"> <DisplayName>data.activity.ip.email_count</DisplayName> <DataType>int</DataType> <AdminHelpText>Add help text here</AdminHelpText> </ClaimType> <ClaimType Id="data.activity.ip.lastseen"> <DisplayName>data.activity.ip.lastseen</DisplayName> <DataType>string</DataType> <AdminHelpText>Add help text here</AdminHelpText> </ClaimType> <ClaimType Id="data.activity.ip.frequency"> <DisplayName>data.activity.ip.frequency</DisplayName> <DataType>int</DataType> <AdminHelpText>Add help text here</AdminHelpText> </ClaimType> <ClaimType Id="data.sent_timestamp"> <DisplayName>datasent_timestamp</DisplayName> <DataType>long</DataType> <AdminHelpText>Add help text here</AdminHelpText> </ClaimType> <ClaimType Id="user_agent"> <DisplayName>User Agent</DisplayName> <DataType>string</DataType> <UserHelpText>Add help text here</UserHelpText> <UserInputType>TextBox</UserInputType> </ClaimType> <ClaimType Id="correlationId"> <DisplayName>correlation ID</DisplayName> <DataType>string</DataType> </ClaimType> <!-- End Response claims from Deduce Insight API --> ... </ClaimsSchema> ... </BuildingBlocks>
Schritt 6: Hinzufügen des Deduce-ClaimsProvider
Ein ClaimsProvider ist eine Schnittstelle für die Kommunikation mit unterschiedlichen Parteien über ihre zugehörigen technischen Profile.
Selbstbestätigte technische
SelfAsserted-UserAgent
-Profile werden verwendet, um clientseitige Benutzer-Agenten zu erfassen.Mit technischen
deduce_insight_api
-Profilen werden Daten an den RESTful-Dienst in einer Sammlung von Eingabeansprüchen gesendet, und umgekehrt erhalten sie Daten in einer Sammlung von Ausgabeansprüchen zurück. Weitere Informationen finden Sie unter Integrieren von REST-API-Anspruchsaustauschvorgängen in Ihre benutzerdefinierte Azure AD B2C-Richtlinie.
Sie können Deduce als Anspruchsanbieter definieren, indem Sie den Dienst dem Element ClaimsProvider („Anspruchsanbieter“) in der Erweiterungsdatei Ihrer Richtlinie hinzufügen.
Öffnen Sie die Datei
TrustFrameworkExtensions.xml
.Suchen Sie das ClaimsProvider-Element. Wenn es nicht vorhanden ist, fügen Sie wie folgt einen neuen ClaimsProvider hinzu:
<ClaimsProvider> <DisplayName>Deduce REST API</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="SelfAsserted-UserAgent"> <DisplayName>Pre-login</DisplayName> <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" /> <Metadata> <Item Key="ContentDefinitionReferenceId">api.selfassertedDeduce</Item> <Item Key="setting.showCancelButton">false</Item> <Item Key="language.button_continue">Continue</Item> </Metadata> <OutputClaims> <OutputClaim ClaimTypeReferenceId="user_agent" /> </OutputClaims> </TechnicalProfile> <TechnicalProfile Id="deduce_insight_api"> <DisplayName>Get customer insight data from deduce api</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://deduceproxyapi.azurewebsites.net/api/Deduce/DeduceInsights</Item> <Item Key="AuthenticationType">None</Item> <Item Key="SendClaimsIn">Body</Item> <Item Key="ResolveJsonPathsInJsonTokens">true</Item> <Item Key="AllowInsecureAuthInProduction">true</Item> <Item Key="DebugMode">true</Item> <Item Key="IncludeClaimResolvingInClaimsHandling">true</Item> </Metadata> <InputClaims> <InputClaim ClaimTypeReferenceId="user_agent" /> <InputClaim ClaimTypeReferenceId="signInNames.emailAddress" PartnerClaimType="email" /> <InputClaim ClaimTypeReferenceId="ip" DefaultValue="{Context:IPAddress}" AlwaysUseDefaultValue="true" /> <InputClaim ClaimTypeReferenceId="apikey" DefaultValue="<DEDUCE API KEY>" /> <InputClaim ClaimTypeReferenceId="action" DefaultValue="auth.success.password" /> <InputClaim ClaimTypeReferenceId="site" DefaultValue="<SITE>" /> </InputClaims> <OutputClaims> <OutputClaim ClaimTypeReferenceId="data.sent_timestamp" PartnerClaimType="data.sent_timestamp" /> <OutputClaim ClaimTypeReferenceId="data.activity.ip.frequency" PartnerClaimType="data.activity.ip.frequency" /> <OutputClaim ClaimTypeReferenceId="data.activity.ip.lastseen" PartnerClaimType="data.activity.ip.lastseen" /> <OutputClaim ClaimTypeReferenceId="data.activity.ip.email_count" PartnerClaimType="data.activity.ip.email_count" /> <OutputClaim ClaimTypeReferenceId="data.activity.email.ip_count" PartnerClaimType="data.activity.email.ip_count" /> <OutputClaim ClaimTypeReferenceId="data.activity.email.lastseen" PartnerClaimType="data.activity.email.lastseen" /> <OutputClaim ClaimTypeReferenceId="data.activity.email.frequency" PartnerClaimType="data.activity.email.frequency" /> <OutputClaim ClaimTypeReferenceId="data.activity.emailip.frequency" PartnerClaimType="data.activity.emailip.frequency" /> <OutputClaim ClaimTypeReferenceId="data.activity.emailip.lastseen" PartnerClaimType="data.activity.emailip.lastseen" /> <OutputClaim ClaimTypeReferenceId="data.activity.emailip.match" PartnerClaimType="data.activity.emailip.match" /> <OutputClaim ClaimTypeReferenceId="data.activity.emailip.rank_email" PartnerClaimType="data.activity.emailip.rank_email" /> <OutputClaim ClaimTypeReferenceId="data.activity.emailip.rank_ip" PartnerClaimType="data.activity.emailip.rank_ip" /> <OutputClaim ClaimTypeReferenceId="data.signals.trust" PartnerClaimType="data.signals.trust" /> <OutputClaim ClaimTypeReferenceId="data.signals.info" PartnerClaimType="data.signals.info" /> <OutputClaim ClaimTypeReferenceId="data.signals.risk" PartnerClaimType="data.signals.risk" /> <OutputClaim ClaimTypeReferenceId="data.network.company_name" PartnerClaimType="data.network.company_name" /> <OutputClaim ClaimTypeReferenceId="data.network.crawler_name" PartnerClaimType="data.network.crawler_name" /> <OutputClaim ClaimTypeReferenceId="data.network.is_corporate" PartnerClaimType="data.network.is_corporate" /> <OutputClaim ClaimTypeReferenceId="data.network.is_education" PartnerClaimType="data.network.is_education" /> <OutputClaim ClaimTypeReferenceId="data.network.is_hosting" PartnerClaimType="data.network.is_hosting" /> <OutputClaim ClaimTypeReferenceId="data.network.is_mobile" PartnerClaimType="data.network.is_mobile" /> <OutputClaim ClaimTypeReferenceId="data.network.is_proxy" PartnerClaimType="data.network.is_proxy" /> <OutputClaim ClaimTypeReferenceId="data.network.is_tor" PartnerClaimType="data.network.is_tor" /> <OutputClaim ClaimTypeReferenceId="data.network.is_vpn_capable" PartnerClaimType="data.network.is_vpn_capable" /> <OutputClaim ClaimTypeReferenceId="data.network.is_vpn_confirmed" PartnerClaimType="data.network.is_vpn_confirmed" /> <OutputClaim ClaimTypeReferenceId="data.network.is_vpn_suspect" PartnerClaimType="data.network.is_vpn_suspect" /> <OutputClaim ClaimTypeReferenceId="data.network.isp_name" PartnerClaimType="data.network.isp_name" /> <OutputClaim ClaimTypeReferenceId="data.network.vpn_name" PartnerClaimType="data.network.vpn_name" /> <OutputClaim ClaimTypeReferenceId="data.geo.city" PartnerClaimType="data.geo.city" /> <OutputClaim ClaimTypeReferenceId="data.geo.country" PartnerClaimType="data.geo.country" /> <OutputClaim ClaimTypeReferenceId="data.geo.lat" PartnerClaimType="data.geo.lat" /> <OutputClaim ClaimTypeReferenceId="data.geo.long" PartnerClaimType="data.geo.long" /> <OutputClaim ClaimTypeReferenceId="data.geo.state" PartnerClaimType="data.geo.state" /> <OutputClaim ClaimTypeReferenceId="data.device.ua_brand" PartnerClaimType="data.device.ua_brand" /> <OutputClaim ClaimTypeReferenceId="data.device.ua_browser" PartnerClaimType="data.device.ua_browser" /> <OutputClaim ClaimTypeReferenceId="data.device.ua_device_type" PartnerClaimType="data.device.ua_device_type" /> <OutputClaim ClaimTypeReferenceId="data.device.ua_name" PartnerClaimType="data.device.ua_name" /> <OutputClaim ClaimTypeReferenceId="data.device.ua_os" PartnerClaimType="data.device.ua_os" /> <OutputClaim ClaimTypeReferenceId="data.device.ua_type" PartnerClaimType="data.device.ua_type" /> <OutputClaim ClaimTypeReferenceId="data.device.ua_version" PartnerClaimType="data.device.ua_version" /> </OutputClaims> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
Ersetzen Sie apikey
und site
durch Sie die Informationen, die von Deduce zum Zeitpunkt des ersten Onboardings bereitgestellt werden.
Schritt 7: Hinzufügen einer User Journey
An dieser Stelle wurde die Deduce RESTfull-API zwar eingerichtet, aber sie ist noch auf keiner der Registrierungs-/Anmeldeseiten verfügbar. Wenn Sie nicht über eine eigene benutzerdefinierte User Journey verfügen, erstellen Sie ein Duplikat einer vorhandenen User Journey-Vorlage, und fahren Sie andernfalls mit dem nächsten Schritt fort.
Öffnen Sie die Datei
TrustFrameworkBase.xml
aus dem Starter Pack.Suchen und kopieren Sie den gesamten Inhalt des Elements UserJourneys, das
Id=SignUpOrSignIn
enthält.Öffnen Sie die Datei
TrustFrameworkExtensions.xml
, und suchen Sie nach dem Element UserJourneys. Wenn das Element nicht vorhanden ist, fügen Sie ein solches hinzu.Fügen Sie den gesamten Inhalt des kopierten UserJourney-Element als untergeordnetes Element des UserJourneys-Elements ein.
Benennen Sie die
Id
der User Journey um. Zum Beispiel,Id=CustomSignUpSignIn
Schritt 8: Hinzufügen der Deduce-API zu einer User Journey
Nachdem Sie nun über eine User Journey verfügen, fügen Sie die Orchestrierungsschritte hinzu, um Deduce aufzurufen.
Suchen Sie nach dem Orchestrierungsschrittelement, das
Type=CombinedSignInAndSignUp
enthält, oderType=ClaimsProviderSelection
in der User Journey. Dies ist in der Regel der erste Orchestrierungsschritt.Fügen Sie einen neuen Orchestrierungsschritt hinzu, um das technische
SelfAsserted-UserAgent
-Profil aufzurufen.Fügen Sie einen neuen Orchestrierungsschritt hinzu, um das technische
**deduce_insight_api**
-Profil aufzurufen.Das folgende Beispiel einer UserJourney basiert auf dem Starter Pack für lokale Konten:
<UserJourneys> <UserJourney Id="CustomSignUpOrSignIn"> <OrchestrationSteps> <OrchestrationStep Order="1" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="Browser-UserAgent" TechnicalProfileReferenceId="SelfAsserted-UserAgent" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="2" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin"> <ClaimsProviderSelections> <ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" /> </ClaimsProviderSelections> <ClaimsExchanges> <ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="SelfAsserted-LocalAccountSignin-Email" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="3" Type="ClaimsExchange"> <Preconditions> <Precondition Type="ClaimsExist" ExecuteActionsIf="true"> <Value>objectId</Value> <Action>SkipThisOrchestrationStep</Action> </Precondition> </Preconditions> <ClaimsExchanges> <ClaimsExchange Id="SignUpWithLogonEmailExchange" TechnicalProfileReferenceId="LocalAccountSignUpWithLogonEmail" /> </ClaimsExchanges> </OrchestrationStep> <!-- This step reads any user attributes that we may not have received when in the token. --> <OrchestrationStep Order="4" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="AADUserReadWithObjectId" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="5" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="DecideInsights" TechnicalProfileReferenceId="deduce_insight_api" /> </ClaimsExchanges> </OrchestrationStep> <OrchestrationStep Order="6" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" /> </OrchestrationSteps> <ClientDefinition ReferenceId="DefaultWeb" /> </UserJourney> </UserJourneys>
Schritt 9: Konfigurieren der Richtlinie für die vertrauende Seite
Die Richtlinie für die vertrauende Seite gibt die User Journey an, die von Azure AD B2C ausgeführt wird. Sie können auch steuern, welche Ansprüche an Ihre Anwendung übergeben werden, indem Sie das OutputClaims-Element des TechnicalProfile-Elements SignUpOrSignIn_WithDeduce anpassen. In diesem Beispiel erhält die Anwendung Informationen von der API der mittleren Ebene:
<RelyingParty>
<DefaultUserJourney ReferenceId="CustomSignUpOrSignIn" />
<UserJourneyBehaviors>
<ScriptExecution>Allow</ScriptExecution>
</UserJourneyBehaviors>
<TechnicalProfile Id="PolicyProfile">
<DisplayName>PolicyProfile</DisplayName>
<Protocol Name="OpenIdConnect" />
<OutputClaims>
<!-- <OutputClaim ClaimTypeReferenceId="user_agent" /> -->
<OutputClaim ClaimTypeReferenceId="displayName" />
<OutputClaim ClaimTypeReferenceId="givenName" />
<OutputClaim ClaimTypeReferenceId="surname" />
<OutputClaim ClaimTypeReferenceId="email" />
<OutputClaim ClaimTypeReferenceId="correlationId" DefaultValue="{Context:CorrelationId}" />
<OutputClaim ClaimTypeReferenceId="data.sent_timestamp" PartnerClaimType="data.sent_timestamp" />
<OutputClaim ClaimTypeReferenceId="data.activity.ip.frequency" PartnerClaimType="data.activity.ip.frequency" />
<OutputClaim ClaimTypeReferenceId="data.activity.ip.lastseen" PartnerClaimType="data.activity.ip.lastseen" />
<OutputClaim ClaimTypeReferenceId="data.activity.ip.email_count" PartnerClaimType="data.activity.ip.email_count" />
<OutputClaim ClaimTypeReferenceId="data.activity.email.ip_count" PartnerClaimType="data.activity.email.ip_count" />
<OutputClaim ClaimTypeReferenceId="data.activity.email.lastseen" PartnerClaimType="data.activity.email.lastseen" />
<OutputClaim ClaimTypeReferenceId="data.activity.email.frequency" PartnerClaimType="data.activity.email.frequency" />
<OutputClaim ClaimTypeReferenceId="data.activity.emailip.frequency" PartnerClaimType="data.activity.emailip.frequency" />
<OutputClaim ClaimTypeReferenceId="data.activity.emailip.lastseen" PartnerClaimType="data.activity.emailip.lastseen" />
<OutputClaim ClaimTypeReferenceId="data.activity.emailip.match" PartnerClaimType="data.activity.emailip.match" />
<OutputClaim ClaimTypeReferenceId="data.activity.emailip.rank_email" PartnerClaimType="data.activity.emailip.rank_email" />
<OutputClaim ClaimTypeReferenceId="data.activity.emailip.rank_ip" PartnerClaimType="data.activity.emailip.rank_ip" />
<OutputClaim ClaimTypeReferenceId="data.signals.trust" PartnerClaimType="data.signals.trust" />
<OutputClaim ClaimTypeReferenceId="data.signals.info" PartnerClaimType="data.signals.info" />
<OutputClaim ClaimTypeReferenceId="data.signals.risk" PartnerClaimType="data.signals.risk" />
<OutputClaim ClaimTypeReferenceId="data.network.company_name" PartnerClaimType="data.network.company_name" />
<OutputClaim ClaimTypeReferenceId="data.network.crawler_name" PartnerClaimType="data.network.crawler_name" />
<OutputClaim ClaimTypeReferenceId="data.network.is_corporate" PartnerClaimType="data.network.is_corporate" />
<OutputClaim ClaimTypeReferenceId="data.network.is_education" PartnerClaimType="data.network.is_education" />
<OutputClaim ClaimTypeReferenceId="data.network.is_hosting" PartnerClaimType="data.network.is_hosting" />
<OutputClaim ClaimTypeReferenceId="data.network.is_mobile" PartnerClaimType="data.network.is_mobile" />
<OutputClaim ClaimTypeReferenceId="data.network.is_proxy" PartnerClaimType="data.network.is_proxy" />
<OutputClaim ClaimTypeReferenceId="data.network.is_tor" PartnerClaimType="data.network.is_tor" />
<OutputClaim ClaimTypeReferenceId="data.network.is_vpn_capable" PartnerClaimType="data.network.is_vpn_capable" />
<OutputClaim ClaimTypeReferenceId="data.network.is_vpn_confirmed" PartnerClaimType="data.network.is_vpn_confirmed" />
<OutputClaim ClaimTypeReferenceId="data.network.is_vpn_suspect" PartnerClaimType="data.network.is_vpn_suspect" />
<OutputClaim ClaimTypeReferenceId="data.network.isp_name" PartnerClaimType="data.network.isp_name" />
<OutputClaim ClaimTypeReferenceId="data.network.vpn_name" PartnerClaimType="data.network.vpn_name" />
<OutputClaim ClaimTypeReferenceId="data.geo.city" PartnerClaimType="data.geo.city" />
<OutputClaim ClaimTypeReferenceId="data.geo.country" PartnerClaimType="data.geo.country" />
<OutputClaim ClaimTypeReferenceId="data.geo.lat" PartnerClaimType="data.geo.lat" />
<OutputClaim ClaimTypeReferenceId="data.geo.long" PartnerClaimType="data.geo.long" />
<OutputClaim ClaimTypeReferenceId="data.geo.state" PartnerClaimType="data.geo.state" />
<OutputClaim ClaimTypeReferenceId="data.device.ua_brand" PartnerClaimType="data.device.ua_brand" />
<OutputClaim ClaimTypeReferenceId="data.device.ua_browser" PartnerClaimType="data.device.ua_browser" />
<OutputClaim ClaimTypeReferenceId="data.device.ua_device_type" PartnerClaimType="data.device.ua_device_type" />
<OutputClaim ClaimTypeReferenceId="data.device.ua_name" PartnerClaimType="data.device.ua_name" />
<OutputClaim ClaimTypeReferenceId="data.device.ua_os" PartnerClaimType="data.device.ua_os" />
<OutputClaim ClaimTypeReferenceId="data.device.ua_type" PartnerClaimType="data.device.ua_type" />
<OutputClaim ClaimTypeReferenceId="data.device.ua_version" PartnerClaimType="data.device.ua_version" />
<OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" />
</OutputClaims>
<SubjectNamingInfo ClaimType="sub" />
</TechnicalProfile>
</RelyingParty>
Schritt 10: Hochladen der benutzerdefinierten Richtlinie
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 klicken Sie darauf.
Klicken Sie unter „Richtlinien“ auf Identity Experience Framework.
Wählen Sie Benutzerdefinierte Richtlinie hochladen aus, und laden Sie dann die beiden geänderten Richtliniendateien in der folgenden Reihenfolge hoch: zuerst die Erweiterungsrichtlinie (z. B.
TrustFrameworkBase.xml
) und dann die Richtlinie für die vertrauende Seite (z. B.B2C_1A_signup
).
Schritt 11: Testen der benutzerdefinierten Richtlinie
Wählen Sie die Richtliniendatei für die vertrauende Seite aus, z. B.
B2C_1A_signup
.Wählen Sie für Anwendung eine Webanwendung aus, die Sie zuvor registriert haben. Als Antwort-URL sollte
https://jwt.ms
angezeigt werden.Wählen Sie die Schaltfläche Jetzt ausführen aus.
Die Registrierungsrichtlinie sollte Deduce sofort aufrufen. Wenn die Anmeldung verwendet wird, wählen Sie Deduce aus, um sich bei Deduce anzumelden.
Wenn der Anmeldevorgang erfolgreich verlaufen ist, wird der Browser an https://jwt.ms
umgeleitet und dadurch der Inhalt des von Azure AD B2C zurückgegebenen Tokens angezeigt.
Nächste Schritte
Weitere Informationen finden Sie in den folgenden Artikeln: