Blog de Amazon Web Services (AWS)

Cómo configurar Amazon Cognito para la autenticación federada mediante Azure AD

Por Ratan Kuma, Arquitecto de soluciones y Vishwanatha Nayak, Arquitecto de soluciones
En esta entrada de blog, le mostraremos los pasos para integrar Azure AD como un proveedor de identidades federado del grupo de usuarios de Amazon Cognito.  Un grupo de usuarios es un directorio de usuarios de Amazon Cognito que ofrece opciones de registro e inicio de sesión para los usuarios de la aplicación.La gestión de identidades y el flujo de autenticación pueden resultar difíciles cuando se necesitan cumplir requisitos como OAuth, la autenticación social y el inicio de sesión mediante un proveedor de identidades (IdP) basado en el lenguaje de marcado de afirmaciones de seguridad (SAML) 2.0 para cumplir con los requisitos de gestión de identidades corporativas.  Amazon Cognito proporciona un directorio de usuarios gestionado y escalable, con inscripción e inicio de sesión de usuarios y federación a través de proveedores de identidad externos.  Una ventaja adicional para los desarrolladores es que proporciona un conjunto estandarizado de identificadores (identidad, acceso y token de actualización).  Por lo tanto, en situaciones en las que necesite admitir la autenticación con varios proveedores de identidad (por ejemplo, la autenticación social, el IdP de SAML, etc.), no necesitará escribir códigos para gestionar los diferentes tokens emitidos por diferentes proveedores de identidad.  En su lugar, simplemente puede trabajar con un conjunto coherente de tokens emitidos por el grupo de usuarios de Amazon Cognito.

Figure 1: High-level architecture for federated authentication in a web or mobile app

Figura 1: Arquitectura de alto nivel para la autenticación federada en la web o en una aplicación móvil

Como se muestra en la figura 1, la arquitectura de una aplicación de alto nivel que utiliza tecnología sin servidor con autenticación federada normalmente implica los siguientes pasos:

  1. El usuario selecciona su IdP preferido para autenticarse.
  2. Se redirige al usuario al IdP federado para iniciar sesión.  Tras la autenticación correcta, el IdP devuelve un token o una afirmación SAML que contiene los detalles de identidad del usuario en un grupo de usuarios de Amazon Cognito.
  3. El grupo de usuarios de Amazon Cognito emite un conjunto de tokens para la aplicación
  4. La aplicación puede usar el token emitido por el grupo de usuarios de Amazon Cognito para el acceso autorizado a las API protegidas por Amazon API Gateway.

Para obtener más información sobre el flujo de autenticación con la federación de SAML, consulte la entrada del blog Cómo crear una federación de ADFS para su aplicación web mediante grupos de usuarios de Amazon Cognito.

Instrucciones paso a paso para habilitar Azure AD como proveedor de identidades federado en un grupo de usuarios de Amazon Cognito

Esta publicación lo guiará a través de los siguientes pasos:

  1. Creación de un grupo de usuarios de Amazon Cognito
  2. Agregue Amazon Cognito como aplicación empresarial a Azure AD
  3. Agregue Azure AD como proveedor de identidades (IdP) de SAML en Amazon Cognito
  4. Cree un cliente de aplicaciones y utilice el ID de SAML recién creado para Azure AD

Prerrequisitos

Deberá tener acceso administrativo a Azure AD, una cuenta de AWS y la interfaz de línea de comandos de AWS (AWS CLI) instalados en su máquina.  Siga las instrucciones para instalar, actualizar y desinstalar la versión 2 de la CLI de AWS.  Para configurar la instalación, siga las instrucciones para configurar la CLI de AWS.  Si no desea instalar la CLI de AWS, también puede ejecutar estos comandos desde AWS CloudShell, que proporciona un shell basado en un navegador para administrar, explorar e interactuar con sus recursos en AWS de forma segura.

Paso 1: Crear un grupo de usuarios de Amazon Cognito

Los procedimientos de esta publicación utilizan la CLI de AWS, pero también puede seguir las instrucciones para usar la consola de administración de AWS a fin de crear un nuevo grupo de usuarios.

Cómo crear un grupo de usuarios en la CLI de AWS

  1. Utilice el siguiente comando para crear un grupo de usuarios con la configuración predeterminada.  Sustitúya <yourUserPoolName> por el nombre que desee utilizar para el grupo de usuarios.
  2. aws cognito-idp create-user-pool
  3. --pool-name <yourUserPoolName>

Debería ver un resultado con varios detalles sobre el grupo de usuarios recién creado.

4. Copie el valor del ID del grupo de usuarios, que en este ejemplo es AP-Southeast-2_xx0xxxxxx.  Necesitarás esta cantidad para los siguientes pasos

"Grupo de usuarios": {
        "Id": "ap-southeast-2_xx0xXxXXX",
        "Name": "example-corp-prd-userpool"
       "Policies": { …

Agregar un nombre de dominio al grupo de usuarios

Una de las muchas funciones útiles de Amazon Cognito es la interfaz de usuario alojada, que proporciona una interfaz web configurable para el inicio de sesión de los usuarios.  Se puede acceder a la interfaz de usuario alojada desde un nombre de dominio que debe agregarse al grupo de usuarios.  Hay dos opciones para añadir un nombre de dominio a un grupo de usuarios.  Puede utilizar un dominio de Amazon Cognito o un nombre de dominio propio.  Esta solución utiliza un dominio de Amazon Cognito, que tendrá el siguiente formato:

https://<yourDomainPrefix>.auth.<aws-region>.amazoncognito.com

Cómo añadir un nombre de dominio al grupo de usuarios

  1. Utilice el siguiente comando de CLI para añadir un dominio de Amazon Cognito al grupo de usuarios.  Sustitúya <yourDomainPrefix> por un prefijo de nombre de dominio único (por ejemplo example-corp-prd).  Ten en cuenta que no puedes usar las palabras clave aws, amazon o cognito para el prefijo de dominio.

aws cognito-idp create-user-pool-domain \

--domain <yourDomainPrefix> \
--user-pool-id <yourUserPoolID>

Preparar la información para configurar Azure AD

A continuación, es el momento de preparar el identificador (ID de entidad) y la URL de respuesta, que se necesitan para añadir Amazon Cognito como aplicación corporativa en Azure AD (se hace en el paso 2 que aparece a continuación).  Azure AD espera que estos valores estén en un formato muy específico.  En un editor de texto, anote los valores para el identificador (ID de entidad) y la URL de respuesta de acuerdo con los siguientes formatos:

  • Para el identificador (ID de entidad), el formato es:
  • urn:amazon:cognito:sp:<yourUserPoolID>

    Por ejemplo:

    urn:amazon:cognito:sp:ap-southeast-2_nYYYyyYyYy
    
  • Para la URL de respuesta, el formato es:
    https://<yourDomainPrefix>.auth.<aws-region>.amazoncognito.com/saml2/idpresponse
    

    Por ejemplo:

    https://example-corp-prd.auth.ap-southeast-2.amazoncognito.com/saml2/idpresponse
    

    Nota: La URL de respuesta es el punto final en el que Azure AD enviará la sentencia SAML a Amazon Cognito durante el proceso de autenticación del usuario.

Actualiza los marcadores de arriba con sus valores (sin < >) y anota los valores del identificador (ID de entidad) y de la URL de respuesta en un editor de texto para consultarlos en el futuro.

Para obtener más información, consulte Agregar proveedores de identidades SAML a un grupo de usuarios en la Guía para desarrolladores de Amazon Cognito.

Paso 2: Agregar Amazon Cognito como aplicación empresarial en Azure AD

En este paso, agregará un grupo de usuarios de Amazon Cognito como aplicación en Azure AD para establecer una relación de confianza entre ellos.

Cómo agregar una nueva aplicación a Azure AD

  1. Inicie sesión en el portal de Azure.
  2. En la sección Azure Services (Servicios de Azure), elija Azure Active Directory.
  3. En la barra lateral izquierda, selecciona Enterprise Applications (Aplicaciones empresariales).
  4. Elija New Application (Nueva aplicación).
  5. En la página Explore Azure AD Gallery, seleccione Create your own application (Crear su propia aplicación).
  6. En What’s the name of your app?  (¿Cuál es el nombre de tu aplicación?) , introduzca un nombre y seleccione Integrate any other application you don’t find in the gallery (Non-gallery) [Integrar cualquier otra aplicación que no pueda encontrar en la galería (fuera de la galería), como se muestra en la figura 2.  Elige Create (Crear).

Figure 2: Add an enterprise app in Azure AD

Figura 2: Agregar una aplicación empresarial a Azure AD

La aplicación tardará unos segundos en crearse en Azure AD. A continuación, se le redirigirá a la página de descripción general de la aplicación recién agregada.

Nota: En ocasiones, este paso puede generar un error de no encontrado, incluso si Azure AD creó una aplicación nueva.  Si eso ocurre, en Azure AD, vuelva a Aplicaciones empresariales y busque su aplicación por nombre.

Cómo configurar el inicio de sesión único mediante SAML

En la página Primeros pasos, en el cuadro Configurar inicio de sesión único, seleccione Comenzar, como se muestra en la figura 3.

Figure 3: Application configuration page in Azure AD

Figura 3: Página de configuración de la aplicación en Azure AD

2. En la siguiente pantalla, selecciona SAML.

3. En el panel central, en Configurar el inicio de sesión único con SAML, en la sección Configuración básica de SAML, selecciona el icono de edición ().

4. En el panel derecho, en Configuración básica de SAML, sustituya el ID de identificador predeterminado (ID de entidad) por el ID de identificador (ID de entidad) copiado anteriormente.  En el campo URL de respuesta (URL de Assertion Consumer Service), introduzca la URL de respuesta copiada anteriormente, como se muestra en la figura 4.  Selecciona Guardar.

Figure 4: Azure AD SAML-based Sign-on setup

Figura 4: Configuración de inicio de sesión basada en SAML de Azure AD

5. En el panel central, en Configurar el inicio de sesión único con SAML, en la sección Atributos y reclamaciones del usuario, selecciona Editar.

6. Selecciona Añadir una reclamación grupal.

7. En la página Atributos y reclamaciones del usuario, en el panel derecho, bajo Agrupar reclamaciones, seleccione Grupos asignados a la aplicación y deje el atributo de origen como ID de grupo (ID de grupo), como se muestra en la figura 5.  Selecciona Guardar.

Figure 5: Option to select group claims to release to Amazon Cognito

Figura 5: Opción para seleccionar las reclamaciones grupales que se publicarán en Amazon Cognito

Esto añade el grupo de reclamaciones para que Amazon Cognito pueda recibir los detalles de la pertenencia al grupo del usuario autenticado como parte de la declaración SAML.

8. En un editor de texto, anote los nombres de las reclamaciones en Reclamaciones adicionales, como se muestra en la figura 5.  Los necesitará al crear el mapeo de atributos en Amazon Cognito.

9. Cierre la pantalla de atributos y reclamaciones del usuario seleccionando la X de la esquina superior derecha.  Se le redirigirá a la página Configurar el inicio de sesión único con SAML.

10. Desplácese hacia abajo hasta la sección Certificado de firma de SAML y copie la URL de los metadatos de la federación de aplicaciones seleccionando el icono de copia en el portapapeles (resaltado con una flecha roja en la figura 6).  Guarda esa URL en un editor de texto porque la necesitarás en el siguiente paso.

Figure 6: Copy SAML metadata URL from Azure AD

Figura 6: Copiar la URL de los metadatos de SAML de Azure AD

Paso 3: Agregar Azure AD como ID de SAML a Amazon Cognito

A continuación, necesitará un atributo en el grupo de usuarios de Amazon Cognito donde se puedan recibir los detalles de la pertenencia al grupo de Azure AD y añadirá Azure AD como proveedor de identidades.

Cómo agregar un atributo personalizado al grupo de usuarios y agregar Azure AD como proveedor de identidades

  1. Use el siguiente comando de CLI para agregar un atributo personalizado al grupo de usuarios.  Reemplaza <yourUserPoolID> y <customAttributeName> por tus propios valores.
aws cognito-idp add-custom-attributes \
--user-pool-id <yourUserPoolID> \
--custom-attributes Name=<customAttributeName>,AttributeDataType="String"

Si el comando se ejecuta correctamente, no verá ningún resultado.

  1. Use el siguiente comando de CLI para agregar Azure AD como proveedor de identidades.  Sustituya lo siguiente por sus propios valores:
    • Sustitúya <yourUserPoolID> por el ID del grupo de usuarios de Amazon Cognito copiado anteriormente.
    • Sustitúya <IDProviderName> por el nombre de su proveedor de identidad (por ejemplo, Example-corp-IDP).
    • Sustitúya <MetadataURLCopiedFromAzureAD> por la URL de metadatos copiada de Azure AD.
      • Sustitúya <customAttributeName> por el nombre de atributo personalizado creado anteriormente.
aws cognito-idp create-identity-provider \
--user-pool-id <yourUserPoolID> \
--provider-name=<IDProviderName> \
--provider-type SAML \
--provider-details MetadataURL=<MetadataURLCopiedFromAzureAD> \
--attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress,<customAttributeName>=http://schemas.microsoft.com/ws/2008/06/identity/claims/groups

La ejecución correcta de este comando añade Azure AD como ID de SAML a su grupo de usuarios de Amazon Cognito.

Paso 4: Cree un cliente de aplicación y utilice el ID de SAML recién creado para Azure AD

Antes de usar Amazon Cognito en su aplicación web, debe registrar esa aplicación en Amazon Cognito como aplicación cliente.  Un cliente de aplicación es una entidad de un grupo de usuarios de Amazon Cognito a la que se le permite realizar operaciones de API no autenticadas (operaciones que no requieren un usuario autenticado), por ejemplo, para registrarse, iniciar sesión y gestionar las contraseñas olvidadas.

Cómo crear un cliente de aplicaciones

  1. Use el siguiente comando para crear una aplicación cliente.  Sustituya lo siguiente por sus propios valores:
    • Sustitúya <yourUserPoolID> por el ID del grupo de usuarios de Amazon Cognito creado anteriormente.
    • Sustitúya <yourAppClientName> por el nombre de la aplicación cliente.
    • Sustitúya <callbackURL> por la URL de la aplicación web que recibirá el código de autorización.  Debe ser un endpoint HTTPS, excepto en un entorno de desarrollo local donde puede usar http://localhost:PORT_NUMBER.
    • Usa el parámetroallowed-o-auth-flows para los flujos de OAuth permitidos que quieras habilitar.  En este ejemplo, utilizamos código para conceder el código de autorización.
    • Utilice el parámetro —allowed-o-auth-scopes para especificar qué ámbitos de OAuth (como el teléfono, el correo electrónico o la ID abierta) incluirá Amazon Cognito en los tokens.  En este ejemplo, utilizamos open ID.
    • Sustitúya <IDProviderName> por el mismo nombre que se usó anteriormente para el proveedor de ID.
aws cognito-idp create-user-pool-client \
--user-pool-id <yourUserPoolID> \
--client-name <yourAppClientName> \
--no-generate-secret \
--callback-urls <callbackURL> \
--allowed-o-auth-flows code \
--allowed-o-auth-scopes openid email\
--supported-identity-providers <IDProviderName> \
--allowed-o-auth-flows-user-pool-client

Si se ejecuta correctamente este comando, se obtendrá un resultado en el siguiente formato. En un editor de texto, anote el ClientID como referencia en la aplicación web.  En el siguiente ejemplo, el ClientID es 7xyxyxyxyxyxyxyxyxyxyxyxyxixixixi.

{
    "UserPoolClient": {
        "UserPoolId": "ap-southeast-2_xYYYYYYY",
        "ClientName": "my-client-name",
        "ClientId": "7xyxyxyxyxyxyxyxyxyxy",
        "LastModifiedDate": "2021-05-04T17:33:32.936000+12:00",
        "CreationDate": "2021-05-04T17:33:32.936000+12:00",
        "RefreshTokenValidity": 30,
        "SupportedIdentityProviders": [
            "Azure-AD"
        ],
        "CallbackURLs": [
            "http://localhost:3030"
        ],
        "AllowedOAuthFlows": [
            "code"
        ],
        "AllowedOAuthScopes": [
            "openid", "email"
        ],
        "AllowedOAuthFlowsUserPoolClient": true
    }
}

Probar la configuración

A continuación, realice una prueba rápida para comprobar que todo está configurado correctamente.

  1. Abra la consola de Amazon Cognito.
  2. Elija Administrar grupos de usuarios y seleccione el grupo de usuarios que creó en el paso 1: Crear un grupo de usuarios de Amazon Cognito.
  3. En la barra lateral izquierda, seleccione la configuración del cliente de aplicaciones y busque el cliente de aplicación que creó en el paso 4: cree un cliente de aplicación y utilice el ID de SAML recién creado para Azure AD.  Ve a la sección Interfaz de usuario alojada y selecciona Iniciar interfaz de usuario alojada, como se muestra en la figura 7.

Figure 7: App client settings showing link to access Hosted UI

Figura 7: Configuración del cliente de la aplicación que muestra el enlace para acceder a la interfaz de usuario alojada

4. En la página de inicio de sesión, como se muestra en la figura 8, deberías ver todos los IDP habilitados en el cliente App.  Elija el botón Azure-AD, que lo redirigirá a la página de inicio de sesión alojada en https://login.microsoftonline.com/.

Figure 8: Amazon Cognito hosted UI

Figura 8. U está alojado en Amazon Cognito

5. Inicia sesión con tu ID corporativo. Si todo funciona correctamente, se te redirigirá de nuevo a la URL de devolución de llamada después de que la autenticación se haya realizado correctamente.

(Opcional) Agregar autenticación a una aplicación de una sola página

Una forma de añadir una autenticación segura mediante Amazon Cognito en una aplicación de una sola página (SPA) consiste en utilizar el método auth.federatedSignin () de la clase AWS Amplify Auth.  AWS Amplify proporciona SDK para integrar su aplicación web o móvil con una lista creciente de servicios de AWS, incluida la integración con el grupo de usuarios de Amazon Cognito.  El método federatedSign () mostrará la interfaz de usuario alojada que ofrece a los usuarios la opción de iniciar sesión con los proveedores de identidad habilitados en la aplicación cliente (en el paso 4), como se muestra en la figura 8.  Una ventaja de la interfaz de usuario alojada es que no es necesario escribir ningún código para renderizarla.  Además, implementará de forma transparente la concesión del código de autorización con el PKCE y proporcionará de forma segura a su aplicación del lado del cliente los tokens (ID, Access y Refresh) necesarios para acceder a las API del backend.

Para ver un ejemplo de una aplicación web y las instrucciones para conectarla a la autenticación de Amazon Cognito, consulte el repositorio de GitHub aws-amplify-oidc-federation.

Conclusión

En esta publicación, aprendió a integrar un grupo de usuarios de Amazon Cognito con Azure AD como proveedor de identidades SAML externo, para permitir a los usuarios utilizar el identificador corporativo para iniciar sesión en aplicaciones web o dispositivos móviles.

Para obtener más información sobre esta solución, vea nuestro vídeo sobre la integración de Amazon Cognito con Azure Active Directory (a partir del minuto 25:26) en el canal oficial de AWS Twitch.  En el vídeo, encontrará una demostración completa de cómo integrar Amazon Cognito con Azure AD y cómo utilizar el SDK de AWS Amplify para añadir autenticación a una aplicación React sencilla (por ejemplo, una tienda de mascotas).  El vídeo también muestra cómo puede acceder a los detalles de la membresía del grupo Azure AD para obtener una autorización y un control de acceso detallado.

Si tiene algún comentario sobre esta publicación, envíelo en la sección de comentarios que aparece a continuación.  Si tiene preguntas sobre esta publicación, inicie un tema nuevo en el foro de Amazon Cognito o en Póngase en contacto con AWS Support.

 

Este artículo fue traducido del Blog da AWS en Inglés

 


Acerca de los autores

Ratan Kumar es un arquitecto de soluciones con sede en Auckland, Nueva Zelanda. Trabaja con grandes clientes corporativos y les ayuda a diseñar y crear aplicaciones a escala de Internet que sean seguras, rentables y confiables mediante la nube de AWS. Le apasiona la tecnología y le gusta compartir conocimientos a través de publicaciones de blog y sesiones en Twitch.
 

 

 

 

 

Vishwanatha Nayak es arquitecta de soluciones en AWS.  Trabaja con los clientes para crear soluciones innovadoras que sean seguras, fiables y con costes optimizados para resolver problemas empresariales y acelerar la adopción de los servicios de AWS.  Cuenta con más de 15 años de experiencia en diversas funciones de desarrollo de software, consultoría y arquitectura.
 

 

 

 

Revisores

Jorge Castillo es un arquitecto de soluciones en el equipo de AWS Public Sector LATAM. Lleva más de 14 años trabajando con soluciones de TI, y en su cartera cuenta con numerosas experiencias en cargas de trabajo en el sector de Educación y Gobierno, entornos híbridos y formación técnica para clientes como Technical Trainer. Ahora actúa como arquitecto de soluciones, combinando todas las capacidades para reducir la burocracia en la adopción de las mejores tecnologías a fin de ayudar a los clientes a superar sus desafíos diarios.