Partilhar via


Configurar xID com o Azure Active Directory B2C para autenticação sem palavra-passe

Neste tutorial, saiba como integrar a autenticação B2C (Azure AD B2C) do Azure Active Directory com a solução de ID digital xID. A aplicação xID fornece aos utilizadores autenticação multifator sem palavra-passe, segura. O Cartão O Meu Número, o cartão de ID digital emitido pelo governo japonês, verifica as identidades de utilizador autenticadas por xID. Para os seus utilizadores, as organizações podem obter Informações de Identificação Pessoal verificadas (conteúdo do cliente) através da API xID. Além disso, a aplicação xID gera uma chave privada numa área segura em dispositivos móveis de utilizador, tornando-os dispositivos de assinatura digital.

Pré-requisitos

Descrição do cenário

O diagrama seguinte mostra a arquitetura.

Diagrama da arquitetura xID.

  1. Na Azure AD página de início de sessão B2C, o utilizador inicia sessão ou inscreve-se.
  2. Azure AD B2C redireciona o utilizador para o xID autorizar o ponto final da API com um pedido openID Connect (OIDC). Um ponto final OIDC tem informações de ponto final. O fornecedor de identidade xID (IdP) redireciona o utilizador para a página de início de sessão de autorização xID. O utilizador introduz o endereço de e-mail.
  3. XID IdP envia notificação push para o dispositivo móvel do utilizador.
  4. O utilizador abre a aplicação xID, verifica o pedido, introduz um PIN ou utiliza biometria. A aplicação xID ativa a chave privada e cria uma assinatura eletrónica.
  5. A aplicação xID envia a assinatura para xID IdP para verificação.
  6. É apresentado um ecrã de consentimento para fornecer informações pessoais ao serviço.
  7. XID IdP devolve o código de autorização OAuth para Azure AD B2C.
  8. Azure AD B2C envia um pedido de token com o código de autorização.
  9. XID IdP verifica o pedido de token. Se for válido, é devolvido o token de acesso OAuth e o token de ID com o identificador de utilizador e o endereço de e-mail.
  10. Se for necessário conteúdo do cliente do utilizador, Azure AD B2C chama a API de dados de utilizador xID.
  11. A API de dados de utilizador xID devolve conteúdo de cliente encriptado. Os utilizadores desencriptaram com uma chave privada, criada ao pedir informações de cliente xID.
  12. É concedido ou negado acesso ao utilizador à aplicação do cliente.

Instalar xID

  1. Para pedir documentos da API, preencha o formulário de pedido. Aceda a Contactar-nos.
  2. Na mensagem, indique que está a utilizar Azure AD B2C.
  3. Um representante de vendas xID contacta-o.
  4. Siga as instruções no documento da API xID.
  5. Pedir um cliente da API xID.
  6. A equipa técnica de xID envia-lhe informações de cliente em 3-4 dias úteis.
  7. Forneça um URI de redirecionamento no seu site com o seguinte padrão. Os utilizadores regressam ao mesmo após a autenticação.

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

Registar uma aplicação Web no Azure AD B2C

Registe aplicações num inquilino que gere e, em seguida, podem interagir com Azure AD B2C.

Saiba mais: Tipos de aplicações que podem ser utilizados no Active Directory B2C

Para testes, registe https://jwt.msuma aplicação Web da Microsoft com conteúdo de token descodificado, que não sai do browser.

Registar uma aplicação Web e ativar a concessão implícita de tokens de ID

Tutorial Completo: Registar uma aplicação Web no Azure AD B2C

Criar uma chave de política xID

Armazene o Segredo do Cliente do xID no seu inquilino Azure AD B2C. Para obter as seguintes instruções, utilize o diretório com o inquilino Azure AD B2C.

  1. Inicie sessão no portal do Azure.
  2. Na barra de ferramentas do portal, selecione Diretórios + subscrições.
  3. Nas definições do Portal | Na página Diretórios + subscrições, na lista Nome do diretório, localize a sua Azure AD diretório B2C.
  4. Selecione Mudar.
  5. No canto superior esquerdo do portal do Azure, selecione Todos os serviços.
  6. Procure e selecione Azure AD B2C.
  7. Em Descrição Geral, selecione Identity Experience Framework.
  8. Selecione Chaves de Política.
  9. Selecione Adicionar.
  10. Para Opções, selecione Manual.
  11. Introduza uma chave de política Nome para a chave de política. O prefixo B2C_1A_ é anexado ao nome da chave.
  12. Em Segredo, introduza o Segredo do Cliente a partir de xID.
  13. Para Utilização de chaves, selecione Assinatura.
  14. Selecione Criar.

Nota

No Azure AD B2C, as políticas personalizadas destinam-se a cenários complexos.

Veja Descrição geral dos fluxos de utilizador e das políticas personalizadas.

Configurar xID como fornecedor de identidade

Para os utilizadores iniciarem sessão com xID, torne xID um fornecedor de afirmações com o qual Azure AD B2C comunica através de um ponto final. O ponto final fornece afirmações Azure AD B2C utiliza para verificar os utilizadores autenticados com identidade digital no respetivo dispositivo.

Adicionar xID como um fornecedor de afirmações

Obtenha os pacotes de arranque de políticas personalizados a partir do GitHub e, em seguida, atualize os ficheiros XML no pacote de iniciação SocialAccounts com o seu nome de inquilino Azure AD B2C.

  1. Transfira o ficheiro zip active-directory-b2c-policy-starterpack-main ou clone o repositório. Veja Azure-Samples/active-directory-b2c-custom-policy-starterpack.

  2. Nos ficheiros no diretório SocialAccounts, substitua a cadeia yourtenant pelo nome do seu inquilino Azure AD B2C. Por exemplo, yourtenant.onmicrosoft.com torna-se contoso.onmicrosoft.com.

  3. Abra socialAccounts/TrustFrameworkExtensions.xml.

  4. Localize o elemento ClaimsProviders . Se não existir uma, adicione-a no elemento raiz.

  5. Adicione um novo ClaimsProvider semelhante ao exemplo seguinte:

    
     <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. Defina client_id com o ID da Aplicação xID.

  7. Selecione Guardar.

Adicionar um percurso de utilizador

Adicione um fornecedor de identidade às páginas de início de sessão.

  1. Se tiver um percurso de utilizador personalizado, aceda a Adicionar o fornecedor de identidade a um percurso de utilizador. Caso contrário, crie um duplicado de um percurso de utilizador de modelo:
  2. A partir do pacote de arranque, abra o TrustFrameworkBase.xml.
  3. Localize e copie o conteúdo do elemento UserJourneys que inclui ID=SignUpOrSignIn.
  4. Abra o TrustFrameworkExtensions.xml e localize o elemento UserJourneys. Se não existir uma, adicione uma.
  5. Cole o conteúdo do elemento UserJourney como um subordinado do elemento UserJourneys.
  6. Mude o nome do ID de percurso do utilizador. Por exemplo, ID=CustomSignUpSignIn

Adicionar o fornecedor de identidade a um percurso de utilizador

Adicione o novo fornecedor de identidade ao percurso do utilizador.

  1. Localize o elemento do passo de orquestração com Type=CombinedSignInAndSignUp, ou Type=ClaimsProviderSelection no percurso do utilizador. Normalmente é o primeiro passo de orquestração. O elemento ClaimsProviderSelections tem uma lista de fornecedores de identidade para iniciar sessão. A ordem dos elementos controla a ordem dos botões de início de sessão.
  2. Adicione um elemento ClaimsProviderSelection XML.
  3. Defina o valor de TargetClaimsExchangeId como um nome amigável.
  4. Adicione um elemento ClaimsExchange .
  5. Defina o ID como o valor do ID de troca de afirmações de destino. Esta alteração liga o botão xID à ação X-IDExchange .
  6. Atualize o valor TechnicalProfileReferenceId para o ID de perfil técnico que criou (X-ID-OIDC).
  7. Adicione um passo de Orquestração para chamar o ponto final userInfo de xID para devolver afirmações sobre o utilizador X-ID-Userdataautenticado.

O XML seguinte demonstra a orquestração do percurso do utilizador com o fornecedor de identidade 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>

Existem afirmações de identidade que o xID suporta referenciados como parte da política. O esquema de afirmações é onde declara as afirmações. O elemento ClaimsSchema tem uma lista de elementos ClaimType. O elemento ClaimType contém o atributo ID, que é o nome da afirmação.

  1. Abra o TrustFrameworksExtension.xml.
  2. Localize o elemento BuildingBlocks .
  3. Adicione o seguinte elemento ClaimType no elemento ClaimsSchema da política deTrustFrameworksExtension.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>

Configurar a política da entidade confiadora

A política da entidade confiadora, por exemplo SignUpSignIn.xml, especifica o percurso do utilizador que o Azure AD B2C executa.

  1. Na entidade confiadora, localize o elemento DefaultUserJourney .
  2. Atualize o ReferenceId para corresponder ao ID de percurso do utilizador que adicionou ao fornecedor de identidade.

No exemplo seguinte, para o percurso de utilizador xID, o ReferenceId está definido como 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>

Carregar a política personalizada

Para obter as seguintes instruções, utilize o diretório com o inquilino Azure AD B2C.

  1. Inicie sessão no portal do Azure.
  2. Na barra de ferramentas do portal, selecione Diretórios + subscrições.
  3. Nas definições do Portal | Diretórios + página subscrições , na lista Nome do diretório . localize o seu diretório Azure AD B2C.
  4. Selecione Mudar.
  5. No portal do Azure, procure e selecione Azure AD B2C.
  6. Em Políticas, selecione Identity Experience Framework.
  7. Selecione Carregar Política Personalizada.
  8. Carregue os ficheiros pela seguinte ordem:
  • Ficheiro de política base: TrustFrameworkBase.xml
  • Política de extensão: TrustFrameworkExtensions.xml
  • Política de entidade confiadora: SignUpSignIn.xml

Testar a política personalizada

  1. No seu Azure AD inquilino B2C e, em Políticas, selecione Identity Experience Framework.
  2. Em Políticas personalizadas, selecione CustomSignUpSignIn.
  3. Em Aplicação, selecione a aplicação Web que registou. O URL de Resposta é https://jwt.ms.
  4. Selecione Executar agora.
  5. O browser redireciona para a página de início de sessão xID.
  6. O browser redireciona para https://jwt.ms. Os conteúdos do token devolvidos pelo Azure AD B2C são apresentados.

Passos seguintes