Configuración de un flujo de restablecimiento de contraseña en Azure Active Directory B2C

Antes de comenzar, use el selector Elección de un tipo de directiva para elegir el tipo de directiva que va a configurar. Azure Active Directory B2C ofrece dos métodos para definir el modo en que los usuarios interactúan con las aplicaciones: por medio de flujos de usuario predefinidos o de directivas personalizadas totalmente configurables. Los pasos necesarios en este artículo son diferentes para cada método.

En un recorrido de registro e inicio de sesión, un usuario puede restablecer su propia contraseña mediante el vínculo ¿Ha olvidado la contraseña? Este flujo de autoservicio de restablecimiento de contraseña se aplica a las cuentas locales de Azure AD B2C que usan una dirección de correo electrónico o un nombre de usuario con una contraseña para el inicio de sesión.

El flujo de restablecimiento de contraseña consta de los siguientes pasos:

  1. En la página de registro e inicio de sesión, el usuario selecciona el vínculo ¿Ha olvidado la contraseña? Azure AD B2C inicia el flujo de restablecimiento de contraseña.
  2. En el siguiente cuadro de diálogo que aparece, el usuario escribe su dirección de correo electrónico y, después, selecciona Enviar código de comprobación. Azure AD B2C envía un código de verificación a la cuenta de correo electrónico del usuario. A continuación, el usuario copia el código de verificación del correo electrónico, lo escribe en el cuadro de diálogo de restablecimiento de contraseña de Azure AD B2C y selecciona Comprobar código.
  3. A continuación, el usuario puede escribir una nueva contraseña. (Una vez comprobado el correo electrónico, el usuario puede todavía seleccionar el botón Cambiar correo electrónico; consulte Ocultar el botón Cambiar correo electrónico).

Diagram that shows three dialogs in the password reset flow.

Sugerencia

Un usuario puede cambiar su contraseña mediante el flujo de autoservicio de restablecimiento de contraseña si olvida su contraseña y desea restablecerla. Puede elegir una de las siguientes opciones de flujo de usuario:

  • Si un usuario conoce su contraseña y quiere cambiarla, use un flujo de cambio de contraseña.
  • Si quiere forzar a los usuarios a restablecer sus contraseñas (por ejemplo, cuando inician sesión por primera vez, cuando un administrador las ha restablecido o después de que se hayan migrado a Azure AD B2C con contraseñas aleatorias), use un flujo de restablecimiento de contraseña forzado.

Tenga en cuenta que el nombre predeterminado del botón Cambiar correo electrónico de selfAsserted.html es changeclaims. Para buscar el nombre del botón, en la página de registro, inspeccione el origen de la página mediante una herramienta de exploración como Inspect.

Requisitos previos

Ocultar el botón Cambiar correo electrónico

Una vez comprobado el correo electrónico, el usuario puede todavía seleccionar Cambiar correo electrónico, escribir otra dirección y repetir la comprobación del correo electrónico. Si prefiere ocultar el botón Cambiar correo electrónico, puede modificar el archivo CSS para ocultar los elementos HTML asociados en el cuadro de diálogo. Por ejemplo, puede agregar la entrada CSS siguiente a selfAsserted.html y personalizar la interfaz de usuario mediante plantillas HTML:

<style type="text/css">
   .changeClaims
   {
     visibility: hidden;
   }
</style>

La nueva experiencia de restablecimiento de contraseña ahora forma parte de la directiva de registro o inicio de sesión. Cuando el usuario selecciona el vínculo ¿Olvidó la contraseña? , se le envía inmediatamente a la experiencia de contraseña olvidada. La aplicación ya no necesita controlar el código de error AADB2C90118 y no necesita una directiva distinta para el restablecimiento de contraseña.

La experiencia de autoservicio de restablecimiento de contraseña se puede configurar para los flujos de usuario de inicio de sesión (recomendado) o de registro e inicio de sesión (recomendado). Si no tiene uno de estos flujos de usuario configurado, cree un flujo de usuario de registro o de inicio de sesión.

Para configurar el autoservicio de restablecimiento de contraseña para el flujo de usuario de registro o inicio de sesión:

  1. Inicie sesión en Azure Portal.
  2. Si tiene acceso a varios inquilinos, seleccione el icono Configuración en el menú superior para cambiar a su inquilino de Azure AD B2C desde el menú Directorios y suscripciones.
  3. En Azure Portal, busque y seleccione Azure AD B2C.
  4. Seleccione Flujos de usuario.
  5. Seleccione un flujo de usuario de registro o inicio de sesión (de tipo recomendado) que quiera personalizar.
  6. En el menú, en Configuración, seleccione Propiedades.
  7. En Configuración de la contraseña, seleccione Autoservicio de restablecimiento de contraseña.
  8. Seleccione Guardar.
  9. En el menú de la izquierda, en Personalizar, seleccione Diseños de página.
  10. En Versión de diseño de página seleccione 2.1.3 u otra versión posterior.
  11. Seleccione Guardar.

En las secciones siguientes se describe cómo agregar una experiencia de autoservicio de contraseña a una directiva personalizada. El ejemplo se basa en los archivos de directivas que se incluyen en el paquete de inicio de directivas personalizadas.

Sugerencia

Puede encontrar un ejemplo completo de la directiva de registro o inicio de sesión con restablecimiento de contraseña en GitHub.

Para indicar a la directiva que el usuario ha seleccionado el vínculo ¿Ha olvidado la contraseña? , defina una notificación booleana. Use la notificación para dirigir el recorrido del usuario al perfil técnico de contraseña olvidada. La notificación también se puede emitir al token, de modo que la aplicación detecta que el usuario ha iniciado sesión mediante el flujo de usuario de contraseña olvidada.

Las notificaciones se declaran en el esquema de notificaciones. Abra el archivo de extensiones de su directiva, por ejemplo, en SocialAndLocalAccounts/TrustFrameworkExtensions.xml.

  1. Busque el elemento BuildingBlocks. Si el elemento no existe, agréguelo.

  2. Busque el elemento ClaimsSchema. Si el elemento no existe, agréguelo.

  3. Agregue las notificaciones siguientes al elemento ClaimsSchema.

    <!-- 
    <BuildingBlocks>
      <ClaimsSchema> -->
        <ClaimType Id="isForgotPassword">
          <DisplayName>isForgotPassword</DisplayName>
          <DataType>boolean</DataType>
          <AdminHelpText>Whether the user has selected Forgot your Password</AdminHelpText>
        </ClaimType>
      <!--
      </ClaimsSchema>
    </BuildingBlocks> -->
    

Actualización de la versión de diseño de página

La versión de diseño de página 2.1.2 es necesaria para habilitar el flujo de autoservicio de restablecimiento de contraseña en el recorrido de registro o inicio de sesión. Para actualizar la versión de diseño de página:

  1. Abra el archivo base de la directiva, por ejemplo, SocialAndLocalAccounts/TrustFrameworkBase.xml.

  2. Busque el elemento BuildingBlocks. Si el elemento no existe, agréguelo.

  3. Busque el elemento ContentDefinitions. Si el elemento no existe, agréguelo.

  4. Modifique el elemento DataURI en el elemento ContentDefinition para que tenga el identificador api.signuporsignin:

    <!-- 
    <BuildingBlocks>
      <ContentDefinitions> -->
        <ContentDefinition Id="api.signuporsignin">
          <DataUri>urn:com:microsoft:aad:b2c:elements:contract:unifiedssp:2.1.2</DataUri>
        </ContentDefinition>
      <!-- 
      </ContentDefinitions>
    </BuildingBlocks> -->
    

Incorporación de los perfiles técnicos

Un perfil técnico de transformación de notificaciones accede a la notificación isForgotPassword. Más adelante se hace referencia al perfil técnico. Cuando se le invoca, establece el valor de la notificación isForgotPassword en true.

  1. Abra el archivo de extensiones de su directiva, por ejemplo, en SocialAndLocalAccounts/TrustFrameworkExtensions.xml.
  2. Busque el elemento ClaimsProviders (si el elemento no existe, créelo) y, a continuación, agregue el siguiente proveedor de notificaciones:
<!-- 
<ClaimsProviders> -->
  <ClaimsProvider>
    <DisplayName>Local Account</DisplayName>
    <TechnicalProfiles>
      <TechnicalProfile Id="ForgotPassword">
        <DisplayName>Forgot your password?</DisplayName>
        <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
        <OutputClaims>
          <OutputClaim ClaimTypeReferenceId="isForgotPassword" DefaultValue="true" AlwaysUseDefaultValue="true"/>
        </OutputClaims>
        <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
      </TechnicalProfile>
      <TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
        <Metadata>
          <Item Key="setting.forgotPasswordLinkOverride">ForgotPasswordExchange</Item>
        </Metadata>
      </TechnicalProfile>
      <TechnicalProfile Id="LocalAccountWritePasswordUsingObjectId">
        <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
      </TechnicalProfile>
    </TechnicalProfiles>
  </ClaimsProvider>
<!-- 
</ClaimsProviders> -->

El perfil técnico de SelfAsserted-LocalAccountSignin-Emailsetting.forgotPasswordLinkOverride define el intercambio de notificaciones de restablecimiento de contraseña que se ejecuta en el recorrido del usuario.

El administrador de sesión SM-AADUseTechnicalProfileForSessionManagement del perfil técnico de LocalAccountWritePasswordUsingObjectId es necesario para que el usuario realice inicios de sesión posteriores correctamente en condiciones de SSO.

Adición del subrecorrido de restablecimiento de contraseña

El usuario ahora puede iniciar sesión, registrarse y realizar el restablecimiento de contraseña en el recorrido del usuario. Para organizar mejor el recorrido del usuario, se puede usar un subrecorrido para administrar el flujo de restablecimiento de contraseña.

El subrecorrido se llamará desde el recorrido del usuario y llevará a cabo los pasos específicos para proporcionar al usuario la experiencia de restablecimiento de contraseña. Use el subrecorrido de tipo Call para que una vez que se complete el subrecorrido, se devuelva el control al paso de orquestación que lo inició.

  1. Abra el archivo de extensiones de su directiva, tal como SocialAndLocalAccounts/TrustFrameworkExtensions.xml.
  2. Busque el elemento SubJourneys. Si el elemento no existe, agréguelo después del elemento Recorridos del usuario. Luego, agregue el siguiente subrecorrido:
<!--
<SubJourneys>-->
  <SubJourney Id="PasswordReset" Type="Call">
    <OrchestrationSteps>
      <!-- Validate user's email address. -->
      <OrchestrationStep Order="1" Type="ClaimsExchange">
        <ClaimsExchanges>
          <ClaimsExchange Id="PasswordResetUsingEmailAddressExchange" TechnicalProfileReferenceId="LocalAccountDiscoveryUsingEmailAddress" />
        </ClaimsExchanges>
      </OrchestrationStep>

      <!-- Collect and persist a new password. -->
      <OrchestrationStep Order="2" Type="ClaimsExchange">
        <ClaimsExchanges>
          <ClaimsExchange Id="NewCredentials" TechnicalProfileReferenceId="LocalAccountWritePasswordUsingObjectId" />
        </ClaimsExchanges>
      </OrchestrationStep>
    </OrchestrationSteps>
  </SubJourney>
<!--
</SubJourneys>-->

Preparación del recorrido del usuario

A continuación, para conectar el vínculo ¿Olvidó la contraseña? al subproceso Contraseña olvidada, deberá hacer referencia al identificador de subrecorrido Contraseña olvidada en el elemento ClaimsProviderSelection del paso CombinedSignInAndSignUp.

Si no tiene su propio recorrido de usuario personalizado con un paso CombinedSignInAndSignUp, realice los pasos siguientes para duplicar un recorrido de usuario de registro o inicio de sesión existente. De lo contrario, continúe con la sección siguiente.

  1. En el paquete de inicio, abra el archivo TrustFrameworkBase.xml, como SocialAndLocalAccounts/TrustFrameworkBase.xml.
  2. Busque y copie todo el contenido del elemento UserJourney que incluye Id="SignUpOrSignIn".
  3. Abra TrustFrameworkExtensions.xml archivo, como SocialAndLocalAccounts/TrustFrameworkExtensions.xmly busque el elemento UserJourneys. Si el elemento no existe, cree uno.
  4. Cree un elemento secundario del elemento UserJourneys; para ello, pegue todo el contenido del elemento UserJourney que copió en el paso 2.
  5. Cambie el identificador del recorrido del usuario. Por ejemplo, Id="CustomSignUpSignIn".

En el recorrido del usuario, puede representar el subrecorrido de contraseña olvidada como ClaimsProviderSelection. Al agregar este elemento, se conecta el vínculo ¿Olvidó la contraseña? al subrecorrido de contraseña olvidada.

  1. Abra el archivo TrustFrameworkExtensions.xml, como SocialAndLocalAccounts/TrustFrameworkExtensions.xml.

  2. En el recorrido del usuario, busque el elemento del paso de orquestación que incluye Type="CombinedSignInAndSignUp" o Type="ClaimsProviderSelection". Normalmente es el primer paso de orquestación. El elemento ClaimsProviderSelections contiene una lista de proveedores de identidades que puede usar un usuario para iniciar sesión. Agregue la línea siguiente:

    <ClaimsProviderSelection TargetClaimsExchangeId="ForgotPasswordExchange" />
    
  3. En el siguiente paso de orquestación, agregue un elemento ClaimsExchange agregando la siguiente línea:

    <ClaimsExchange Id="ForgotPasswordExchange" TechnicalProfileReferenceId="ForgotPassword" />
    
  4. Agregue el siguiente paso de orquestación entre el paso actual y el paso siguiente. El nuevo paso de orquestación que agrega comprueba si la notificación isForgotPassword existe. Si la notificación existe, invoca el subrecorrido de restablecimiento de contraseña.

    <OrchestrationStep Order="3" Type="InvokeSubJourney">
      <Preconditions>
        <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
          <Value>isForgotPassword</Value>
          <Action>SkipThisOrchestrationStep</Action>
        </Precondition>
      </Preconditions>
      <JourneyList>
        <Candidate SubJourneyReferenceId="PasswordReset" />
      </JourneyList>
    </OrchestrationStep>
    
  5. Después de agregar el nuevo paso de orquestación, vuelva a enumerar los pasos de forma secuencial sin omitir los enteros de 1 a N.

Establecimiento del recorrido de usuario que se va a ejecutar

Ahora que ha modificado o creado un recorrido de usuario, en la sección Usuario de confianza, especifique el recorrido que ejecutará Azure AD B2C para esta directiva personalizada.

  1. Abra el archivo que tiene el elemento Usuario de confianza, como SocialAndLocalAccounts/SignUpOrSignin.xml.

  2. En el elemento RelyingParty, busque el elemento DefaultUserJourney.

  3. Actualice DefaultUserJourney ReferenceId para que coincida con el identificador del recorrido del usuario en el que ha agregado el elemento ClaimsProviderSelections.

<RelyingParty>
  <DefaultUserJourney ReferenceId="CustomSignUpSignIn" />
  ...
</RelyingParty>

Indicación del flujo de contraseña olvidada a la aplicación

Es posible que la aplicación deba detectar si el usuario inició sesión mediante el flujo de usuario de contraseña olvidada. La notificación isForgotPassword contiene un valor booleano que indica que así se ha hecho. La notificación se puede emitir en el token que se envía a la aplicación. Si es necesario, agregue isForgotPassword a las notificaciones de salida de la sección Usuario de confianza. La aplicación puede comprobar la notificación isForgotPassword para determinar si el usuario restablece la contraseña.

<RelyingParty>
  <OutputClaims>
    ...
    <OutputClaim ClaimTypeReferenceId="isForgotPassword" DefaultValue="false" />
  </OutputClaims>
</RelyingParty>

Carga de la directiva personalizada

  1. Inicie sesión en Azure Portal.
  2. Si tiene acceso a varios inquilinos, seleccione el icono Configuración en el menú superior para cambiar al inquilino de Azure AD B2C desde el menú Directorios y suscripciones.
  3. En Azure Portal, busque y seleccione Azure AD B2C.
  4. En el menú, en Directivas, seleccione Identity Experience Framework.
  5. Seleccione Cargar directiva personalizada. En el orden siguiente, cargue los archivos de directivas que ha cambiado:
    1. El archivo base de la directiva, por ejemplo TrustFrameworkBase.xml.
    2. La directiva de extensión, por ejemplo, TrustFrameworkExtensions.xml.
    3. La directiva de usuario de confianza, por ejemplo SignUpSignIn.xml.

Prueba del flujo de restablecimiento de contraseña

  1. Seleccione un flujo de usuario de registro o inicio de sesión (tipo recomendado) que quiera probar.
  2. Seleccione Ejecutar flujo de usuario.
  3. En Aplicación, seleccione la aplicación web denominada webapp1 que registró anteriormente. La dirección URL de respuesta debe mostrar https://jwt.ms.
  4. Seleccione Ejecutar flujo de usuario.
  5. En la página de registro o inicio de sesión, seleccione ¿Ha olvidado la contraseña?
  6. Compruebe la dirección de correo electrónico de la cuenta que creó anteriormente y, luego, seleccione Continuar.
  7. En el cuadro de diálogo que se muestra, cambie la contraseña del usuario y, a continuación, seleccione Continuar. El token se devuelve a https://jwt.ms y el explorador lo muestra.
  8. Compruebe el valor de la notificación isForgotPassword del token devuelto. Si existe y está establecido en true, indica que el usuario ha restablecido la contraseña.

Directiva de restablecimiento de contraseña (heredada)

Si la experiencia de autoservicio de restablecimiento de contraseña no está habilitada, al seleccionar este vínculo no se desencadena automáticamente un flujo de usuario de restablecimiento de contraseña. sino que se devuelve a la aplicación el código de error AADB2C90118. Para controlar este código de error, la aplicación debe reinicializar la biblioteca de autenticación para autenticar un flujo de usuario de restablecimiento de contraseña de Azure AD B2C.

En el siguiente diagrama se muestra el proceso:

  1. En la aplicación, el usuario selecciona Iniciar sesión. La aplicación inicia una solicitud de autorización y redirige a Azure AD B2C para que el usuario pueda finalizar el proceso de inicio de sesión. La solicitud de autorización especifica un nombre de directiva de registro o inicio de sesión, por ejemplo, B2C_1_signup_signin.

  2. El usuario selecciona el vínculo ¿Olvidó la contraseña? Azure AD B2C devuelve el código de error AADB2C90118 a la aplicación.

  3. La aplicación controla el código de error e inicia una nueva solicitud de autorización. La solicitud de autorización especifica el nombre de la directiva de restablecimiento de contraseña, por ejemplo, B2C_1_pwd_reset.

    Diagram that shows the legacy password reset user flow.

Puede ver un ejemplo básico de ASP.NET, que muestra cómo se vinculan los flujos de usuario.

Creación de un flujo de usuario de restablecimiento de contraseña

Para permitir que los usuarios de la aplicación restablezcan sus contraseñas, cree un flujo de usuario de restablecimiento de contraseña:

  1. En Azure Portal, vaya a la información general del inquilino de Azure AD B2C.
  2. En el menú de la izquierda, en Directivas, seleccione Flujos de usuario y Nuevo flujo de usuario.
  3. En Crear un flujo de usuario, seleccione el flujo de usuario Restablecer contraseña.
  4. En Seleccione una versión, elija Recomendada y, luego, seleccione Crear.
  5. En Nombre, escriba un nombre para el flujo de usuario. Por ejemplo, passwordreset1.
  6. En Proveedores de identidades, habilite Reset password using username (Restablecer contraseña mediante el nombre de usuario) o Reset password using email address (Restablecer contraseña mediante la dirección de correo electrónico).
  7. En Autenticación multifactor, si quiere exigir la comprobación de la identidad de los usuarios mediante un segundo método de autenticación, seleccione el tipo de método y cuándo aplicar la autenticación multifactor. Más información.
  8. En Acceso condicional, si ha configurado directivas de acceso condicional para el inquilino de Azure AD B2C y quiere usarlas para este flujo de usuario, active la casilla Aplicar directivas de acceso condicional. No es necesario especificar un nombre de directiva. Más información.
  9. En Notificaciones de la aplicación, seleccione Mostrar más. Elija las notificaciones que quiere que se devuelvan en los tokens de autorización que se envían de vuelta a la aplicación. Por ejemplo, seleccione Id. de objeto del usuario.
  10. Seleccione Aceptar.
  11. Seleccione Crear para agregar el flujo de usuario. Se agrega un prefijo B2C_1 automáticamente al nombre.

Prueba del flujo de usuario

Para probar el flujo de usuario:

  1. Seleccione el flujo de usuario que ha creado. En la página de información general del flujo de usuario, seleccione Ejecutar flujo de usuario.
  2. En Aplicación, seleccione la aplicación web que quiere probar, como la denominada webapp1 si la registró anteriormente. La dirección URL de respuesta debe ser https://jwt.ms.
  3. Seleccione Ejecutar flujo de usuario, compruebe la dirección de correo electrónico de la cuenta para la que quiere restablecer la contraseña y, a continuación, seleccione Continuar.
  4. Cambie la contraseña y seleccione Continuar. El token se devuelve a https://jwt.ms y el explorador lo muestra.

Crear una directiva de restablecimiento de contraseña

Las directivas personalizadas son un conjunto de archivos XML que se cargan en el inquilino de Azure AD B2C para definir recorridos de usuario. Proporcionamos paquetes de inicio con varias directivas predefinidas, entre las que se incluyen el registro e inicio de sesión, el restablecimiento de la contraseña y la directiva de edición de perfiles. Para obtener información, consulte Introducción a las directivas personalizadas en Azure AD B2C.

Solución de problemas con los flujos de usuario y las directivas personalizadas de Azure AD B2C

La aplicación debe controlar determinados errores procedentes del servicio Azure B2C. Obtenga información sobre cómo solucionar problemas con los flujos de usuario y las directivas personalizadas de Azure AD B2C.

Pasos siguientes

Configure un restablecimiento de contraseña forzoso.

Registro e inicio de sesión con restablecimiento de contraseña insertado.