Configuración de xID con Azure Active Directory B2C para la autenticación sin contraseña
En este tutorial, aprenderá cómo integrar la autenticación de Azure Active Directory B2C (Azure AD B2C) con la solución de identificador digital xID. La aplicación xID proporciona a los usuarios autenticación multifactor sin contraseña y segura. La tarjeta Mi número, la tarjeta de identificación digital emitida por el gobierno japonés, comprueba las identidades de usuario autenticadas por xID. Para sus usuarios, las organizaciones pueden obtener Información de identificación personal (contenido del cliente) verificada a través de la API de xID. Además, la aplicación xID genera una clave privada en un área segura en dispositivos móviles de usuario, lo que los convierte en dispositivos de firma digital.
Requisitos previos
Una suscripción de Azure
- Si no tiene una, puede obtener una cuenta gratuita de Azure
Un inquilino de Azure AD B2C vinculado a la suscripción de Azure
Información del cliente xID proporcionada por xID inc.
Vaya a la página xid.inc Póngase en contacto con nosotros para obtener información de cliente xID:
- Id. de cliente
- Secreto del cliente
- URL de redireccionamiento
- Ámbitos
Vaya a x-id.me para instalar la aplicación xID en un dispositivo móvil:
- Tarjeta Mi número
- Si usa la versión de UAT de API, obtenga la versión de UAT de la aplicación xID. Consulte, Póngase en contacto con nosotros
Descripción del escenario
En el siguiente diagrama se muestra la arquitectura.
- En la página de inicio de sesión de Azure AD B2C, el usuario inicia sesión o se registra.
- Azure AD B2C redirige al usuario al punto de conexión de la API de autorización de xID mediante una solicitud de OpenID Connect (OIDC). Un punto de conexión de OIDC tiene información de punto de conexión. El proveedor de identidades xID (IdP) redirige al usuario a la página de inicio de sesión de autorización de xID. El usuario escribe la dirección de correo electrónico.
- El IdP de xID envía la notificación push al dispositivo móvil del usuario.
- El usuario abre la aplicación xID, comprueba la solicitud, escribe un PIN o usa biometría. La aplicación xID activa la clave privada y crea una firma electrónica.
- La aplicación xID envía la firma al IdP de xID para comprobarla.
- Aparece una pantalla de consentimiento para proporcionar información personal al servicio.
- El IdP de xID devuelve el código de autorización de OAuth a Azure AD B2C.
- Azure AD B2C envía una solicitud de token con el código de autorización.
- xID IdP comprueba la solicitud de token. Si es válido, se devuelve el token de acceso de OAuth y el token de identificador con el identificador de usuario y la dirección de correo electrónico.
- Si se necesita contenido de cliente de usuario, Azure AD B2C llama a la API de datos de usuario xID.
- La API userdata de xID devuelve el contenido cifrado del cliente. Los usuarios descifran con una clave privada, creada al solicitar la información del cliente xID.
- Al usuario se le concede o deniega el acceso a la aplicación.
Instalación de xID
- Para solicitar documentos de API, rellene el formulario de solicitud. Vaya a Póngase en contacto con nosotros.
- En el mensaje, indique que usa Azure AD B2C.
- Un representante de ventas xID se pone en contacto con usted.
- Siga las instrucciones del documento de la API xID.
- Solicite un cliente de API xID.
- El equipo técnico de xID le envía información del cliente en 3 o 4 días laborables.
- Proporcione un URI de redireccionamiento en el sitio con el siguiente patrón. Los usuarios vuelven a él después de la autenticación.
https://<your-b2c-domain>.b2clogin.com/<your-b2c-domain>.onmicrosoft.com/oauth2/authresp
Registro de una aplicación web en Azure AD B2C
Registre las aplicaciones en un inquilino que administre; después, pueden interactuar con Azure AD B2C.
Más información: Tipos de aplicaciones que se pueden usar en Active Directory B2C
Para realizar pruebas, registre https://jwt.ms
, una aplicación web de Microsoft con contenido de token descodificado, que no deje el explorador.
Registre una aplicación web y habilite la concesión implícita del token de identificador
Complete el Tutorial: Registro de una aplicación web en Azure AD B2C
Creación de una clave de directiva de xID
Almacene el secreto de cliente de xID en el inquilino de Azure AD B2C. Para obtener las instrucciones siguientes, use el directorio con el inquilino de Azure AD B2C.
- Inicie sesión en Azure Portal.
- Seleccione el icono Directorios y suscripciones en la barra de herramientas del portal.
- En la página Configuración del portal | Directorios y suscripciones, en la lista Nombre del directorio, localice su directorio de Azure AD B2C.
- Seleccione Cambiar.
- En la esquina superior izquierda de Azure Portal, seleccione Todos los servicios.
- Busque y seleccione Azure AD B2C.
- En Información general, seleccione Identity Experience Framework.
- Seleccione Claves de directiva.
- Seleccione Agregar.
- En Opciones, seleccione Manual.
- Escriba un Nombre de clave de directiva para la clave de directiva. El prefijo
B2C_1A_
se agrega al nombre de la clave. - En Secreto, escriba el secreto de cliente de xID.
- En Uso de claves, seleccione Firma.
- Seleccione Crear.
Nota
En Azure AD B2C, las directivas personalizadas son para escenarios complejos.
Consulte, Información general sobre flujos de usuario y directivas personalizadas.
Configuración de xID como proveedor de identidades
Para que los usuarios inicien sesión con xID, establezca xID como un proveedor de notificaciones con el que Azure AD B2C se comunica mediante un punto de conexión. El punto de conexión proporciona notificaciones usadas por Azure AD B2C para comprobar usuarios autenticados con una identidad digital en sus dispositivos.
Adición de xID como proveedor de notificaciones
Obtenga los paquetes de inicio de directivas personalizadas en GitHub y, luego, actualice los archivos XML del paquete de inicio de SocialAccounts con el nombre del inquilino de Azure AD B2C.
Descargue el archivo ZIP active-directory-b2c-custom-policy-starterpack-main o clone el repositorio. Consulte Azure-Samples/active-directory-b2c-custom-policy-starterpack.
En todos los archivos del directorio SocialAccounts, reemplace la cadena
yourtenant
por el nombre de su inquilino de Azure AD B2C. Por ejemplo,yourtenant.onmicrosoft.com
se convierte encontoso.onmicrosoft.com
.Abra el archivo SocialAccounts/TrustFrameworkExtensions.xml.
Busque el elemento ClaimsProviders. Si no hay ninguno, agréguelo en el elemento raíz.
Agregue una nueva instancia de ClaimsProvider similar al ejemplo siguiente:
<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>
Establezca client_id con su identificador de aplicación de xID.
Seleccione Guardar.
Adición de un recorrido del usuario
Agregue un proveedor de identidades a las páginas de inicio de sesión.
- Si tiene un recorrido del usuario, vaya a Agregar el proveedor de identidades a un recorrido del usuario. De lo contrario, cree un duplicado de plantilla de un recorrido de usuario:
- En el paquete de inicio, abra el archivo TrustFrameworkBase.xml.
- Localice y copie el contenido del elemento UserJourneys que incluya
ID=SignUpOrSignIn
. - Abra el archivo TrustFrameworkExtensions.xml y busque el elemento UserJourneys. Si no hay ninguno, agregue uno.
- Pegue el contenido del elemento UserJourney como elemento secundario del elemento UserJourneys.
- Cambie el nombre del identificador de recorrido del usuario. Por ejemplo:
ID=CustomSignUpSignIn
Adición del proveedor de identidades a un recorrido del usuario
Agregue el nuevo proveedor de identidades al recorrido del usuario.
- En el recorrido del usuario, localice el elemento del paso de orquestación que sea Type=
CombinedSignInAndSignUp
o Type=ClaimsProviderSelection
. Normalmente es el primer paso de orquestación. El elemento ClaimsProviderSelections tiene una lista de proveedores de identidades para iniciar sesión. El orden de los elementos determina el orden de los botones de inicio de sesión. - Agregue un elemento XML ClaimsProviderSelection.
- Establezca el valor de TargetClaimsExchangeId en un nombre descriptivo.
- Agregue un elemento ClaimsExchange.
- Establezca el id. en el valor del id. de intercambio de notificaciones de destino. Este cambio vincula el botón xID a la acción
X-IDExchange
. - Actualice el valor TechnicalProfileReferenceId al identificador de perfil técnico que haya creado (
X-ID-OIDC
). - Agregue un paso de orquestación para llamar al punto de conexión UserInfo de xID para devolver notificaciones sobre el usuario autenticado
X-ID-Userdata
.
El archivo XML siguiente muestra la orquestación del recorrido del usuario con el proveedor de identidades de 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>
Hay notificaciones de identidad que xID admite y a las que se hace referencia como parte de la directiva. El esquema de notificaciones es donde se declaran esas notificaciones. El elemento ClaimsSchema tiene una lista de elementos ClaimType. El elemento ClaimType contiene el atributo Id, que es el nombre de la notificación.
- Abra el TrustFrameworksExtension.xml.
- Busque el elemento BuildingBlocks.
- Agregue el elemento ClaimType siguiente en el elemento ClaimsSchema de la directiva 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>
Configuración de la directiva de usuario de confianza.
La directiva del usuario de confianza (por ejemplo, SignUpSignIn.xml) especifica el recorrido del usuario que se ejecuta en Azure AD B2C.
- En el usuario de confianza, busque el elemento DefaultUserJourney.
- Actualice ReferenceId para que coincida con el identificador del recorrido del usuario que agregó al proveedor de identidades.
En el ejemplo siguiente, para el recorrido de usuario de xID, ReferenceId está establecido en 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>
Carga de la directiva personalizada
Para obtener las instrucciones siguientes, use el directorio con el inquilino de Azure AD B2C.
- Inicie sesión en Azure Portal.
- En la barra de herramientas del portal, seleccione Directorios y suscripciones.
- En la página Configuración del portal | Directorios y suscripciones, en la lista Nombre del directorio. busque el directorio de Azure AD B2C.
- Seleccione Cambiar.
- En Azure Portal, busque Azure AD B2C y selecciónelo.
- En Directivas, seleccione Identity Experience Framework.
- Seleccione Cargar directiva personalizada.
- Cargue los archivos de directivas en el siguiente orden:
- Archivo de directiva base:
TrustFrameworkBase.xml
- Directiva de extensión:
TrustFrameworkExtensions.xml
- Directiva del usuario de confianza:
SignUpSignIn.xml
Prueba de la directiva personalizada
- En el inquilino de Azure AD B2C, en Directivas, seleccione Identity Experience Framework.
- En Directivas personalizadas, seleccione CustomSignUpSignIn.
- En Aplicación, seleccione la aplicación web que ha registrado. La dirección URL de respuesta es
https://jwt.ms
. - Seleccione Ejecutar ahora.
- El explorador redirigirá a la página de inicio de sesión de xID.
- El explorador redirige a
https://jwt.ms
. Aparece el contenido del token devuelto por Azure AD B2C.