Configurare un flusso di iscrizione e accesso per un account locale usando criteri personalizzati di Azure Active Directory B2C
Nell'articolo Creare e leggere un account utente usando i criteri personalizzati di Azure Active Directory B2C, un utente crea un nuovo account utente ma non lo accede.
Questo articolo descrive come scrivere criteri personalizzati di Azure Active Directory B2C (Azure AD B2C) che consentono a un utente di creare un account locale di Azure AD B2C o di accedervi. Un account locale fa riferimento a un account creato nel tenant di Azure AD B2C quando un utente accede all'applicazione.
Panoramica
Azure AD B2C usa openID Connessione protocollo di autenticazione per verificare le credenziali utente. In Azure AD B2C si inviano le credenziali utente insieme ad altre informazioni a un endpoint sicuro, che determina quindi se le credenziali sono valide o meno. In breve, quando si usa l'implementazione di Azure AD B2C di OpenID Connessione, è possibile esternalizzare l'iscrizione, l'accesso e altre esperienze di gestione delle identità nelle applicazioni Web a Microsoft Entra ID.
I criteri personalizzati di Azure AD B2C forniscono un profilo tecnico OpenID Connessione, che viene usato per effettuare una chiamata a un endpoint Microsoft sicuro. Altre informazioni su OpenID Connessione profilo tecnico.
Prerequisiti
In assenza di un tenant, creare un tenant di Azure AD B2C collegato alla sottoscrizione di Azure.
Registrare un'applicazione Web e abilitare la concessione implicita del token ID. Per l'URI di reindirizzamento, usare https://jwt.ms.
Nel computer deve essere installato Visual Studio Code (VS Code ).
Completare i passaggi descritti in Creare e leggere un account utente usando i criteri personalizzati di Azure Active Directory B2C. Questo articolo fa parte della serie di procedure per creare ed eseguire criteri personalizzati.
Nota
Questo articolo fa parte della serie di procedure Creare ed eseguire criteri personalizzati in Azure Active Directory B2C. È consigliabile iniziare questa serie dal primo articolo.
Passaggio 1: Configurare openID Connessione profilo tecnico
Per configurare un profilo tecnico openID Connessione, è necessario eseguire tre passaggi:
- Dichiarare più attestazioni.
- Registrare le app nel portale di Azure.
- Configurare infine OpenID Connessione Profilo tecnico
Passaggio 1.1 - Dichiarare altre attestazioni
ContosoCustomPolicy.XML
Nel file individuare la sezione ClaimsSchema e quindi aggiungere altre attestazioni usando il codice seguente:
<!--<ClaimsSchema>-->
...
<ClaimType Id="grant_type">
<DisplayName>grant_type</DisplayName>
<DataType>string</DataType>
<UserHelpText>Special parameter passed for local account authentication to login.microsoftonline.com.</UserHelpText>
</ClaimType>
<ClaimType Id="scope">
<DisplayName>scope</DisplayName>
<DataType>string</DataType>
<UserHelpText>Special parameter passed for local account authentication to login.microsoftonline.com.</UserHelpText>
</ClaimType>
<ClaimType Id="nca">
<DisplayName>nca</DisplayName>
<DataType>string</DataType>
<UserHelpText>Special parameter passed for local account authentication to login.microsoftonline.com.</UserHelpText>
</ClaimType>
<ClaimType Id="client_id">
<DisplayName>client_id</DisplayName>
<DataType>string</DataType>
<AdminHelpText>Special parameter passed to EvoSTS.</AdminHelpText>
<UserHelpText>Special parameter passed to EvoSTS.</UserHelpText>
</ClaimType>
<ClaimType Id="resource_id">
<DisplayName>resource_id</DisplayName>
<DataType>string</DataType>
<AdminHelpText>Special parameter passed to EvoSTS.</AdminHelpText>
<UserHelpText>Special parameter passed to EvoSTS.</UserHelpText>
</ClaimType>
<!--</ClaimsSchema>-->
Passaggio 1.2 - Registrare le applicazioni del framework dell'esperienza di gestione delle identità
Azure AD B2C richiede di registrare due applicazioni usate per iscriversi e accedere agli utenti con account locali: IdentityExperienceFramework, un'API Web e ProxyIdentityExperienceFramework, un'app nativa con autorizzazione delegata all'app IdentityExperienceFramework.
Se non è già stato fatto, registrare le applicazioni seguenti. Per automatizzare la procedura dettagliata seguente, visitare l'app di installazione di IEF e seguire le istruzioni:
Usare la procedura descritta in Registrare l'applicazione IdentityExperienceFramework per registrare l'applicazione Identity Experience Framework. Copiare l'ID applicazione (client), appID, per la registrazione dell'applicazione Identity Experience Framework da usare nel passaggio successivo.
Usare la procedura descritta in Registrare l'applicazione ProxyIdentityExperienceFramework per registrare l'applicazione Proxy Identity Experience Framework. Copiare l'ID applicazione (client), proxyAppID, per la registrazione dell'applicazione Proxy Identity Experience Framework da usare nel passaggio successivo.
Passaggio 1.3 : Configurare il profilo tecnico di OpenID Connessione
ContosoCustomPolicy.XML
Nel file individuare la sezione ClaimsProviders e quindi aggiungere un elemento Provider di attestazioni che contiene openID Connessione profilo tecnico usando il codice seguente:
<!--<ClaimsProviders>-->
...
<ClaimsProvider>
<DisplayName>OpenID Connect Technical Profiles</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="SignInUser">
<DisplayName>Sign in with Local Account</DisplayName>
<Protocol Name="OpenIdConnect" />
<Metadata>
<Item Key="UserMessageIfClaimsPrincipalDoesNotExist">We didn't find this account</Item>
<Item Key="UserMessageIfInvalidPassword">Your password or username is incorrect</Item>
<Item Key="UserMessageIfOldPasswordUsed">You've used an old password.</Item>
<Item Key="ProviderName">https://sts.windows.net/</Item>
<Item Key="METADATA">https://login.microsoftonline.com/{tenant}/.well-known/openid-configuration</Item>
<Item Key="authorization_endpoint">https://login.microsoftonline.com/{tenant}/oauth2/token</Item>
<Item Key="response_types">id_token</Item>
<Item Key="response_mode">query</Item>
<Item Key="scope">email openid</Item>
<!-- Policy Engine Clients -->
<Item Key="UsePolicyInRedirectUri">false</Item>
<Item Key="HttpBinding">POST</Item>
<Item Key="client_id">proxyAppID</Item>
<Item Key="IdTokenAudience">appID</Item>
</Metadata>
<InputClaims>
<InputClaim ClaimTypeReferenceId="email" PartnerClaimType="username" Required="true" />
<InputClaim ClaimTypeReferenceId="password" PartnerClaimType="password" Required="true" />
<InputClaim ClaimTypeReferenceId="grant_type" DefaultValue="password" />
<InputClaim ClaimTypeReferenceId="scope" DefaultValue="openid" />
<InputClaim ClaimTypeReferenceId="nca" PartnerClaimType="nca" DefaultValue="1" />
<InputClaim ClaimTypeReferenceId="client_id" DefaultValue="proxyAppID" />
<InputClaim ClaimTypeReferenceId="resource_id" PartnerClaimType="resource" DefaultValue="appID" />
</InputClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="oid" />
</OutputClaims>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
<!--</ClaimsProviders>-->
Sostituire entrambe le istanze di:
appID con ID applicazione (client) dell'applicazione Identity Experience Framework copiata nel passaggio 1.2.
proxyAppID con ID applicazione (client) dell'applicazione Proxy Identity Experience Framework copiata nel passaggio 1.2.
Passaggio 2: Configurare l'interfaccia utente di accesso
Quando i criteri vengono eseguiti, l'utente deve visualizzare un'interfaccia utente che consente loro di accedere. L'interfaccia utente ha anche un'opzione per iscriversi se non ha già un account. A tale scopo, è necessario eseguire due passaggi:
- Configurare un profilo tecnico autocertificato, che visualizza il modulo di accesso all'utente.
- Configurare la definizione del contenuto per l'interfaccia utente di accesso.
Passaggio 2.1 - Configurare un profilo tecnico dell'interfaccia utente di accesso
ContosoCustomPolicy.XML
Nel file individuare il SignInUser
profilo tecnico e aggiungere un profilo tecnico SelfAsserted dopo di esso usando il codice seguente:
<TechnicalProfile Id="UserSignInCollector">
<DisplayName>Local Account Signin</DisplayName>
<Protocol Name="Proprietary"
Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
<Metadata>
<Item Key="setting.operatingMode">Email</Item>
<Item Key="SignUpTarget">AccountTypeInputCollectorClaimsExchange</Item>
</Metadata>
<DisplayClaims>
<DisplayClaim ClaimTypeReferenceId="email" Required="true" />
<DisplayClaim ClaimTypeReferenceId="password" Required="true" />
</DisplayClaims>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="email" />
<OutputClaim ClaimTypeReferenceId="password" />
<OutputClaim ClaimTypeReferenceId="objectId" />
</OutputClaims>
<ValidationTechnicalProfiles>
<ValidationTechnicalProfile ReferenceId="SignInUser" />
</ValidationTechnicalProfiles>
</TechnicalProfile>
È stato aggiunto un profilo tecnico SelfAsserted, UserSignInCollector, che visualizza il modulo di accesso all'utente. Il profilo tecnico è stato configurato per raccogliere l'indirizzo di posta elettronica dell'utente come nome di accesso, come indicato nei setting.operatingMode
metadati. Il modulo di accesso include un collegamento di iscrizione che consente all'utente di accedere a un modulo di iscrizione, come indicato dai SignUpTarget
metadati. Si vedrà come configurare SignUpWithLogonEmailExchangeClaimsExchange
nei passaggi di orchestrazione.
È stato anche aggiunto signInUser OpenID Connessione profilo tecnico come ValidationTechnicalProfile. Il profilo tecnico SignInUser viene quindi eseguito quando l'utente seleziona il pulsante Accedi (vedere lo screenshot nel passaggio 5).
Nel passaggio successivo (passaggio 2.2) viene configurata una definizione di contenuto che verrà usata in questo profilo tecnico SelfAsserted.
Passaggio 2.2: Configurare la definizione del contenuto dell'interfaccia di accesso
ContosoCustomPolicy.XML
Nel file individuare la sezione ContentDefinitions e quindi accedere a Definizione contenuto usando il codice seguente:
<!--<ContentDefinitions>-->
...
<ContentDefinition Id="SignupOrSigninContentDefinition">
<LoadUri>~/tenant/templates/AzureBlue/unified.cshtml</LoadUri>
<RecoveryUri>~/common/default_page_error.html</RecoveryUri>
<DataUri>urn:com:microsoft:aad:b2c:elements:contract:unifiedssp:2.1.7</DataUri>
<Metadata>
<Item Key="DisplayName">Signin and Signup</Item>
</Metadata>
</ContentDefinition>
<!--</ContentDefinitions>-->
È stata configurata una definizione di contenuto per il profilo tecnico autocertificato, SignupOrSigninContentDefinition
. È possibile specificarlo nel profilo tecnico usando l'elemento di metadati o specificarlo quando si fa riferimento al profilo tecnico nei passaggi di orchestrazione. In precedenza si è appreso come specificare una definizione di contenuto direttamente nel profilo tecnico autocertitivo, quindi in questo articolo si apprenderà come specificarlo quando si fa riferimento al profilo tecnico nei passaggi di orchestrazione, passaggio 3.
Passaggio 3- Aggiornare i passaggi di orchestrazione del percorso utente
ContosoCustomPolicy.XML
Nel file individuare il percorso utente HelloWorldJourney e sostituire tutta la raccolta di passaggi di orchestrazione con il codice seguente:
<!--<OrchestrationSteps>-->
...
<OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="SignupOrSigninContentDefinition">
<ClaimsProviderSelections>
<ClaimsProviderSelection ValidationClaimsExchangeId="LocalAccountSigninEmailExchange" />
</ClaimsProviderSelections>
<ClaimsExchanges>
<ClaimsExchange Id="LocalAccountSigninEmailExchange" TechnicalProfileReferenceId="UserSignInCollector" />
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="2" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="true">
<Value>objectId</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="AccountTypeInputCollectorClaimsExchange" TechnicalProfileReferenceId="AccountTypeInputCollector"/>
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="3" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="true">
<Value>objectId</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
<Precondition Type="ClaimEquals" ExecuteActionsIf="true">
<Value>accountType</Value>
<Value>company</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="GetAccessCodeClaimsExchange" TechnicalProfileReferenceId="AccessCodeInputCollector" />
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="4" Type="ClaimsExchange">
<Preconditions>
<Precondition Type="ClaimsExist" ExecuteActionsIf="true">
<Value>objectId</Value>
<Action>SkipThisOrchestrationStep</Action>
</Precondition>
</Preconditions>
<ClaimsExchanges>
<ClaimsExchange Id="SignUpWithLogonEmailExchange" TechnicalProfileReferenceId="UserInformationCollector" />
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="5" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="AADUserReaderExchange" TechnicalProfileReferenceId="AAD-UserRead"/>
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="6" Type="ClaimsExchange">
<ClaimsExchanges>
<ClaimsExchange Id="GetMessageClaimsExchange" TechnicalProfileReferenceId="UserInputMessageClaimGenerator"/>
</ClaimsExchanges>
</OrchestrationStep>
<OrchestrationStep Order="7" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />
<!--</OrchestrationSteps>-->
Nei passaggi di orchestrazione da due a cinque sono stati usati precondizioni per determinare se deve essere eseguito il passaggio di orchestrazione. È necessario determinare se l'utente accede o esegue l'iscrizione.
Quando vengono eseguiti i criteri personalizzati:
Passaggio di orchestrazione 1 : visualizza la pagina di accesso, in modo che l'utente possa accedere o selezionare il collegamento Iscriviti ora . Si noti che si specifica la definizione di contenuto usata dal profilo tecnico autocertificato UserSignInCollector per visualizzare il modulo di accesso.
Passaggio 2 dell'orchestrazione: questo passaggio viene eseguito se l'utente si iscrive (
objectId
non esiste), quindi viene visualizzato il modulo di selezione del tipo di account richiamando il profilo tecnico autocertifatto AccountTypeInputCollector .Passaggio di orchestrazione 3 : questo passaggio viene eseguito se l'utente effettua l'iscrizione (
objectId
non esiste) e che un utente non seleziona una societàaccountType
. È quindi necessario chiedere all'utente di immettere un oggettoaccessCode
richiamando il profilo tecnico autocertifatto AccessCodeInputCollector .Passaggio 4 dell'orchestrazione: questo passaggio viene eseguito se l'utente si iscrive (objectId non esiste), quindi viene visualizzato il modulo di iscrizione richiamando il profilo tecnico autocertifatto UserInformationCollector .
Passaggio 5 dell'orchestrazione: questo passaggio legge le informazioni sull'account da Microsoft Entra ID (viene richiamato
AAD-UserRead
il profilo tecnico microsoft Entra ID), quindi viene eseguito se un utente esegue l'iscrizione o l'accesso.Passaggio di orchestrazione 6 : questo passaggio richiama il profilo tecnico UserInputMessageClaimGenerator per assemblare il messaggio di saluto dell'utente.
Passaggio 7 dell'orchestrazione: infine, il passaggio 8 assembla e restituisce il token JWT alla fine dell'esecuzione del criterio.
Passaggio 4 - Caricare i criteri
Seguire la procedura descritta in Caricare un file di criteri personalizzato per caricare il file dei criteri. Se si carica un file con lo stesso nome di quello già presente nel portale, assicurarsi di selezionare Sovrascrivi il criterio personalizzato, se già esistente.
Passaggio 5 - Testare i criteri
Seguire la procedura descritta in Testare i criteri personalizzati per testare i criteri personalizzati. Una volta eseguiti i criteri, verrà visualizzata un'interfaccia simile alla schermata seguente:
È possibile accedere immettendo l'indirizzo di posta elettronica e la password di un account esistente. Se non si ha già un account, è necessario selezionare il collegamento Iscriviti ora per creare un nuovo account utente.
Passaggi successivi
Informazioni su come configurare un flusso di iscrizione e accesso con un account di social networking usando i criteri personalizzati di Azure Active Directory B2C.
Informazioni su come rimuovere il collegamento di iscrizione, in modo che gli utenti possano semplicemente accedere.
Altre informazioni su OpenID Connessione profilo tecnico.