Configurare Azure Active Directory B2C con Deduce per combattere le frodi di identità e creare un'esperienza utente attendibile
Questo articolo di esempio fornisce indicazioni su come integrare l'autenticazione di Azure Active Directory B2C (Azure AD B2C) con Deduce. La deduzione è incentrata sull'arresto dell'acquisizione degli account e sulle frodi di registrazione, ovvero la frode in rapida crescita su Internet. La Deduce Identity Network è basata su una coalizione di oltre 150.000 siti Web e app che condividono account di accesso, registrazioni e checkout con Deduce oltre 1,4 miliardi di volte al giorno.
L'intelligence sulle identità risultante interrompe gli attacchi prima che diventino un problema finanziario e una responsabilità aziendale. Usa l'analisi comportamentale cronologica come predictor di attendibilità, in modo che le organizzazioni possano offrire un'esperienza utente senza attriti per i clienti migliori. Una gamma completa di segnali di rischio e attendibilità può informare ogni decisione di autenticazione con l'istanza di Azure AD B2C. Con questa integrazione, le organizzazioni possono estendere le funzionalità di Azure AD B2C durante l'iscrizione o il processo di accesso per ottenere informazioni aggiuntive sull'utente dall'API Deduce Insights. Alcuni degli attributi inseriti dall'API Deduce sono:
- Indirizzo IP
- User agent
Prerequisiti
Per iniziare, è necessario:
Una sottoscrizione di Azure. Se non ne hai uno, ottieni un account gratuito.
Tenant di Azure AD B2C collegato alla sottoscrizione di Azure.
Contattare Deduce per configurare un ambiente di test o di produzione.
Possibilità di usare criteri personalizzati di Azure AD B2C. In caso contrario, completare i passaggi descritti in Introduzione ai criteri personalizzati in Azure AD B2C per informazioni su come usare criteri personalizzati.
Descrizione dello scenario
L'integrazione include i componenti seguenti:
- Azure AD B2C : il server di autorizzazione, responsabile della verifica delle credenziali dell'utente, noto anche come provider di identità.
- Deduce: il servizio Deduce accetta input forniti dall'utente e fornisce informazioni dettagliate sull'attività digitale sull'identità dell'utente.
- API rest personalizzata: questa API implementa l'integrazione tra Azure AD B2C e l'API Deduce Insights.
Il diagramma dell'architettura seguente illustra l'implementazione:
Passaggi | Descrizione |
---|---|
1. | L'utente apre la pagina di accesso di Azure AD B2C e quindi accede o effettua l'iscrizione immettendo il proprio nome utente. |
2. | Azure AD B2C chiama l'API di livello intermedio e passa gli attributi utente. |
3. | L'API di livello intermedio raccoglie gli attributi utente e la trasforma in un formato che l'API Deduce può utilizzare e quindi lo invia a Deduce. |
4. | Dedurre utilizza le informazioni e lo elabora per convalidare l'identificazione dell'utente in base all'analisi dei rischi. Restituisce quindi il risultato all'API di livello intermedio. |
5. | L'API di livello intermedio elabora le informazioni e invia segnali di rischio, attendibilità e informazioni nel formato JSON corretto ad Azure AD B2C. |
6. | Azure AD B2C riceve informazioni dall'API di livello intermedio. Se viene visualizzata una risposta di errore, viene visualizzato un messaggio di errore all'utente. Se viene visualizzata una risposta con esito positivo, l'utente viene autenticato e scritto nella directory . |
Eseguire l'onboarding con Deduce
Per creare un account Deduce, contattare il supporto di Deduce. Dopo aver creato un account, si riceverà un ID sito e una chiave API necessaria per la configurazione dell'API.
Le sezioni seguenti descrivono il processo di integrazione.
Passaggio 1: Configurare i criteri di Azure AD B2C
Seguire le istruzioni in Ottenere lo starter pack per informazioni su come configurare il tenant di Azure AD B2C e configurare i criteri. Questo articolo di esempi è basato sul pacchetto di avvio Account locali.
Passaggio 2: Personalizzare l'interfaccia utente di Azure AD B2C
Per raccogliere i user_agent dal lato client, creare il proprio **ContentDefinition**
con un ID arbitrario per includere il codice JavaScript correlato. Determinare la stringa di user_agent del browser dell'utente finale e archiviarla come attestazione in Azure AD B2C.
Scaricare l'api.selfasserted, selfAsserted.cshtml, in locale.
Modificare il file selfAsserted.cshtml per includere il codice JavaScript seguente prima della chiusura di
</head>
definisce un elemento Style aggiuntivo per nascondere l'impostazione predefinita del pannello.<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>
Aggiungere il codice JavaScript seguente prima della chiusura di
</body>
. Questo codice legge il user_agent dal browser dell'utente e contentDefinition viene usato in combinazione con il profilo tecnico autocertizionato per restituire user_agent come attestazione di output al passaggio di orchestrazione successivo.<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>
Passaggio 3: Configurare la posizione di archiviazione
Configurare un contenitore di archiviazione BLOB nell'account di archiviazione e caricare il file modificato
**selfAsserted.cshtml**
in precedenza nel contenitore BLOB.Consentire l'accesso CORS al contenitore di archiviazione creato seguendo queste istruzioni:
Passare a Impostazioni> Origine consentita, immettere .
https://your_tenant_name.b2clogin.com
Sostituireyour-tenant- name
con il nome del tenant di Azure AD B2C,fabrikam
ad esempio . Usare tutte le lettere minuscole quando si immette il nome del tenant.Per Metodi consentiti selezionare
GET
ePUT
.Seleziona Salva.
Passaggio 4: Configurare la definizione del contenuto
Per personalizzare l'interfaccia utente, specificare un URL nell'elemento ContentDefinition
con contenuto HTML personalizzato. Nel passaggio tecnico o orchestrazione autocertivi si fa riferimento all'identificatore ContentDefinition.
TrustFrameworksExtension.xml
Aprire e definire un nuovo ContentDefinition per personalizzare il profilo tecnico autocertificato.Trovare l'elemento
BuildingBlocks
e aggiungere**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>
Sostituire LoadUri con l'URL che punta al selfAsserted.cshtml
file creato nel passaggio 1.
Passaggio 5: Aggiungere l'argomento Deduce aggiuntivo ClaimType
L'elemento ClaimsSchema definisce i tipi di attestazione a cui è possibile fare riferimento nei criteri. Sono disponibili attestazioni aggiuntive che dedurre supportano e possono essere aggiunte.
Aprire il
TrustFrameworksExtension.xml
Nell'elemento
**BuildingBlocks**
possono essere aggiunte attestazioni di identità aggiuntive supportate da 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>
Passaggio 6: Aggiungere ClaimsProvider dedurre
Un provider di attestazioni è un'interfaccia per comunicare con diversi tipi di parti tramite i relativi profili tecnici.
SelfAsserted-UserAgent
il profilo tecnico autocertivo viene usato per raccogliere user_agent dal lato client.deduce_insight_api
il profilo tecnico invia i dati al servizio Deduci RESTful in una raccolta di attestazioni di input e riceve i dati in una raccolta di attestazioni di output. Per altre informazioni, vedere Integrare scambi di attestazioni API REST nei criteri personalizzati di Azure AD B2C
È possibile definire Deduce come provider di attestazioni aggiungendolo all'elemento ClaimsProvider nel file di estensione dei criteri.
Aprire il file
TrustFrameworkExtensions.xml
.Trovare l'elemento ClaimsProvider . Se non esiste, aggiungere un nuovo ClaimsProvider come indicato di seguito:
<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>
Sostituire apikey
e site
con le informazioni fornite da Deduce al momento dell'onboarding iniziale.
Passaggio 7: Aggiungere un percorso utente
A questo punto, l'API Deduzione RESTfull è stata configurata, ma non è ancora disponibile in nessuna delle pagine di iscrizione o di accesso. Se non si ha un percorso utente personalizzato, creare un duplicato di un percorso utente modello esistente, altrimenti continuare con il passaggio successivo.
Aprire il
TrustFrameworkBase.xml
file dallo starter pack.Trovare e copiare l'intero contenuto dell'elemento UserJourneys che include
Id=SignUpOrSignIn
.Aprire e
TrustFrameworkExtensions.xml
trovare l'elemento UserJourneys . Se l'elemento non esiste, aggiungerne uno.Incollare l'intero contenuto dell'elemento UserJourney copiato come figlio dell'elemento UserJourneys.
Rinominare l'oggetto
Id
del percorso utente. Ad esempio, usareId=CustomSignUpSignIn
Passaggio 8: Aggiungere l'API Deduce a un percorso utente
Dopo aver creato un percorso utente, aggiungere i passaggi di orchestrazione per chiamare Deduce.
Trovare l'elemento del passaggio di orchestrazione che include
Type=CombinedSignInAndSignUp
oType=ClaimsProviderSelection
nel percorso utente. In genere è il primo passaggio di orchestrazione.Aggiungere un nuovo passaggio di orchestrazione per richiamare
SelfAsserted-UserAgent
il profilo tecnico.Aggiungere un nuovo passaggio di orchestrazione per richiamare
**deduce_insight_api**
il profilo tecnico.L'esempio seguente di UserJourney si basa sul pacchetto starter degli account locali:
<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>
Passaggio 9: Configurare i criteri della relying party
Il criterio relying party specifica il percorso utente che verrà eseguito da Azure AD B2C. È anche possibile controllare quali attestazioni vengono passate all'applicazione modificando l'elemento OutputClaims dell'elemento SignUpOrSignIn_WithDeduce TechnicalProfile. In questo esempio l'applicazione riceverà informazioni dall'API di livello intermedio:
<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>
Passaggio 10: Caricare i criteri personalizzati
Accedi al portale di Azure.
Se si ha accesso a più tenant, selezionare l'icona Impostazioni nel menu in alto per passare al tenant di Azure AD B2C dal menu Directory e sottoscrizioni.
Nella portale di Azure cercare e selezionare Azure AD B2C.
In Criteri selezionare Framework dell'esperienza di gestione delle identità.
Selezionare Carica criteri personalizzati e quindi caricare i due file di criteri modificati, nell'ordine seguente: i criteri di estensione, ad esempio , quindi i criteri della relying party, ad esempio
TrustFrameworkBase.xml
B2C_1A_signup
.
Passaggio 11: Testare i criteri personalizzati
Selezionare i criteri della relying party, ad esempio
B2C_1A_signup
.In Applicazione selezionare un'applicazione Web registrata in precedenza. L'URL di risposta dovrebbe mostrare
https://jwt.ms
.Selezionare il pulsante Esegui adesso .
Il criterio di iscrizione deve richiamare immediatamente Deduce. Se si usa l'accesso, selezionare Deduce per accedere con Deduce.
Se il processo di accesso ha esito positivo, il browser viene reindirizzato a https://jwt.ms
, che visualizza il contenuto del token restituito da Azure AD B2C.
Passaggi successivi
Per altre informazioni, vedere gli articoli seguenti: