Compartir a través de


Creación de una extensión de autenticación personalizada para el inicio y envío de eventos de recopilación de atributos (versión preliminar)

Se aplica a:Círculo blanco con un símbolo X gris. inquilinos de personal Círculo verde con un símbolo de marca de verificación blanca. inquilinos externos (más información)

En este artículo se describe cómo ampliar la experiencia de registro de usuario en la Id. externa de Microsoft Entra para los clientes. En los flujos de usuario de registro de clientes, los agentes de escucha de eventos se pueden usar para ampliar el proceso de colección de atributos antes de la colección de atributos y en el momento del envío de atributos:

  • El evento OnAttributeCollectionStart se produce al principio del paso de colección de atributos, antes de que se represente la página de colección de atributos. Puede agregar acciones como prerrellenar valores y mostrar un error de bloqueo.

    Sugerencia

    Pruébelo ya

    Para probar esta característica, vaya a la demostración de Woodgrove Groceries e inicie el caso de uso "Relleno previo de atributos de registro".

  • El evento OnAttributeCollectionSubmit se produce después de que el usuario escriba y envíe atributos. Puede agregar acciones como validar o modificar las entradas del usuario.

    Sugerencia

    Pruébelo ya

    Para probar esta característica, vaya a la demostración de Woodgrove Groceries e inicie el caso de uso "Validar atributos de registro" o "Impedir que un usuario continúe con el proceso de registro".

Además de crear una extensión de autenticación personalizada para el inicio y envío de eventos de la colección de atributos, debe crear una API de REST que defina las acciones de flujo de trabajo que se deben realizar para cada evento. Puede usar cualquier lenguaje de programación, marco y entorno de hospedaje para crear y hospedar la API de REST. En este artículo se muestra una manera rápida de empezar a usar una función de Azure de C#. Con Azure Functions puede ejecutar el código en un entorno sin servidor sin necesidad de crear una máquina virtual (VM) ni publicar una aplicación web.

Requisitos previos

Paso 1: Creación de una API de REST de extensiones de autenticación personalizadas (aplicación de funciones de Azure)

Sugerencia

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

En este paso, creará una API de función de desencadenador HTTP mediante Azure Functions. La API de función es el origen de la lógica de negocios para los flujos de usuario. Después de crear la función de desencadenador, puede configurarla para cualquiera de los siguientes eventos:

  1. Inicie sesión en Azure Portal con su cuenta de administrador.

  2. En el menú de Azure Portal o en la página Principal, seleccione Crear un recurso.

  3. Busque y seleccione Aplicación de funciones y seleccione Crear.

  4. En la página Básico, utilice la configuración de la aplicación de funciones como se especifica en la tabla siguiente:

    Configuración Valor sugerido Descripción
    Suscripción Su suscripción La suscripción en la que se creará la nueva aplicación de funciones.
    Grupo de recursos myResourceGroup Seleccione un grupo de recursos actual o proporcione el nombre para uno nuevo donde creará la aplicación de funciones.
    Nombre de la aplicación de función Nombre único globalmente Nombre que identifica la nueva aplicación de funciones. Los caracteres válidos son a-z (no distingue mayúsculas de minúsculas), 0-9 y -.
    Publicar Código Opción para publicar archivos de código o un contenedor de Docker. Para este tutorial, seleccione Code.
    Pila en tiempo de ejecución .NET Lenguaje de programación que prefiere. Para este tutorial, seleccione .NET.
    Versión 6 (LTS) en curso Versión del entorno de ejecución de .NET. En curso indica que puede crear y modificar funciones en el portal, algo que se recomienda para esta guía.
    Región Región preferida Seleccione una región próxima a usted o a otros servicios a los que accedan las funciones.
    Sistema operativo Windows El sistema operativo se preselecciona según la selección de la pila en tiempo de ejecución.
    Tipo de plan Consumo (sin servidor) Plan de hospedaje que define cómo se asignan los recursos a la Function App.
  5. Seleccione Revisar y crear para revisar la configuración seleccionada para la aplicación y elija Crear. La implementación tarda unos minutos.

  6. Una vez implementado, seleccione Ir al recurso para ver la nueva aplicación de funciones.

1.1 Creación de funciones de desencadenador HTTP

Ahora que ha creado la aplicación de funciones de Azure, creará funciones de desencadenador HTTP para las acciones que desea invocar con una solicitud HTTP. Se hace referencia a los desencadenadores HTTP y los llama la extensión de autenticación personalizada de Microsoft Entra.

  1. En la página Información general de la aplicación de funciones, seleccione el panel Funciones y seleccione Crear función en Crear en Azure Portal.
  2. En la ventana Crear función, mantenga la propiedad Entorno de desarrollo como Desarrollo en el portal. En Plantilla, seleccione Desencadenador HTTP.
  3. En Detalles de la plantilla, escriba CustomAuthenticationExtensionsAPI para la propiedad Nueva función.
  4. En Nivel de autorización, seleccione Función.
  5. Seleccione Crear.

1.2 Configuración del desencadenador HTTP para OnAttributeCollectionStart

  1. En el menú, seleccione Código y prueba.
  2. Seleccione la pestaña siguiente para el escenario que desea implementar: Continuar, Bloquearo SetPrefillValues. Reemplace el código por los fragmentos de código proporcionados.
  3. Después de reemplazar el código, en el menú superior, seleccione Obtener dirección URL de función y copie la dirección URL. Use esta dirección URL en el Paso 2: Crear y registrar una extensión de autenticación personalizada para la Dirección URL de destino.

Use este desencadenador HTTP para permitir que el usuario continúe con el flujo de registro si no se necesita ninguna acción adicional.

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System.Text;

public static async Task<object> Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic request = JsonConvert.DeserializeObject(requestBody);


    var actions = new List<ContinueWithDefaultBehavior>{
        new ContinueWithDefaultBehavior { type = "microsoft.graph.attributeCollectionStart.continueWithDefaultBehavior"}
    };

    var dataObject = new Data {
        type = "microsoft.graph.onAttributeCollectionStartResponseData",
        actions= actions
    };

    dynamic response = new ResponseObject {
        data = dataObject
    };

    // Send the response
    return response;
}

public class ResponseObject
{
    public Data data { get; set; }
}

[JsonObject]
public class Data {
    [JsonProperty("@odata.type")]
    public string type { get; set; }
    public List<ContinueWithDefaultBehavior> actions { get; set; }
}

[JsonObject]
public class ContinueWithDefaultBehavior {
    [JsonProperty("@odata.type")]
    public string type { get; set; }
}

1.3 Configurar el desencadenador HTTP para OnAttributeCollectionSubmit

  1. En el menú, seleccione Código y prueba.
  2. Seleccione la pestaña siguiente para el escenario que desea implementar: Continuar, Bloquear, Modificar valoreso Error de validación. Reemplace el código por los fragmentos de código proporcionados.
  3. Después de reemplazar el código, en el menú superior, seleccione Obtener dirección URL de función y copie la dirección URL. Use esta dirección URL en el Paso 2: Crear y registrar una extensión de autenticación personalizada para la Dirección URL de destino.

Use este desencadenador HTTP para permitir que el usuario continúe con el flujo de registro si no se necesita ninguna acción adicional.

#r "Newtonsoft.Json"

using System.Net;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Primitives;
using Newtonsoft.Json;
using System.Text;

public static async Task<object> Run(HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic request = JsonConvert.DeserializeObject(requestBody);
    
    var actions = new List<ContinueWithDefaultBehavior>{
        new ContinueWithDefaultBehavior { type = "microsoft.graph.attributeCollectionSubmit.continueWithDefaultBehavior"}
    };
						
    var dataObject = new Data {
        type = "microsoft.graph.onAttributeCollectionSubmitResponseData",
        actions= actions
    };
	    
	dynamic response = new ResponseObject {
        data = dataObject
    };

    // Send the response
    return response;
}

public class ResponseObject
{
    public Data data { get; set; }
}

[JsonObject]
public class Data {
    [JsonProperty("@odata.type")]
    public string type { get; set; }
    
    public List<ContinueWithDefaultBehavior> actions { get; set; }
}

[JsonObject]
public class ContinueWithDefaultBehavior {
    [JsonProperty("@odata.type")]
	public string type { get; set; }
}

Paso 2: Crear y registrar una extensión de autenticación personalizada

En este paso, registrará una extensión de autenticación personalizada que usa Microsoft Entra ID para llamar a la función de Azure. La extensión de autenticación personalizada contiene información sobre el punto de conexión de la API de REST, el inicio de la recopilación de atributos y las acciones que analiza desde la API de REST y cómo autenticarse en la API de REST.

  1. Inicie sesión en el Centro de administración de Microsoft Entra como Administrador de aplicaciones y Administrador de autenticación.

  2. Vaya a Identidad>External Identities>Extensiones de autenticación personalizada.

  3. Seleccione Crear una extensión personalizada.

  4. En Aspectos básicos, seleccione el evento AttributeCollectionStart o el evento AttributeCollectionSubmit y, a continuación, seleccione Siguiente. Asegúrese de que coincide con la configuración del paso anterior.

  5. En Configuración de punto de conexión, rellene las siguientes propiedades:

    • Nombre: nombre de la extensión de autenticación personalizada. Por ejemplo, evento On Attribute Collection.
    • Dirección URL de destino: {Function_Url} de la dirección URL de la función de Azure.
    • Descripción: descripción de la extensión de autenticación personalizada.
  6. Seleccione Next (Siguiente).

  7. En Autenticación de API, seleccione la opción Crear un nuevo registro de aplicación para crear un registro de aplicación que represente a la aplicación de funciones.

  8. Asigne un nombre a la aplicación; por ejemplo, API de eventos de autenticación de Azure Functions.

  9. Seleccione Siguiente.

  10. Seleccione Crear, que crea la extensión de autenticación personalizada y el registro de aplicación asociado.

Una vez creada la extensión de autenticación personalizada, conceda el consentimiento de la aplicación registrada, lo que permite que la extensión de autenticación personalizada se autentique en la API.

  1. Vaya a Identidad>External Identities>Extensiones de autenticación personalizada (versión preliminar).
  2. Seleccione la extensión de autenticación personalizada en la lista.
  3. En la pestaña Información general, seleccione el botón Conceder permiso para dar consentimiento del administrador a la aplicación registrada. La extensión de autenticación personalizada usa client_credentials para autenticarse en la aplicación de funciones de Azure mediante el permiso Receive custom authentication extension HTTP requests. Seleccione Aceptar.

Paso 3: Agregar la extensión de autenticación personalizada a un flujo de usuario

Ahora puede asociar la extensión de autenticación personalizada a uno o varios de los flujos de usuario.

Nota:

Si necesita crear un flujo de usuario, siga los pasos descritos en Creación de un flujo de usuario de registro e inicio de sesión para los clientes.

3.1 Agregar la extensión de autenticación personalizada a un flujo de usuario existente

  1. Inicie sesión en el Centro de administración de Microsoft Entra como Administrador de aplicaciones y Administrador de autenticación

  2. Si tiene acceso a varios inquilinos, use el icono Configuración del menú superior para cambiar al inquilino externo.

  3. Vaya a Identidad> Identidades externas> Flujos de usuarios.

  4. Seleccione el flujo de usuario de la lista.

  5. Seleccione Extensiones de autenticación personalizada.

  6. En la página Extensiones de autenticación personalizada, puede asociar la extensión de autenticación personalizada con dos pasos diferentes en el flujo de usuario:

    • Antes de recopilar información del usuario se asocia al evento OnAttributeCollectionStart. Seleccione el lápiz de edición. Solo se mostrarán las extensiones personalizadas configuradas para el evento OnAttributeCollectionStart. Seleccione la aplicación que configuró para el evento de inicio de la colección de atributos y, a continuación, elija Seleccionar.
    • Cuando un usuario envía su información está asociada al evento OnAttributeCollectionSubmit. solo se mostrarán las extensiones personalizadas configuradas para el evento OnAttributeCollectionSubmit. Seleccione la aplicación que configuró para el evento de envío de la colección de atributos y, a continuación, elija Seleccionar.
  7. Asegúrese de que las aplicaciones enumeradas junto a ambos pasos de la colección de atributos son correctas.

  8. Seleccione el icono Save (Guardar).

Paso 4: Pruebe la aplicación

Para obtener un token y probar la extensión de autenticación personalizada, puede usar la aplicación https://jwt.ms. Es una aplicación web de Microsoft que muestra el contenido descodificado de un token (el contenido del token nunca sale del explorador).

Siga estos pasos para registrar la aplicación web jwt.ms:

4.1 Registrar la aplicación web de jwt.ms

  1. Inicie sesión en el Centro de administración de Microsoft Entra como Administrador de aplicaciones como mínimo.
  2. Vaya aIdentidad>Aplicaciones>Registros de aplicaciones.
  3. Seleccione Nuevo registro.
  4. Escriba un Nombre para la aplicación. Por ejemplo, Mi aplicación de prueba.
  5. En Tipos de cuenta admitidos, seleccione Solo las cuentas de este directorio organizativo.
  6. En la lista desplegable Seleccionar una plataforma, en URI de redirección, seleccione Web y escriba https://jwt.ms en el cuadro de texto Dirección URL.
  7. Seleccione Registrar para completar el registro de la aplicación.

4.2 Obtención del id. de la aplicación

En el registro de la aplicación, en Información general, copie el Id. de aplicación (cliente). Al id. de la aplicación se hace referencia como <client_id> en pasos posteriores. En Microsoft Graph, se hace referencia a él mediante la propiedad appId.

4.3 Habilitación del flujo implícito

La aplicación de prueba jwt.ms usa el flujo implícito. Habilite el flujo implícito en el registro de Mi aplicación de prueba con los siguientes pasos.

Importante

Microsoft recomienda usar el flujo de autenticación más seguro disponible. El flujo de autenticación que se usa en este procedimiento requiere un alto grado de confianza en la aplicación y conlleva riesgos que no están presentes en otros flujos. Este enfoque no se debe usar para autenticar a los usuarios en las aplicaciones de producción (más información).

  1. En Administrar, seleccione Autenticación.
  2. En Flujos de concesión implícita e híbridos, seleccione la casilla de verificación Tokens de id. (usados para flujos híbridos e implícitos).
  3. Seleccione Guardar.

Paso 5: Protección de la función de Azure

La extensión de autenticación personalizada de Microsoft Entra usa el flujo de servidor a servidor para obtener un token de acceso que se envía en el encabezado HTTP Authorization a la función de Azure. Al publicar la función en Azure, especialmente en un entorno de producción, debe validar el token enviado en el encabezado de autorización.

Para proteger la función de Azure, siga estos pasos con el fin de integrar la autenticación de Microsoft Entra, para validar los tokens entrantes con el registro de aplicación de la API de eventos de autenticación de Azure Functions.registro de aplicaciones.

Nota:

Si la aplicación de funciones de Azure se hospeda en un inquilino de Azure diferente del inquilino en el que está registrada la extensión de autenticación personalizada, vaya al paso 5.1 Uso del proveedor de identidades de OpenID Connect.

5.1 Incorporación de un proveedor de identidades a la función de Azure

  1. Inicie sesión en Azure Portal.

  2. Busque y seleccione la aplicación de funciones que publicó anteriormente.

  3. Seleccione Autenticación en el menú de la izquierda.

  4. Seleccione Agregar proveedor de identidades.

  5. Seleccione Microsoft como proveedor de identidades.

  6. Seleccione Cliente como tipo de inquilino.

  7. En Registro de aplicaciones, escriba el client_id del registro de la aplicación de la API de eventos de autenticación de Azure Functions que creó anteriormente al registrar el proveedor de notificaciones personalizado.

  8. Para la Dirección URL del emisor, escriba la siguiente dirección URL https://{domainName}.ciamlogin.com/{tenant_id}/v2.0, donde

    • {domainName} es el nombre de dominio del inquilino externo.
    • {tenantId} es el identificador de inquilino del inquilino externo. La extensión de autenticación personalizada debe registrarse aquí.
  9. En Solicitudes no autenticadas, seleccione HTTP 401 No autorizado como proveedor de identidades.

  10. Anule la selección de la opción Almacén de tokens.

  11. Seleccione Agregar para agregar autenticación a la función de Azure.

    Captura de pantalla que muestra cómo agregar autenticación a la aplicación de funciones mientras se encuentra en un inquilino externo.

5.2 Uso del proveedor de identidades OpenID Connect

Si configuró el Paso 5: Proteger la función de Azure, omita este paso. De lo contrario, si la función de Azure está hospedada en un inquilino diferente al inquilino en el que está registrada la extensión de autenticación personalizada, siga estos pasos para proteger la función:

  1. Inicie sesión en Azure Portal, después busque y seleccione la aplicación de funciones que publicó anteriormente.

  2. Seleccione Autenticación en el menú de la izquierda.

  3. Seleccione Agregar proveedor de identidades.

  4. Seleccione OpenID Connect como proveedor de identidades.

  5. Proporcione un nombre, como Contoso Microsoft Entra ID.

  6. En Entrada de metadatos, escriba la siguiente URL en el cuadro Dirección URL del documento. Reemplace por el {tenantId} identificador de inquilino de Microsoft Entra.

    https://login.microsoftonline.com/{tenantId}/v2.0/.well-known/openid-configuration
    
  7. En Registro de aplicación, escriba el id. de la aplicación (id. de cliente) del registro de aplicación de la API de eventos de autenticación de Azure Functions que creó antes.

  8. En el Centro de administración de Microsoft Entra:

    1. Seleccione el registro de aplicación de la API de eventos de autenticación de Azure Functions que creó antes.
    2. Seleccione Certificates & secrets>Client secrets>New client secret (Certificados y secretos > Secretos de cliente > Nuevo secreto de cliente).
    3. Agregue una descripción para el secreto de cliente.
    4. Seleccione una expiración para el secreto o especifique una duración personalizada.
    5. Seleccione Agregar.
    6. Registre el valor del secreto para usarlo en el código de la aplicación cliente. Este valor secreto no se volverá a mostrar una vez que abandone esta página.
  9. Vuelva a la función de Azure y, en Registro de aplicación, escriba el Secreto de cliente.

  10. Anule la selección de la opción Almacén de tokens.

  11. Seleccione Agregar para agregar el proveedor de identidades de OpenID Connect.

Paso 6: Probar la aplicación

Para probar la extensión de autenticación personalizada, siga estos pasos:

  1. Abra un nuevo explorador privado y vaya a la siguiente dirección URL:

    https://<domainName>.ciamlogin.com/<tenant_id>/oauth2/v2.0/authorize?client_id=<client_id>&response_type=code+id_token&redirect_uri=https://jwt.ms&scope=openid&state=12345&nonce=12345
    
    • Reemplace por <domainName> el nombre del inquilino externo y reemplace por <tenant-id> el id. de inquilino externo.
    • Reemplace <client_id> por el identificador de la aplicación que agregó al flujo de usuario.
  2. Después de iniciar sesión, se le mostrará el token descodificado en https://jwt.ms.

Pasos siguientes