Adición de un flujo de trabajo de aprobaciones personalizado al registro de autoservicio

Con conectores de API, puede realizar la integración con sus propios flujos de trabajo de aprobaciones personalizados con el registro de autoservicio, para que pueda administrar qué cuentas de usuario invitado se crean en el inquilino.

En este artículo se proporciona un ejemplo de cómo realizar la integración con un sistema de aprobación. En este ejemplo, el flujo de usuario de registro de autoservicio recopila datos de usuario durante el proceso de registro y los pasa al sistema de aprobación. Después, el sistema de aprobación puede:

  • Aprobar automáticamente el usuario y permitir que Microsoft Entra ID cree la cuenta de usuario.
  • Desencadenar una revisión manual. Si se aprueba la solicitud, el sistema de aprobación utiliza Microsoft Graph para aprovisionar la cuenta de usuario. El sistema de aprobación también puede notificar al usuario que se ha creado su cuenta.

Importante

Registro de una aplicación para el sistema de aprobación

Sugerencia

Los pasos de este artículo pueden variar ligeramente en función del portal desde donde comienza.

Debe registrar el sistema de aprobación como una aplicación en el inquilino de Microsoft Entra para que pueda autenticarse en Microsoft Entra ID y tener permiso para crear usuarios. Obtenga más información en Aspectos básicos de autorización y autenticación de Microsoft Graph.

  1. Inicie sesión en el Centro de administración de Microsoft Entra al menos como Administrador de usuario.
  2. Vaya a Identidad>Aplicaciones>Registros de aplicaciones y, a continuación, seleccione Nuevo registro.
  3. Escriba un Nombre para la aplicación; por ejemplo, Sign-up Approvals.
  4. Seleccione Registrar. Puede dejar todos los demás campos con sus valores predeterminados.

Captura de pantalla en la que se resalta el botón Registrar.

  1. En Administrar, en el menú de la izquierda, seleccione Permisos de API y, después, Agregar un permiso.
  2. En la página Solicitud de permisos de API, seleccione Microsoft Graph y, después, Permisos de la aplicación.
  3. En Seleccionar permisos, expanda Usuario y, después, seleccione la casilla User.ReadWrite.All. Este permiso permite al sistema de aprobación crear el usuario tras su aprobación. Seleccione Agregar permisos.

Captura de pantalla de la solicitud de permisos de API.

  1. En la página Permisos de API, seleccione Conceder consentimiento de administrador para (nombre del inquilino) y, después, seleccione .
  2. En Administrar, en el menú de la izquierda, seleccione Certificados y secretos y luego Nuevo secreto de cliente.
  3. Escriba una Descripción para el secreto, por ejemplo, Secreto de cliente de aprobaciones y seleccione la duración para la Expiración del secreto de cliente. A continuación, seleccione Agregar.
  4. Copie el valor del secreto de cliente. Los valores de secreto de cliente se pueden ver solo inmediatamente después de la creación. Asegúrese de guardar el secreto cuando lo cree antes de salir de la página.

Captura de pantalla de la copia del secreto de cliente.

  1. Configure el sistema de aprobación para usar el Id. de la aplicación como el identificador de cliente y el secreto de cliente generado para autenticarse en Microsoft Entra ID.

Creación de los conectores de API

A continuación, creará los conectores de API para el flujo de usuario de registro de autoservicio. La API del sistema de aprobación necesita dos conectores y los puntos de conexión correspondientes, como los ejemplos que se muestran a continuación. Estos conectores de API hacen lo siguiente:

  • Comprobar el estado de aprobación. Enviar una llamada al sistema de aprobación inmediatamente después de que un usuario inicie sesión con un proveedor de identidades, para comprobar si el usuario tiene una solicitud de aprobación existente o si ya se ha denegado. Si el sistema de aprobación solo toma decisiones de aprobación automáticas, es posible que este conector de API no sea necesario. Ejemplo de un conector de API "Check approval status".

Captura de pantalla de la configuración del conector de la API de verificación del estado de aprobación.

  • Solicitar aprobación. Enviar una llamada al sistema de aprobación después de que un usuario complete la página de la colección de atributos, pero antes de que se cree la cuenta de usuario, para solicitar la aprobación. La solicitud de aprobación se puede conceder automáticamente o revisar de forma manual. Ejemplo de un conector de API "Request approval".

Captura de pantalla de la configuración del conector de la API de verificación del estado de aprobación.

Para crear estos conectores, siga los pasos descritos en Creación de un conector de API.

Habilitación de los conectores de API en un flujo de usuario

Ahora, agregará los conectores de API a un flujo de usuario de registro de autoservicio con estos pasos:

  1. Inicie sesión en el Centro de administración de Microsoft Entra al menos como Administrador de usuario.

  2. Vaya a Identidad>Identidades externas>Flujos de usuario y, a continuación, seleccione el flujo de usuario para el que desea habilitar el conector de API.

  3. Seleccione Conectores de API y, después, seleccione los puntos de conexión de API que desea invocar en los pasos siguientes del flujo de usuario:

    • Después de iniciar sesión con un proveedor de identidades durante el registro, seleccione el conector de API del estado de aprobación; por ejemplo, Comprobar el estado de aprobación.
    • Antes de crear el usuario: seleccione el conector de API de solicitud de aprobación; por ejemplo, Request approval.

Captura de pantalla del conector API en un flujo de usuario.

  1. Seleccione Guardar.

Control del flujo de registro con respuestas de API

El sistema de aprobación puede usar sus respuestas cuando se llama para controlar el flujo de registro.

Solicitud y respuestas del conector de API "Check approval status"

Ejemplo de la solicitud recibida por la API desde el conector de API "Check approval status":

POST <API-endpoint>
Content-type: application/json

{
 "email": "johnsmith@fabrikam.onmicrosoft.com",
 "identities": [ //Sent for Google, Facebook, and Email One Time Passcode identity providers 
     {
     "signInType":"federated",
     "issuer":"facebook.com",
     "issuerAssignedId":"0123456789"
     }
 ],
 "displayName": "John Smith",
 "givenName":"John",
 "lastName":"Smith",
 "ui_locales":"en-US"
}

Las notificaciones exactas enviadas a la API dependen de la información proporcionada por el proveedor de identidades. Siempre se envía "email".

Respuesta de continuación para "Check approval status"

El punto de conexión de la API Check approval status debe devolver una respuesta de continuación si:

  • El usuario no ha solicitado previamente una aprobación.

Ejemplo de la respuesta de continuación:

HTTP/1.1 200 OK
Content-type: application/json

{
    "version": "1.0.0",
    "action": "Continue"
}

Respuesta de bloqueo para "Check approval status"

El punto de conexión de la API Check approval status debe devolver una respuesta de bloqueo si:

  • La aprobación del usuario está pendiente.
  • Se denegó el usuario y no se le debería permitir volver a solicitar la aprobación.

Estos son ejemplos de respuestas de bloqueo:

HTTP/1.1 200 OK
Content-type: application/json

{
    "version": "1.0.0",
    "action": "ShowBlockPage",
    "userMessage": "Your access request is already processing. You'll be notified when your request has been approved.",
}
HTTP/1.1 200 OK
Content-type: application/json

{
    "version": "1.0.0",
    "action": "ShowBlockPage",
    "userMessage": "Your sign up request has been denied. Please contact an administrator if you believe this is an error",
}

Solicitud y respuestas del conector de API "Request approval"

Ejemplo de una solicitud HTTP recibida por la API desde el conector de API "Request approval":

POST <API-endpoint>
Content-type: application/json

{
 "email": "johnsmith@fabrikam.onmicrosoft.com",
 "identities": [ // Sent for Google, Facebook, and Email One Time Passcode identity providers 
     {
     "signInType":"federated",
     "issuer":"facebook.com",
     "issuerAssignedId":"0123456789"
     }
 ],
 "displayName": "John Smith",
 "givenName":"John",
 "surname":"Smith",
 "jobTitle":"Supplier",
 "streetAddress":"1000 Microsoft Way",
 "city":"Seattle",
 "postalCode": "12345",
 "state":"Washington",
 "country":"United States",
 "extension_<extensions-app-id>_CustomAttribute1": "custom attribute value",
 "extension_<extensions-app-id>_CustomAttribute2": "custom attribute value",
 "ui_locales":"en-US"
}

Las notificaciones exactas enviadas a la API dependen de la información recopilada por el usuario o proporcionada por el proveedor de identidades.

Respuesta de continuación para "Request approval"

El punto de conexión de la API Request approval debe devolver una respuesta de continuación si:

  • El usuario se puede aprobar automáticamente.

Ejemplo de la respuesta de continuación:

HTTP/1.1 200 OK
Content-type: application/json

{
    "version": "1.0.0",
    "action": "Continue"
}

Importante

Si se recibe una respuesta de continuación, Microsoft Entra ID crea una cuenta de usuario y dirige al usuario a la aplicación.

Respuesta de bloqueo para "Request approval"

El punto de conexión de la API Request approval debe devolver una respuesta de bloqueo si:

  • Se ha creado una solicitud de aprobación de usuario y está pendiente.
  • Se denegó automáticamente una solicitud de aprobación de usuario.

Estos son ejemplos de respuestas de bloqueo:

HTTP/1.1 200 OK
Content-type: application/json

{
    "version": "1.0.0",
    "action": "ShowBlockPage",
    "userMessage": "Your account is now waiting for approval. You'll be notified when your request has been approved.",
}
HTTP/1.1 200 OK
Content-type: application/json

{
    "version": "1.0.0",
    "action": "ShowBlockPage",
    "userMessage": "Your sign up request has been denied. Please contact an administrator if you believe this is an error",
}

El valor userMessage se muestra al usuario en la respuesta; por ejemplo:

Ejemplo de página de aprobación pendiente

Creación de cuentas de usuario después de la aprobación manual

Una vez que el sistema de aprobación personalizado obtiene la aprobación manual, crea una cuenta de usuario mediante Microsoft Graph. La forma en que el sistema de aprobación aprovisiona la cuenta de usuario depende del proveedor de identidades que el usuario utiliza.

Para un usuario federado de Google o Facebook y un código de acceso de un solo uso obtenido por correo electrónico

Importante

El sistema de aprobación debe comprobar explícitamente que identities, identities[0] y identities[0].issuer existen y que identities[0].issuer es igual a "facebook", "google" o "mail" para usar este método.

Si el usuario ha iniciado sesión con una cuenta de Google o Facebook o un código de acceso de un solo uso obtenido por correo electrónico, puede usar la API de creación de usuarios.

  1. El sistema de aprobación recibe la solicitud HTTP del flujo de usuario.
POST <Approvals-API-endpoint>
Content-type: application/json

{
 "email": "johnsmith@outlook.com",
 "identities": [
     {
     "signInType":"federated",
     "issuer":"facebook.com",
     "issuerAssignedId":"0123456789"
     }
 ],
 "displayName": "John Smith",
 "city": "Redmond",
 "extension_<extensions-app-id>_CustomAttribute": "custom attribute value",
 "ui_locales":"en-US"
}
  1. El sistema de aprobación utiliza Microsoft Graph para crear una cuenta de usuario.
POST https://graph.microsoft.com/v1.0/users
Content-type: application/json

{
 "userPrincipalName": "johnsmith_outlook.com#EXT@contoso.onmicrosoft.com",
 "accountEnabled": true,
 "mail": "johnsmith@outlook.com",
 "userType": "Guest",
 "identities": [
     {
     "signInType":"federated",
     "issuer":"facebook.com",
     "issuerAssignedId":"0123456789"
     }
 ],
 "displayName": "John Smith",
 "city": "Redmond",
 "extension_<extensions-app-id>_CustomAttribute": "custom attribute value"
}
Parámetro Obligatorio Descripción
userPrincipalName Se puede generar con la utilización de la notificación email enviada a la API, la sustitución del carácter @ por _ y anteponiéndolo a #EXT@<tenant-name>.onmicrosoft.com.
accountEnabled Se debe establecer en true.
mail Equivalente a la notificación email enviada a la API.
userType Debe ser Guest. Designa a este usuario como un usuario invitado.
Identidades Información de la identidad federada.
<otherBuiltInAttribute> No Otros atributos integrados, como displayName, city y otros. Los nombres de los parámetros son los mismos que los que envía el conector de API.
<extension_{extensions-app-id}_CustomAttribute> No Atributos personalizados sobre el usuario. Los nombres de los parámetros son los mismos que los que envía el conector de API.

Para un usuario federado de Microsoft Entra o de la cuenta de Microsoft

Si un usuario inicia sesión con una cuenta federada de Microsoft Entra o una cuenta de Microsoft, debe usar la API de invitación para crear el usuario y, opcionalmente, la API de actualización de usuarios para asignar más atributos al usuario.

  1. El sistema de aprobación recibe la solicitud HTTP del flujo de usuario.
POST <Approvals-API-endpoint>
Content-type: application/json

{
 "email": "johnsmith@fabrikam.onmicrosoft.com",
 "displayName": "John Smith",
 "city": "Redmond",
 "extension_<extensions-app-id>_CustomAttribute": "custom attribute value",
 "ui_locales":"en-US"
}
  1. El sistema de aprobación crea la invitación mediante el atributo email proporcionado por el conector de API.
POST https://graph.microsoft.com/v1.0/invitations
Content-type: application/json

{
    "invitedUserEmailAddress": "johnsmith@fabrikam.onmicrosoft.com",
    "inviteRedirectUrl" : "https://myapp.com"
}

Ejemplo de la respuesta:

HTTP/1.1 201 OK
Content-type: application/json

{
    ...
    "invitedUser": {
        "id": "<generated-user-guid>"
    }
}
  1. El sistema de aprobación usa el identificador del usuario invitado para actualizar la cuenta del usuario con los atributos de usuario recopilados (opcional).
PATCH https://graph.microsoft.com/v1.0/users/<generated-user-guid>
Content-type: application/json

{
    "displayName": "John Smith",
    "city": "Redmond",
    "extension_<extensions-app-id>_AttributeName": "custom attribute value"
}

Pasos siguientes