Condividi tramite


Configurare xID con Azure Active Directory B2C per l'autenticazione senza password

Questa esercitazione descrive come integrare l'autenticazione di Azure Active Directory B2C (Azure AD B2C) con la soluzione xID digital ID. L'app xID fornisce agli utenti l'autenticazione senza password, sicura e multifactor. La scheda My Number, la scheda ID digitale rilasciata dal governo giapponese, verifica le identità utente autenticate xID. Per gli utenti, le organizzazioni possono ottenere informazioni di identificazione personale verificate (contenuto del cliente) tramite l'API xID. Inoltre, l'app xID genera una chiave privata in un'area sicura nei dispositivi mobili utente, rendendoli dispositivi di firma digitale.

Prerequisiti

Descrizione dello scenario

Il diagramma seguente illustra l'architettura.

Diagramma dell'architettura xID.

  1. Nella pagina di accesso di Azure AD B2C l'utente accede o accede.
  2. Azure AD B2C reindirizza l'utente all'endpoint dell'API di autorizzazione xID usando una richiesta OIDC (OpenID Connect). Un endpoint OIDC include informazioni sull'endpoint. xID Identity Provider (IdP) reindirizza l'utente alla pagina di accesso di autorizzazione xID. L'utente immette l'indirizzo di posta elettronica.
  3. xID IdP invia una notifica push al dispositivo mobile dell'utente.
  4. L'utente apre l'app xID, controlla la richiesta, immette un PIN o usa la biometrica. l'app xID attiva la chiave privata e crea una firma elettronica.
  5. L'app xID invia la firma a xID IdP per la verifica.
  6. Viene visualizzata una schermata di consenso per fornire informazioni personali al servizio.
  7. xID IdP restituisce il codice di autorizzazione OAuth in Azure AD B2C.
  8. Azure AD B2C invia una richiesta di token usando il codice di autorizzazione.
  9. xID IdP controlla la richiesta del token. Se valido, viene restituito il token di accesso OAuth e il token ID con identificatore utente e indirizzo di posta elettronica.
  10. Se è necessario il contenuto del cliente utente, Azure AD B2C chiama l'API dati utente xID.
  11. L'API dati utente xID restituisce contenuto del cliente crittografato. Gli utenti decrittografano con una chiave privata, creata durante la richiesta di informazioni client xID.
  12. L'utente viene concesso o negato l'accesso all'applicazione del cliente.

Installare xID

  1. Per richiedere documenti API, compilare il modulo di richiesta. Vai a Contattaci.
  2. Nel messaggio indicare che si usa Azure AD B2C.
  3. Un rappresentante delle vendite xID contatta l'utente.
  4. Seguire le istruzioni nel documento dell'API xID.
  5. Richiedere un client API xID.
  6. il team tecnico xID invia informazioni client all'utente in 3-4 giorni lavorativi.
  7. Specificare un URI di reindirizzamento nel sito usando il modello seguente. Gli utenti tornano al sito dopo l'autenticazione.

https://<your-b2c-domain>.b2clogin.com/<your-b2c-domain>.onmicrosoft.com/oauth2/authresp

Registrare un'applicazione Web in Azure AD B2C

Registrare le applicazioni in un tenant gestito, quindi possono interagire con Azure AD B2C.

Altre informazioni: Tipi di applicazione che possono essere usati in Active Directory B2C

Per i test, si registra https://jwt.ms, un'applicazione Web Microsoft con contenuto token decodificato, che non lascia il browser.

Registrare un'applicazione Web e abilitare la concessione implicita del token ID

Esercitazione completa: Registrare un'applicazione Web in Azure AD B2C

Creare una chiave dei criteri xID

Archiviare il segreto client da xID nel tenant di Azure AD B2C. Per le istruzioni seguenti, usare la directory con il tenant di Azure AD B2C.

  1. Accedere al portale di Azure.
  2. Nella barra degli strumenti del portale selezionare Directory e sottoscrizioni.
  3. Nelle impostazioni del portale | Directory e sottoscrizioni , nell'elenco Nomi directory individuare la directory B2C di Azure AD.
  4. Selezionare Commutatore.
  5. Nell'angolo superiore sinistro della portale di Azure selezionare Tutti i servizi.
  6. Cercare e selezionare Azure Active Directory B2C.
  7. In Panoramica selezionare Identity Experience Framework.
  8. Selezionare Chiavi dei criteri.
  9. Selezionare Aggiungi.
  10. Selezionare Manuale in Opzioni.
  11. Immettere un nome della chiave di criterio per la chiave dei criteri. Il prefisso B2C_1A_ viene aggiunto al nome della chiave.
  12. In Segreto immettere il segreto client da xID.
  13. Per Uso chiave selezionare Firma.
  14. Selezionare Crea.

Nota

In Azure AD B2C i criteri personalizzati sono per scenari complessi.

Vedere La panoramica dei flussi utente e dei criteri personalizzati.

Configurare xID come provider di identità

Per consentire agli utenti di accedere usando xID, creare un provider di attestazioni con cui Azure AD B2C comunica tramite un endpoint. L'endpoint fornisce attestazioni che Azure AD B2C usa per verificare l'autenticazione degli utenti con identità digitale nel dispositivo.

Aggiungere xID come provider di attestazioni

Ottenere i pacchetti di avvio dei criteri personalizzati da GitHub, quindi aggiornare i file XML nel pacchetto di avvio SocialAccounts con il nome del tenant di Azure AD B2C.

  1. Scaricare il file zip active-directory-b2c-policy-starterpack-main o clonare il repository. Vedere Azure-Samples/active-directory-b2c-custom-policy-starterpack.

  2. Nei file nella directory SocialAccounts sostituire la stringa yourtenant con il nome del tenant di Azure AD B2C. Ad esempio yourtenant.onmicrosoft.com diventa contoso.onmicrosoft.com.

  3. Aprire SocialAccounts/TrustFrameworkExtensions.xml.

  4. Trovare l'elemento ClaimsProviders. Se non ne esiste uno, aggiungerlo sotto l'elemento radice.

  5. Aggiungere un nuovo ClaimsProvider simile all'esempio seguente:

    
     <ClaimsProvider>
       <Domain>X-ID</Domain>
       <DisplayName>X-ID</DisplayName>
       <TechnicalProfiles>
         <TechnicalProfile Id="X-ID-OIDC">
           <DisplayName>X-ID</DisplayName>
           <Description>Login with your X-ID account</Description>
           <Protocol Name="OpenIdConnect" />
           <Metadata>
             <Item Key="METADATA">https://oidc-uat.x-id.io/.well-known/openid-configuration</Item>
             <!-- Update the Client ID below to the X-ID Application ID -->
             <Item Key="client_id">00000000-0000-0000-0000-000000000000</Item>
             <Item Key="response_types">code</Item>
             <Item Key="scope">openid verification</Item>
             <Item Key="response_mode">query</Item>
             <Item Key="HttpBinding">POST</Item>
             <Item Key="UsePolicyInRedirectUri">false</Item>
             <Item Key="DiscoverMetadataByTokenIssuer">true</Item>
             <Item Key="token_endpoint_auth_method">client_secret_basic</Item>
             <Item Key="ClaimsEndpoint">https://oidc-uat.x-id.io/userinfo</Item>
             <Item Key="ValidTokenIssuerPrefixes">https://oidc-uat.x-id.io/</Item>
           </Metadata>
           <CryptographicKeys>
             <Key Id="client_secret" StorageReferenceId="B2C_1A_XIDSecAppSecret" />
           </CryptographicKeys>
           <OutputClaims>
             <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub" />
             <OutputClaim ClaimTypeReferenceId="tenantId" PartnerClaimType="tid" />
             <OutputClaim ClaimTypeReferenceId="email" />
             <OutputClaim ClaimTypeReferenceId="sid" />
             <OutputClaim ClaimTypeReferenceId="userdataid" />
             <OutputClaim ClaimTypeReferenceId="XID_verified" />
             <OutputClaim ClaimTypeReferenceId="email_verified" />
             <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" AlwaysUseDefaultValue="true" />
             <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" DefaultValue="https://oidc-uat.x-id.io/" />
             <OutputClaim ClaimTypeReferenceId="identityProviderAccessToken" PartnerClaimType="{oauth2:access_token}" />
           </OutputClaims>
           <OutputClaimsTransformations>
             <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName" />
             <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName" />
             <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId" />
             <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId" />
           </OutputClaimsTransformations>
           <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin" />
         </TechnicalProfile>
    
       <TechnicalProfile Id="X-ID-Userdata">
         <DisplayName>Userdata (Personal Information)</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://api-uat.x-id.io/v4/verification/userdata</Item>
           <Item Key="SendClaimsIn">Header</Item>
           <Item Key="AuthenticationType">Bearer</Item>
           <Item Key="UseClaimAsBearerToken">identityProviderAccessToken</Item>
           <!-- <Item Key="AllowInsecureAuthInProduction">true</Item> -->
           <Item Key="DebugMode">true</Item>
           <Item Key="DefaultUserMessageIfRequestFailed">Can't process your request right now, please try again later.</Item>
         </Metadata>
         <InputClaims>
           <!-- Claims sent to your REST API -->
           <InputClaim ClaimTypeReferenceId="identityProviderAccessToken" />
         </InputClaims>
         <OutputClaims>
           <!-- Claims parsed from your REST API -->
           <OutputClaim ClaimTypeReferenceId="last_name" />
           <OutputClaim ClaimTypeReferenceId="first_name" />
           <OutputClaim ClaimTypeReferenceId="previous_name" />
           <OutputClaim ClaimTypeReferenceId="year" />
           <OutputClaim ClaimTypeReferenceId="month" />
           <OutputClaim ClaimTypeReferenceId="date" />
           <OutputClaim ClaimTypeReferenceId="prefecture" />
           <OutputClaim ClaimTypeReferenceId="city" />
           <OutputClaim ClaimTypeReferenceId="address" />
           <OutputClaim ClaimTypeReferenceId="sub_char_common_name" />
           <OutputClaim ClaimTypeReferenceId="sub_char_previous_name" />
           <OutputClaim ClaimTypeReferenceId="sub_char_address" />
           <OutputClaim ClaimTypeReferenceId="gender" />
           <OutputClaim ClaimTypeReferenceId="verified_at" />
         </OutputClaims>
         <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
       </TechnicalProfile>
     </TechnicalProfiles>
     </ClaimsProvider>
    
    
  6. Impostare client_id con l'ID applicazione xID.

  7. Selezionare Salva.

Aggiungere un percorso utente

Aggiungere un provider di identità alle pagine di accesso.

  1. Se si dispone di un percorso utente personalizzato, passare a Aggiungere il provider di identità a un percorso utente. In caso contrario, creare un duplicato di un percorso utente modello:
  2. Dal starter pack aprire il TrustFrameworkBase.xml.
  3. Individuare e copiare il contenuto dell'elemento UserJourneys che include ID=SignUpOrSignIn.
  4. Aprire il TrustFrameworkExtensions.xml e individuare l'elemento UserJourneys. Se non ne esiste uno, aggiungerne uno.
  5. Incollare il contenuto dell'elemento UserJourney come elemento figlio dell'elemento UserJourneys.
  6. Rinominare l'ID percorso utente. Ad esempio: ID=CustomSignUpSignIn

Aggiungere il provider di identità a un percorso utente

Aggiungere il nuovo provider di identità al percorso utente.

  1. Individuare l'elemento del passaggio di orchestrazione con Type=CombinedSignInAndSignUpo Type=ClaimsProviderSelection nel percorso utente. In genere è il primo passaggio di orchestrazione. L'elemento ClaimsProviderSelections include un elenco di provider di identità per l'accesso. L'ordine degli elementi controlla l'ordine dei pulsanti di accesso.
  2. Aggiungere un elemento XML ClaimsProviderSelection .
  3. Impostare il valore di TargetClaimsExchangeId su un nome descrittivo.
  4. Aggiungere un elemento ClaimsExchange .
  5. Impostare l'ID sul valore dell'ID dello scambio di attestazioni di destinazione. Questa modifica collega il pulsante xID all'azione X-IDExchange .
  6. Aggiornare il valore TechnicalProfileReferenceId all'ID profilo tecnico creato (X-ID-OIDC).
  7. Aggiungere un passaggio di orchestrazione per chiamare l'endpoint userInfo xID per restituire attestazioni sull'utente X-ID-Userdataautenticato.

Il codice XML seguente illustra l'orchestrazione del percorso utente con il provider di identità xID.


 <UserJourney Id="CombinedSignInAndSignUp">
   <OrchestrationSteps>

     <OrchestrationStep Order="1" Type="CombinedSignInAndSignUp" ContentDefinitionReferenceId="api.signuporsignin">
       <ClaimsProviderSelections>
         <ClaimsProviderSelection TargetClaimsExchangeId="X-IDExchange" />
       </ClaimsProviderSelections>
     </OrchestrationStep>

     <OrchestrationStep Order="2" Type="ClaimsExchange">
       <ClaimsExchanges>
         <ClaimsExchange Id="X-IDExchange" TechnicalProfileReferenceId="X-ID-OIDC" />
       </ClaimsExchanges>
     </OrchestrationStep>

     <OrchestrationStep Order="3" Type="ClaimsExchange">
       <ClaimsExchanges>
         <ClaimsExchange Id="X-ID-Userdata" TechnicalProfileReferenceId="X-ID-Userdata" />
       </ClaimsExchanges>
     </OrchestrationStep>

     <!-- For social IDP authentication, attempt to find the user account in the directory. -->
     <OrchestrationStep Order="4" Type="ClaimsExchange">
       <ClaimsExchanges>
         <ClaimsExchange Id="AADUserReadUsingAlternativeSecurityId" TechnicalProfileReferenceId="AAD-UserReadUsingAlternativeSecurityId-NoError" />
       </ClaimsExchanges>
     </OrchestrationStep>

     <!-- Show self-asserted page only if the directory does not have the user account already (i.e. we do not have an objectId).  -->
     <OrchestrationStep Order="5" Type="ClaimsExchange">
       <Preconditions>
         <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
           <Value>objectId</Value>
           <Action>SkipThisOrchestrationStep</Action>
         </Precondition>
       </Preconditions>
       <ClaimsExchanges>
         <ClaimsExchange Id="SelfAsserted-Social" TechnicalProfileReferenceId="SelfAsserted-Social" />
       </ClaimsExchanges>
     </OrchestrationStep>

     <!-- The previous step (SelfAsserted-Social) could have been skipped if there were no attributes to collect 
          from the user. So, in that case, create the user in the directory if one does not already exist 
          (verified using objectId which would be set from the last step if account was created in the directory. -->
     <OrchestrationStep Order="6" Type="ClaimsExchange">
       <Preconditions>
         <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
           <Value>objectId</Value>
           <Action>SkipThisOrchestrationStep</Action>
         </Precondition>
       </Preconditions>
       <ClaimsExchanges>
         <ClaimsExchange Id="AADUserWrite" TechnicalProfileReferenceId="AAD-UserWriteUsingAlternativeSecurityId" />
       </ClaimsExchanges>
     </OrchestrationStep>

     <OrchestrationStep Order="7" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIssuer" />

   </OrchestrationSteps>
   <ClientDefinition ReferenceId="DefaultWeb" />
 </UserJourney>

Sono supportate attestazioni di identità xID a cui viene fatto riferimento come parte dei criteri. Lo schema delle attestazioni è il percorso in cui si dichiarano le attestazioni. L'elemento ClaimsSchema include un elenco di elementi ClaimType. L'elemento ClaimType contiene l'attributo ID, ovvero il nome dell'attestazione.

  1. Aprire il TrustFrameworksExtension.xml.
  2. Individuare l'elemento BuildingBlocks .
  3. Aggiungere l'elemento ClaimType seguente nell'elemento ClaimsSchema del criterio diTrustFrameworksExtension.xml
 <BuildingBlocks>
    <ClaimsSchema>
      <!-- xID -->
      <ClaimType Id="sid">
        <DisplayName>sid</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="userdataid">
        <DisplayName>userdataid</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="xid_verified">
        <DisplayName>xid_verified</DisplayName>
        <DataType>boolean</DataType>
      </ClaimType>
      <ClaimType Id="email_verified">
        <DisplayName>email_verified</DisplayName>
        <DataType>boolean</DataType>
      </ClaimType>
      <ClaimType Id="identityProviderAccessToken">
        <DisplayName>Identity Provider Access Token</DisplayName>
        <DataType>string</DataType>
        <AdminHelpText>Stores the access token of the identity provider.</AdminHelpText>
      </ClaimType>
      <ClaimType Id="last_name">
        <DisplayName>last_name</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="first_name">
        <DisplayName>first_name</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="previous_name">
        <DisplayName>previous_name</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="year">
        <DisplayName>year</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="month">
        <DisplayName>month</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="date">
        <DisplayName>date</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="prefecture">
        <DisplayName>prefecture</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="city">
        <DisplayName>city</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="address">
        <DisplayName>address</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="sub_char_common_name">
        <DisplayName>sub_char_common_name</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="sub_char_previous_name">
        <DisplayName>sub_char_previous_name</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="sub_char_address">
        <DisplayName>sub_char_address</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <ClaimType Id="verified_at">
        <DisplayName>verified_at</DisplayName>
        <DataType>int</DataType>
      </ClaimType>
      <ClaimType Id="gender">
        <DisplayName>Gender</DisplayName>
        <DataType>string</DataType>
        <DefaultPartnerClaimTypes>
          <Protocol Name="OpenIdConnect" PartnerClaimType="gender" />
        </DefaultPartnerClaimTypes>
        <AdminHelpText>The user's gender.</AdminHelpText>
        <UserHelpText>Your gender.</UserHelpText>
        <UserInputType>TextBox</UserInputType>
      </ClaimType>
      <ClaimType Id="correlationId">
        <DisplayName>correlation ID</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      <!-- xID -->
    </ClaimsSchema>
  </BuildingBlocks>

Configurare i criteri della relying party

I criteri della relying party, ad esempio SignUpSignIn.xml, specificano il percorso utente eseguito da Azure AD B2C.

  1. Nella relying party individuare l'elemento DefaultUserJourney .
  2. Aggiornare il ReferenceId in modo che corrisponda all'ID percorso utente aggiunto al provider di identità.

Nell'esempio seguente, per il percorso utente xID, ReferenceId è impostato su CombinedSignInAndSignUp.

   <RelyingParty>
        <DefaultUserJourney ReferenceId="CombinedSignInAndSignUp" />
        <TechnicalProfile Id="PolicyProfile">
          <DisplayName>PolicyProfile</DisplayName>
          <Protocol Name="OpenIdConnect" />
          <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" />
          <OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
          <OutputClaim ClaimTypeReferenceId="correlationId" DefaultValue="{Context:CorrelationId}" />
          <OutputClaim ClaimTypeReferenceId="issuerUserId" />
          <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="first_name" />
          <OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="last_name" />
          <OutputClaim ClaimTypeReferenceId="previous_name" />
          <OutputClaim ClaimTypeReferenceId="year" />
          <OutputClaim ClaimTypeReferenceId="month" />
          <OutputClaim ClaimTypeReferenceId="date" />
          <OutputClaim ClaimTypeReferenceId="prefecture" />
          <OutputClaim ClaimTypeReferenceId="city" />
          <OutputClaim ClaimTypeReferenceId="address" />
          <OutputClaim ClaimTypeReferenceId="sub_char_common_name" />
          <OutputClaim ClaimTypeReferenceId="sub_char_previous_name" />
          <OutputClaim ClaimTypeReferenceId="sub_char_address" />
          <OutputClaim ClaimTypeReferenceId="gender" />
          <OutputClaim ClaimTypeReferenceId="verified_at" />
          <OutputClaim ClaimTypeReferenceId="email" />
          <OutputClaim ClaimTypeReferenceId="sid" />
          <OutputClaim ClaimTypeReferenceId="userdataid" />
          <OutputClaim ClaimTypeReferenceId="xid_verified" />
          <OutputClaim ClaimTypeReferenceId="email_verified" />
          </OutputClaims>
          <SubjectNamingInfo ClaimType="sub" />
        </TechnicalProfile>
      </RelyingParty>

Caricare il criterio personalizzati

Per le istruzioni seguenti, usare la directory con il tenant di Azure AD B2C.

  1. Accedere al portale di Azure.
  2. Nella barra degli strumenti del portale selezionare Directory e sottoscrizioni.
  3. Nelle impostazioni del portale | Pagina Directory e sottoscrizioni nell'elenco Nome directory . individuare la directory di Azure AD B2C.
  4. Selezionare Cambia.
  5. Nella portale di Azure cercare e selezionare Azure AD B2C.
  6. In Criteri selezionare Identity Experience Framework.
  7. Selezionare Carica criteri personalizzati.
  8. Caricare i file nell'ordine seguente:
  • File dei criteri di base: TrustFrameworkBase.xml
  • Criteri di estensione: TrustFrameworkExtensions.xml
  • Criteri relying party: SignUpSignIn.xml

Testare i criteri personalizzati

  1. Nel tenant di Azure AD B2C e in Criteri selezionare Identity Experience Framework.
  2. In Criteri personalizzati selezionare CustomSignUpSignIn.
  3. In Applicazione selezionare l'applicazione Web registrata. L'URL di risposta è https://jwt.ms.
  4. Selezionare Esegui adesso.
  5. Il browser reindirizza alla pagina di accesso xID.
  6. Il browser reindirizza a https://jwt.ms. Viene visualizzato il contenuto del token restituito da Azure AD B2C.

Passaggi successivi