Configurar o xID com o Azure Active Directory B2C para autenticação sem senha
Neste tutorial, saiba como integrar a autenticação do Azure Active Directory B2C (Azure AD B2C) com a solução de ID digital xID. O aplicativo xID fornece aos usuários uma autenticação multifator sem senha e segura. O cartão My Number, o cartão de identificação digital emitido pelo governo japonês, verifica as identidades de usuário autenticadas por xID. Para seus usuários, as organizações podem obter informações pessoais de identificação verificadas (conteúdo do cliente) por meio da API xID. Além disso, o aplicativo xID gera uma chave privada em uma área segura em dispositivos móveis do usuário, tornando-os dispositivos de assinatura digital.
Pré-requisitos
Uma assinatura do Azure
- Se não tiver, você pode obter uma conta gratuita do Azure
Um locatário do Azure AD B2C vinculado à assinatura do Azure.
Suas informações de cliente xID fornecidas pela xID inc.
Acesse a página Fale conosco do xid.inc para obter informações sobre o cliente xID:
- ID do Cliente
- Segredo do cliente
- URL de redirecionamento
- Escopos
Acesse x-id.me para instalar o aplicativo xID em um dispositivo móvel:
- Cartão My Number
- Se você usar a versão UAT da API, obtenha a versão UAT do aplicativo xID. Confira, Fale conosco
Descrição do cenário
O seguinte diagrama mostra a arquitetura.
- Na página de entrada do Azure AD B2C, o usuário entra ou cria uma conta.
- O Azure AD B2C redireciona o usuário para o ponto de extremidade da API de autorização do xID usando uma solicitação OIDC (OpenID Connect). Um ponto de extremidade OIDC tem informações do ponto de extremidade. O IdP (provedor de identidade) xID redireciona o usuário para a página de entrada de autorização xID. O usuário insere o endereço de email.
- O IdP xID envia a notificação por push para o dispositivo móvel do usuário.
- 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.
- O aplicativo xID envia a assinatura para o IdP do xID para verificação.
- Uma tela de consentimento é exibida para fornecer informações pessoais ao serviço.
- O IdP do xID retorna o código de autorização OAuth para o Azure AD B2C.
- O Azure AD B2C envia uma solicitação de token usando o código de autorização.
- O IdP xID verifica a solicitação de token. Se for válido, o token de acesso OAuth será retornado e o token de ID com o identificador de usuário e o endereço de email.
- Se o conteúdo do cliente do usuário for necessário, o Azure AD B2C chamará a API de dados do usuário xID.
- A API de dados do usuário xID retornará o conteúdo do cliente criptografado. Os usuários descriptografam com uma chave privada, criada ao solicitar informações do cliente xID.
- O acesso do usuário ao aplicativo do cliente é concedido ou negado.
Instalar o xID
- Para solicitar documentos de API, preencha o formulário de solicitação. Acesse Fale conosco.
- Na mensagem, indique que você está usando o Azure AD B2C.
- Um representante de vendas do xID entrará em contato com você.
- Siga as instruções no documento da API do xID.
- Solicite um cliente da API do xID.
- A equipe técnica do xID enviará informações do cliente para você em 3 a 4 dias úteis.
- Forneça um URI de redirecionamento em seu site usando o padrão a seguir. 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 os aplicativos em um locatário que você gerencia e, em seguida, eles poderão interagir com o Azure AD B2C.
Saiba mais: Tipos de aplicativos que podem ser usados no Active Directory B2C
Para testar, registre https://jwt.ms
, um aplicativo Web da Microsoft com conteúdo de token decodificado, que não sai do navegador.
Registrar um aplicativo Web e habilitar a concessão implícita de token de ID
Tutorial completo: Registrar um aplicativo Web no Azure AD B2C
Criar uma chave de política do 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 Azure AD B2C.
- Entre no portal do Azure.
- Na barra de ferramentas do portal, selecione Diretórios + assinaturas.
- Na página Configurações do portal | Diretórios + assinaturas, na lista Nome do diretório, localize seu diretório do Azure AD B2C.
- Selecione Alternar.
- No canto superior esquerdo do portal do Azure, selecione Todos os serviços.
- Pesquise e selecione Azure AD B2C.
- Em Visão Geral, selecione Identity Experience Framework.
- Selecione Chaves de Política.
- Selecione Adicionar.
- Em Opções selecione Manual.
- Insira um Nome para a chave de política. O prefixo
B2C_1A_
é adicionado ao nome da chave. - Em Segredo, insira o segredo do cliente do xID.
- Para Uso de chave, selecione Assinatura.
- Selecione Criar.
Observação
No Azure AD B2C, as políticas personalizadas são para cenários complexos.
Confira, Fluxos de usuários e visão geral das políticas personalizadas.
Configurar o xID como provedor de identidade
Para que os usuários entrem usando o xID, defina o xID como provedor de declarações com o qual o Azure AD B2C se comunica por meio de um ponto de extremidade. O ponto de extremidade fornece declarações que o Azure AD B2C usa para verificar os usuários autenticados com a identidade digital em seu dispositivo.
Adicionar o xID como provedor de declarações
Obtenha os pacotes iniciais de políticas personalizadas no GitHub. Em seguida, atualize os arquivos XML no pacote de início de SocialAccounts com o nome de seu locatário do Azure AD B2C.
Baixe o arquivo zip active-directory-b2c-policy-starterpack-main ou clone o repositório. Confira, Azure-Samples/active-directory-b2c-custom-policy-starterpack.
Nos arquivos do diretório SocialAccounts, substitua a cadeia de caracteres
yourtenant
pelo nome do locatário do Azure AD B2C. Por exemplo,yourtenant.onmicrosoft.com
torna-secontoso.onmicrosoft.com
.Abra o SocialAccounts/TrustFrameworkExtensions.xml.
Localize o elemento ClaimsProviders. Se não houver um, adicione-o no elemento raiz.
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">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>
Defina client_id com sua ID do Aplicativo xID.
Clique em Salvar.
Adicione um percurso de usuário
Adicione um provedor de identidade às páginas de entrada.
- Se você tiver um percurso do usuário personalizado, acesse Adicionar o provedor de identidade a um percurso do usuário. Caso contrário, crie uma duplicata de um percurso do usuário de modelo:
- No pacote inicial, abra o TrustFrameworkBase.xml.
- Localize e copie o conteúdo do elemento UserJourneys que inclui
ID=SignUpOrSignIn
. - Abra o TrustFrameworkExtensions.xml e localize o elemento UserJourneys. Se não houver, adicione um.
- Cole o conteúdo do elemento UserJourney como filho do elemento UserJourneys.
- Renomeie a ID do percurso do usuário. Por exemplo,
ID=CustomSignUpSignIn
Adicione o provedor de identidade a um percurso de usuário
Adicione o novo provedor de identidade ao percurso do usuário.
- Localize o elemento da etapa de orquestração com Type=
CombinedSignInAndSignUp
ou Type=ClaimsProviderSelection
no percurso do usuário. Normalmente é a primeira etapa de orquestração. O elemento ClaimsProviderSelections tem uma lista de provedores de identidade para entrada. A ordem dos elementos controla a ordem dos botões de entrada. - Adicione um elemento XML ClaimsProviderSelection.
- Defina o valor de TargetClaimsExchangeId com um nome amigável.
- Adicione um elemento ClaimsExchange.
- Defina a ID como o valor da ID de troca de declarações de destino. Essa alteração vincula o botão xID à ação
X-IDExchange
. - Atualize o valor TechnicalProfileReferenceId para a ID do perfil técnico criado
X-ID-OIDC
). - 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 seguinte XML demonstra a orquestração de um percurso do usuário com o provedor de identidade do 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 dá suporte e são referenciadas como parte da política. O esquema de declarações é o onde você declara as declarações. O elemento ClaimsSchema tem uma lista de elementos ClaimType. O elemento ClaimType contém o atributo de ID, que é o nome da declaração.
- Abra o TrustFrameworksExtension.xml.
- Localize o elemento BuildingBlocks.
- Adicione o seguinte elemento ClaimType no elemento ClaimsSchema da política TrustFrameworksExtension.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 de terceira parte confiável
A política de terceira parte confiável, por exemplo SignUpSignIn.xml, especifica o percurso do usuário que o Azure AD B2C executa.
- Na terceira parte confiável, localize o elemento DefaultUserJourney.
- Atualize a ReferenceId para corresponder à ID do percurso do usuário que você adicionou ao provedor de identidade.
No exemplo a seguir, para o percurso do usuário do xID, a ReferenceId é definida 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 Azure AD B2C.
- Entre no portal do Azure.
- Na barra de ferramentas do portal, selecione Diretórios + assinaturas.
- Na página Configurações do portal | Diretórios + assinaturas, na lista Nome do diretório. localize seu diretório do Azure AD B2C.
- Selecione Alternar.
- No portal do Azure, pesquise e selecione Azure AD B2C.
- Em Políticas, selecione Estrutura de experiência de identidade.
- Selecione Carregar Política Personalizada.
- Carregue os arquivos na seguinte ordem:
- Arquivo de política base:
TrustFrameworkBase.xml
- Política de extensão:
TrustFrameworkExtensions.xml
- Política da terceira parte confiável:
SignUpSignIn.xml
Teste a política personalizada
- Em seu locatário do Azure AD B2C e, em Políticas, selecione Identity Experience Framework.
- Em Políticas personalizadas, selecione CustomSignUpSignIn.
- Para Aplicativo, selecione o aplicativo Web registrado. A URL de resposta é
https://jwt.ms
. - Selecione Executar Agora.
- O navegador redireciona para a página de entrada do xID.
- O navegador redireciona para
https://jwt.ms
. O conteúdo do token retornado pelo Azure AD B2C aparece.