Autenticación de multifactores (MFA)

Con Cloud Directory para IBM Cloud® App ID, puede necesitar varios factores de autenticación durante el flujo de inicio de sesión de la aplicación. Un segundo factor de autenticación aumenta la seguridad de su aplicación, ya que no sólo confirma que un usuario posee el conocimiento de sus credenciales, sino que también tiene acceso a su correo electrónico, número de teléfono o aplicación autenticadora registrados. Al ampliar el flujo de MFA, puede configurar extensiones previas y posteriores a MFA para tomar decisiones personalizadas en el tiempo de ejecución sobre qué usuarios deben completar el segundo factor o proporcionar información analítica sobre el flujo de inicio de sesión.

La MFA de App ID se soporta como parte del flujo de código de autorización OAuth 2.0 para usuarios de Directorio en la nube mediante el Widget de inicio de sesión. Si utiliza el inicio de sesión de la empresa con SAML 2.0 o el inicio de sesión social, puede habilitar MFA a través del proveedor de identidad.

Consulte el siguiente diagrama para ver cómo funciona el flujo de MFA para correo electrónico o SMS.

Flujo de " caption-side="bottom"} de MFA de{: caption="Directory*

  1. Cuando un usuario inicia sesión correctamente en la aplicación, se completa el primer factor de autenticación. A continuación, basándose en la configuración de MFA, el usuario se envía al usuario un correo electrónico o un SMS que contiene un código de 6 dígitos.

    Cuando se habilita MFA, el widget de inicio de sesión de App ID requiere una segunda forma de verificación cada vez que un usuario intente iniciar sesión, a menos que se haya configurado una extensión.

  2. Se espera que un usuario busque en el móvil o en el correo electrónico para conseguir el código y especificarlo seguidamente en la pantalla proporcionada.

  3. Si el código que se introduce coincide con el código que se ha enviado, el usuario se vuelve a redirigir a la aplicación e inicia sesión. Si se especifica el código de forma incorrecta, el segundo factor de autenticación falla y los usuarios no podrán acceder a los recursos.

Si la verificación por correo electrónico no está configurada, App ID valida el canal de MFA en segundo plano. Por ejemplo, si configura el canal de correo electrónico para MFA y no configura la verificación de correo electrónico,App ID valida el correo electrónico en el primer inicio de sesión correcto de MFA. Sin embargo, si configura el canal de SMS, App ID valida el número de teléfono del usuario en el primer inicio de sesión correcto. Si está utilizando el canal SMS y quiere que se valide el correo electrónico, asegúrese de habilitar la verificación por correo electrónico.

Configuración de un canal de correo electrónico

Puede configurar App ID para enviar el código de MFA a los usuarios a través del correo electrónico.

Cuando habilita la MFA por primera vez, ocurre lo siguiente:

  • De forma predeterminada, el canal de correo electrónico está seleccionado. Puede cambiarlo al canal de SMS.
  • App ID registra automáticamente el correo electrónico primario que está conectado al perfil del usuario del directorio en la nube.

Si el correo electrónico de un usuario aún no está confirmado, a través de las API de gestión o mediante la verificación por correo electrónico cuando se registra, se confirma cuando verifica satisfactoriamente un código de MFA.

La primera vez que se habilita la MFA, se establece para que utilice el correo electrónico de forma predeterminada. Puede cambiar el valor para que utilice SMS, pero no puede configurar ambos al mismo tiempo.

Con la GUI

Puede configurar el canal de correo electrónico de MFA a través de la GUI.

  1. Vaya al separador Directorio en la nube > Autenticación de multifactores del panel de control de App ID.

  2. En el recuadro Habilitar autenticación de multifactores, en el separador de valores, cambie la MFA a Habilitada. Acepte que comprende que la MFA se carga como suceso de seguridad avanzada. De forma predeterminada, se selecciona Correo electrónico como el Método de autenticación.

  3. En el separador Canal de correo electrónico, revise la Plantilla de correo electrónico. Puede optar por enviar la plantilla con el texto proporcionado o escribir su propio mensaje. Asegúrese de utilizar el etiquetado HTML correcto. En la consola, puede añadir parámetros e insertar imágenes. Para cambiar el idioma del mensaje, puede utilizar las API para establecer el idioma. Sin embargo, usted es el responsable del contenido y la conversión del mensaje. Consulte la tabla siguiente para ver la lista de tablas que puede utilizar en este mensaje y todos los demás mensajes que puede enviar. Si un usuario no proporciona la información que extrae el parámetro, aparecerá en blanco.

    Parámetros del mensaje AMF
    Parámetro Descripción
    %{display.logo} Muestra la imagen que ha configurado para su widget de inicio de sesión.
    %{user.displayName} Muestra el nombre de pantalla que elige un usuario para utilizar al interactuar con la app.
    %{user.email} Muestra la dirección de correo electrónico registrada del usuario.
    %{user.username} Muestra el nombre de usuario especificado del usuario cuando el método de autenticación se establece en nombre de usuario y contraseña.
    %{user.firstName} Muestra el nombre especificado del usuario.
    %{user.formattedName} Muestra el nombre completo del usuario.
    %{user.lastName} Muestra el apellido especificado del usuario.
    %{mfa.code} Muestra un código de verificación MFA de un único uso.

    Si un usuario no proporciona la información que extrae el parámetro, aparecerá en blanco.

Con las API

Asegúrese de que tiene los requisitos previos siguientes:

  • El ID de arrendatario de la instancia de App ID. Lo encontrará en la sección Credenciales de servicio del panel de control.
  • La señal Gestión de identidad y acceso (IAM). Si necesita ayuda para obtener la señal de IAM, consulte los documentos de IAM.

Para habilitar MFA:

  1. Puede habilitar la MFA realizando una solicitud PUT en el punto final /config/cloud_directory/mfa con la configuración de MFA para establecer isActive to true.

    curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa \
       --header 'Content-Type: application/json' \
       --header 'Accept: application/json' \
       --header 'Authorization: Bearer <IAMToken>' \
       -d '"isActive": true'
    
  2. Habilite su canal MFA haciendo una petición PUT al endpoint /mfa/channels/<channel> con su configuración MFA. Cuando isActive se establece en true, se habilita el canal de MFA.

    $ curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/mfa/channels/email \
       --header 'Content-Type: application/json' \
       --header 'Accept: application/json' \
       --header 'Authorization: Bearer <IAMToken>' \
       -d '"isActive": true'
    

Si la instancia de App ID Cloud Directory se ha configurado para que funcione con un remitente de correo electrónico personalizado, la MFA utiliza el mismo remitente para entregar el código de un solo uso. Para obtener más información, consulte la Documentación de Cloud Directory.

Configuración de un canal de SMS

Puede enviar un mensaje SMS a los usuarios como segunda forma de verificación. Cuando se activa SMS, App ID intenta registrar automáticamente el primer número de teléfono principal válido que se encuentra en el perfil de un usuario de Cloud Directory. Si el número no es válido o no hay ningún número de teléfono en el perfil del usuario, aparece un widget de registro para que el usuario añada un número. A continuación, el número forma parte del perfil del usuario y después de la validación, se convierte en el número predeterminado que se utiliza para la MFA.

La primera vez que se habilita MFA, se establece para que utilice el correo electrónico de forma predeterminada. Puede cambiar el valor para que utilice SMS, pero no puede configurar ambos al mismo tiempo.

Antes de empezar

App ID utiliza Vonage (antes Nexmo) para enviar códigos de un solo uso MFA SMS.

  • Obtenga el secreto y la clave de API de Vonage. Puede encontrarlos en la página de configuración de la cuenta en el panel de control de Vonage. Consulta la documentación de Vonage para obtener más información sobre cómo obtener tus credenciales.

  • Registre el ID del remitente o el número from con Vonage. Este número from es lo que aparece en el teléfono del usuario para mostrar de quién es el SMS. En algunos países, Vonage da soporte a los ID de remitente alfanuméricos. App ID utiliza el valor que especifique como ID de remitente de Vonage. Por lo tanto, si Vonage los admite, puede utilizar los ID con App ID.

Con la GUI

Para configurar la MFA mediante la GUI, consulte el Directorio en la nube.

  1. Vaya al separador Directorio en la nube > Autenticación de multifactores del panel de control de App ID.

  2. En el recuadro Habilitar autenticación de multifactores, en el separador de valores, cambie la MFA a Habilitada. Acepte que comprende que la MFA se carga como suceso de seguridad avanzada.

  3. Seleccione SMS como Método de autenticación.

  4. En el separador Canal SMS configure la información de la cuenta de Vonage.

    1. Si todavía no tiene una cuenta con Vonage, cree una.

    2. En el panel de control de Vonage, pulse SMS.

    3. En la sección Cree su propio código, copie la clave de API y péguela en el recuadro clave en el panel de control de App ID.

    4. Copie el secreto de API en el panel de control de Vonage y péguelo en el recuadro Secreto en el panel de control de App ID.

    5. Introduzca el ID desde el que desea enviar mensajes. Un formato de número válido sigue el formato de numeración internacional E.164. Por ejemplo, un número estadounidense tiene la forma +19998887777. Debe especificar el código de país, empezando con el símbolo + y el número nacional del suscriptor. En algunos países, Vonage da soporte a los ID de remitente alfanuméricos. App ID utiliza el valor que especifique como ID de remitente de Vonage. Por lo tanto, si Vonage los admite, puede utilizar los ID con App ID.

Con las API

Antes de empezar con la API, asegúrese de cumplir los siguientes requisitos previos:

  • El ID de arrendatario de la instancia de App ID. Lo encontrará en la sección Credenciales de servicio del panel de control.
  • La señal Gestión de identidad y acceso (IAM). Si necesita ayuda para obtener la señal de IAM, consulte los documentos de IAM.
  1. Puede habilitar la MFA realizando una solicitud PUT en el punto final /config/cloud_directory/mfa con la configuración de MFA para establecer isActive to true.

    curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer <IAMToken>' \
    -d '{"isActive": true}'
    
  2. Habilite su canal MFA haciendo una petición PUT al endpoint /mfa/channels/<channel> con su configuración MFA. Cuando isActive se establece en true, se habilita el canal de MFA. La config incorpora la clave y el secreto de la API de Nexmo, así como el número from.

    curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/mfa/channels/nexmo' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer <IAMToken>' \
    -d '{
       "isActive": true,
       "config": {
          "key": "<nexmoKey>",
          "secret": "<nexmoSecret>",
          "from": <senderPhoneNumber>
       }
    }'
    
  3. Una vez configurado correctamente el canal, compruebe que la configuración y la conexión de Nexmo se han establecido correctamente mediante el botón de prueba de la consola o mediante la API de gestión.

    curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/sms_dispatcher/test \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer <IAMToken>' \
    -d '{"phone_number": "+1 999 999 9999"}'
    

Extensión de MFA

Con las extensiones, puede hacerse con la seguridad de la autenticación de multifactores para el siguiente nivel. Al tomar decisiones sobre quien debe proporcionar una segunda forma de autenticación, el usuario puede proporcionar una experiencia más personal de su app a sus usuarios. También puede utilizar las extensiones para auditar los comportamientos de MFA como, por ejemplo, el número de segundas autenticaciones de forma.

Antes de empezar

Antes de registrar su extensión, asegúrese de que dispone de los siguientes requisitos previos:

  • El ID de arrendatario de la instancia de App ID. Lo encontrará en la sección Aplicaciones del panel de control.
  • La señal Gestión de identidad y acceso (IAM). Si necesita ayuda para obtener la señal de IAM, consulte los documentos de IAM.

Para obtener más información sobre las restricciones y las limitaciones de trabajar con extensiones, consulte Límites de App ID.

Configuración previa a MFA

Con una extensión previa a MFA, puede definir los criterios que permiten que los usuarios no tengan que especificar una segunda forma de autenticación cuando se interactúa con la aplicación.

flujo " caption-side="bottom"} pre-MFA de{: caption="Directory*

  1. Cuando un usuario inicia sesión correctamente en la aplicación, App ID envía una solicitud POST a la extensión.
  2. La extensión utiliza la información de la solicitud POST para determinar si ese usuario en particular puede omitir el requisito del segundo factor de autenticación basándose en los criterios que se hayan definido.
  3. La configuración devuelve una respuesta de JSON a App ID que tiene un aspecto similar a {'skipMfa': true}.
  4. En función de la respuesta de su configuración, App ID continúa con el flujo de MFA u otorga acceso a su aplicación.

De forma predeterminada, si se produce un error durante la solicitud al punto de extensión, App ID requiere que el usuario complete la MFA.

Para configurar una extensión previa a MFA:

  1. Defina los criterios que desee que el usuario cumpla antes de que se pueda pasar al segundo factor de autenticación. Consulte los siguientes ejemplos para obtener ideas si no está seguro.

    Ejemplo de criterios para saltarse el AMF
    Ejemplo de caso de uso Ejemplo de validación
    Desea que los usuarios proporcionen un segundo factor de autenticación solamente una vez al día. Configure su extensión para validar que el valor last_successful_first_factor esté dentro del mismo día.
    Tiene una lista de usuarios aprobados permitidos que no necesitan proporcionar el segundo factor cada vez. Configure la extensión para validar que username o user_id está en la lista de elementos permitidos.
    No desea que los usuarios accedan a la app en un escritorio para proporcionar el segundo factor cada vez. Configure la extensión para validar que el valor device_type se haya establecido en web.
  2. Cuando conozca los criterios, configure una extensión que pueda escuchar una solicitud POST. El punto final debe poder leer la carga útil que procede de App ID. El cuerpo que envía App ID antes de que se inicie el flujo MFA tiene el formato: {"jws": "jws-format-string"}. La extensión también puede decodificar y validar la carga útil, el contenido es un objeto JSON y devuelve una respuesta JSON con el esquema siguiente: {"skipMfa": Boolean }. Por ejemplo, {'skipMfa': true}.

    La información que App ID reenvía a su punto de extensión.
    Información Descripción
    correlation_id Un número aleatorio que se ha generado para cada sesión de MFA. Si tiene una extensión previa a MFA y una extensión posterior a MFA, el número es el mismo para cada uno de la misma sesión. Por ejemplo, 3bb9236c-792f-4cca-8ae1-ada754cc4555.
    extension El nombre de su extensión. En este caso de uso, la extensión se denomina premfa.
    device_type El tipo de dispositivo con el que el usuario está accediendo a la aplicación. Las opciones son: web y mobile.
    source_ip La dirección IP del dispositivo que realiza la solicitud a la app. Por ejemplo, 127.0.0.1.
    headers La información que devuelve el navegador cuando un usuario intenta iniciar la sesión en la app. La cabecera se parece a la siguiente: {"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0"}.
    tenant_id El ID de arrendatario de la aplicación.
    client_id El ID de cliente de la aplicación.
    user_id El ID del usuario que realiza la solicitud de autenticación. Por ejemplo, 11112222-3333-4444-2222-555522226666.
    username El nombre de usuario del usuario que realiza la solicitud de autenticación. Por ejemplo, testuser@email.com.
    application_type El tipo de aplicación. Por ejemplo, si la aplicación es una app web JavaScript de una sola página, se devuelve browserapp. Las opciones incluyen: browserapp, serverapp y mobileapp.
    first_name El nombre proporcionado por el usuario.
    last_name El apellido del usuario.
    last_successful_first_factor La fecha de la última vez que el usuario introdujo correctamente sus credenciales. Por ejemplo, 1660032586651.
    last_successful_mfa La fecha de la última vez que el usuario completó todo el flujo de MFA. Por ejemplo, 1660032586651.

    Para ver un ejemplo de ampliación, consulte la muestra.

  3. Registre su extensión con su instancia de App ID efectuando una solicitud PUT a config/cloud_directory/mfa/extensions/premfa. La configuración incluye el URL de su extensión y cualquier información de autorización necesaria para acceder al punto final. A efectos de desarrollo, isActive se establece en false. Asegúrese de probar la configuración antes de habilitarla.

    curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa/extensions/premfa' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer <IAMToken>' \
    -d '{
       "isActive": false,
       "config": {
          "url": "<extensionsURL>",
          "headers": {
                "Authorization": "<customExtensionAuthorizationHeader>"
             }
       }
    }'
    

    Se recomienda encarecidamente que se utilice siempre HTTPS en lugar de HTTP para extensions_URL con el fin de garantizar que su conexión esté cifrada.

  4. Una vez que la extensión se haya configurado correctamente, verifique que el punto final funciona correctamente utilizando la API de prueba. App ID realiza una solicitud POST a la extensión configurada con los valores de ejemplo.

    curl -X POST https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa/extensions/premfa/test \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer <IAMToken>'
    
  5. Habilite la extensión realizando una solicitud PUT que establezca isActive en true.

    curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa/extensions/premfa \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer <IAMToken>' \
    -d '{"isActive": true}'
    

    Para inhabilitar la extensión, establezca isActive en false.

Configuración posterior a MFA

Cuando configura una extensión y la registra con App ID, el servicio llama a la extensión después de cada intento de autenticación en el que está presente un segundo factor de identificación. Puede utilizar esa información para tomar mejores decisiones para los usuarios. Por ejemplo, puede utilizar la información de recopilación de la extensión posterior a MFA para la heurística y las reglas y, a continuación, imponerlas utilizando la extensión previa a MFA.

flujo " caption-side="bottom"} post-MFA de{: caption="Directory*

  1. Cuando un usuario inicia sesión correctamente en la aplicación, se solicita que especifique el segundo factor de autenticación.

  2. Cuando se haya completado el segundo factor de autenticación, se producen dos acciones simultáneas:

    1. App ID envía información sobre el inicio de sesión en la extensión configurada.

    2. El usuario se redirige a la aplicación.

Para configurar una extensión posterior a MFA:

  1. Configure un punto de extensión que pueda escuchar una solicitud POST. El punto final debe poder leer la carga útil que envía App ID. Opcionalmente, también se puede descodificar y validar la carga útil de JSON que devuelve App ID y que ningún tercero ha modificado en modo alguno. Se devuelve una serie que tiene el formato {"jws": "jws-format-string"} y que contiene la información siguiente:

    La información que App ID reenvía a su punto de extensión.
    Información Descripción
    correlation_id Un número aleatorio que se ha generado para cada sesión de MFA. Si tiene una extensión previa a MFA y una extensión posterior a MFA, el número es el mismo para cada una. Por ejemplo, 3bb9236c-792f-4cca-8ae1-ada754cc4555.
    extension El nombre de su extensión. En este caso de uso, la extensión se denomina postmfa.
    status El estado de MFA. Las opciones son: success y failed.
    reason La razón de un error de MFA. Por ejemplo, user locked out - exceeded maximum number of verification attempts.
    device_type El tipo de dispositivo con el que el usuario accede a la aplicación. Las opciones incluyen: web, mobile.
    source_ip La dirección IP del dispositivo que realiza la solicitud a la app. Por ejemplo, 127.0.0.1.
    headers La información que devuelve el navegador cuando un usuario intenta iniciar la sesión en la app. La cabecera se parece a la siguiente: {"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0"}.
    tenant_id El ID de arrendatario de la aplicación.
    client_id El ID de cliente de la aplicación.
    user_id El ID del usuario que realiza la solicitud de autenticación.
    username El nombre de usuario del usuario que realiza la solicitud de autenticación. Por ejemplo, testuser@email.com.
    application_type El tipo de aplicación. Por ejemplo, si la aplicación es una app web JavaScript de una sola página, se devuelve browserapp. Las opciones incluyen: browserapp, serverapp y mobileapp.
    first_name El nombre proporcionado por el usuario.
    last_name El apellido del usuario.
  2. Registre su extensión con su instancia de App ID efectuando una solicitud PUT a config/cloud_directory/mfa/extensions/postmfa. La configuración incluye el URL de su extensión y cualquier información de autorización necesaria para acceder al punto final. A efectos de desarrollo, isActive se establece en false. Asegúrese de probar la configuración antes de habilitarla.

    curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa/extensions/postmfa' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer <IAMToken>' \
    -d '{
       "isActive": false,
       "config": {
          "url": "<extensionsURL>",
          "headers": {
                "Authorization": "<customExtensionAuthorizationHeader>"
             }
       }
    }'
    

    Se recomienda encarecidamente que se utilice siempre HTTPS en lugar de HTTP para extensions_URL con el fin de garantizar que su conexión esté cifrada.

  3. Una vez que la extensión se haya configurado correctamente, verifique que el punto final funciona correctamente utilizando la API de prueba. App ID realiza una solicitud POST a la extensión configurada con los valores de ejemplo.

    curl -X POST https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa/extensions/postmfa/test \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer <IAMToken>'
    
  4. Habilite la extensión estableciendo isActive en true.

    curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa/extensions/postmfa \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer <IAMToken>' \
    -d '{"isActive": true}'
    

    Para inhabilitar la extensión, establezca isActive en false.