Konfigurowanie usługi Azure Active Directory B2C za pomocą rozwiązania Deduce w celu zwalczania oszustw związanych z tożsamościami i tworzenia zaufanego środowiska użytkownika
W tym przykładowym artykule przedstawiono wskazówki dotyczące sposobu integrowania uwierzytelniania usługi Azure Active Directory B2C (Azure AD B2C) z usługą Deduce. Deduce koncentruje się na zatrzymaniu oszustw związanych z przejęciem kont i rejestracją — najszybciej rozwijającym się oszustwem w Internecie. Deduce Identity Network jest wspierana przez koalicję ponad 150.000 witryn internetowych i aplikacji, które udostępniają identyfikatory logowania, rejestracje i kasy z Deduce ponad 1,4 miliarda razy dziennie.
Wynikowa analiza tożsamości zatrzymuje ataki, zanim staną się problemem finansowym i odpowiedzialnością korporacyjną. Używa ona historycznej analizy behawioralnej jako predyktora zaufania, dzięki czemu organizacje mogą dostarczać bezproblemowe środowisko użytkownika dla swoich najlepszych klientów. Kompleksowy zakres sygnałów ryzyka i zaufania może informować o każdej decyzji uwierzytelniania za pomocą wystąpienia usługi Azure AD B2C. Dzięki tej integracji organizacje mogą rozszerzać możliwości usługi Azure AD B2C podczas procesu rejestracji lub logowania, aby uzyskać dodatkowe szczegółowe informacje o użytkowniku z interfejsu API deduce Szczegółowe informacje. Niektóre atrybuty pozyskane przez interfejs API deduce to:
- Poczta e-mail
- Adres IP
- User agent
Wymagania wstępne
Aby rozpocząć pracę, potrzebne są następujące elementy:
Subskrypcja Azure. Jeśli go nie masz, pobierz bezpłatne konto.
Dzierżawa usługi Azure AD B2C połączona z subskrypcją platformy Azure.
Skontaktuj się z deduce , aby skonfigurować środowisko testowe lub produkcyjne.
Możliwość korzystania z zasad niestandardowych usługi Azure AD B2C. Jeśli nie możesz, wykonaj kroki opisane w artykule Wprowadzenie do zasad niestandardowych w usłudze Azure AD B2C , aby dowiedzieć się, jak używać zasad niestandardowych.
Opis scenariusza
Integracja obejmuje następujące składniki:
- Azure AD B2C — serwer autoryzacji odpowiedzialny za weryfikowanie poświadczeń użytkownika, znany również jako dostawca tożsamości.
- Deduce — usługa Deduce pobiera dane wejściowe udostępniane przez użytkownika i udostępnia szczegółowe informacje o aktywności cyfrowej na temat tożsamości użytkownika.
- Niestandardowy interfejs API rest — ten interfejs API implementuje integrację między usługą Azure AD B2C i interfejsem API Szczegółowe informacje Deduce.
Na poniższym diagramie architektury przedstawiono implementację:
Kroki | opis |
---|---|
1. | Użytkownik otwiera stronę logowania usługi Azure AD B2C, a następnie zaloguje się lub zarejestruje się, wprowadzając nazwę użytkownika. |
2. | Usługa Azure AD B2C wywołuje interfejs API warstwy środkowej i przekazuje atrybuty użytkownika. |
3. | Interfejs API warstwy środkowej zbiera atrybuty użytkownika i przekształca go w format używany przez interfejs API deduce, a następnie wysyła go do deduce. |
4. | Deduce używa informacji i przetwarza je w celu zweryfikowania identyfikacji użytkownika na podstawie analizy ryzyka. Następnie zwraca wynik do interfejsu API warstwy środkowej. |
5. | Interfejs API warstwy środkowej przetwarza informacje i wysyła sygnały ryzyka, zaufania i informacji w poprawnym formacie JSON do usługi Azure AD B2C. |
6. | Usługa Azure AD B2C odbiera informacje z interfejsu API warstwy środkowej. Jeśli zostanie wyświetlona odpowiedź na błąd, zostanie wyświetlony użytkownikowi komunikat o błędzie. Jeśli zostanie wyświetlona odpowiedź z informacją o powodzeniu, użytkownik zostanie uwierzytelniony i zapisany w katalogu. |
Dołączanie z deduce
Aby utworzyć konto deduce, skontaktuj się z pomocą techniczną firmy Deduce. Po utworzeniu konta otrzymasz identyfikator witryny i klucz interfejsu API, który będzie potrzebny do konfiguracji interfejsu API.
W poniższych sekcjach opisano proces integracji.
Krok 1. Konfigurowanie zasad usługi Azure AD B2C
Postępuj zgodnie z instrukcjami w temacie Pobieranie pakietu startowego, aby dowiedzieć się, jak skonfigurować dzierżawę usługi Azure AD B2C i skonfigurować zasady. Ten przykładowy artykuł jest oparty na pakiecie startowym Konta lokalne.
Krok 2. Dostosowywanie interfejsu użytkownika usługi Azure AD B2C
Aby zebrać user_agent po stronie klienta, utwórz własny **ContentDefinition**
identyfikator, aby uwzględnić powiązany kod JavaScript. Określ ciąg user_agent przeglądarki użytkownika końcowego i zapisz go jako oświadczenie w usłudze Azure AD B2C.
Pobierz plik api.selfasserted, selfAsserted.cshtml lokalnie.
Edytuj plik selfAsserted.cshtml, aby uwzględnić następujący kod JavaScript przed zamknięciem
</head>
definiuje dodatkowy element Style, aby ukryć ustawienie domyślne panelu.<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>
Dodaj następujący kod JavaScript przed zamknięciem obiektu
</body>
. Ten kod odczytuje user_agent z przeglądarki użytkownika, a element ContentDefinition jest używany w połączeniu z własnym profilem technicznym w celu zwrócenia user_agent jako oświadczenia wyjściowego do następnego kroku aranżacji.<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>
Krok 3. Konfigurowanie lokalizacji przechowywania
Skonfiguruj kontener magazynu obiektów blob na koncie magazynu i przekaż wcześniej edytowany
**selfAsserted.cshtml**
plik do kontenera obiektów blob.Zezwalaj na dostęp mechanizmu CORS do utworzonego kontenera magazynu, wykonując następujące instrukcje:
Przejdź do Ustawienia> Wszystkie źródło, wprowadź .
https://your_tenant_name.b2clogin.com
Zastąpyour-tenant- name
ciąg nazwą dzierżawy usługi Azure AD B2C, taką jakfabrikam
. Podczas wprowadzania nazwy dzierżawy użyj wszystkich małych liter.W obszarze Dozwolone metody wybierz pozycję
GET
iPUT
.Wybierz pozycję Zapisz.
Krok 4. Konfigurowanie definicji zawartości
Aby dostosować interfejs użytkownika, należy określić adres URL w elemecie ContentDefinition
z dostosowaną zawartością HTML. W kroku samodzielnego profilu technicznego lub aranżacji wskażesz ten identyfikator ContentDefinition.
Otwórz element
TrustFrameworksExtension.xml
i zdefiniuj nową definicję zawartości, aby dostosować własny profil techniczny.BuildingBlocks
Znajdź element i dodaj element**api.selfassertedDeduce**
ContentDefinition:<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>
Zastąp wartość LoadUri adresem URL wskazującym selfAsserted.cshtml
plik utworzony w kroku 1.
Krok 5. Dodawanie dodatkowego typu oświadczenia
Element ClaimsSchema definiuje typy oświadczeń, do których można odwoływać się w ramach zasad. Istnieją dodatkowe oświadczenia, które deduce obsługuje i można dodać.
Otwórz
TrustFrameworksExtension.xml
W elememencie
**BuildingBlocks**
można dodać dodatkowe oświadczenia tożsamości obsługiwane przez usługę Deduce.<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>
Krok 6. Dodawanie deduce ClaimsProvider
Dostawca oświadczeń to interfejs do komunikowania się z różnymi typami stron za pośrednictwem swoich profilów technicznych.
SelfAsserted-UserAgent
Własny profil techniczny służy do zbierania user_agent po stronie klienta.deduce_insight_api
profil techniczny wysyła dane do usługi Deduce RESTful w kolekcji oświadczeń wejściowych i odbiera dane z powrotem w kolekcji oświadczeń wyjściowych. Aby uzyskać więcej informacji, zobacz Integrowanie wymiany oświadczeń interfejsu API REST w zasadach niestandardowych usługi Azure AD B2C
Deduce można zdefiniować jako dostawcę oświadczeń, dodając go do elementu ClaimsProvider w pliku rozszerzenia zasad.
Otwórz klasę
TrustFrameworkExtensions.xml
.Znajdź element ClaimsProvider. Jeśli jeszcze nie istnieje, dodaj nowy element ClaimsProvider w następujący sposób:
<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>
Zastąp apikey
wartości i site
informacjami podanymi przez deduce w momencie początkowego dołączania.
Krok 7. Dodawanie podróży użytkownika
Na tym etapie skonfigurowano interfejs API Deduce RESTfull, ale nie jest jeszcze dostępny na żadnej ze stron rejestracji ani logowania. Jeśli nie masz własnej podróży użytkownika niestandardowego, utwórz duplikat istniejącej podróży użytkownika szablonu, w przeciwnym razie przejdź do następnego kroku.
TrustFrameworkBase.xml
Otwórz plik z pakietu startowego.Znajdź i skopiuj całą zawartość elementu UserJourneys , który zawiera
Id=SignUpOrSignIn
element .Otwórz element
TrustFrameworkExtensions.xml
i znajdź element UserJourneys . Jeśli element nie istnieje, dodaj go.Wklej całą zawartość elementu UserJourney skopiowaną jako element podrzędny elementu UserJourneys .
Id
Zmień nazwę podróży użytkownika. Na przykładId=CustomSignUpSignIn
Krok 8. Dodawanie interfejsu API deduce do podróży użytkownika
Teraz, gdy masz już podróż użytkownika, dodaj kroki orkiestracji, aby wywołać funkcję Deduce.
Znajdź element kroku aranżacji, który zawiera
Type=CombinedSignInAndSignUp
element , lubType=ClaimsProviderSelection
w podróży użytkownika. Zazwyczaj jest to pierwszy krok aranżacji.Dodaj nowy krok aranżacji w celu wywołania
SelfAsserted-UserAgent
profilu technicznego.Dodaj nowy krok aranżacji w celu wywołania
**deduce_insight_api**
profilu technicznego.Poniższy przykład userJourney jest oparty na pakiecie startowym kont lokalnych:
<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>
Krok 9. Konfigurowanie zasad jednostki uzależnionej
Zasady jednostki uzależnionej określają podróż użytkownika, który zostanie wykonany przez usługę Azure AD B2C. Możesz również kontrolować, jakie oświadczenia są przekazywane do aplikacji, dostosowując element OutputClaims elementu SignUpOrSignIn_WithDeduce TechnicalProfile. W tym przykładzie aplikacja otrzyma informacje z powrotem z interfejsu API warstwy środkowej:
<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>
Krok 10. Przekazywanie zasad niestandardowych
Zaloguj się w witrynie Azure Portal.
Jeśli masz dostęp do wielu dzierżaw, wybierz ikonę Ustawienia w górnym menu, aby przełączyć się do dzierżawy usługi Azure AD B2C z menu Katalogi i subskrypcje.
W witrynie Azure Portal wyszukaj i wybierz pozycję Azure AD B2C.
W obszarze Zasady wybierz pozycję Identity Experience Framework.
Wybierz pozycję Przekaż zasady niestandardowe, a następnie przekaż dwa zmienione pliki zasad w następującej kolejności: zasady rozszerzenia, na przykład
TrustFrameworkBase.xml
, a następnie zasady jednostki uzależnionej, takie jakB2C_1A_signup
.
Krok 11. Testowanie zasad niestandardowych
Wybierz zasady jednostki uzależnionej, na przykład
B2C_1A_signup
.W polu Aplikacja wybierz wcześniej zarejestrowaną aplikację internetową. Adres URL odpowiedzi powinien zawierać wartość
https://jwt.ms
.Wybierz przycisk Uruchom teraz.
Zasady rejestracji powinny natychmiast wywołać deduce. Jeśli jest używane logowanie, wybierz pozycję Deduce, aby zalogować się przy użyciu funkcji Deduce.
Jeśli proces logowania zakończy się pomyślnie, przeglądarka zostanie przekierowana do https://jwt.ms
usługi , która wyświetla zawartość tokenu zwróconego przez usługę Azure AD B2C.
Następne kroki
Aby uzyskać dodatkowe informacje, zapoznaj się z następującymi artykułami: