Partilhar via


Configurar o xID com o Azure Ative Directory B2C para autenticação sem senha

Importante

A partir de 1º de maio de 2025, o Azure AD B2C não estará mais disponível para compra para novos clientes. Saiba mais nas nossas Perguntas Frequentes.

Neste tutorial, aprenda a integrar a autenticação do Azure Ative Directory B2C (Azure AD B2C) com a solução de ID digital xID. O aplicativo xID fornece aos usuários autenticação sem senha, segura e multifator. O My Number Card, o cartão de identificação digital emitido pelo governo japonês, verifica as identidades de usuário autenticadas pelo xID. Para seus usuários, as organizações podem obter informações de identificação pessoal verificadas (conteúdo do cliente) por meio da API xID. Além disso, o aplicativo xID gera uma chave privada em uma área segura nos dispositivos móveis do usuário, tornando-os dispositivos de assinatura digital.

Pré-requisitos

  • Uma assinatura do Azure

  • Um locatário do Azure AD B2C vinculado à assinatura do Azure

  • As informações do seu cliente xID fornecidas pelo xID inc.

  • Vá para a página xid.inc Fale Conosco para obter informações sobre o cliente xID:

    • ID do Cliente
    • Segredo do Cliente
    • URL de redirecionamento
    • Alcances
  • Vá para x-id.me para instalar o aplicativo xID em um dispositivo móvel:

    • O meu cartão numérico
    • Se você usar a versão UAT da API, obtenha a versão UAT do aplicativo xID. Veja, Contacte-nos

Descrição do cenário

O diagrama a seguir mostra a arquitetura.

Diagrama da arquitetura xID.

  1. Na página de entrada do Azure AD B2C, o usuário entra ou se inscreve.
  2. O Azure AD B2C redireciona o utilizador para o endpoint de autorização da API xID utilizando uma solicitação OpenID Connect (OIDC). Um ponto de extremidade OIDC tem informações de ponto final. O provedor de identidade xID (IdP) redireciona o usuário para a página de entrada de autorização xID. O usuário insere o endereço de e-mail.
  3. xID IdP envia notificação por push para o dispositivo móvel do usuário.
  4. O usuário abre o aplicativo xID, verifica a solicitação, insere um PIN ou usa biometria. O aplicativo xID ativa a chave privada e cria uma assinatura eletrônica.
  5. O aplicativo xID envia a assinatura para o xID IdP para verificação.
  6. Uma tela de consentimento aparece para fornecer informações pessoais ao serviço.
  7. xID IdP retorna o código de autorização OAuth para o Azure AD B2C.
  8. O Azure AD B2C envia uma solicitação de token usando o código de autorização.
  9. xID IdP verifica a solicitação de token. Se for válido, o token de acesso OAuth será retornado e o token de ID com identificador de usuário e endereço de e-mail.
  10. Se for necessário o conteúdo do cliente usuário, o Azure AD B2C chamará a API de dados do usuário xID.
  11. A API de dados do usuário xID retorna conteúdo criptografado do cliente. Os usuários descriptografam com uma chave privada, criada ao solicitar informações do cliente xID.
  12. O utilizador recebe ou é negado acesso ao aplicativo do cliente.

Instalar o xID

  1. Para solicitar documentos da API, preencha o formulário de solicitação. Aceda a Contacte-nos.
  2. Na mensagem, indique que você está usando o Azure AD B2C.
  3. Um representante de vendas xID entra em contato com você.
  4. Siga as instruções no documento da API xID.
  5. Solicite um cliente de API xID.
  6. A equipe técnica do xID envia informações do cliente para você em 3-4 dias úteis.
  7. Forneça um URI de redirecionamento em seu site usando o seguinte padrão. Os usuários retornam a ele após a autenticação.

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

Registrar um aplicativo Web no Azure AD B2C

Registre aplicativos em um locatário que você gerencia e, em seguida, eles podem interagir com o Azure AD B2C.

Saiba mais: Tipos de aplicativos que podem ser usados no Ative Directory B2C

Para testes, você registra https://jwt.ms, um aplicativo Web da Microsoft com conteúdo de token decodificado, que não sai do seu navegador.

Registar uma aplicação Web

Conclua as etapas no artigo Tutorial: Registrar um aplicativo Web no Azure Ative Directory B2C .

Criar uma chave de política xID

Armazene o Segredo do Cliente do xID em seu locatário do Azure AD B2C. Para obter as instruções a seguir, use o diretório com o locatário do Azure AD B2C.

  1. Inicie sessão no portal Azure.
  2. Na barra de ferramentas do portal, selecione Diretórios + assinaturas.
  3. Nas configurações do Portal | Página Diretórios + assinaturas , na lista Nome do diretório, localize seu diretório do Azure AD B2C.
  4. Selecione Trocar.
  5. No canto superior esquerdo do portal do Azure, selecione Todos os serviços.
  6. Procure e selecione Azure AD B2C.
  7. Em Visão geral, selecione Identity Experience Framework.
  8. Selecione Chaves de política.
  9. Selecione Adicionar.
  10. Em Opções, selecione Manual.
  11. Insira uma chave de política Nome para a chave de política. O prefixo B2C_1A_ é anexado ao nome da chave.
  12. Em Segredo, insira o Segredo do Cliente do xID.
  13. Para o uso da chave , selecione Assinatura .
  14. Selecione Criar.

Observação

No Azure AD B2C, as políticas personalizadas são para cenários complexos.

Consulte Visão geral de fluxos de usuários e políticas personalizadas.

Configurar o xID como provedor de identidade

Para que os usuários possam aceder usando xID, transforme xID em um fornecedor de claims com o qual o Azure AD B2C se comunica através de um endpoint. O endpoint fornece declarações que o Azure AD B2C usa para verificar utilizadores autenticados com identidade digital nos seus respetivos dispositivos.

Adicionar xID como um provedor de declarações

Obtenha os pacotes iniciais de política personalizados do GitHub e depois atualize os arquivos XML no pacote inicial SocialAccounts com o nome da sua instância do Azure AD B2C.

  1. Baixe o arquivo zip active-directory-b2c-policy-starterpack-main ou clone o repositório. Consulte Azure-Samples/active-directory-b2c-custom-policy-starterpack.

  2. Nos arquivos no diretório SocialAccounts , substitua a cadeia de caracteres yourtenant pelo nome do locatário do Azure AD B2C. Por exemplo, yourtenant.onmicrosoft.com passa a contoso.onmicrosoft.com.

  3. Abra o SocialAccounts/TrustFrameworkExtensions.xml.

  4. Encontre o elemento ClaimsProviders. Se não houver um, adicione-o sob o elemento raiz.

  5. Adicione um novo ClaimsProvider semelhante ao exemplo a seguir:

    
     <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">00001111-aaaa-2222-bbbb-3333cccc4444</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 do aplicativo xID.

  7. Selecione Guardar.

Adicionar uma jornada do utilizador

Adicione um provedor de identidade às páginas de entrada.

  1. Se você tiver uma jornada de usuário personalizada, vá para Adicionar o provedor de identidade a uma jornada de usuário. Alternativamente, crie uma cópia de um template de jornada do utilizador.
  2. A partir do pacote inicial, 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 houver, adicione um.
  5. Cole o conteúdo do elemento UserJourney como filho do elemento UserJourneys.
  6. Renomeie o ID da jornada do usuário. Por exemplo, ID=CustomSignUpSignIn

Adicionar o provedor de identidade a um percurso do utilizador

Adicione o novo provedor de identidade à jornada do usuário.

  1. Encontre o elemento da etapa de orquestração com Type=CombinedSignInAndSignUp, ou Type=ClaimsProviderSelection no percurso do utilizador. Geralmente é o primeiro passo da orquestração. O elemento ClaimsProviderSelections tem uma lista de provedores de identidade para entrar. A ordem dos elementos controla a ordem dos botões de entrada.
  2. Adicione um ClaimsProviderSelection elemento 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 declarações de destino. Essa alteração vincula o botão xID à X-IDExchange ação.
  6. Atualize o valor TechnicalProfileReferenceId para o ID do perfil técnico que você criou (X-ID-OIDC).
  7. Adicione uma etapa de Orquestração para chamar o ponto de extremidade xID UserInfo para retornar declarações sobre o usuário autenticado X-ID-Userdata.

O XML a seguir demonstra a orquestração da jornada do usuário com o provedor 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>

Há declarações de identidade que o xID suporta referenciadas como parte da política. Esquema de declarações é onde você declara as declarações. O elemento ClaimsSchema tem uma lista de elementos ClaimType. O elemento ClaimType contém o atributo ID, que é o nome da declaraçã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 parte confiadora

A política da parte confiável, por exemplo, SignUpSignIn.xml, especifica a jornada do utilizador que o Azure AD B2C executa.

  1. Na parte de confiança, localize o elemento DefaultUserJourney.
  2. Atualize o ReferenceId para corresponder ao ID de jornada do usuário que você adicionou ao provedor de identidade.

No exemplo a seguir, para a jornada do usuário xID, o ReferenceId é 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 instruções a seguir, use o diretório com o locatário do Azure AD B2C.

  1. Inicie sessão no portal Azure.
  2. Na barra de ferramentas do portal, selecione o Diretórios + Subscrições.
  3. Nas configurações do Portal | Página Diretórios + assinaturas , na lista Nome do diretório . localize o diretório do Azure AD B2C.
  4. Selecione Trocar.
  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 de base: TrustFrameworkBase.xml
  • Política de extensão: TrustFrameworkExtensions.xml
  • Política de parte confiável: SignUpSignIn.xml

Testar a política personalizada

  1. Em seu locatário do Azure AD B2C e em Políticas, selecione Identity Experience Framework.
  2. Em Políticas personalizadas, selecione CustomSignUpSignIn.
  3. Em Aplicativo, selecione o aplicativo Web que você registrou. O URL de resposta é https://jwt.ms.
  4. Selecione Executar agora.
  5. O navegador redireciona para a página de início de sessão do xID.
  6. O navegador redireciona para https://jwt.ms. O conteúdo do token retornado pelo Azure AD B2C aparece.

Próximos passos