Azure Active Directory B2C: modificare l'iscrizione per aggiungere nuove attestazioni e configurare l'input utente.Azure Active Directory B2C: Modify sign up to add new claims and configure user input.

Nota

I criteri personalizzati sono disponibili in anteprima pubblica.Custom policies are in public preview.

I criteri personalizzati sono stati progettati principalmente per professionisti della gestione delle identità che devono affrontare scenari complessi.Custom policies are designed primarily for identity pros who need to address complex scenarios. Per la maggior parte degli scenari è consigliabile usare i criteri predefiniti di Azure Active Directory B2C.For most scenarios, we recommend that you use Azure Active Directory B2C built-in policies. I criteri predefiniti sono più facili da impostare per la configurazione.Built-in policies are easier to set up for your configuration. È possibile usare i criteri predefiniti e i criteri personalizzati nello stesso tenant di Azure Active Directory B2C.You can use built-in and custom policies in the same Azure Active Directory B2C tenant. Per altre informazioni, vedere la panoramica dei criteri personalizzati.To learn more, see the overview of custom policies.

Questo articolo illustra come aggiungere una nuova voce specificata dall'utente, un'attestazione, al percorso utente di iscrizione.In this article, you will add a new user provided entry (a claim) to your signup user journey. La voce verrà configurata come elenco a discesa e verrà indicato se è obbligatoria.You will configure the entry as a dropdown, and define if it is required.

PrerequisitiPrerequisites

La raccolta dei dati iniziali dagli utenti avviene mediante l'iscrizione/accesso.Gathering initial data from your users is achieved via signup/signin. In un secondo momento è possibile raccogliere attestazioni aggiuntive tramite i percorsi utente di modifica del profilo.Additional claims can be gathered later via profile edit user journeys. Ogni volta che Azure AD B2C raccoglie informazioni direttamente dall'utente in modo interattivo, il framework dell'esperienza di gestione delle identità usa il relativo selfasserted provider.Anytime Azure AD B2C gathers information directly from the user interactively, the Identity Experience Framework uses its selfasserted provider. I passaggi seguenti si applicano ogni volta che tale provider viene usato.The steps below apply anytime this provider is used.

Definire l'attestazione, il nome visualizzato e il tipo di input utenteDefine the claim, its display name and the user input type

Per chiedere all'utente di indicare la propria città,Lets ask the user for their city. Aggiungere l'elemento seguente all'elemento <ClaimsSchema> nel file dei criteri TrustFrameworkBase:Add the following element to the <ClaimsSchema> element in the TrustFrameworkBase policy file:

<ClaimType Id="city">
  <DisplayName>city</DisplayName>
  <DataType>string</DataType>
  <UserHelpText>Your city</UserHelpText>
  <UserInputType>TextBox</UserInputType>
</ClaimType>

Sono disponibili opzioni aggiuntive che è possibile definire qui per personalizzare l'attestazione.There are additional choices you can make here to customize the claim. Per uno schema completo, vedere il documento Identity Experience Framework Technical Reference Guide (Guida di riferimento tecnico al framework dell'esperienza di gestione delle identità),For a full schema, refer to the Identity Experience Framework Technical Reference Guide. che verrà presto pubblicata nella sezione dei riferimenti.This guide will be published soon in the reference section.

  • <DisplayName> è una stringa che definisce l'etichetta destinata all'utente.<DisplayName> is a string that defines the user-facing label

  • <UserHelpText> consente all'utente di identificare i requisiti.<UserHelpText> helps the user understand what is required

  • <UserInputType> include le quattro opzioni evidenziate di seguito.<UserInputType> has the following four options highlighted below:

    • TextBox

      <ClaimType Id="city">
      <DisplayName>city where you work</DisplayName>
      <DataType>string</DataType>
      <UserHelpText>Your city</UserHelpText>
      <UserInputType>TextBox</UserInputType>
      </ClaimType>
      
    • RadioSingleSelectduration applica una selezione singola.RadioSingleSelectduration - Enforces a single selection.

      <ClaimType Id="city">
      <DisplayName>city where you work</DisplayName>
      <DataType>string</DataType>
      <UserInputType>RadioSingleSelect</UserInputType>
      <Restriction>
      <Enumeration Text="Bellevue" Value="bellevue" SelectByDefault="false" />
      <Enumeration Text="Redmond" Value="redmond" SelectByDefault="false" />
      <Enumeration Text="Kirkland" Value="kirkland" SelectByDefault="false" />
      </Restriction>
      </ClaimType>
      
    • DropdownSingleSelect consente di selezionare solo valori validi.DropdownSingleSelect - Allows the selection of only valid value.

Screenshot dell'opzione nell'elenco a discesa

<ClaimType Id="city">
  <DisplayName>city where you work</DisplayName>
  <DataType>string</DataType>
  <UserInputType>DropdownSingleSelect</UserInputType>
  <Restriction>
    <Enumeration Text="Bellevue" Value="bellevue" SelectByDefault="false" />
    <Enumeration Text="Redmond" Value="redmond" SelectByDefault="false" />
    <Enumeration Text="Kirkland" Value="kirkland" SelectByDefault="false" />
  </Restriction>
</ClaimType>
  • CheckboxMultiSelect consente di selezionare uno o più valori.CheckboxMultiSelect Allows for the selection of one or more values.

Screenshot dell'opzione di selezione multipla

<ClaimType Id="city">
  <DisplayName>Receive updates from which cities?</DisplayName>
  <DataType>string</DataType>
  <UserInputType>CheckboxMultiSelect</UserInputType>
  <Restriction>
    <Enumeration Text="Bellevue" Value="bellevue" SelectByDefault="false" />
    <Enumeration Text="Redmond" Value="redmond" SelectByDefault="false" />
    <Enumeration Text="Kirkland" Value="kirkland" SelectByDefault="false" />
  </Restriction>
</ClaimType>

Aggiungere l'attestazione al percorso utente di iscrizione/accessoAdd the claim to the sign up/sign in user journey

  1. Aggiungere l'attestazione come <OutputClaim ClaimTypeReferenceId="city"/> all'oggetto TechnicalProfile LocalAccountSignUpWithLogonEmail incluso nel file dei criteri TrustFrameworkBase.Add the claim as an <OutputClaim ClaimTypeReferenceId="city"/> to the TechnicalProfile LocalAccountSignUpWithLogonEmail (found in the TrustFrameworkBase policy file). Si noti che TechnicalProfile qui usa SelfAssertedAttributeProvider.Note this TechnicalProfile uses the SelfAssertedAttributeProvider.

    <TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
     <DisplayName>Email signup</DisplayName>
     <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
     <Metadata>
       <Item Key="IpAddressClaimReferenceId">IpAddress</Item>
       <Item Key="ContentDefinitionReferenceId">api.localaccountsignup</Item>
       <Item Key="language.button_continue">Create</Item>
     </Metadata>
     <CryptographicKeys>
       <Key Id="issuer_secret" StorageReferenceId="TokenSigningKeyContainer" />
     </CryptographicKeys>
     <InputClaims>
       <InputClaim ClaimTypeReferenceId="email" />
     </InputClaims>
     <OutputClaims>
       <OutputClaim ClaimTypeReferenceId="objectId" />
       <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="Verified.Email" Required="true" />
       <OutputClaim ClaimTypeReferenceId="newPassword" Required="true" />
       <OutputClaim ClaimTypeReferenceId="reenterPassword" Required="true" />
       <OutputClaim ClaimTypeReferenceId="executed-SelfAsserted-Input" DefaultValue="true" />
       <OutputClaim ClaimTypeReferenceId="authenticationSource" />
       <OutputClaim ClaimTypeReferenceId="newUser" />
       <!-- Optional claims, to be collected from the user -->
       <OutputClaim ClaimTypeReferenceId="givenName" />
       <OutputClaim ClaimTypeReferenceId="surName" />
       <OutputClaim ClaimTypeReferenceId="city"/>
     </OutputClaims>
     <ValidationTechnicalProfiles>
       <ValidationTechnicalProfile ReferenceId="AAD-UserWriteUsingLogonEmail" />
     </ValidationTechnicalProfiles>
     <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
    </TechnicalProfile>
    
  2. Aggiungere l'attestazione ad AAD-UserWriteUsingLogonEmail come <PersistedClaim ClaimTypeReferenceId="city" /> per scrivere l'attestazione nella directory di AAD dopo averla raccolta dall'utente.Add the claim to the AAD-UserWriteUsingLogonEmail as a <PersistedClaim ClaimTypeReferenceId="city" /> to write the claim to the AAD directory after collecting it from the user. Se non si vuole mantenere l'attestazione nella directory per un uso futuro, è possibile ignorare questo passaggio.You may skip this step if you prefer not to persist the claim in the directory for future use.

    <!-- Technical profiles for local accounts -->
    <TechnicalProfile Id="AAD-UserWriteUsingLogonEmail">
     <Metadata>
       <Item Key="Operation">Write</Item>
       <Item Key="RaiseErrorIfClaimsPrincipalAlreadyExists">true</Item>
     </Metadata>
     <IncludeInSso>false</IncludeInSso>
     <InputClaims>
       <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" Required="true" />
     </InputClaims>
     <PersistedClaims>
       <!-- Required claims -->
       <PersistedClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames.emailAddress" />
       <PersistedClaim ClaimTypeReferenceId="newPassword" PartnerClaimType="password" />
       <PersistedClaim ClaimTypeReferenceId="displayName" DefaultValue="unknown" />
       <PersistedClaim ClaimTypeReferenceId="passwordPolicies" DefaultValue="DisablePasswordExpiration" />
       <!-- Optional claims. -->
       <PersistedClaim ClaimTypeReferenceId="givenName" />
       <PersistedClaim ClaimTypeReferenceId="surname" />
       <PersistedClaim ClaimTypeReferenceId="city" />
     </PersistedClaims>
     <OutputClaims>
       <OutputClaim ClaimTypeReferenceId="objectId" />
       <OutputClaim ClaimTypeReferenceId="newUser" PartnerClaimType="newClaimsPrincipalCreated" />
       <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
       <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
       <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" />
     </OutputClaims>
     <IncludeTechnicalProfile ReferenceId="AAD-Common" />
     <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
    </TechnicalProfile>
    
  3. Aggiungere l'attestazione all'oggetto TechnicalProfile che legge dalla directory quando un utente esegue l'accesso come <OutputClaim ClaimTypeReferenceId="city" />.Add the claim to the TechnicalProfile that reads from the directory when a user logs in as an <OutputClaim ClaimTypeReferenceId="city" />

    <TechnicalProfile Id="AAD-UserReadUsingEmailAddress">
     <Metadata>
       <Item Key="Operation">Read</Item>
       <Item Key="RaiseErrorIfClaimsPrincipalDoesNotExist">true</Item>
       <Item Key="UserMessageIfClaimsPrincipalDoesNotExist">An account could not be found for the provided user ID.</Item>
     </Metadata>
     <IncludeInSso>false</IncludeInSso>
     <InputClaims>
       <InputClaim ClaimTypeReferenceId="email" PartnerClaimType="signInNames" Required="true" />
     </InputClaims>
     <OutputClaims>
       <!-- Required claims -->
       <OutputClaim ClaimTypeReferenceId="objectId" />
       <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="localAccountAuthentication" />
       <!-- Optional claims -->
       <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
       <OutputClaim ClaimTypeReferenceId="displayName" />
       <OutputClaim ClaimTypeReferenceId="otherMails" />
       <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" />
       <OutputClaim ClaimTypeReferenceId="city" />
     </OutputClaims>
     <IncludeTechnicalProfile ReferenceId="AAD-Common" />
    </TechnicalProfile>
    
  4. Aggiungere <OutputClaim ClaimTypeReferenceId="city" /> al file dei criteri relying party SignUporSignIn.xml in modo che l'attestazione venga inviata all'applicazione nel token quando il percorso utente ha esito positivo.Add the <OutputClaim ClaimTypeReferenceId="city" /> to the RP policy file SignUporSignIn.xml so this claim is sent to the application in the token after a successful user journey.

    <RelyingParty>
     <DefaultUserJourney ReferenceId="SignUpOrSignIn" />
     <TechnicalProfile Id="PolicyProfile">
       <DisplayName>PolicyProfile</DisplayName>
       <Protocol Name="OpenIdConnect" />
       <OutputClaims>
         <OutputClaim ClaimTypeReferenceId="displayName" />
         <OutputClaim ClaimTypeReferenceId="givenName" />
         <OutputClaim ClaimTypeReferenceId="surname" />
         <OutputClaim ClaimTypeReferenceId="email" />
         <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/>
         <OutputClaim ClaimTypeReferenceId="identityProvider" />
         <OutputClaim ClaimTypeReferenceId="city" />
       </OutputClaims>
       <SubjectNamingInfo ClaimType="sub" />
     </TechnicalProfile>
    </RelyingParty>
    

Testare i criteri personalizzati tramite "Esegui adesso"Test the custom policy using "Run Now"

  1. Aprire il pannello Azure AD B2C e passare a Framework dell'esperienza di gestione delle identità > Criteri personalizzati.Open the Azure AD B2C Blade and navigate to Identity Experience Framework > Custom policies.
  2. Selezionare il criterio personalizzato che è stato caricato e fare clic sul pulsante Esegui adesso.Select the custom policy that you uploaded, and click the Run now button.
  3. Dovrebbe essere possibile iscriversi usando un indirizzo di posta elettronica.You should be able to sign up using an email address.

La schermata di iscrizione in modalità di test avrà un aspetto simile al seguente:The signup screen in test mode should look similar to this:

Screenshot dell'opzione di iscrizione modificata

Il token restituito all'applicazione ora include l'attestazione city, come illustrato di seguito.The token back to your application will now include the city claim as shown below

{
  "exp": 1493596822,
  "nbf": 1493593222,
  "ver": "1.0",
  "iss": "https://login.microsoftonline.com/f06c2fe8-709f-4030-85dc-38a4bfd9e82d/v2.0/",
  "sub": "9c2a3a9e-ac65-4e46-a12d-9557b63033a9",
  "aud": "4e87c1dd-e5f5-4ac8-8368-bc6a98751b8b",
  "acr": "b2c_1a_trustf_signup_signin",
  "nonce": "defaultNonce",
  "iat": 1493593222,
  "auth_time": 1493593222,
  "email": "joe@outlook.com",
  "given_name": "Joe",
  "family_name": "Ras",
  "city": "Bellevue",
  "name": "unknown"
}

Facoltativo: Rimuovere la verifica di posta elettronica dal percorso di iscrizioneOptional: Remove email verification from signup journey

Per ignorare la verifica di posta elettronica, l'autore dei criteri può scegliere di rimuovere PartnerClaimType="Verified.Email".To skip email verification, the policy author can choose to remove PartnerClaimType="Verified.Email". L'indirizzo di posta elettronica verrà richiesto ma non verificato, a meno che "Required" = true non venga rimosso.The email address will be required but not verified, unless “Required” = true is removed. Valutare attentamente se questa opzione è adatta ai casi d'uso.Carefully consider if this option is right for your use cases!

La verifica di posta elettronica è abilitata per impostazione predefinita in <TechnicalProfile Id="LocalAccountSignUpWithLogonEmail"> nel file dei criteri TrustFrameworkBase nel pacchetto iniziale:Verified email is enabled by default in the <TechnicalProfile Id="LocalAccountSignUpWithLogonEmail"> in the TrustFrameworkBase policy file in the starter pack:

<OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="Verified.Email" Required="true" />

Passaggi successiviNext steps

Aggiungere la nuova attestazione ai flussi per gli accessi con account di social networking modificando gli elementi TechnicalProfile elencati di seguito.Add the new claim to the flows for social account logins by changing the TechnicalProfiles listed below. Questi vengono usati per gli accessi con account di social networking/federati per scrivere e leggere i dati utente usando alternativeSecurityId come localizzatore.These are used by social/federated account logins to write and read the user data using the alternativeSecurityId as the locator.

<TechnicalProfile Id="AAD-UserWriteUsingAlternativeSecurityId">
<TechnicalProfile Id="AAD-UserReadUsingAlternativeSecurityId">