Amazon Cognito Guía para desarrolladores
Amazon Cognito Guía para desarrolladores
Amazon Cognito: Guía para desarrolladores
Copyright © Amazon Web Services, Inc. and/or its affiliates. All rights reserved. Amazon's trademarks and trade dress may not be used in connection with any product or service that is not Amazon's, in any manner that is likely to cause confusion among customers, or in any manner that disparages or discredits Amazon. All other trademarks not owned by Amazon are the property of their respective owners, who may or may not be affiliated with, connected to, or sponsored by Amazon.
Amazon Cognito Guía para desarrolladores
Table of Contents ¿Qué es Amazon Cognito? .................................................................................................................. 1 Características de Amazon Cognito ............................................................................................... 2 Introducción a Amazon Cognito .................................................................................................... 3 Disponibilidad regional ................................................................................................................. 3 Precios de Amazon Cognito ......................................................................................................... 3 Uso de la consola de Amazon Cognito .......................................................................................... 3 Introducción a Amazon Cognito ............................................................................................................ 5 Situaciones de Amazon Cognito habituales ............................................................................................ 6 Autenticar con un grupo de usuarios ............................................................................................. 6 Acceso a los recursos del lado del servidor .................................................................................... 7 Acceso a recursos con API Gateway y Lambda .............................................................................. 7 Acceso a servicios de AWS con un grupo de usuarios y un grupo de identidades ................................. 8 Autenticar con un tercero y acceder a servicios de AWS con un grupo de identidades ........................... 9 Acceda a los recursos de AWS AppSync con Amazon Cognito .......................................................... 9 Tutoriales ......................................................................................................................................... 11 Crear un grupo de usuarios ........................................................................................................ 11 Recursos relacionados ....................................................................................................... 11 Crear un grupo de identidades ................................................................................................... 11 Recursos relacionados ....................................................................................................... 12 Limpieza de los recursos de AWS ............................................................................................... 12 Integración con aplicaciones ............................................................................................................... 13 Autenticación de Amazon Cognito con el marco AWS Amplify ......................................................... 13 Prácticas recomendadas para aplicaciones de varios inquilinos ................................................................ 14 Tenencia múltiple basada en grupos de usuarios ........................................................................... 14 Aplicación de varios inquilinos basados en el cliente ...................................................................... 15 Varios inquilinos basados en grupos ............................................................................................ 15 Tenencia múltiple personalizada basada en atributos ..................................................................... 16 Recomendaciones de seguridad de tenencia múltiple ..................................................................... 16 Grupos de usuarios de Amazon Cognito .............................................................................................. 17 Introducción a los grupos de usuarios .......................................................................................... 18 Requisito previo: inscribirse en una cuenta de AWS ............................................................... 18 Paso 1. Crear un conjunto de usuarios ................................................................................ 18 Paso 2. Añadir una aplicación para habilitar la interfaz de usuario web alojada ........................... 19 Paso 3. Añadir inicio de sesión de redes sociales a un grupo de usuarios (opcional) .................... 21 Paso 4. Añadir inicio de sesión con un proveedor de identidad SAML a un grupo de usuarios (opcional) ......................................................................................................................... 26 Pasos siguientes ............................................................................................................... 28 Uso de la interfaz de usuario alojada ........................................................................................... 29 Configuración de la interfaz de usuario alojada con AWS Amplify ............................................. 29 Configuración de la interfaz de usuario alojada con la consola de Amazon Cognito ...................... 29 Configuración de un cliente de aplicación ............................................................................. 32 Configuración de un dominio .............................................................................................. 35 Personalizar las páginas web integradas .............................................................................. 41 Definir servidores de recursos ............................................................................................ 45 Agregar inicio de sesión a través de un tercero ............................................................................. 48 Añadir proveedores de identidad social ................................................................................ 48 Agregar proveedores SAML ............................................................................................... 54 Añadir proveedores OIDC .................................................................................................. 62 Especificación de mapeos de atributos ................................................................................. 68 Uso de los disparadores de Lambda ........................................................................................... 72 Consideraciones importantes .............................................................................................. 73 Uso de los disparadores de Lambda ................................................................................... 74 Evento disparador de Lambda para un grupo de usuarios ....................................................... 74 Parámetros comunes de los disparadores de Lambda para un grupo de usuarios ........................ 74
iii
Amazon Cognito Guía para desarrolladores
Orígenes del disparador de Lambda .................................................................................... 75 Disparador de Lambda anterior a la inscripción ..................................................................... 77 Disparador de Lambda posterior a la confirmación ................................................................. 83 Disparador de Lambda anterior a la autenticación. ................................................................. 86 Disparador de Lambda posterior a la autenticación ................................................................ 89 Disparadores de desafío de Lambda ................................................................................... 92 Disparador de Lambda anterior a la generación del token ..................................................... 102 Disparador de Lambda de migración de usuario .................................................................. 106 Disparador de Lambda para mensajes personalizados .......................................................... 109 Disparadores de Lambda de remitente personalizados .......................................................... 114 Usar análisis de Amazon Pinpoint ............................................................................................. 121 Buscar mapeos de región de Amazon Cognito yAmazon Pinpoint ........................................... 122 Administración de usuarios ....................................................................................................... 124 Inscripción y confirmación de cuentas de usuario ................................................................. 124 Creación de usuarios como administrador ........................................................................... 132 Agregar grupos a un grupo de usuarios .............................................................................. 136 Gestión y búsqueda de usuarios ....................................................................................... 138 Recuperación de cuentas de usuario ................................................................................. 141 Importación de usuarios en un grupo de usuarios ................................................................ 142 Configuración de correo electrónico ........................................................................................... 154 Funcionalidad de correo electrónico predeterminada ............................................................. 154 Amazon SESConfiguración de correo electrónico de ............................................................. 154 Configuración de la cuenta de correo electrónico ................................................................. 155 Uso de tokens ........................................................................................................................ 158 Uso del token de ID ........................................................................................................ 159 Uso del token de acceso .................................................................................................. 160 Uso del token de actualización .......................................................................................... 162 Revocación de todos los tokens de un usuario .................................................................... 163 Verificación de un JSON Web Token ................................................................................. 163 Acceso a los recursos después del inicio de sesión ...................................................................... 166 Acceso a los recursos del lado del servidor ............................................................................ 7 Acceso a recursos con API Gateway y Lambda ................................................................... 167 Acceso a los recursos de AWS utilizando un grupo de identidades ......................................... 168 Referencia de la consola de grupos de usuarios .......................................................................... 170 Nombre de grupo de usuarios ........................................................................................... 171 Usuarios y grupos ........................................................................................................... 171 Atributos ........................................................................................................................ 171 Requisitos de contraseña ................................................................................................. 178 Política de creación de usuarios por parte del administrador .................................................. 178 Verificación del correo electrónico o del teléfono .................................................................. 179 Personalizaciones de mensaje .......................................................................................... 180 Etiquetas ........................................................................................................................ 184 dispositivos ..................................................................................................................... 184 Clientes de aplicaciones ................................................................................................... 185 Disparadores .................................................................................................................. 187 Revisión de la configuración ............................................................................................. 187 Análisis .......................................................................................................................... 188 Configuración del cliente de aplicación ............................................................................... 189 Nombre de dominio ......................................................................................................... 190 Personalización de la interfaz de usuario ............................................................................ 190 Servidores de recursos .................................................................................................... 191 Proveedores de identidad ................................................................................................. 191 Mapeo de atributos ......................................................................................................... 195 Gestión de respuestas de error ................................................................................................. 196 Amazon CognitoGrupos de identidades de .......................................................................................... 199 Introducción a grupos de identidades ......................................................................................... 199 Inscripción en una cuenta de AWS .................................................................................... 200
iv
Amazon Cognito Guía para desarrolladores
Creación de un grupo de identidades en Amazon Cognito ..................................................... Instalación del Mobile o JavaScript SDK ............................................................................. Integración de los proveedores de identidad ........................................................................ Obtención de credenciales ............................................................................................... Uso de grupos de identidades .................................................................................................. Roles de IAM de usuario .................................................................................................. Identidades autenticadas y sin autenticar ............................................................................ Activación o desactivación de identidades sin autenticar ........................................................ Cambio del rol asociado a un tipo de identidad .................................................................... Activación o edición de proveedores de autenticación ........................................................... Eliminación de un grupo de identidades ............................................................................. Eliminación de una identidad de un grupo de identidades ...................................................... Administración de conjuntos de datos ................................................................................ Publicación en masa de datos .......................................................................................... Activación de la sincronización mediante inserción ............................................................... Configuración de transmisiones de Amazon Cognito ............................................................. Configuración de eventos de Amazon Cognito ..................................................................... Conceptos de grupos de identidades ......................................................................................... Flujo de autenticación de grupos de identidades .................................................................. Roles de IAM ................................................................................................................. Confianza y permisos de rol ............................................................................................. Uso de atributos para el control de acceso ................................................................................. Uso de atributos para el control de acceso con grupos Amazon Cognito de identidades .............. Ejemplo de uso de atributos para política de control de acceso .............................................. Deshabilitar atributos para el control de acceso ................................................................... Mapeos de proveedores predeterminados ........................................................................... Control de acceso basado en roles ............................................................................................ Creación de roles para el mapeo de roles .......................................................................... Concesión del permiso para transmitir roles ........................................................................ Uso de tokens para asignar roles a usuarios ....................................................................... Uso del mapeo basado en reglas para el mapeo de roles a los usuarios .................................. Notificaciones de token para usarlas en un mapeo basado en reglas ....................................... Prácticas recomendadas para el control de acceso basado en roles ........................................ Obtención de credenciales ....................................................................................................... Android .......................................................................................................................... iOS - Objective-C ............................................................................................................ iOS - Swift ..................................................................................................................... JavaScript ...................................................................................................................... Unity ............................................................................................................................. Xamarin ......................................................................................................................... Acceso a los servicios de AWS ................................................................................................. Android .......................................................................................................................... iOS - Objective-C ............................................................................................................ iOS - Swift ..................................................................................................................... JavaScript ...................................................................................................................... Unity ............................................................................................................................. Xamarin ......................................................................................................................... Proveedores de identidad externos de grupos de identidades ........................................................ Facebook ....................................................................................................................... Login with Amazon .......................................................................................................... Google ........................................................................................................................... Inicio de sesión con Apple ................................................................................................ Proveedores de Open ID Connect ..................................................................................... Proveedores de identidad SAML ....................................................................................... Identidades autenticadas por el desarrollador .............................................................................. Descripción del flujo de autenticación .................................................................................
v
200 201 201 201 201 202 202 202 203 203 204 204 204 205 205 206 206 206 207 211 216 217 218 219 220 221 221 222 222 223 223 224 225 225 226 227 228 229 230 231 232 232 232 232 233 233 233 233 234 239 242 249 254 256 258 258
Amazon Cognito Guía para desarrolladores
Definición de un nombre de proveedor de desarrollador y asociación de dicho nombre a un grupo de identidades ....................................................................................................... Implementación de un proveedor de identidad ..................................................................... Actualización de la asignación de inicios de sesión (solo Android e iOS) .................................. Obtención de un token (lado del servidor) ........................................................................... Conexión con una identidad social existente ....................................................................... Compatibilidad con la transición entre proveedores .............................................................. Cambio de identidades ............................................................................................................ Android .......................................................................................................................... iOS - Objective-C ............................................................................................................ iOS - Swift ..................................................................................................................... JavaScript ...................................................................................................................... Unity ............................................................................................................................. Xamarin ......................................................................................................................... Amazon Cognito Sync ..................................................................................................................... Introducción a Amazon Cognito Sync ......................................................................................... Inscripción en una cuenta de AWS .................................................................................... Configuración de un grupo de identidades en Amazon Cognito ............................................... Almacenamiento y sincronización de datos ......................................................................... Sincronización de datos ........................................................................................................... Inicialización del cliente de Amazon Cognito Sync ................................................................ Descripción de los conjuntos de datos ............................................................................... Lectura y escritura de datos en conjuntos de datos .............................................................. Sincronización de datos locales con el almacén de sincronización .......................................... Gestión de la devolución de llamadas ........................................................................................ Android .......................................................................................................................... iOS - Objective-C ............................................................................................................ iOS - Swift ..................................................................................................................... JavaScript ...................................................................................................................... Unity ............................................................................................................................. Xamarin ......................................................................................................................... Sincronización mediante inserción ............................................................................................. Crear una aplicación de Amazon Simple Notification Service (Amazon SNS) ............................. Activación de la sincronización mediante inserción en la consola de Amazon Cognito ................. Uso de la sincronización mediante inserción en su aplicación: Android .................................... Uso de la sincronización mediante inserción en su aplicación: iOS - Objective-C ....................... Uso de la sincronización mediante inserción en su aplicación: iOS - Swift ................................ Flujos de Amazon Cognito ....................................................................................................... Eventos de Amazon Cognito ..................................................................................................... Seguridad ...................................................................................................................................... Protección de los datos ............................................................................................................ Cifrado de datos ............................................................................................................. Identity and Access Management .............................................................................................. Nombres de recursos de Amazon (ARN) ............................................................................ Ejemplos de políticas ....................................................................................................... Políticas administradas ..................................................................................................... API firmadas y sin firmar .................................................................................................. Uso de roles vinculados a servicios ................................................................................... Autenticación .................................................................................................................. Registro y monitorización ......................................................................................................... Seguimiento de cuotas y uso en CloudWatch y Cuotas de servicio ......................................... Métricas de Grupos de usuarios de Amazon Cognito ............................................................ Dimensiones para Grupos de usuarios de Amazon Cognito ................................................... Uso de la consola Cuotas de servicio de para realizar un seguimiento de las métricas de ............ Uso de la consola CloudWatch de para realizar un seguimiento de las métricas ........................ Crear una CloudWatch alarma de para una cuota ................................................................ Registro de llamadas a la API de Amazon Cognito con AWS CloudTrail ...................................
vi
258 258 264 265 266 266 269 269 269 270 270 271 271 272 272 273 273 273 273 274 275 277 278 281 281 282 285 287 289 291 293 293 293 294 295 297 299 301 305 305 306 306 306 307 308 308 309 312 319 319 320 327 327 328 328 328
Amazon Cognito Guía para desarrolladores
Validación de la conformidad .................................................................................................... 331 Resiliencia .............................................................................................................................. 331 Consideraciones de datos regionales ................................................................................. 332 Seguridad de la infraestructura .................................................................................................. 332 Configuración y análisis de vulnerabilidades ................................................................................ 333 Prácticas recomendadas de seguridad ....................................................................................... 333 Adición de Multi-Factor Authentication (MFA) ....................................................................... 333 Adición de seguridad avanzada ......................................................................................... 338 Etiquetado de recursos de ................................................................................................................ 348 Recursos admitidos ................................................................................................................. 348 Restricciones de las etiquetas ................................................................................................... 348 Administración de etiquetas con la consola ................................................................................. 349 AWS CLI Ejemplos .................................................................................................................. 349 Asignación de etiquetas ................................................................................................... 349 Visualización de etiquetas ................................................................................................ 350 Eliminación de etiquetas ................................................................................................... 351 Aplicación de etiquetas al crear recursos ............................................................................ 351 Acciones de API ..................................................................................................................... 352 Acciones de la API para las etiquetas de grupo de usuarios .................................................. 352 Acciones de la API para las etiquetas de grupo de identidades .............................................. 352 Cuotas ........................................................................................................................................... 353 Cuotas de operación ............................................................................................................... 353 Clasificación de cuotas ............................................................................................................ 353 Tratamiento especial de operaciones ......................................................................................... 353 Operaciones de categoría ........................................................................................................ 354 Realizar un seguimiento del uso de la cuota ............................................................................... 358 Identificar los requisitos de cuota ............................................................................................... 358 Optimizar cuotas ..................................................................................................................... 359 Cuotas de tasa de solicitudes de API ......................................................................................... 359 Cuotas de recursos ................................................................................................................. 360 Cuotas de recursos ajustables .......................................................................................... 360 Cuotas de recursos no ajustables ...................................................................................... 361 Referencias de API ......................................................................................................................... 364 Referencia de la API de grupos de usuarios ............................................................................... 364 Referencia de la API Auth de grupos de usuarios ........................................................................ 364 Punto de enlace AUTHORIZATION .................................................................................... 365 Punto de enlace TOKEN .................................................................................................. 369 Punto de enlace USERINFO ............................................................................................. 373 Punto de enlace LOGIN ................................................................................................... 375 Punto de enlace LOGOUT ................................................................................................ 376 Referencia de la API de grupos de identidades ........................................................................... 377 Referencia de la API de sincronización de Cognito ....................................................................... 377 Historial de revisión ......................................................................................................................... 378 ............................................................................................................................................. ccclxxxvii
vii
Amazon Cognito Guía para desarrolladores
¿Qué es Amazon Cognito? Amazon Cognito proporciona autenticación, autorización y administración de usuarios para sus aplicaciones móviles y web. Los usuarios pueden iniciar sesión directamente con un nombre de usuario y una contraseña o a través de un tercero como Facebook, Amazon, Google o Apple. Los dos componentes principales de Amazon Cognito son los grupos de usuarios y los grupos de identidades. Los grupos de usuarios son directorios de usuarios que proporcionan a los usuarios de las aplicaciones opciones para inscribirse e iniciar sesión. Los grupos de identidades permiten conceder a los usuarios acceso a otros servicios de AWS. Puede utilizar los grupos de identidades y los grupos de usuarios juntos o por separado.
Un grupo de usuarios y grupo de identidades de Amazon Cognito utilizados juntos Consulte el diagrama para un escenario de Amazon Cognito común. Aquí el objetivo consiste en autenticar el usuario y, a continuación, concederle acceso a otro servicio de AWS. 1.
En el primer paso, el usuario de la aplicación inicia sesión a través de un grupo de usuarios y recibe tokens de grupos de usuarios después de una autenticación correcta.
2.
A continuación, la aplicación intercambia los tokens del grupo de usuarios por las credenciales de AWS a través de un grupo de identidades.
3.
Por último, el usuario de la aplicación puede utilizar entonces esas credenciales de AWS para obtener acceso a otros servicios de AWS como Amazon S3 o DynamoDB.
Para obtener más ejemplos utilizando grupos de identidades y grupos de usuarios, consulte Situaciones de Amazon Cognito habituales (p. 6). Amazon Cognito cumple las normativas SOC 1-3, PCI DSS, ISO 2700 e HIPAA-BAA. Para obtener más información, consulte Servicios de AWS en el ámbito. Véase también Consideraciones de datos regionales (p. 332).
1
Amazon Cognito Guía para desarrolladores Características de Amazon Cognito
Temas • Características de Amazon Cognito (p. 2) • Introducción a Amazon Cognito (p. 3) • Disponibilidad regional (p. 3) • Precios de Amazon Cognito (p. 3) • Uso de la consola de Amazon Cognito (p. 3)
Características de Amazon Cognito Grupos de usuarios Un grupo de usuarios es un directorio de usuarios en Amazon Cognito. Con un grupo de usuarios, los usuarios pueden iniciar sesión en su aplicación web o móvil por medio de Amazon Cognito, o federarse mediante un proveedor de identidad (IdP) de terceros. Tanto si los usuarios inician sesión directamente o a través de un tercero, todos los miembros del grupo de usuarios tienen un perfil de directorio al que puede obtener acceso a través de un SDK. Los grupos de usuarios proporcionan: • Servicios de inscripción e inicio de sesión. • Una interfaz de usuario web personalizable integrada para que los usuarios inicien sesión. • Inicio de sesión a través de redes sociales con Facebook, Google, Login with Amazon e Inicio de sesión con Apple, o por medio de proveedores de identidad SAML y OIDC desde su grupo de usuarios. • Administración de directorios de usuarios y perfiles de usuario. • Características de seguridad como la autenticación multifactor (MFA), comprobaciones de credenciales filtradas, protección de posesión de cuenta y verificación de correo electrónico y teléfono. • Flujos de trabajo personalizado y migración de usuarios a través de disparadores de AWS Lambda. Para obtener más información acerca de los grupos de usuarios, consulte Introducción a los grupos de usuarios (p. 18) y la Referencia de la API de Grupos de usuarios de Amazon Cognito. Grupos de identidades Con un grupo de identidades, los usuarios pueden obtener credenciales temporales de AWS para acceder a servicios de AWS, como Amazon S3 y DynamoDB. Los grupos de identidades admiten usuarios invitados anónimos, así como los siguientes proveedores de identidad que puede utilizar para autenticar a los usuarios para grupos de identidades: • Grupos de usuarios de Amazon Cognito • Inicio de sesión a través de redes sociales con Facebook, Google, Login with Amazon e Inicio de sesión con Apple • Proveedores de OpenID Connect (OIDC) • Proveedores de identidad SAML • Identidades autenticadas por el desarrollador Para guardar información del perfil de usuario, el grupo de identidades se tiene que integrar con un grupo de usuarios. Para obtener más información acerca de los grupos de identidades, consulte Introducción a grupos de identidades de Amazon Cognito (identidades federadas) (p. 199) y la Referencia de la API de grupos de identidades de Amazon Cognito.
2
Amazon Cognito Guía para desarrolladores Introducción a Amazon Cognito
Introducción a Amazon Cognito Para obtener una guía sobre las tareas principales y por dónde empezar, consulte Introducción a Amazon Cognito (p. 5). Para ver vídeos, artículos, documentación y aplicaciones de ejemplo, consulte Recursos para desarrolladores de Amazon Cognito. Para usar Amazon Cognito, necesita disponer de una cuenta de AWS. Para obtener más información, consulte Uso de la consola de Amazon Cognito (p. 3).
Disponibilidad regional Amazon Cognito está disponible en varias regiones de AWS de todo el mundo. En cada región, Amazon Cognito se distribuye en varias zonas de disponibilidad. Estas zonas de disponibilidad están físicamente aisladas entre sí, pero están unidas mediante conexiones de red privadas con un alto nivel de rendimiento y redundancia y con baja latencia. Estas zonas de disponibilidad permiten a AWS ofrecer servicios, incluido Amazon Cognito, con niveles sumamente elevados de disponibilidad y redundancia, así como minimizar la latencia. Para obtener una lista de todas las regiones en las que Amazon Cognito se encuentra actualmente disponible, consulte Regiones y puntos de enlace de AWS en la Referencia general de Amazon Web Services. Para obtener más información acerca del número de zonas de disponibilidad de cada región, consulte Infraestructura global de AWS.
Precios de Amazon Cognito Para obtener más información acerca de los precios de Amazon Cognito, consulte Precios de Amazon Cognito.
Uso de la consola de Amazon Cognito Puede utilizar la consola de Amazon Cognito para crear y administrar los grupos de usuarios y grupos de identidades.
Para utilizar la consola de Amazon Cognito 1.
Para utilizar Amazon Cognito, tiene que inscribirse para obtener una cuenta de AWS.
2.
Vaya a la consola de Amazon Cognito. Es posible que se le soliciten sus credenciales de AWS.
3.
Para crear o editar un grupo de usuarios, elija Manage your User Pools (Administrar sus grupos de usuarios). Para obtener más información, consulte Introducción a los grupos de usuarios (p. 18).
4.
Para crear o editar un grupo de identidades, elija Manage Identity Pools (Administrar grupos de identidades). Para obtener más información, consulte Introducción a grupos de identidades de Amazon Cognito (identidades federadas) (p. 199). 3
Amazon Cognito Guía para desarrolladores Uso de la consola de Amazon Cognito
La consola de Amazon Cognito forma parte de la Consola de administración de AWS, que proporciona información sobre su cuenta y la facturación. Para obtener más información, consulte Trabajar con la Consola de administración de AWS.
4
Amazon Cognito Guía para desarrolladores
Introducción a Amazon Cognito En esta sección se describen las tareas de Amazon Cognito principales y por dónde empezar. Para obtener información general sobre Amazon Cognito, consulte ¿Qué es Amazon Cognito? (p. 1). Los dos principales componentes de Amazon Cognito son los grupos de usuarios y los grupos de identidades. Los grupos de usuarios son directorios de usuarios que proporcionan a los usuarios de las aplicaciones móviles y web opciones para inscribirse e iniciar sesión. Los grupos de identidades proporcionan las credenciales de AWS para conceder a los usuarios acceso a otros servicios de AWS. Puede utilizar los grupos de usuarios y grupos de identidades juntos o por separado. Tareas principales y por dónde empezar Agregar inscripción e inicio de sesión con un grupo de usuarios 1.
Crear un directorio de usuarios con un grupo de usuarios.
2. 3. 4.
Añadir una aplicación para habilitar la interfaz de usuario alojada. Añadir inicio de sesión de redes sociales a un grupo de usuarios. Añadir inicio de sesión a través de proveedores de identidad (IdP) basados en SAML a un grupo de usuarios.
5.
Añadir inicio de sesión a través de proveedores de identidad OpenID Connect (OIDC) a un grupo de usuarios.
6.
Instalar un SDK de grupo de usuarios.
7.
Personalizar las páginas de inscripción e inicio de sesión de la interfaz de usuario web alojada integrada.
8.
Configurar características de seguridad de grupo de usuarios.
9.
Personalizar flujos de trabajo de grupo de usuarios con disparadores de Lambda.
10. Recopilar datos y campañas de destino con análisis de Amazon Pinpoint. Administrar usuarios en grupos de usuarios • Inscribirse y confirmar cuentas de usuario. • Crear cuentas de usuario como administrador • Administrar y buscar cuentas de usuario. • Añadir grupos a un grupo de usuarios. • Importar usuarios en un grupo de usuarios. Acceder a recursos Situaciones de Amazon Cognito habituales: • Autenticar con un grupo de usuarios. • Obtener acceso a los recursos de backend a través de un grupo de usuarios. • Acceder a API Gateway y a Lambda a través de un grupo de usuarios. • Acceder a servicios de AWS con un grupo de usuarios y un grupo de identidades. • Acceder a los servicios de AWS a través de un tercero y un grupo de identidades. • Acceder a recursos de AWS AppSync a través de un grupo de usuarios o un grupo de identidades.
5
Amazon Cognito Guía para desarrolladores Autenticar con un grupo de usuarios
Situaciones de Amazon Cognito habituales En este tema se describen seis situaciones habituales de uso de Amazon Cognito. Los dos principales componentes de Amazon Cognito son los grupos de usuarios y los grupos de identidades. Los grupos de usuarios son directorios de usuarios que proporcionan a los usuarios de las aplicaciones móviles y web opciones para inscribirse e iniciar sesión. Los grupos de identidades proporcionan las credenciales de AWS para conceder a los usuarios acceso a otros servicios de AWS. Un grupo de usuarios es un directorio de usuarios en Amazon Cognito. Los usuarios de la aplicación pueden iniciar sesión directamente a través de un grupo de usuarios o pueden federarse a través de un proveedor de identidades (IdP) externo. El grupo de usuarios administra la sobrecarga que conlleva el tratamiento de los tokens que se devuelven desde el inicio de sesión de redes sociales mediante Facebook, Google, Amazon y Apple, así como de los IdP de OpenID Connect (OIDC) y SAML. Tanto si los usuarios inician sesión directamente o a través de un tercero, todos los miembros del grupo de usuarios tienen un perfil de directorio al que se puede obtener acceso mediante un SDK. Con un grupo de identidades, los usuarios pueden obtener credenciales temporales de AWS para obtener acceso a servicios de AWS, como Amazon S3 y DynamoDB. Los grupos de identidades admiten usuarios invitados anónimos, así como la federación por medio de proveedores de identidad de terceros. Temas • Autenticar con un grupo de usuarios (p. 6) • Acceso a los recursos del lado del servidor con un grupo de usuarios (p. 7) • Acceso a recursos con API Gateway y Lambda mediante un grupo de usuarios (p. 7) • Acceso a servicios de AWS con un grupo de usuarios y un grupo de identidades (p. 8) • Autenticar con un tercero y acceder a servicios de AWS con un grupo de identidades (p. 9) • Acceda a los recursos de AWS AppSync con Amazon Cognito (p. 9)
Autenticar con un grupo de usuarios Puede permitir que los usuarios se autentiquen con un grupo de usuarios. Los usuarios de la aplicación pueden iniciar sesión directamente a través de un grupo de usuarios o pueden federarse a través de un proveedor de identidades (IdP) externo. El grupo de usuarios administra la sobrecarga que conlleva el tratamiento de los tokens que se devuelven desde el inicio de sesión de redes sociales mediante Facebook, Google, Amazon y Apple, así como de los IdP de OpenID Connect (OIDC) y SAML. Tras una autenticación correcta, la aplicación web o móvil recibirá tokens de grupos de usuarios desde Amazon Cognito. Puede utilizar estos tokens para recuperar las credenciales de AWS que permitan a su aplicación obtener acceso a otros servicios de AWS o podría elegir utilizarlos para controlar el acceso a los recursos del lado del servidor o a Amazon API Gateway. Para obtener más información, consulte Flujo de autenticación de los grupos de usuarios (p. 314) y Uso de tokens con grupos de usuarios (p. 158).
6
Amazon Cognito Guía para desarrolladores Acceso a los recursos del lado del servidor
Acceso a los recursos del lado del servidor con un grupo de usuarios Tras un inicio de sesión de grupo de usuarios correcto, la aplicación web o móvil recibirá tokens de grupos de usuarios desde Amazon Cognito. Puede utilizar los tokens para controlar el acceso a los recursos del lado del servidor. También puede crear conjuntos de grupos de usuarios para administrar permisos y representar diferentes tipos de usuarios. Para obtener más información sobre el uso de grupos para controlar el acceso a los recursos;, consulte Agregar grupos a un grupo de usuarios (p. 136).
Una vez que haya configurado un dominio para el grupo de usuarios, Amazon Cognito aprovisiona una interfaz de usuario web alojada que le permite agregar páginas de inscripción e inicio de sesión a la aplicación. Con esta base de OAuth 2.0, puede crear su propio servidor de recursos y permitir que los usuarios obtengan acceso a los recursos protegidos. Para obtener más información, consulte Definir servidores de recursos para el grupo de usuarios (p. 45). Para obtener más información sobre la autenticación de grupos de usuarios, consulte Flujo de autenticación de los grupos de usuarios (p. 314) y Uso de tokens con grupos de usuarios (p. 158).
Acceso a recursos con API Gateway y Lambda mediante un grupo de usuarios Puede permitir que los usuarios obtengan acceso a la API a través de API Gateway. API Gateway valida los tokens a partir de una correcta autenticación de grupos de usuarios y los utiliza para conceder acceso a sus usuarios a los recursos incluidas las funciones Lambda o su propia API. Puede utilizar grupos en un grupo de usuarios para controlar permisos con API Gateway mediante el mapeo de pertenencia a grupo a roles de IAM. Los grupos a los que pertenece un usuario están incluidos en el token de ID proporcionado por un grupo de usuarios cuando el usuario de la aplicación inicia sesión. Para obtener más información acerca de los conjuntos de grupos de usuarios, consulte Agregar grupos a un grupo de usuarios (p. 136).
7
Amazon Cognito Guía para desarrolladores Acceso a servicios de AWS con un grupo de usuarios y un grupo de identidades
Puede enviar sus tokens de grupo de usuarios con una solicitud a API Gateway para la verificación por medio de una función Lambda de autorizador de Amazon Cognito. Para obtener más información acerca de API Gateway, consulte Uso de API Gateway con Grupos de usuarios de Amazon Cognito.
Acceso a servicios de AWS con un grupo de usuarios y un grupo de identidades Tras una autenticación correcta mediante el grupo de usuarios, la aplicación web o móvil recibirá tokens de grupos de usuarios desde Amazon Cognito. Puede intercambiarlos por acceso temporal a otros servicios de AWS con un grupo de identidades. Para obtener más información, consulte Acceso a los servicios de AWS utilizando un grupo de identidades después del inicio de sesión (p. 168) y Introducción a grupos de identidades de Amazon Cognito (identidades federadas) (p. 199).
8
Amazon Cognito Guía para desarrolladores Autenticar con un tercero y acceder a servicios de AWS con un grupo de identidades
Autenticar con un tercero y acceder a servicios de AWS con un grupo de identidades Puede habilitar a los usuarios para que obtengan acceso a los servicios de AWS por medio de un grupo de identidades. Un grupo de identidades requiere un token de proveedor de identidad de un usuario que se haya autenticado mediante un proveedor de identidad de terceros (o nada si se trata de un invitado anónimo). A cambio, el grupo de identidades concede credenciales de AWS temporales que puede utilizar para acceder a otros servicios de AWS. Para obtener más información, consulte Introducción a grupos de identidades de Amazon Cognito (identidades federadas) (p. 199).
Acceda a los recursos de AWS AppSync con Amazon Cognito Puede conceder acceso a los usuarios a los recursos de AWS AppSync con los tokens de una autenticación de Amazon Cognito realizada correctamente (desde un grupo de usuarios o un grupo de identidades). Para obtener más información, consulte Acceder a AWS AppSync y a orígenes de datos con grupos de usuarios o identidades federadas.
9
Amazon Cognito Guía para desarrolladores Acceda a los recursos de AWS AppSync con Amazon Cognito
10
Amazon Cognito Guía para desarrolladores Crear un grupo de usuarios
Amazon CognitoTutoriales de Los dos principales componentes de Amazon Cognito son los grupos de usuarios y los grupos de identidades. Los grupos de usuarios son directorios de usuarios que proporcionan a los usuarios de las aplicaciones móviles y web opciones para inscribirse e iniciar sesión. Los grupos de identidades proporcionan las credenciales de AWS para conceder a los usuarios acceso a otros servicios de AWS. Temas • Tutorial: Creación de un grupo de usuarios (p. 11) • Tutorial: Creación de un grupo de identidades (p. 11) • Tutorial: Limpieza de los recursos de AWS (p. 12)
Tutorial: Creación de un grupo de usuarios Con un grupo de usuarios, los usuarios pueden iniciar sesión en su aplicación web o móvil a través de Amazon Cognito.
Para crear un grupo de usuarios 1.
Vaya a la consola de Amazon Cognito. Es posible que se le soliciten sus credenciales de AWS.
2.
Elija Manage User Pools (Administrar grupos de usuarios).
3.
Elija Create a user pool.
4.
Proporcione un nombre para el grupo de usuarios y elija Review defaults (Revisar valores predeterminados) para guardar el nombre.
5.
En la página Review (Revisar), elija Create pool (Crear grupo).
Recursos relacionados Para obtener más información acerca de los grupos de usuarios, consulte Grupos de usuarios de Amazon Cognito (p. 17). Consulte también Flujo de autenticación de los grupos de usuarios (p. 314) y Uso de tokens con grupos de usuarios (p. 158).
Tutorial: Creación de un grupo de identidades Con un grupo de identidades, los usuarios pueden obtener credenciales temporales de AWS para acceder a servicios de AWS, como Amazon S3 y DynamoDB.
Para crear un grupo de identidades 1.
Vaya a la consola de Amazon Cognito. Es posible que se le soliciten sus credenciales de AWS.
2.
Seleccione Manage Identity Pools (Administrar grupos de identidades)
3.
Elija Create new identity pool.
4.
Escriba un nombre para el grupo de identidades.
11
Amazon Cognito Guía para desarrolladores Recursos relacionados
5. 6.
Para habilitar las identidades sin autenticar, seleccione Enable access to unauthenticated identities (Habilitar acceso a identidades sin autenticar) en la sección Unauthenticated identities contraíble (Identidades no autenticadas). Elija Create Pool.
7.
Se le solicitará acceso a sus recursos de AWS. Elija Allow (Permitir) para crear los dos roles predeterminados asociados a su grupo de identidades: uno para los usuarios sin autenticar y otro para los usuarios autenticados. Estos roles predeterminados proporcionan al grupo de identidades acceso a Amazon Cognito Sync. Puede modificar los roles asociados a su grupo de identidades en la consola de IAM.
8.
Anote el número de ID del grupo de identidades. Lo usará más tarde para configurar políticas que permitan a los usuarios de la aplicación tener acceso a otros servicios de AWS, como Amazon Simple Storage Service o DynamoDB
Recursos relacionados Para obtener más información sobre los grupos de identidades, consulte Amazon CognitoGrupos de identidades de (identidades federadas) (p. 199). Para ver un ejemplo de S3 con un grupo de identidades, consulte el tema sobre carga de fotos en Amazon S3 desde un navegador.
Tutorial: Limpieza de los recursos de AWS Para eliminar un grupo de identidades 1.
Vaya a la consola de Amazon Cognito. Es posible que se le soliciten sus credenciales de AWS.
2. 3.
5.
Seleccione Manage Identity Pools (Administrar grupos de identidades). Elija el nombre del grupo de identidades que desee eliminar. Aparecerá la página Dashboard (Panel) del grupo de identidades. En la esquina superior derecha de la página Dashboard (Panel), elija Edit identity pool (Editar grupo de identidades). Aparecerá la página Edit identity pool (Editar grupo de identidades). Desplácese hacia abajo y elija Delete identity pool (Eliminar grupo de identidades) para ampliarlo.
6. 7.
Elija Delete identity pool (Eliminar grupo de identidades). Elija Delete pool (Eliminar grupo).
4.
Para eliminar grupo de usuarios 1.
Vaya a la consola de Amazon Cognito. Es posible que se le soliciten sus credenciales de AWS.
2.
Manage User Pools (Administrar grupos de usuarios).
3. 4. 5.
Elija el grupo de usuarios que creó en el paso anterior. En la página Domain name (Nombre de dominio), bajo App integration (Integración de aplicación), seleccione Delete domain (Eliminar dominio). Elija Delete domain (Eliminar dominio) cuando se le pida confirmación.
6. 7. 8.
Vaya a la página General Settings (Configuración general). Seleccione Delete pool (Eliminar grupo) en la esquina superior derecha de la página. Escriba delete y elija Delete pool cuando se le pida confirmación.
12
Amazon Cognito Guía para desarrolladores Autenticación de Amazon Cognito con el marco AWS Amplify
Integración de Amazon Cognito con aplicaciones web y móviles Cuando nuevos usuarios descubren una aplicación o cuando los usuarios existentes regresan a ella, lo primero que hacen es registrarse o iniciar sesión. Mediante la integración de Amazon Cognito con el código de cliente, se conecta la aplicación a la funcionalidad de AWS de backend que asiste en los flujos de trabajo de autenticación y autorización. La aplicación utilizará la API de Amazon Cognito para, por ejemplo, crear nuevos usuarios en el grupo de usuarios, recuperar tokens de grupos de usuarios y obtener credenciales temporales del grupo de identidades. Para integrar Amazon Cognito con su aplicación web o móvil, utilice las bibliotecas SDKs y AWS Amplify que proporciona el marco de trabajo .
Autenticación de Amazon Cognito con el marco AWS Amplify AWS Amplify ofrece servicios y bibliotecas para desarrolladores web y móviles. Con AWS Amplify, se pueden crear aplicaciones que se integren con entornos de backend compuestos por servicios de AWS. Para aprovisionar su entorno de backend e integrar los servicios de AWS con el código de cliente, utilice el marco AWS Amplify. El marco ofrece una interfaz de línea de comandos (CLI) interactiva que le ayuda a configurar recursos de AWS para características que se organizan en categorías, como análisis, almacenamiento y autenticación, entre muchas otras. El marco también proporciona SDKs de alto nivel y bibliotecas para plataformas web y móviles, como iOS, Android y JavaScript. Entre los marcos de JavaScript compatibles se incluyen React, React Native, Angular, Ionic y Vue. Cada una de las bibliotecas SDKs y incluye operaciones de autenticación que puede utilizar para implementar los flujos de trabajo de autenticación que Amazon Cognito impulsa. Para utilizar el marco de trabajo AWS Amplify para añadir la autenticación a la aplicación, consulte la documentación de autorización de AWS Amplify para su plataforma: • AWS Amplify Autenticación de para JavaScript • AWS Amplify Autenticación de para iOS • AWS Amplify Autenticación de para Android
13
Amazon Cognito Guía para desarrolladores Tenencia múltiple basada en grupos de usuarios
Prácticas recomendadas para aplicaciones de varios inquilinos Grupos de usuarios de Amazon Cognito se puede utilizar para proteger aplicaciones de varios inquilinos pequeños donde el número de inquilinos y el volumen esperado se alinean con la cuota de Amazon Cognito servicio relacionada. Un caso de uso común del diseño de varios inquilinos es la ejecución de cargas de trabajo para admitir la prueba de varias versiones de una aplicación. El diseño de varios inquilinos también es útil para probar una sola aplicación con diferentes conjuntos de datos, lo que permite el uso completo de los recursos del clúster.
Note Amazon Cognito Las cuotas se aplican por AWS cuenta y región. Estas cuotas se comparten entre todos los inquilinos de su aplicación. Revise las cuotas de Amazon Cognito servicio y asegúrese de que la cuota cumple el volumen esperado y el número previsto de inquilinos en su aplicación. Dispone de cuatro formas de proteger aplicaciones de varios inquilinos: grupos de usuarios de , clientes de aplicaciones, grupos o atributos personalizados. Temas • Tenencia múltiple basada en grupos de usuarios (p. 14) • Aplicación de varios inquilinos basados en el cliente (p. 15) • Varios inquilinos basados en grupos (p. 15) • Tenencia múltiple personalizada basada en atributos (p. 16) • Recomendaciones de seguridad de tenencia múltiple (p. 16)
Tenencia múltiple basada en grupos de usuarios Con este diseño, puede crear un grupo de usuarios para cada inquilino de la aplicación. Este enfoque proporciona el máximo aislamiento para cada inquilino y le permite implementar diferentes configuraciones para cada inquilino. El aislamiento de inquilinos por grupo de usuarios le ofrece flexibilidad en el mapeo de usuario a propietario. También permite varios perfiles para el mismo usuario. Sin embargo, cada usuario tiene que inscribirse individualmente para cada inquilino al que tenga acceso. El uso de este enfoque le permite configurar la interfaz de usuario alojada para cada inquilino de forma independiente y redirigir a los usuarios a su instancia específica de inquilino de la aplicación. Este enfoque también facilita la integración con servicios de backend como API Gateway. Le recomendamos este enfoque en los siguientes casos. • La aplicación tiene diferentes configuraciones para cada inquilino. Por ejemplo, los requisitos de residencia de datos, la política de contraseñas y las configuraciones de MFA pueden ser diferentes para cada inquilino. • La aplicación tiene un mapeo de roles de usuario a propietario complejo. Por ejemplo, un único usuario podría ser un “Estudiante” en la tenencia A y el mismo usuario también podría ser un “Mensor” en la tenencia B. • La aplicación utiliza la interfaz de usuario Amazon Cognito alojada predeterminada como método de autenticación principal para los usuarios nativos. (Los usuarios nativos son los que se han creado en el grupo de usuarios con el nombre de usuario y la contraseña).
14
Amazon Cognito Guía para desarrolladores Aplicación de varios inquilinos basados en el cliente
• La aplicación tiene una aplicación multiinquilino en la que cada inquilino obtiene una instancia completa de la infraestructura de la aplicación para su uso. Nivel de esfuerzo El esfuerzo de desarrollo y operación para utilizar este enfoque es elevado. Debe crear componentes de incorporación y administración de inquilinos en la aplicación que utilice las operaciones de la API de Amazon Cognito y las herramientas de automatización. Estos componentes son necesarios para crear los recursos necesarios para cada inquilino. También debe implementar una interfaz de usuario de coincidencia de inquilinos. Además, debe añadir lógica a la aplicación que permita a los usuarios inscribirse e iniciar sesión en el grupo de usuarios del inquilino correspondiente.
Note El inicio rápido de identidad y aislamiento SaaS con Amazon Cognito proporciona arquitectura de referencia e implementación de ejemplo para el enfoque de grupo de usuarios por propietario.
Aplicación de varios inquilinos basados en el cliente Con la tenencia múltiple basada en el cliente de la aplicación, puede asignar el mismo usuario a varios inquilinos sin necesidad de volver a crear un perfil de usuario. Puede crear un cliente de aplicación para cada inquilino y habilitar el IdP externo del inquilino como el único proveedor de identidad permitido para este cliente de aplicación. Para obtener más información, consulte Configuración de un cliente de aplicación de grupo de usuarios. La tenencia múltiple basada en el cliente de aplicación requiere consideraciones adicionales para el nombre de usuario, la contraseña y mucho más cuando utiliza la interfaz de usuario alojada de para autenticar a los usuarios con cuentas nativas. Cuando la interfaz de usuario alojada está en uso, se crea una cookie de sesión para mantener la sesión para el usuario autenticado. La cookie de sesión también proporciona SSO entre los clientes de la aplicación del mismo grupo de usuarios. Este enfoque se puede utilizar en los siguientes casos: • La aplicación tiene las mismas configuraciones en todos los inquilinos. Por ejemplo, la residencia de datos y la política de contraseñas son las mismas en todos los inquilinos. • La aplicación tiene un mapeo de uno a varios entre el usuario y los inquilinos. Por ejemplo, un único usuario podría tener acceso a varios inquilinos utilizando el mismo perfil. • Dispone de una aplicación multicliente de solo federación donde los inquilinos siempre utilizarán un IdP de identidad externo para iniciar sesión en la aplicación. • Dispone de una aplicación de varios inquilinos B2B y los servicios del backend de inquilinos utilizarán la concesión de credenciales del cliente para obtener acceso a sus servicios. En este caso, puede crear el cliente de aplicación para cada inquilino y compartir el ID de cliente y el secreto con el servicio de backend de inquilino para la autenticación máquina a máquina. Nivel de esfuerzo El esfuerzo de desarrollo para utilizar este enfoque es elevado. Debe implementar la lógica de coincidencia de inquilinos y una interfaz de usuario para asignar un usuario al cliente de aplicación para su inquilino.
Varios inquilinos basados en grupos Con la tenencia múltiple basada en grupos, puede asociar un grupoAmazon Cognito de usuarios de a un inquilino. De esta forma, puede utilizar funcionalidades adicionales a través del control de acceso basado en roles (RBAC). Para obtener más información, consulte Control de acceso basado en roles.
15
Amazon Cognito Guía para desarrolladores Tenencia múltiple personalizada basada en atributos
Tenencia múltiple personalizada basada en atributos Con la tenencia múltiple basada en atributos personalizados, puede almacenar datos de identificación de inquilinos como tenant_id como un atributo personalizado en el perfil de un usuario. A continuación, se gestiona toda la lógica de varios inquilinos en la aplicación y los servicios de backend. Este enfoque le permite utilizar una experiencia de inscripción e inicio de sesión unificada para todos los usuarios. También puede identificar el inquilino del usuario en su aplicación comprobando este atributo personalizado.
Recomendaciones de seguridad de tenencia múltiple Las siguientes recomendaciones pueden ayudar a que su aplicación sea más segura. • Evite utilizar una dirección de correo electrónico no verificada para autorizar el acceso de los usuarios a un inquilino en función de la coincidencia de dominio. No se debe confiar en las direcciones de correo electrónico y los números de teléfono a menos que los verifique la aplicación o que el IdP de identidad externo proporcione una prueba de verificación. Para obtener más información sobre la configuración de estos permisos, consulte Permisos y ámbitos de los atributos. • Asegúrese de que los atributos del perfil de usuario utilizados para identificar inquilinos son atributos inmutables o mutables que pueden cambiar los administradores. Los clientes de aplicación deben tener acceso de solo lectura a estos atributos. • Asegúrese de tener una correspondencia 1:1 entre el IdP externo y el cliente de la aplicación para evitar el acceso no autorizado entre inquilinos. Esto podría ocurrir si un usuario tiene una cookie de Amazon Cognito sesión válida y su IdP externo está permitido en varios clientes de aplicación. • Al implementar la lógica de coincidencia y autorización de inquilinos en su aplicación, asegúrese de que los criterios utilizados para autorizar el acceso de los usuarios a los inquilinos no puedan modificarlos los propios usuarios. También debe asegurarse de que los administradores del proveedor de identidad del inquilino no puedan modificar el acceso de los usuarios (si se utiliza un IdP de identidad externo para la federación).
16
Amazon Cognito Guía para desarrolladores
Grupos de usuarios de Amazon Cognito Un grupo de usuarios es un directorio de usuarios en Amazon Cognito. Con un grupo de usuarios, los usuarios pueden iniciar sesión en su aplicación web o móvil a través de Amazon Cognito. Los usuarios también pueden iniciar sesión a través de proveedores de identidad sociales como Google, Facebook, Amazon o Apple y a través de proveedores de identidad SAML. Tanto si los usuarios inician sesión directamente o a través de un tercero, todos los miembros del grupo de usuarios tienen un perfil de directorio al que se puede obtener acceso mediante un kit de desarrollo de software (SDK). Los grupos de usuarios proporcionan: • Servicios de inscripción e inicio de sesión. • Una interfaz de usuario web personalizable integrada para que los usuarios inicien sesión. • Inicio de sesión a través de redes sociales con Facebook, Google, Login with Amazon e Inicio de sesión con Apple, o por medio de proveedores de identidad SAML desde su grupo de usuarios. • Administración de directorios de usuarios y perfiles de usuario. • Características de seguridad como la autenticación multifactor (MFA), comprobaciones de credenciales filtradas, protección de posesión de cuenta y verificación de correo electrónico y teléfono. • Flujos de trabajo personalizado y migración de usuarios a través de disparadores de AWS Lambda. Después de autenticar a un usuario correctamente, Amazon Cognito genera tokens web de JSON (JWT) que puede utilizar para proteger y autorizar el acceso a sus propias API o intercambiar por credenciales de AWS.
Amazon Cognito proporciona control de tokens a través de los SDK Identity de Grupos de usuarios de Amazon Cognito para JavaScript, Android e iOS. Consulte Introducción a los grupos de usuarios (p. 18) y Uso de tokens con grupos de usuarios (p. 158). Los dos componentes principales de Amazon Cognito son los grupos de usuarios y los grupos de identidades. Los grupos de identidades proporcionan las credenciales de AWS para conceder a los usuarios acceso a otros servicios de AWS. Para permitir a los usuarios de su grupo de usuarios acceder a recursos de AWS, puede configurar un grupo de identidades para intercambiar tokens de grupo de usuarios para credenciales de AWS. Para obtener más información, consulte Acceso a los servicios de AWS utilizando un grupo de identidades después del inicio de sesión (p. 168) y Introducción a grupos de identidades de Amazon Cognito (identidades federadas) (p. 199). Temas • Introducción a los grupos de usuarios (p. 18) • Uso de la interfaz de usuario alojada en Amazon Cognito para registrarse e iniciar sesión (p. 29) • Agregar inicio de sesión de grupo de usuarios a través de un tercero (p. 48) • Personalizar flujos de trabajo de grupos de usuarios con disparadores de Lambda (p. 72)
17
Amazon Cognito Guía para desarrolladores Introducción a los grupos de usuarios
• Usar análisis de Amazon Pinpoint con grupos de usuarios de Amazon Cognito (p. 121) • Administración de usuarios en grupos de usuarios (p. 124) • Configuración de correo electrónico para grupos de usuarios de Amazon Cognito (p. 154) • Uso de tokens con grupos de usuarios (p. 158) • Acceso a los recursos después de una autenticación correcta con el grupo de usuarios (p. 166) • Referencia de grupos de usuarios (Consola de administración de AWS) (p. 170) • Gestión de respuestas de error (p. 196)
Introducción a los grupos de usuarios Estos pasos describen la configuración de un grupo de usuarios con la consola de Amazon Cognito. Para una guía de dónde comenzar con Amazon Cognito, consulte Introducción a Amazon Cognito (p. 5). Temas • Requisito previo: inscribirse en una cuenta de AWS (p. 18) • Paso 1. Crear un conjunto de usuarios (p. 18) • Paso 2. Añadir una aplicación para habilitar la interfaz de usuario web alojada (p. 19) • Paso 3. Añadir inicio de sesión de redes sociales a un grupo de usuarios (opcional) (p. 21) • Paso 4. Añadir inicio de sesión con un proveedor de identidad SAML a un grupo de usuarios (opcional) (p. 26) • Pasos siguientes (p. 28)
Requisito previo: inscribirse en una cuenta de AWS Para usar Amazon Cognito, necesita disponer de una cuenta de AWS. Si todavía no tiene una, ejecute el procedimiento siguiente para inscribirse:
Para inscribirse en una cuenta de AWS 1.
Abra https://portal.aws.amazon.com/billing/signup.
2.
Siga las instrucciones en línea. Parte del procedimiento de inscripción consiste en recibir una llamada telefónica e indicar un código de verificación en el teclado del teléfono.
Paso siguiente Paso 1. Crear un conjunto de usuarios (p. 18)
Paso 1. Crear un conjunto de usuarios Utilizando un grupo de usuarios de Amazon Cognito, puede crear y mantener un directorio de usuarios y añadir la función de inscripción y de inicio de sesión a la aplicación móvil o la aplicación web.
Para crear un grupo de usuarios 1.
Vaya a la consola de Amazon Cognito. Es posible que se le soliciten sus credenciales de AWS.
2.
Elija Manage User Pools (Administrar grupos de usuarios).
3.
En la esquina superior derecha de la página, elija Create a User Pool (Crear un grupo de usuarios).
18
Amazon Cognito Guía para desarrolladores Paso 2. Añadir una aplicación para habilitar la interfaz de usuario web alojada
4.
Proporcione un nombre para el grupo de usuarios y elija Review Defaults (Revisar valores predeterminados) para guardar el nombre.
5.
En la esquina superior izquierda de la página, elija Attributes (Atributos), elija Email address or phone number (Dirección de correo electrónico o número de teléfono) y Allow email addresses (Permitir direcciones de correo electrónico); a continuación, elija Next step (Paso siguiente) para guardar.
Note Le recomendamos que deshabilite la sensibilidad a mayúsculas y minúsculas en el atributo username antes de crear el grupo de usuarios. Por ejemplo, cuando se selecciona esta opción, los usuarios podrán iniciar sesión usando “usuario” o “Usuario”. Habilitar esta opción también permite que los alias de preferred_username y email no sean sensibles a mayúsculas, además del atributo username. Para obtener más información, consulte CreateUserPool en la Referencia de la API de Grupos de usuarios de Amazon Cognito. 6.
En el menú de navegación izquierdo, elija Review (Revisar).
7.
Revise la información del grupo de usuarios y haga los cambios necesarios. Cuando la información sea correcta, elija Create pool (Crear grupo).
Paso siguiente Paso 2. Añadir una aplicación para habilitar la interfaz de usuario web alojada (p. 19)
Paso 2. Añadir una aplicación para habilitar la interfaz de usuario web alojada Después de crear un grupo de usuarios, puede crear una aplicación para utilizar las páginas web integradas para inscripción e inicio de sesión de los usuarios.
Para crear una aplicación en el grupo de usuarios 1.
Vaya a la consola de Amazon Cognito. Es posible que se le soliciten sus credenciales de AWS.
2.
Elija Manage User Pools (Administrar grupos de usuarios).
3.
Elija un grupo de usuarios existente en la lista o cree un grupo de usuarios.
4.
En la barra de navegación en el lado izquierdo de la página, elija App clients (Clientes de aplicación) en General settings (Configuración general).
5.
Elija Add an app client.
6.
Asigne un nombre a la aplicación.
7.
Desactive la opción Generate client secret (Generar secreto de cliente) para los fines de este ejercicio de introducción, ya que no sería seguro enviarlo en la URL con JavaScript en el lado del cliente. El secreto de cliente lo usan las aplicaciones con un componente en el servidor capaz de asegurarlo.
8.
Elija Create app client.
9.
Anote el valor de App client ID (ID de cliente de aplicación).
10. Elija Return to pool details (Volver a los detalles del grupo). 11. Elija App client settings (Configuración del cliente de aplicación) en la barra de navegación del lado izquierdo de la página de la consola. 12. Seleccione Cognito User Pool (Grupo de usuarios de Cognito) como uno de los Enabled Identity Providers (Proveedores de identidad habilitados).
Note Para iniciar sesión con proveedores de identidad externos, como Facebook, Amazon, Google o Apple, o mediante proveedores de identidad OpenID Connect (OIDC) o SAML, primero 19
Amazon Cognito Guía para desarrolladores Paso 2. Añadir una aplicación para habilitar la interfaz de usuario web alojada
configúrelos como se describe a continuación y, después, vuelva a la página App client settings (Configuración del cliente de aplicación) para habilitarlos. 13. Introduzca una URL de devolución de llamada para el servidor de autorización de Amazon Cognito que se llama una vez autenticados los usuarios. En el caso de aplicaciones web, la URL debe empezar con https:// como, por ejemplo, https://www.ejemplo.com. En el caso de aplicaciones de iOS o Android, puede utilizar una URL de devolución de llamada como myapp://. 14. Introduzca una URL de cerrar sesión. 15. Seleccione Authorization code grant (Concesión de código de autorización) para devolver un código de autorización que se intercambie por tokens de grupos de usuarios. Debido a que los tokens nunca se exponen directamente a un usuario final, es menos probable que se vean comprometidos. Sin embargo, se requiere una aplicación personalizada en el backend para intercambiar el código de autorización para tokens de grupos de usuarios. Por motivos de seguridad, le recomendamos utilizar el flujo de concesión de código de autorización junto con PKCE (Proof Key for Code Exchange, clave de prueba para intercambio de código) para las aplicaciones móviles. 16. En Allowed OAuth Flows (Flujos de OAuth permitidos), seleccione Implicit grant (Concesión implícita) para que se devuelvan tokens web de JSON (JWT) de grupo de usuarios desde su Amazon Cognito. Puede utilizar este flujo cuando no hay backend disponibles para intercambiar un código de autorización para tokens. También es útil para depurar tokens.
Note Puede habilitar tanto Authorization code grant (Concesión de código de autorización) como Implicit code grant (Concesión de código implícita) y, a continuación, utilizar cada concesión según sea necesario. 17. A menos que desee excluir específicamente alguno, seleccione las casillas de verificación de todos los Allowed OAuth scopes (Ámbitos de OAuth permitidos).
Note Seleccione Client credentials (Credenciales de clientes) solo si la aplicación debe solicitar tokens de acceso en su propio nombre y no en nombre de un usuario. 18. Elija Save changes. 19. En la página Domain name (Nombre de dominio), introduzca un prefijo de dominio que esté disponible. 20. Anote la dirección de dominio completa. 21. Elija Save changes. Para ver su página de inicio de sesión Puede ver la página web de inicio de sesión de la interfaz de usuario alojada con la siguiente URL. Anote el response_type. En este caso, response_type=code para la concesión de código de autorización.
https://your_domain/login? response_type=code&client_id=your_app_client_id&redirect_uri=your_callback_url
Puede ver la página web de inicio de sesión de la interfaz de usuario alojada con la siguiente dirección URL para la concesión de código implícita, donde response_type = token. Tras un inicio de sesión correcto, Amazon Cognito devuelve tokens de grupo de usuarios a su barra de direcciones de navegador web.
https://your_domain/login? response_type=token&client_id=your_app_client_id&redirect_uri=your_callback_url
20
Amazon Cognito Guía para desarrolladores Paso 3. Añadir inicio de sesión de redes sociales a un grupo de usuarios (opcional)
Puede encontrar el token de identidad de JSON Web Token (JWT) a continuación del parámetro #idtoken= en la respuesta. A continuación, le mostramos una respuesta de ejemplo de una solicitud de concesión implícita. La cadena del token de identidad será mucho más larga.
https://www.example.com/ #id_token=123456789tokens123456789&expires_in=3600&token_type=Bearer
Puede descodificar y verificar los tokens de grupos de usuarios utilizando AWS Lambda, consulte la sección relativa a ladescodificación y verificación de tokens JWT de Amazon Cognito en el sitio web de AWS GitHub. Los tokens de grupos de usuarios de Amazon Cognito se firman con un algoritmo RS256. Es posible que tenga que esperar un minuto para actualizar el navegador antes de que aparezcan los cambios que haya hecho en la consola. Su dominio aparece en la página Domain Name (Nombre de dominio). Su ID de cliente de aplicación y URL de devolución de llamada se muestran en la página General settings (Configuración general).
Paso siguiente Paso 3. Añadir inicio de sesión de redes sociales a un grupo de usuarios (opcional) (p. 21)
Paso 3. Añadir inicio de sesión de redes sociales a un grupo de usuarios (opcional) Puede habilitar a los usuarios de la aplicación para que inicien sesión a través de un proveedor de identidad social (IdP) como, por ejemplo, Facebook, Google, Amazon y Apple. Tanto si los usuarios inician sesión directamente o a través de un tercero, todos los usuarios tienen un perfil en el grupo de usuarios. Omita este paso si no desea agregar inicio de sesión a través de un proveedor de identidad de inicio de sesión de redes sociales.
Paso 1: Registrarse en un proveedor de identidad social Antes de crear un proveedor de identidad social con Amazon Cognito, debe registrar su aplicación en el proveedor de identidad para recibir un ID y un secreto de cliente.
Para registrar una aplicación en Facebook 1.
Cree una cuenta de desarrollador con Facebook.
2.
Inicie sesión con sus credenciales de Facebook.
3.
En el menú My Apps (Mis aplicaciones), elija Create New App (Crear nueva aplicación).
4.
Asigne un nombre a la aplicación de Facebook y elija Create App ID (Crear Id. de aplicación).
5.
En la barra de navegación de la izquierda, elija Settings (Configuración) y luego Basic (Básica).
6.
Tome nota del valor de App ID (ID de aplicación) y de App Secret (Secreto de la aplicación). Los usará en la sección siguiente.
7.
Elija + Add Platform (+ Agregar plataforma) en la parte inferior de la página.
8.
Elija Website (Sitio web).
9.
En Website (Sitio web), escriba el dominio del grupo de usuarios con el punto de enlace /oauth2/ idpresponse en Site URL (URL del sitio).
21
Amazon Cognito Guía para desarrolladores Paso 3. Añadir inicio de sesión de redes sociales a un grupo de usuarios (opcional)
https:///oauth2/idpresponse
10. Elija Save changes. 11. Escriba el dominio del grupo de usuarios en dominios de App Domains (Dominios de la aplicación).
https://
12. Elija Save changes. 13. En la barra de navegación elija Products (Productos) y, a continuación, Set up (Configurar) en Facebook Login (Inicio de sesión con Facebook). 14. En la barra de navegación elija Facebook Login (Inicio de sesión con Facebook) y, a continuación, Settings (Configuración). Escriba su URL de redirección en Valid OAuth Redirect URIs (URI de redireccionamiento de OAuth válidos). Se compone de su dominio de grupo de usuarios con el punto de enlace /oauth2/ idpresponse.
https:///oauth2/idpresponse
15. Elija Save changes.
Para registrar una aplicación en Amazon 1.
Cree una cuenta de desarrollador con Amazon.
2.
Inicie sesión con las credenciales de Amazon.
3.
Debe crear un perfil de seguridad de Amazon para recibir un ID y un secreto de cliente de Amazon. Elija Apps and Services (Aplicaciones y servicios) en la barra de navegación de la parte superior de la página y, a continuación, elija Login with Amazon.
4.
Elija Create a Security Profile (Crear un perfil de seguridad).
5.
Escriba un valor en Security Profile Name (Nombre del perfil de seguridad), en Security Profile Description (Descripción del perfil de seguridad) y en Consent Privacy Notice URL (URL del aviso sobre consentimiento de confidencialidad).
6.
Seleccione Save.
7.
Elija Client ID (ID de cliente) y Client Secret (Secreto de cliente) para mostrar el ID de cliente y el secreto. Los usará en la sección siguiente.
8.
Coloque el cursor sobre el engranaje, elija Web Settings (Configuración de web) y, a continuación, elija Edit (Editar).
9.
Escriba el dominio del grupo de usuarios en Allowed Origins (Orígenes permitidos).
https://
10. Escriba el dominio del grupo de usuarios con el punto de enlace /oauth2/idpresponse en Allowed Return URLs (URL de retorno permitidas).
https:///oauth2/idpresponse
11. Seleccione Save.
22
Amazon Cognito Guía para desarrolladores Paso 3. Añadir inicio de sesión de redes sociales a un grupo de usuarios (opcional)
Para registrar una aplicación en Google 1.
Cree una cuenta de desarrollador con Google.
2.
Iniciar sesión con las credenciales de Google.
3.
Elija CONFIGURE A PROJECT (CONFIGURAR UN PROYECTO).
4.
Escriba un nombre de proyecto y elija NEXT (SIGUIENTE).
5.
Escriba el nombre de su producto y elija NEXT (SIGUIENTE).
6.
Elija Web browser (Navegador web) en la lista desplegable Where are you calling from? (¿Desde dónde llama?).
7.
Escriba el dominio del grupo de usuarios en Authorized JavaScript origins (Orígenes de JavaScript autorizados).
https://
8.
Elija CREATE (CREAR). No utilizará los valores de Client ID (ID de cliente) y Client Secret (Secreto de cliente) de este paso.
9.
Elija DONE (HECHO).
10. Inicie sesión en la consola de Google. 11. En la barra de navegación de la izquierda, elija Credentials (Credenciales). 12. Cree sus credenciales OAuth 2.0 eligiendo OAuth client ID (ID de cliente OAuth) en la lista desplegable Create credentials (Crear credenciales). 13. Elija Web application (Aplicación web). 14. Escriba el dominio del grupo de usuarios en Authorized JavaScript origins (Orígenes de JavaScript autorizados).
https://
15. Escriba el dominio del grupo de usuarios con el punto de enlace /oauth2/idpresponse en Authorized Redirect URIs (URI de redireccionamiento autorizadas).
https:///oauth2/idpresponse
16. Elija Create (Crear) dos veces. 17. Tome nota de los valores de OAuth client ID (ID de cliente OAuth) y Client secret (Secreto de cliente). Los necesitará en la sección siguiente. 18. Elija OK (Aceptar).
Para registrar una aplicación en Apple 1.
Cree una cuenta de desarrollador en Apple.
2.
Inicie sesión con las credenciales de Apple.
3.
En la barra de navegación de la izquierda, elija Certificates, IDs & Profiles (Certificados, identificadores y perfiles).
4.
En la barra de navegación de la izquierda, elija Identifiers (Identificadores).
5.
En la página Identifiers (Identificadores), elija el icono +.
6.
En la página Register a New Identifier (Registrar un nuevo identificador), elija App IDs (ID de aplicaciones) y luego Continue (Continuar).
7.
En la página Register an App ID (Registrar un ID de aplicación), haga lo siguiente: 23
Amazon Cognito Guía para desarrolladores Paso 3. Añadir inicio de sesión de redes sociales a un grupo de usuarios (opcional)
1. En Description (Descripción), escriba una descripción. 2. En App ID Prefix (Prefijo de ID de aplicación), escriba un identificador. Tome nota del valor de App ID Prefix (Prefijo de ID de aplicación), ya que lo necesitará cuando elija Apple como proveedor de identidad en Paso 2: Añadir un proveedor de identidad social al grupo de usuarios (p. 52). 3. En Capabilities (Capacidades), elija Sign In with Apple (Inicio de sesión con Apple) y luego Edit (Editar). 4. En la página Sign in with Apple: App ID Configuration (Inicio de sesión con Apple: configuración de ID de Apple), seleccione la configuración adecuada para su aplicación y luego elija Save (Guardar). 5. Elija Continue. 8.
En la página Confirm your App ID (Confirmar ID de Apple), elija Register (Registrarse).
9.
En la página Identifiers (Identificadores), pase el cursor por encima de App IDs (ID de aplicaciones) en la parte derecha de la página, elija Services IDs (ID de servicios) y luego el icono +.
10. En la página Register a New Identifier (Registrar un nuevo identificador), elija Services IDs (ID de servicios) y luego Continue (Continuar). 11. En la página Register a Services ID (Registrar un ID de servicio), haga lo siguiente: 1. En Description (Descripción), escriba una descripción. 2. En Identifier (Identificador), escriba un identificador. Tome nota del valor de este ID de servicio, ya que lo necesitará cuando elija Apple como proveedor de identidad en Paso 2: Añadir un proveedor de identidad social al grupo de usuarios (p. 52). 3. Seleccione Sign In with Apple (Inicio de sesión con Apple) y luego elija Configure (Configurar). 4. En la página Web Authentication Configuration (Configuración de autenticación web), elija Primary App ID (ID de aplicación principal). En Web Domain (Dominio web), escriba el dominio del grupo de usuarios. En Return URLs (URL de retorno), escriba el dominio del grupo de usuarios e incluya el punto de enlace /oauth2/idpresponse. Por ejemplo:
https:///oauth2/idpresponse
5. Elija Add (Añadir) y, a continuación, elija Save (Guardar). No es necesario que verifique el dominio. 6. Seleccione Continue (Continuar) y, a continuación, Register (Registrarse). 12. En la barra de navegación de la izquierda, elija Keys (Claves). 13. En la página Keys (Claves), elija el icono +. 14. En la página Register a New Key (Registrar una nueva clave), haga lo siguiente: 1. En Key Name (Nombre de clave), escriba un nombre de clave. 2. Elija Sign In with Apple (Inicio de sesión con Apple) y luego elija Configure (Configurar). 3. En la página Configure Key (Configurar clave), elija un Primary App ID (ID de aplicación principal) y luego elija Save (Guardar). 4. Seleccione Continue (Continuar) y, a continuación, Register (Registrarse). 15. En la página Download Your Key (Descargar la clave), elija Download (Descargar) para descargar la clave privada y luego elija Done (Hecho). Necesitará esta clave privada y el valor de Key ID (ID de clave) que se muestra en esta página después de elegir a Apple como proveedor de identidad en Paso 2: Añadir un proveedor de identidad social al grupo de usuarios (p. 52).
Paso 2: Añadir un proveedor de identidad social al grupo de usuarios En esta sección configurará un proveedor de identidad social en el grupo de usuarios utilizando el ID y el secreto de cliente de la sección anterior.
24
Amazon Cognito Guía para desarrolladores Paso 3. Añadir inicio de sesión de redes sociales a un grupo de usuarios (opcional)
Para configurar el proveedor de identidad social de un grupo de usuarios con la Consola de administración de AWS 1.
Vaya a la consola de Amazon Cognito. Es posible que se le soliciten sus credenciales de AWS.
2.
Elija Manage your User Pools.
3.
Elija un grupo de usuarios existente en la lista o cree un grupo de usuarios.
4.
En la barra de navegación de la izquierda, elija Identity providers (Proveedores de identidad).
5.
Elija un proveedor de identidad de red social: Facebook, Google, Login with Amazon o Apple.
6.
Para Google o Login with Amazon, escriba el ID y el secreto de cliente de aplicación que obtuvo del proveedor de identidad social en la sección anterior. Para Facebook, escriba el ID de cliente, el secreto de cliente de aplicación que obtuvo del proveedor de identidad social en la sección anterior, y elija una versión de la API. Recomendamos elegir la versión más reciente disponible posible, ya que cada versión de la API de Facebook tiene un ciclo de vida y una fecha de obsolescencia, por ejemplo, la versión 2.12. Puede cambiar la versión de la API después de su creación si encuentra algún problema. Los ámbitos y atributos de Facebook pueden variar con cada versión de la API, por lo que recomendamos probar su integración.” Para Sign in with Apple (Inicio de sesión con Apple), indique el ID de servicios, el ID de equipo, el ID de clave y la clave privada que ha recibido en la sección anterior.
7.
Escriba los nombres de los ámbitos que desea autorizar. Los ámbitos definen a qué atributos de usuario (como name y email) desea acceder con su aplicación. En el caso de Facebook, deben separarse con comas. En el caso de Google y Login with Amazon, deben separarse con espacios. Para Sign in with Apple (Inicio de sesión con Apple), marque las casillas de verificación de los ámbitos a los que desee acceder. Proveedor de identidad social
Ámbitos de ejemplo
public_profile, email
profile email openid
Login with Amazon
profile postal_code
Inicio de sesión con Apple
email name
Al usuario de la aplicación se le pedirá que esté de acuerdo con proporcionar estos atributos a su aplicación. Para obtener más información acerca de sus ámbitos, consulte la documentación de Google, Facebook, Login with Amazon o Inicio de sesión con Apple. En el caso de Sign in with Apple (Inicio de sesión con Apple), estos son escenarios de usuario en los que es posible que no se devuelvan los ámbitos. • Un usuario final se encuentra con errores después de salir de la página de inicio de sesión de Apple (puede ser un error interno de Cognito o de cualquier cosa que haya escrito el desarrollador). • El identificador de ID de servicio se utiliza en todos los grupos de usuarios u otros servicios de autenticación. • Un desarrollador añade ámbitos adicionales después de que el usuario final haya iniciado sesión (no se recupera ninguna información nueva). • Un desarrollador elimina al usuario y luego el usuario vuelve a iniciar sesión sin quitar la aplicación de su perfil de ID de Apple. 8.
Elija Enable (Habilitar) para el proveedor de identidad social que está configurando.
9.
Elija App client settings (Configuración del cliente de aplicación) en la barra de navegación.
10. Seleccione como proveedor de identidad social uno de los valores de Enabled Identity Providers (Proveedores de identidad habilitados) para la aplicación del grupo de usuarios. 25
Amazon Cognito Guía para desarrolladores Paso 4. Añadir inicio de sesión con un proveedor de identidad SAML a un grupo de usuarios (opcional)
11. Escriba la URL de devolución de llamada en Callback URL(s) (Direcciones URL de devolución de llamada) para la aplicación del grupo de usuarios. Esta es la URL de la página a la que se redirigirá al usuario después de una autenticación correcta.
https://www.example.com
12. Elija Save changes. 13. En la pestaña Attribute mapping (Asignación de atributos), añada asignaciones para al menos los atributos obligatorios, por lo general email, tal y como se indica a continuación: a.
Marque la casilla para elegir el nombre de atributo de Facebook, Google o Amazon, según corresponda. También puede escribir los nombres de atributos adicionales que no se muestran en la consola de Amazon Cognito.
b.
Elija el atributo del grupo de usuarios de destino en la lista desplegable.
c.
Elija Save changes.
d.
Seleccione Go to summary (Ir al resumen).
Paso 3: Probar la configuración del proveedor de identidad social Puede crear una URL de inicio de sesión con los elementos de las dos secciones anteriores. Úselo para probar la configuración del proveedor de identidad social.
https:///login? response_type=code&client_id=&redirect_uri=https://www.example.com
Puede encontrar el dominio en la página de la consola Domain name (Nombre de dominio) del grupo de usuarios. El valor de client_id se encuentra en la página App client settings (Configuración del cliente de aplicación). Use la URL de devolución de llamada para el parámetro redirect_uri. Esta es la URL de la página a la que se redirigirá al usuario después de una autenticación correcta.
Note Se cancelarán las solicitudes que no se completen en un plazo de 5minutos, se le redirigirá a la página de inicio de sesión y, a continuación, se mostrará un mensaje de error Something went wrong.
Paso siguiente Paso 4. Añadir inicio de sesión con un proveedor de identidad SAML a un grupo de usuarios (opcional) (p. 26)
Paso 4. Añadir inicio de sesión con un proveedor de identidad SAML a un grupo de usuarios (opcional) Puede habilitar que los usuarios de la aplicación inicien sesión a través de un proveedor de identidad (IdP) SAML. Tanto si los usuarios inician sesión directamente o a través de un tercero, todos los usuarios tienen un perfil en el grupo de usuarios. Omita este paso si no desea agregar inicio de sesión a través de un proveedor de identidad SAML. Tiene que actualizar su proveedor de identidad SAML y configurar su grupo de usuarios. Consulte la documentación de su proveedor de identidad SAML para obtener información acerca de cómo agregar su grupo de usuarios como relación de confianza o aplicación para su proveedor de identidad SAML 2.0.
26
Amazon Cognito Guía para desarrolladores Paso 4. Añadir inicio de sesión con un proveedor de identidad SAML a un grupo de usuarios (opcional)
También tiene que proporcionar un punto de enlace de consumidor de aserción a su proveedor de identidad SAML. Configure este punto de enlace para enlace POST de SAML 2.0 en su proveedor de identidad SAML: https://.auth..amazoncognito.com/saml2/idpresponse
El prefijo de dominio y el valor de región de su grupo de usuarios se encuentran en la pestaña Domain name (Nombre de dominio) de la consola de Amazon Cognito. Para algunos proveedores de identidad SAML, también tiene que proporcionar el SP urn / URI de destino / ID de entidad del SP, con el formato: urn:amazon:cognito:sp:
Encontrará el ID del grupo de usuarios en la pestaña General settings (Configuración general) de la consola de Amazon Cognito. Asimismo, debe configurar el proveedor de identidad SAML para que proporcione los valores de todos los atributos necesarios en su grupo de usuarios. Normalmente, email es un atributo obligatorio para grupos de usuarios. En ese caso, el proveedor de identidad SAML debe proporcionar un valor email (reclamación) en la aserción SAML. Los grupos de usuarios de Amazon Cognito admiten federación SAML 2.0 con puntos de enlace "postbinding". De esta forma, se suprime la necesidad de que la aplicación recupere o analice las respuestas de aserciones SAML, ya que el grupo de usuarios recibe directamente la respuesta SAML del proveedor de identidad a través de un agente de usuario.
Para configurar un proveedor de identidad SAML 2.0 en su grupo de usuarios 1. 2.
Vaya a la consola de Amazon Cognito. Es posible que se le soliciten sus credenciales de AWS. Manage User Pools (Administrar grupos de usuarios).
3. 4. 5.
Elija un grupo de usuarios existente en la lista o cree un grupo de usuarios. En la barra de navegación de la izquierda, elija Identity providers (Proveedores de identidad). Elija SAML para abrir el cuadro de diálogo de SAML.
6.
En Metadata document (Documento de metadatos), cargue un documento de metadatos del proveedor de identidad SAML. También puede escribir una URL que apunte al documento de metadatos. Para obtener más información, consulte Integración de proveedores de identidad SAML de terceros con Grupos de usuarios de Amazon Cognito (p. 61).
Note
7. 8. 9.
Le recomendamos que proporcione la URL del punto de enlace, si se trata de un punto de enlace público, en lugar de cargar el archivo, ya que de esta forma Amazon Cognito podrá actualizar los metadatos de forma automática. Normalmente, los metadatos se actualizan cada seis horas o antes de que caduquen, lo que ocurra primero. Escriba el nombre del proveedor SAML en Provider name (Nombre de proveedor). Para obtener más información acerca de los nombres de SAML, consulte Elegir nombres de proveedor de identidad SAML (p. 56). Escriba los identificadores de SAML opcionales que desee usar en Identifiers (Identificadores). Seleccione Enable IdP sign out flow (Habilitar el flujo de cierre de sesión en el proveedor de identidad) si desea que el usuario cierre la sesión en el proveedor de identidad SAML al cerrar la sesión en Amazon Cognito. Al activar este flujo, se envía una solicitud de cierre de sesión firmada al proveedor de identidad SAML cuando se llama al Punto de enlace LOGOUT (p. 376).
27
Amazon Cognito Guía para desarrolladores Pasos siguientes
Configure este punto de enlace para consumir las respuestas de cierre de sesión del proveedor de identidad. Este punto de enlace utiliza el método "post binding". https://.auth..amazoncognito.com/saml2/logout
Note Si esta opción está seleccionada y el proveedor de identidad SAML espera una solicitud de cierre de sesión firmada, también se deberá configurar el certificado de firma proporcionado por Amazon Cognito en el proveedor de identidad SAML. El proveedor de identidad SAML procesará la solicitud de cierre de sesión firmada y cerrará la sesión de Amazon Cognito del usuario. 10. Elija Create provider (Crear proveedor). 11. En la pestaña Attribute mapping (Asignación de atributos), añada asignaciones para al menos los atributos obligatorios, por lo general email, tal y como se indica a continuación: a.
Escriba el nombre de atributo SAML tal como aparece en la aserción SAML del proveedor de identidad. Si su proveedor de identidad SAML ofrece aserciones SAML de ejemplo, podría servirle para encontrar el nombre. Algunos proveedores de identidad utilizan nombres sencillos, como email, mientras que otros utilizan nombres similares a este:
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
b.
Elija el atributo del grupo de usuarios de destino en la lista desplegable.
12. Elija Save changes. 13. Seleccione Go to summary (Ir al resumen). Para obtener más información, consulte Agregar proveedores de identidad SAML a un grupo de usuarios (p. 54).
Pasos siguientes Ahora que ha creado un grupo de usuarios, estos son algunos lugares para ir a continuación. Profundice en estas características de grupo de usuarios: • Personalizar las páginas web integradas de inscripción e inicio de sesión (p. 41) • Adición de la autenticación multifactor (MFA) a un grupo de usuarios (p. 333) • Adición de seguridad avanzada a un grupo de usuarios (p. 338) • Personalizar flujos de trabajo de grupos de usuarios con disparadores de Lambda (p. 72) • Usar análisis de Amazon Pinpoint con grupos de usuarios de Amazon Cognito (p. 121) Para obtener información general acerca de la autenticación y la autorización de casos de Amazon Cognito, consulte Situaciones de Amazon Cognito habituales (p. 6). Para obtener acceso a otros servicios de AWS después de una autenticación correcta de grupo de usuarios, consulte Acceso a los servicios de AWS utilizando un grupo de identidades después del inicio de sesión (p. 168). Además de la Consola de administración de AWS y los SDK de grupo de usuarios mencionados anteriormente en esta sección, también puede interactuar con los perfiles de grupo de usuarios usando la AWS Command Line Interface.
28
Amazon Cognito Guía para desarrolladores Uso de la interfaz de usuario alojada
Uso de la interfaz de usuario alojada en Amazon Cognito para registrarse e iniciar sesión La interfaz de usuario alojada de Amazon Cognito proporciona un servidor de autorización compatible con OAuth 2.0. Proporciona la implementación predeterminada de flujos de usuario final como, por ejemplo, registro, autenticación, etc. Puede personalizar los flujos de usuario, como la adición de Multi Factor Authentication (MFA), simplemente cambiando la configuración del grupo de usuarios. La aplicación se redirigirá a la interfaz de usuario alojada de y gestionará los flujos de usuario. La experiencia del usuario se puede personalizar proporcionando logotipos específicos de la marca y cambiando el aspecto. La interfaz de usuario alojada de Amazon Cognito también le permite añadir fácilmente la capacidad de que los usuarios finales inicien sesión con proveedores de redes sociales (Facebook, LoginWithAmazon, Google y Apple), compatibles con OpenID Connect (OIDC) y proveedores SAML. Temas • Configuración de la interfaz de usuario alojada con AWS Amplify (p. 29) • Configuración de la interfaz de usuario alojada con la consola de Amazon Cognito (p. 29) • Configuración de un cliente de aplicación del grupo de usuarios (p. 32) • Configuración de un dominio del grupo de usuarios (p. 35) • Personalizar las páginas web integradas de inscripción e inicio de sesión (p. 41) • Definir servidores de recursos para el grupo de usuarios (p. 45)
Configuración de la interfaz de usuario alojada con AWS Amplify Si utiliza AWS Amplify para añadir la autenticación a la aplicación web o móvil, puede configurar la interfaz de usuario alojada mediante la interfaz de línea de comandos (CLI) y las bibliotecas del marco AWS Amplify Para añadir la autenticación a la aplicación, utilice la CLI de AWS Amplify para añadir la categoría Auth al proyecto. A continuación, en el código de cliente, utilice las AWS Amplify bibliotecas de para autenticar a los usuarios con el grupo de Amazon Cognito usuarios. Puede mostrar una interfaz de usuario alojada prediseñada o federar usuarios a través de un punto de enlace OAuth 2.0 que redirige a un proveedor de inicio de sesión de redes sociales, como Facebook, Google, Amazon o Apple. Después de que un usuario se autentique correctamente con el proveedor de redes sociales, AWS Amplify crea un nuevo usuario en el grupo de usuarios si es necesario y proporciona el token de OIDC del usuario a la aplicación. Para obtener más información, consulte la documentación del marco AWS Amplify correspondiente a su plataforma de aplicaciones: • AWS Amplify Autenticación de para JavaScript. • AWS Amplify Autenticación de para iOS. • AWS Amplify Autenticación de para Android.
Configuración de la interfaz de usuario alojada con la consola de Amazon Cognito 1.
Vaya a la consola de Amazon Cognito. Es posible que se le soliciten sus credenciales de AWS.
29
Amazon Cognito Guía para desarrolladores Configuración de la interfaz de usuario alojada con la consola de Amazon Cognito
2.
Elija Manage User Pools (Administrar grupos de usuarios).
3.
Elija un grupo de usuarios existente en la lista o cree un grupo de usuarios.
4.
En la barra de navegación en el lado izquierdo de la página, elija App clients (Clientes de aplicación) en General settings (Configuración general).
5.
Elija Add an app client.
6.
Escriba el nombre de la aplicación.
7.
A menos que lo requiera el flujo de autorización, desactive la opción Generate client secret (Generar secreto de cliente). El secreto de cliente lo usan las aplicaciones con un componente en el servidor capaz de asegurarlo.
8.
(Opcional) Cambie la configuración de vencimiento del token.
9.
Seleccione Auth Flows Configuration options (Opciones de configuración de flujos de autenticación).
10. Elija una configuración de seguridad en Security configuration (Configuración de seguridad). Le recomendamos que seleccione Enabled (Habilitado). 11. (Opcional) Elija Set attribute read and write permissions (Establecer permisos de lectura y escritura de atributos). 12. Elija Create app client. 13. Anote el App client id. (Id. de cliente a aplicación). 14. Elija Return to pool details (Volver a los detalles del grupo).
Configure la aplicación 1.
Elija App client settings (Configuración del cliente de aplicación) en la barra de navegación del lado izquierdo de la página de la consola.
2.
Seleccione Cognito User Pool (Grupo de usuarios de Cognito) como uno de los Enabled Identity Providers (Proveedores de identidad habilitados).
Note Para iniciar sesión con proveedores IdPs identidad externos, como Facebook, Amazon, Google o Apple, así como a través de OpenID la conexión (OIDC) o IdPsSAML, primero configúrelos como se describe a continuación y, a continuación, vuelva a la página App client settings (Configuración del cliente de aplicación) para habilitarlos. 3.
Escriba Callback URL(s) (Direcciones URL de devolución de llamada). Una URL de devolución de llamada indica adónde se redirigirá al usuario tras iniciar sesión correctamente.
4.
Escriba Sign out URL(s) (URL de cierre de sesión). Una URL de cierre de sesión indica adónde se redirigirá al usuario después de cerrar la sesión.
5.
Seleccione Authorization code grant (Concesión de código de autorización) para devolver un código de autorización que se intercambie por tokens de grupos de usuarios. Debido a que los tokens nunca se exponen directamente a un usuario final, es menos probable que se vean comprometidos. Sin embargo, se requiere una aplicación personalizada en el backend para intercambiar el código de autorización para tokens de grupos de usuarios. Por motivos de seguridad, le recomendamos que utilice el flujo de concesión de código de autorización junto con PKCE (Proof Key for Code Exchange, clave de prueba para intercambio de código) para aplicaciones móviles.
6.
Seleccione Implicit grant (Concesión implícita) para que le devuelvan los tokens web JSON (JWT) del grupo de usuarios de Amazon Cognito. Puede utilizar este flujo cuando no hay backend disponibles para intercambiar un código de autorización para tokens. También es útil para depurar tokens.
7.
Puede habilitar tanto Authorization code grant (Concesión de código de autorización) como Implicit code grant (Concesión de código implícita) y, a continuación, utilizar cada concesión según sea necesario.
8.
A menos que desee excluir específicamente alguno, seleccione las casillas de verificación de todos los ámbitos OAuthpermitidos. 30
Amazon Cognito Guía para desarrolladores Configuración de la interfaz de usuario alojada con la consola de Amazon Cognito
9.
Seleccione Client credentials (Credenciales del cliente) solo si la aplicación necesita solicitar tokens de acceso en su propio nombre, no en nombre de un usuario.
10. Elija Save changes.
Configure un dominio 1.
Seleccione Choose domain name (Elegir nombre de dominio).
2.
En la página Domain name (Nombre de dominio), escriba un prefijo de dominio y compruebe la disponibilidad o escriba su propio dominio.
3.
Anote la dirección de dominio completa.
4.
Elija Save changes.
Para ver su página de inicio de sesión Puede ver la página web de inicio de sesión de la interfaz de usuario alojada con la siguiente URL. Anote el response_type. En este caso, response_type=code para la concesión de código de autorización.
https:///login? response_type=code&client_id=&redirect_uri=
Puede ver la página web de inicio de sesión de la interfaz de usuario alojada con la siguiente dirección URL para la concesión de código implícita, donde response_type = token. Tras un inicio de sesión correcto, Amazon Cognito devuelve tokens de grupo de usuarios a su barra de direcciones de navegador web.
https:///login? response_type=token&client_id=&redirect_uri=
Puede encontrar el token de identidad de JSON Web Token (JWT) a continuación del parámetro #idtoken= en la respuesta. A continuación, le mostramos una respuesta de ejemplo de una solicitud de concesión implícita. La cadena del token de identidad será mucho más larga.
https://www.example.com/ #id_token=123456789tokens123456789&expires_in=3600&token_type=Bearer
Puede descodificar y verificar tokens de grupos de usuarios mediante AWS Lambda, consulte Decode and verify Amazon Cognito JWT tokens en el GitHub sitio web de AWS. Amazon CognitoLos tokens de grupos de usuarios de se firman con un algoritmo RS256. Es posible que tenga que esperar un minuto para actualizar el navegador antes de que aparezcan los cambios que haya hecho en la consola. Su dominio se muestra en la página Domain name (Nombre de dominio). Su ID de cliente de aplicación y URL de devolución de llamada se muestran en la página App client settings (Configuración del cliente de aplicación).
Note La página web de inicio de sesión alojada en Amazon Cognito no admite el flujo de autenticación personalizado.
31
Amazon Cognito Guía para desarrolladores Configuración de un cliente de aplicación
Configuración de un cliente de aplicación del grupo de usuarios Después de crear un grupo de usuarios, puede configurar un cliente de aplicación para utilizar las páginas web integradas para registrar e iniciar sesión de los usuarios. Para ver la terminología, consulte Terminología de configuración del cliente de (p. 34)aplicación.
Para configurar un cliente de aplicación (Consola de administración de AWS) 1.
Vaya a la consola de Amazon Cognito. Es posible que se le soliciten sus credenciales de AWS.
2.
Elija Manage User Pools (Administrar grupos de usuarios).
3.
Elija un grupo de usuarios existente en la lista o cree un grupo de usuarios.
4.
En la barra de navegación en el lado izquierdo de la página, elija App clients (Clientes de aplicación) en General settings (Configuración general).
5.
Elija Add an app client.
6.
Escriba el nombre de la aplicación.
7.
A menos que lo requiera el flujo de autorización, desactive la opción Generate client secret (Generar secreto de cliente). El secreto de cliente lo usan las aplicaciones con un componente en el servidor capaz de asegurarlo.
8.
(Opcional) Cambie la configuración de vencimiento del token.
9.
Seleccione Auth Flows Configuration options (Opciones de configuración de flujos de autenticación).
10. Elija una configuración de seguridad en Security configuration (Configuración de seguridad). Le recomendamos que seleccione Enabled (Habilitado). 11. (Opcional) Elija Set attribute read and write permissions (Establecer permisos de lectura y escritura de atributos). 12. Elija Create app client. 13. Anote el App client id. (Id. de cliente a aplicación). 14. Elija Return to pool details (Volver a los detalles del grupo).
Para configurar un cliente de aplicación (AWS CLI y API de AWS Puede utilizar la AWS CLI para actualizar, crear, describir y eliminar el cliente de aplicación del grupo de usuarios. Sustituya "MyUserPoolID" y "MyAppClientID" por sus valores de grupo de usuarios y de ID de cliente de aplicación en estos ejemplos. Del mismo modo, los valores de sus parámetros podrían ser diferentes de los que se utilizan en estos ejemplos.
Note Utilice el formato JSON para la devolución de llamada y el cierre de sesión URLs para evitar que la CLI los trate como archivos de parámetros remotos: --callback-urls "["https://example.com"]" --logout-urls "["https://example.com"]"
Actualización de un cliente de aplicación de grupo de usuarios (AWS CLI y API de AWS aws cognito-idp update-user-pool-client --user-pool-id "MyUserPoolID" --client-id "MyAppClientID" --allowed-o-auth-flows-user-pool-client --allowed-o-auth-flows "code" "implicit" --allowed-o-auth-scopes "openid" --callback-urls "["https://example.com"]" -supported-identity-providers "["MySAMLIdP", "LoginWithAmazon"]"
32
Amazon Cognito Guía para desarrolladores Configuración de un cliente de aplicación
Si el comando se ejecuta correctamente, la AWS CLI devuelve una confirmación: {
}
"UserPoolClient": { "ClientId": "MyClientID", "SupportedIdentityProviders": [ "LoginWithAmazon", "MySAMLIdP" ], "CallbackURLs": [ "https://example.com" ], "AllowedOAuthScopes": [ "openid" ], "ClientName": "Example", "AllowedOAuthFlows": [ "implicit", "code" ], "RefreshTokenValidity": 30, "CreationDate": 1524628110.29, "AllowedOAuthFlowsUserPoolClient": true, "UserPoolId": "MyUserPoolID", "LastModifiedDate": 1530055177.553 }
Consulte la referencia de comandos de la AWS CLI para obtener más información: update-user-pool-client. AWS API DE : UpdateUserPoolClient
Creación de un cliente de aplicación de grupo de usuarios (AWS CLI y API de AWS aws cognito-idp create-user-pool-client --user-pool-id MyUserPoolID --client-name myApp
Consulte la referencia de comandos de la AWS CLI para obtener más información: create-user-pool-client AWS API DE : CreateUserPoolClient
Obtención de información sobre un cliente de aplicación de grupo de usuarios (AWS CLI y API de AWS aws cognito-idp describe-user-pool-client --user-pool-id MyUserPoolID --client-id MyClientID
Consulte la referencia de comandos de la AWS CLI para obtener más información: describe-user-poolclient. AWS API DE : DescribeUserPoolClient
Obtención de toda la información sobre los clientes de aplicación de un grupo de usuarios (AWS CLI y API de AWS aws cognito-idp list-user-pool-clients --user-pool-id "MyUserPoolID" --max-results 3
Consulte la referencia de comandos de la AWS CLI para obtener más información: list-user-pool-clients. AWS API DE : ListUserPoolClients
33
Amazon Cognito Guía para desarrolladores Configuración de un cliente de aplicación
Eliminación de un cliente de aplicación de grupo de usuarios (AWS CLI y API de AWS aws cognito-idp delete-user-pool-client --user-pool-id "MyUserPoolID" --client-id "MyAppClientID"
Consulte la referencia de comandos de la AWS CLI para obtener más información: delete-user-pool-client AWS API DE : DeleteUserPoolClient
Terminología de configuración del cliente de aplicación Los siguientes términos y definiciones pueden ayudarle a configurar su cliente de aplicación. Proveedores de identidad habilitados Puede elegir su proveedor de identidad (IDP) para autenticar a sus usuarios. Este servicio puede realizarlo un grupo de usuarios o un tercero, como Facebook. Para poder utilizar un IdP, debe habilitarlo. Puede habilitar varias IdPs, pero debe habilitar al menos una. Para obtener más información sobre el uso de IdPs externos, consulte Agregar inicio de sesión de grupo de usuarios a través de un tercero (p. 48). Direcciones URL de devolución de llamada Una URL de devolución de llamada indica adónde se redirigirá al usuario tras iniciar sesión correctamente. Elija al menos una URL de devolución de llamada, que debe cumplir las condiciones siguientes: • Ser una URI absoluta. • Estar registrada previamente con un cliente. • No incluir un componente fragmento. Consulte OAuth 2.0 - Punto de enlace de redireccionamiento. Amazon Cognito requiere HTTPS sobre HTTP, excepto para http://localhost únicamente con fines de prueba. También se admiten devoluciones de llamada URLs de aplicaciones myapp://example como . Direcciones URL de cierre de sesión Una URL de cierre de sesión indica adónde se redirigirá al usuario después de cerrar la sesión. OAuth Flujos permitidos El flujo Authorization code grant (Concesión de código de autorización) inicia un flujo de concesión de código, que proporciona un código de autorización como respuesta. Este código puede intercambiarse para los tokens de acceso con el Punto de enlace TOKEN (p. 369). Debido a que los tokens nunca se exponen directamente a un usuario final, es menos probable que se vean comprometidos. Sin embargo, se requiere una aplicación personalizada en el backend para intercambiar el código de autorización para tokens de grupos de usuarios.
Note Por motivos de seguridad, le recomendamos encarecidamente que utilice solo el flujo Authorization code grant (Concesión de código de autorización) junto con PKCE para aplicaciones móviles. El flujo Implicit grant (Concesión implícita) permite al cliente obtener el token de acceso (y, opcionalmente, el token de ID, en función de los ámbitos) directamente desde el Punto de enlace AUTHORIZATION (p. 365). Elija este flujo si la aplicación no puede iniciar el flujo Authorization code grant (Concesión de código de autorización). Para obtener más información, consulte la especificación OAuth 2.0.
34
Amazon Cognito Guía para desarrolladores Configuración de un dominio
Puede habilitar tanto Authorization code grant (Concesión de código de autorización) como Implicit code grant (Concesión de código implícita) y, a continuación, utilizar cada concesión según sea necesario. El flujo Client credentials (Credenciales del cliente) se utiliza en las comunicaciones máquina a máquina. Con él, puede solicitar un token de acceso para obtener acceso a sus propios recursos. Utilice este flujo cuando la aplicación solicite el token en su propio nombre, y no en nombre de un usuario.
Note Dado que el flujo de credenciales de cliente no se utiliza en nombre de un usuario, solo se pueden utilizar ámbitos personalizados con este flujo. Un ámbito personalizado es el que se puede definir para un servidor de recursos propio. Consulte Definir servidores de recursos para el grupo de usuarios (p. 45). OAuth Ámbitos permitidos Elija uno o varios de los siguientes ámbitos OAuth para especificar los privilegios de acceso que se pueden solicitar para los tokens de acceso. • El ámbito phone concede acceso a las notificaciones phone_number y phone_number_verified Este ámbito solo se puede solicitar con el ámbito openid • El ámbito email concede acceso a las notificaciones email y email_verified Este ámbito solo se puede solicitar con el ámbito openid • El ámbito openid devuelve todos los atributos del usuario en el token de ID que puede leer el cliente. El token de ID no se devuelve si el cliente no solicita el ámbito openid • El aws.cognito.signin.user.admin ámbito concede acceso a operaciones de la API Amazon Cognito de grupos de usuarios de que requieren tokens de acceso, como UpdateUserAttributes y VerifyUserAttribute . • El ámbito profile concede acceso a todos los atributos de usuario que el cliente puede leer. Este ámbito solo se puede solicitar con el ámbito openid Ámbitos personalizados permitidos Un ámbito personalizado es el que se define para un servidor de recursos propio en Resource Servers (Recursos de servidores). El formato es el siguiente resource-server-identifier/scope. Consulte Definir servidores de recursos para el grupo de usuarios (p. 45). Para obtener más información acerca de los OAuth ámbitos, consulte la lista de ámbitos de OIDC estándar.
Configuración de un dominio del grupo de usuarios Después de configurar un cliente de aplicación, puede configurar la dirección de las páginas web de inscripción e inicio de sesión. Puede utilizar un dominio alojado de Amazon Cognito y elegir un prefijo de dominio disponible, o puede utilizar su propia dirección web como dominio personalizado. Para añadir un cliente de aplicación y un dominio alojado de Amazon Cognito con la Consola de administración de AWS, consulte Añadir una aplicación para habilitar la interfaz de usuario web alojada.
Note No puede utilizar el texto aws, amazon o cognito en el prefijo de dominio. Temas • Uso del dominio de Amazon Cognito con la interfaz de usuario alojada (p. 36)
35
Amazon Cognito Guía para desarrolladores Configuración de un dominio
• Uso de un dominio propio con la interfaz de usuario alojada (p. 37)
Uso del dominio de Amazon Cognito con la interfaz de usuario alojada Después de configurar un cliente de aplicación, puede configurar la dirección de las páginas web de inscripción e inicio de sesión. Puede utilizar el dominio alojado de Amazon Cognito con su propio prefijo de dominio. Para añadir un cliente de aplicación y un dominio alojado de Amazon Cognito con la Consola de administración de AWS, consulte Añadir una aplicación para habilitar la interfaz de usuario web alojada. Temas • Requisitos previos (p. 36) • Paso 1: Configurar un dominio alojado de grupo de usuarios (p. 36) • Paso 2: Verificar la página de inicio de sesión (p. 37)
Requisitos previos Antes de comenzar, necesitará: • Un grupo de usuarios con un cliente de aplicación. Para obtener más información, consulte Introducción a los grupos de usuarios (p. 18).
Paso 1: Configurar un dominio alojado de grupo de usuarios Para configurar un dominio alojado de grupo de usuarios (Consola de administración de AWS) Puede utilizar la Consola de administración de AWS para configurar un dominio de grupo de usuarios.
Para configurar un dominio alojado de Amazon Cognito 1.
Inicie sesión en la consola de Amazon Cognito.
2.
En el panel de navegación, elija Manage your User Pools (Administrar sus grupos de usuarios) y elija el grupo de usuarios que desea editar.
3.
Elija la pestaña Domain name (Nombre de dominio).
4.
Escriba el prefijo de dominio que desea utilizar en el cuadro Prefix domain name (Nombre de dominio con prefijo).
5.
Elija Check availability (Comprobar disponibilidad) para asegurarse de que el prefijo de dominio está disponible.
6.
Elija Save changes.
Para configurar un dominio alojado de grupo de usuarios (AWS CLI y API de AWS) Utilice los siguientes comandos para crear un prefijo de dominio y asignarlo al grupo de usuarios.
Para configurar un dominio de grupo de usuarios • AWS CLI: aws cognito-idp create-user-pool-domain Ejemplo: aws cognito-idp create-user-pool-domain --user-pool-id --domain 36
Amazon Cognito Guía para desarrolladores Configuración de un dominio
• API de AWS: CreateUserPoolDomain
Para obtener información acerca de un dominio • AWS CLI: aws cognito-idp describe-user-pool-domain Ejemplo: aws cognito-idp describe-user-pool-domain --domain • API de AWS: DescribeUserPoolDomain
Para eliminar un dominio • AWS CLI: aws cognito-idp delete-user-pool-domain Ejemplo: aws cognito-idp delete-user-pool-domain --domain • API de AWS: DeleteUserPoolDomain
Paso 2: Verificar la página de inicio de sesión •
Compruebe que la página de inicio de sesión está disponible desde el dominio alojado de Amazon Cognito.
https://your_domain/login? response_type=code&client_id=your_app_client_id&redirect_uri=your_callback_url
El dominio aparece en la página Domain name (Nombre del dominio) de la consola de Amazon Cognito. El ID del cliente de aplicación y la URL de devolución de llamada se muestran en la página App client settings (Configuración del cliente de aplicación).
Uso de un dominio propio con la interfaz de usuario alojada Después de configurar un cliente de aplicación, puede configurar el grupo de usuarios con un dominio personalizado para la interfaz de usuario de Amazon Cognito alojada. Con los dominios personalizados, los usuarios pueden iniciar sesión en la aplicación utilizando su propia dirección web. Temas • Adición de un dominio personalizado a un grupo de usuarios (p. 37) • Cambiar del certificado SSL en el dominio personalizado (p. 40)
Adición de un dominio personalizado a un grupo de usuarios Para añadir un dominio personalizado al grupo de usuarios, debe especificar el nombre de dominio en la consola de Amazon Cognito y un certificado que administre con AWS Certificate Manager (ACM). Una vez agregado el dominio, Amazon Cognito proporciona un destino de alias, que debe añadirse a la configuración de DNS.
Requisitos previos Antes de comenzar, necesitará: • Un grupo de usuarios con un cliente de aplicación. Para obtener más información, consulte Introducción a los grupos de usuarios (p. 18). 37
Amazon Cognito Guía para desarrolladores Configuración de un dominio
• Un dominio web de su propiedad. Su raíz debe tener un registro A válido en DNS. Para obtener más información, consulte Domain Names. • Tener la capacidad para crear un subdominio en el dominio personalizado. Recomendamos utilizar auth como subdominio. Por ejemplo: auth.example.com.
Note Si no dispone de un certificado comodín, es posible que tenga que obtener un nuevo certificado para el subdominio del dominio personalizado. • Un certificado de Capa de conexión segura (SSL) administrado por ACM.
Note Debe cambiar la región de AWS a EE. UU. Este (Norte de Virginia) en la consola de ACM antes de solicitar o importar un certificado. • Para configurar un nombre de dominio personalizado o para actualizar su certificado, debe tener permiso para actualizar las distribuciones de Amazon CloudFront. Puede hacerlo asociando la siguiente instrucción de política de IAM a un usuario, grupo o rol de IAM en la cuenta de AWS: {
}
"Version": "2012-10-17", "Statement": [ { "Sid": "AllowCloudFrontUpdateDistribution", "Effect": "Allow", "Action": [ "cloudfront:updateDistribution" ], "Resource": [ "*" ] } ]
Consulte Usar políticas basadas en identidad (políticas de IAM) para CloudFront.
Paso1: Especificar el nombre de dominio personalizado Puede añadir el dominio al grupo de usuarios utilizando una API o la consola de Amazon Cognito.
Para añadir un dominio al grupo de usuarios (consola de Amazon Cognito) 1.
Inicie sesión en la consola de Amazon Cognito. Es posible que se le soliciten sus credenciales de AWS.
2.
Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon Cognito en https:// console.aws.amazon.com/cognito/home.
3.
Elija Manage User Pools (Administrar grupos de usuarios).
4.
En la página Sus grupos de usuarios, seleccione el grupo de usuarios en el que desee agregar el dominio.
5.
En el menú de navegación de la izquierda, seleccione Domain name (Nombre de dominio).
6.
En Your own domain (Su propio dominio), seleccione Use your domain (Utilizar su propio dominio).
7.
En Domain name (Nombre del dominio), escriba el nombre del dominio personalizado. El nombre de dominio solo puede incluir letras minúsculas, números y guiones. No utilice un guion en el primer carácter ni en el último. Utilice puntos para separar los nombres de los subdominios. 38
Amazon Cognito Guía para desarrolladores Configuración de un dominio
8.
En AWS managed certificate (Certificado administrado por AWS), seleccione el certificado SSL que desee utilizar con el dominio. Puede elegir uno de los certificados que administra con ACM. Si no dispone de un certificado que pueda elegir, puede utilizar ACM para aprovisionar uno. Para obtener más información, consulte Introducción en la Guía del usuario de AWS Certificate Manager.
9.
Elija Save changes.
10. Observe el Alias target (Destino de alias). En lugar de una dirección IP o un nombre de dominio, el Alias target (Destino de alias) es un conjunto de registros de recursos de alias que apunta a una distribución de Amazon CloudFront.
Para añadir un dominio al grupo de usuarios (API de Amazon Cognito) •
Utilice la acción CreateUserPoolDomain.
Paso 2: Añadir un destino de alias y un subdominio En este paso, configurará un alias mediante el proveedor de servicios de servidor de nombres de dominio (DNS) que apunta al destino de alias del paso anterior. Si utiliza Amazon Route53 para la resolución de direcciones DNS, elija la sección To add an alias target and subdomain using Route53 (Para añadir un destino de alias y un subdominio con).
Para añadir un destino de alias y un subdominio a la configuración de DNS actual •
Si no utiliza Route53 para la resolución de direcciones de DNS, su proveedor de servicios de DNS debe añadir el destino de alias del paso anterior como alias para el dominio personalizado del grupo de usuarios. El proveedor de DNS también deberá configurar el subdominio para el dominio personalizado.
Para añadir un destino de alias y un subdominio con Route53 1.
Inicie sesión en la consola de Route53. Es posible que se le soliciten sus credenciales de AWS.
2.
Si no dispone de una zona hospedada en Route53, configure una. De lo contrario, omita este paso. a.
Elija Create Hosted Zone (Crear zona alojada).
b.
Elija el dominio personalizado en la lista Domain Name (Nombre de dominio).
c.
En Comment (Comentario), escriba un comentario opcional sobre la zona alojada.
d.
Seleccione Create.
3.
En la página Hosted Zones (Zonas alojadas), elija el nombre de la zona alojada.
4.
Luego, Create Record Set.
5.
Seleccione Yes (Sí) en la opción Alias.
6.
Escriba el nombre del destino de alias que anotó en un paso anterior en Alias Target (Destino de alias).
7.
Seleccione Create.
Note Sus nuevos registros tardan un tiempo en propagarse a los servidores DNS de Route53. En la actualidad, el único modo de comprobar que los cambios se han propagado es utilizar el método de API GetChange de Route53. Por lo general, los cambios se propagan a todos los servidores de nombres Route53 en un plazo de 60segundos. 8.
Añada un subdominio en Route53 mediante el destino de alias. a.
En la página Hosted Zones (Zonas alojadas), elija el nombre de la zona alojada. 39
Amazon Cognito Guía para desarrolladores Configuración de un dominio
b.
Elija Create Record Set (Crear conjunto de registros) e introduzca los valores siguientes: i. ii. iii. iv.
c.
En Name (Nombre), escriba el nombre de subdominio que prefiera. Por ejemplo, si el subdominio que intenta crear es auth.example.com, escriba auth. En Type (Tipo), elija A - IPv4 address (A - Dirección IPv4). Seleccione Yes (Sí) en la opción Alias. Escriba el nombre del destino de alias que anotó en un paso anterior en Alias Target (Destino de alias).
Seleccione Create.
Note Si lo prefiere, puede crear una nueva zona hospedada para almacenar los registros que están asociados al subdominio. También puede crear un conjunto de delegación en la zona hospedada principal que remita a los clientes a la zona hospedada del subdominio. Este método ofrece mayor flexibilidad cuando se administran las zonas hospedadas (por ejemplo, al restringir quién puede editar las zonas). Solo se puede utilizar este método para zonas hospedadas públicas, ya que la adición de registros de NS a las zonas hospedadas no se admite actualmente. Para obtener más información, consulte el tema relacionado con la creación de un subdominio para un dominio alojado mediante Amazon Route53.
Paso 3: Verificar la página de inicio de sesión •
Compruebe que la página de inicio de sesión está disponible desde el dominio personalizado. Inicie sesión con el dominio personalizado y el subdominio; para ello, introduzca esta dirección en el navegador. Esta es una URL de ejemplo de un dominio personalizado example.com con el subdominio auth: https://auth.example.com/login? response_type=code&client_id=&redirect_uri=
Cambiar del certificado SSL en el dominio personalizado Si es necesario, puede utilizar Amazon Cognito para cambiar el certificado que se ha aplicado al dominio personalizado. Normalmente, si se mantiene una renovación rutinaria de certificados con ACM, esta operación no es necesaria. Cuando se renueva el certificado existente en ACM, el ARN del certificado sigue siendo el mismo y el nombre de dominio personalizado utiliza el nuevo certificado automáticamente. Sin embargo, si el certificado existente se sustituye por otro nuevo, ACM proporciona otro ARN al nuevo certificado. Para aplicar el nuevo certificado al dominio personalizado, debe proporcionar este ARN a Amazon Cognito. Una vez proporcionado el certificado, Amazon Cognito puede necesitar hasta una hora para distribuirlo en el dominio personalizado.
Antes de empezar Para poder cambiar el certificado en Amazon Cognito, debe agregarlo a ACM. Para obtener más información, consulte Introducción en la Guía del usuario de AWS Certificate Manager. Cuando añada el certificado a ACM, debe seleccionar US East (N. Virginia) como región de AWS. Puede cambiar el certificado utilizando una API o la consola de Amazon Cognito.
40
Amazon Cognito Guía para desarrolladores Personalizar las páginas web integradas
Para renovar un certificado (consola de Amazon Cognito) 1.
Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon Cognito en https:// console.aws.amazon.com/cognito/home.
2.
Elija Manage User Pools (Administrar grupos de usuarios).
3.
En la página Sus grupos de usuarios, seleccione el grupo de usuarios en el que desee agregar el dominio.
4.
En el menú de navegación de la izquierda, seleccione Domain name (Nombre de dominio).
5.
En Your own domain (Su propio dominio), en AWS managed certificate (Certificado administrado por AWS), seleccione el nuevo certificado.
6.
Elija Save changes.
Para renovar un certificado (API de Amazon Cognito) •
Utilice la acción UpdateUserPoolDomain.
Personalizar las páginas web integradas de inscripción e inicio de sesión Puede utilizar la Consola de administración de AWS, la AWS CLI o la API para especificar la configuración de personalización de la interfaz de usuario de la aplicación integrada. Puede cargar una imagen de logotipo personalizada para que se muestre en la aplicación. También puede elegir entre una amplia variedad de personalizaciones CSS. Puede especificar los ajustes de personalización de interfaz de usuario de la aplicación para un solo cliente (con un clientId específico) o para todos los clientes (cambiando la configuración de clientId a ALL). Si especifica ALL, se utilizará la configuración predeterminada para cada cliente que no tiene ninguna personalización de interfaz de usuario determinada. Si especifica ajustes de personalización de interfaz de usuario para un cliente específico, no volverá a usar la configuración ALL.
Note Para utilizar esta característica, el grupo de usuarios deben tener un dominio asociado a él.
Especificar un logotipo personalizado para la aplicación El tamaño máximo de un archivo de imagen de logotipo es de 100 KB.
Especificar ajustes personalizados de CSS para la aplicación Puede personalizar el CSS de las páginas de la aplicación alojada, con las siguientes restricciones: • Los nombres de clase de CSS solo pueden ser los de la lista siguiente: • background-customizable • banner-customizable • errorMessage-customizable • idpButton-customizable • idpButton-customizable:hover • inputField-customizable • inputField-customizable:focus • label-customizable 41
Amazon Cognito Guía para desarrolladores Personalizar las páginas web integradas
• legalText-customizable • logo-customizable • submitButton-customizable • submitButton-customizable:hover • textDescription-customizable • Los valores de propiedad no pueden contener HTML, declaraciones @import, @supports, @page o @media ni Javascript. Puede personalizar las siguientes propiedades CSS. Etiquetas • font-weight (peso de fuente) es un múltiplo de 100 entre 100 y 900. Campos de entrada • width (anchura) es la anchura como porcentaje del bloque contenedor. • height (altura) es la altura del campo de entrada en píxeles (px). • color es el color del texto. Puede ser cualquier valor de color CSS estándar. • background-color (color de fondo) es el color de fondo del campo de entrada. Puede ser cualquier valor de color estándar. • border (borde) es un valor de borde CSS estándar que especifica la anchura, la transparencia y el color del borde de la ventana de la aplicación. La anchura puede ser cualquier valor entre 1 px y 100 px. La transparencia puede ser sólida o ninguna. El color puede ser cualquier valor de color estándar. Descripciones de texto • padding-top (relleno superior) es la cantidad de relleno por encima de la descripción de texto. • padding-bottom (relleno inferior) es la cantidad de relleno por debajo de la descripción de texto. • display (visualización) puede ser block o inline. • font-size (tamaño de fuente) es el tamaño de fuente de las descripciones de texto. Botón de envío • font-size (tamaño de fuente) es el tamaño de fuente del botón de envío. • font-weight (peso de fuente) es el peso de fuente del texto del botón: bold, italic o normal. • margin (margen) es una cadena de 4 valores que indica el tamaño de margen de las partes superior, inferior, derecha e izquierda del botón. • font-size (tamaño de fuente) es el tamaño de fuente de las descripciones de texto. • width (anchura) es la anchura del texto del botón como porcentaje del bloque contenedor. • height (altura) es la altura del botón en píxeles (px). • color es el color del texto del botón. Puede ser cualquier valor de color CSS estándar. • background-color (color de fondo) es el color de fondo del botón. Puede ser cualquier valor de color estándar. Banner • padding (relleno) es una cadena de 4 valores que indica el tamaño del relleno de las partes superior, inferior, derecha e izquierda del banner. • background-color (color de fondo) es el color de fondo del banner. Puede ser cualquier valor de color CSS estándar. Ajustes al mantener el puntero sobre el botón de envío • color es el color de primer plano del botón al pasar el puntero sobre él. Puede ser cualquier valor de color CSS estándar. 42
Amazon Cognito Guía para desarrolladores Personalizar las páginas web integradas
• background-color (color de fondo) es el color de fondo del botón al pasar el puntero sobre él. Puede ser cualquier valor de color CSS estándar. Ajustes al mantener el puntero sobre el botón de proveedor de identidad • color es el color de primer plano del botón al pasar el puntero sobre él. Puede ser cualquier valor de color CSS estándar. • background-color (color de fondo) es el color de fondo del botón al pasar el puntero sobre él. Puede ser cualquier valor de color CSS estándar. Comprobación de contraseña no válida • color es el color del texto del mensaje "Password check not valid". Puede ser cualquier valor de color CSS estándar. Introducción • background-color (color de fondo) es el color de fondo de la ventana de la aplicación. Puede ser cualquier valor de color CSS estándar. Mensajes de error • margin (margen) es una cadena de 4 valores que indica el tamaño de margen de las partes superior, inferior, derecha e izquierda. • padding (relleno) es el tamaño del relleno. • font-size (tamaño de fuente) es el tamaño de la fuente. • width (anchura) es la anchura del mensaje de error como porcentaje del bloque contenedor. • background-color (color de fondo) es el color de fondo del mensaje de error. Puede ser cualquier valor de color CSS estándar. • border (borde) es una cadena de 3 valores que especifica el ancho, la transparencia y el color del borde. • color es el color del texto del mensaje de error. Puede ser cualquier valor de color CSS estándar. • box-sizing (tamaño de cuadro) se utiliza para indicar al navegador qué deben incluir las propiedades de tamaño (anchura y altura). Botones de proveedor de identidad • height (altura) es la altura del botón en píxeles (px). • width (anchura) es la anchura del texto del botón como porcentaje del bloque contenedor. • text-align (alineación de texto) es el ajuste de alineación del texto. Puede ser left, right, o center. • margin-bottom (margen inferior) es el ajuste del margen inferior. • color es el color del texto del botón. Puede ser cualquier valor de color CSS estándar. • background-color (color de fondo) es el color de fondo del botón. Puede ser cualquier valor de color estándar. • border-color (color de borde) es el color de borde del botón. Puede ser cualquier valor de color estándar. Descripciones de proveedor de identidad • padding-top (relleno superior) es la cantidad de relleno por encima de la descripción. • padding-bottom (relleno inferior) es la cantidad de relleno por debajo de la descripción. • display (visualización) puede ser block o inline. • font-size (tamaño de fuente) es el tamaño de fuente de las descripciones. Texto legal • color es el color del texto. Puede ser cualquier valor de color CSS estándar. • font-size (tamaño de fuente) es el tamaño de la fuente.
43
Amazon Cognito Guía para desarrolladores Personalizar las páginas web integradas
Logo • max-width (anchura máx.) es la anchura máxima como porcentaje del bloque contenedor. • max-height (altura máx.) es la altura máxima como porcentaje del bloque contenedor. Foco del campo de entrada • border-color (color de borde) es el color del campo de entrada. Puede ser cualquier valor de color CSS estándar. • outline (contorno) es la anchura del borde del campo de entrada en píxeles (px). Botones sociales • height (altura) es la altura del botón en píxeles (px). • text-align (alineación de texto) es el ajuste de alineación del texto. Puede ser left, right, o center. • width (anchura) es la anchura del texto del botón como porcentaje del bloque contenedor. • margin-bottom (margen inferior) es el ajuste del margen inferior. Comprobación de contraseña válida • color es el color del texto del mensaje "Password check valid". Puede ser cualquier valor de color CSS estándar.
Especificación de la configuración de personalización de la interfaz de usuario de la aplicación para un grupo de usuarios (Consola de administración de AWS) Puede utilizar la Consola de administración de AWS para especificar la configuración de personalización de la interfaz de usuario de la aplicación.
Note Para ver la interfaz de usuario alojada y sus personalizaciones, escriba en un navegador la siguiente URL con los datos específicos de su grupo de usuarios: https:///login? response_type=code&client_id=&redirect_uri= Posiblemente deba esperar hasta un minuto para actualizar la ventana del navegador y que aparezcan los cambios realizados en la consola. Su dominio aparece en la pestaña Domain Name (Nombre de dominio). Su ID de cliente de aplicación y URL de devolución de llamada aparecen en la pestaña General settings (Configuración general).
Para especificar la configuración de personalización de la interfaz de usuario 1.
Inicie sesión en la consola de Amazon Cognito.
2.
En el panel de navegación, vaya aManage User Pools (Administrar grupos de usuarios) y elija el grupo de usuarios que desea editar.
3.
Elija la pestaña UI customization (Personalización de IU).
4.
En App client to customize (Cliente de aplicación que se va a personalizar), seleccione la aplicación que desea personalizar en el menú desplegable de los clientes de aplicación que creó previamente en la pestaña App clients (Clientes de aplicaciones).
5.
Para cargar su propio archivo de imagen, elija Choose a file (Elija un archivo) o arrastre un archivo hasta el cuadro Logo (optional) (Logo (opcional)).
6.
En CSS customizations (optional) (Personalizaciones de CSS (opcional)), puede cambiar los valores predeterminados de diversas propiedades para personalizar el aspecto de la aplicación.
44
Amazon Cognito Guía para desarrolladores Definir servidores de recursos
Especificación de la configuración de personalización de la interfaz de usuario de la aplicación para un grupo de usuarios (AWS CLI y API de AWS) Utilice los siguientes comandos para especificar la configuración de la personalización de interfaz de usuario de la aplicación para su grupo de usuarios.
Para conseguir los ajustes de personalización de la interfaz de usuario para la interfaz de la aplicación integrada de un grupo de usuarios • AWS CLI: aws cognito-idp get-ui-customization • API de AWS: GetUICustomization
Para definir los ajustes de personalización de la interfaz de usuario para la interfaz de la aplicación integrada de un grupo de usuarios • AWS CLI: aws cognito-idp set-ui-customization --user-pool-id --client-id --image-file --css ".label-customizable{ color: ;}" • API de AWS: SetUICustomization
Definir servidores de recursos para el grupo de usuarios Una vez que haya configurado un dominio para el grupo de usuarios, el servicio Amazon Cognito aprovisiona automáticamente una interfaz de usuario web alojada que le permite agregar páginas de registro e inicio de sesión a su aplicación. Para obtener más información, consulte Paso 2. Añadir una aplicación para habilitar la interfaz de usuario web alojada (p. 19). Un servidor de recursos es un servidor para recursos de acceso protegido. Gestiona solicitudes autenticadas de aplicaciones que tengan un token de acceso. Normalmente el servidor de recursos proporciona una API CRUD para realizar estas solicitudes de acceso. Esta API puede alojarse en Amazon API Gateway o fuera de AWS. La aplicación pasa el token de acceso de la llamada a API al servidor de recursos. La aplicación debe tratar el token de acceso como opaco al pasarlo en la solicitud de acceso. El servidor de recursos inspecciona el token de acceso para determinar si debe conceder acceso.
Note El servidor de recursos debe verificar la firma del token de acceso y la fecha de vencimiento antes de procesar las notificaciones del token. Para obtener más información sobre la verificación y el uso de tokens de grupos de usuarios, consulte esta publicación de blog. Amazon API Gateway es una buena opción para inspeccionar tokens de acceso y proteger sus recursos. Para obtener más información acerca de los autorizadores personalizados de API Gateway, consulte Usar autorizadores personalizados de API Gateway. Un ámbito es un nivel de acceso que una aplicación puede solicitar a un recurso. Por ejemplo, si dispone de un servidor de recursos para fotos, este puede definir dos ámbitos: uno para el acceso de lectura a las fotos y otro para el acceso de escritura y borrado. Cuando la aplicación realiza una llamada a la API para solicitar acceso y pasa un token de acceso, el token tendrá uno o más ámbitos incrustados. Información general Amazon Cognito permite a los desarrolladores de aplicaciones crear sus propios servidores de recursos OAuth2.0 y definir ámbitos personalizados en ellos. Así, los ámbitos personalizados pueden asociarse a un
45
Amazon Cognito Guía para desarrolladores Definir servidores de recursos
cliente, y el cliente puede solicitarlos en un flujo implícito de concesión de código de autorización OAuth2.0 y en el flujo de credenciales de cliente. Los ámbitos personalizados se añaden a la notificación scope del token de acceso. Un cliente puede utilizar el token de acceso en su servidor de recursos, lo que hace que la decisión de conceder la autorización se base en los ámbitos presentes en el token. Para obtener más información acerca del ámbito de aplicación de tokens de acceso, consulte Uso de tokens con grupos de usuarios (p. 158).
Note El servidor de recursos debe verificar la firma del token de acceso y la fecha de vencimiento antes de procesar las notificaciones del token.
Note Un cliente de aplicación solo puede utilizar el flujo de credenciales de cliente si la aplicación cliente tiene una clave secreta de cliente. Administrar el servidor de recursos y los ámbitos personalizados Al crear un servidor de recursos, debe proporcionar un nombre y un identificador de servidor de recursos. Por cada ámbito que cree en el servidor de recursos, debe proporcionar un nombre y una descripción. Ejemplo: • Name: un nombre sencillo para el servidor de recursos, como, por ejemplo, Weather API o Photo API. • Identifier: un identificador único por cada servidor de recursos. Este podría ser un punto de enlace HTTPS donde se encuentra el servidor de recursos. Por ejemplo, https://my-weatherapi.example.com • Scope Name: el nombre del ámbito. Por ejemplo, weather.read • Scope Description: una breve descripción del ámbito. Por ejemplo, Retrieve weather information. Cuando un cliente solicita un ámbito de aplicación personalizado en cualquiera de los flujos OAuth2.0, debe solicitar el identificador completo para el ámbito, que es resourceServerIdentifier/scopeName. Por ejemplo, si el identificador del servidor de recursos es https://myphotosapi.example.com y el nombre del ámbito es photos.read, la aplicación cliente se debe solicitar https://myphotosapi.example.com/photos.read durante el tiempo de ejecución. Eliminar un ámbito de un servidor de recursos no elimina su asociación con todos los clientes, sino que lo desactiva. Por lo tanto, si un cliente solicita el ámbito eliminado en el tiempo de ejecución, el ámbito de aplicación se ignora y no se incluye en el token de acceso. Si el ámbito se vuelve a añadir más adelante, se vuelve a incluir en el token de acceso. Si un ámbito de aplicación se elimina de un cliente, la asociación entre ambos se elimina. Si un cliente solicita un ámbito no permitido durante el tiempo de ejecución, se genera un error y no se emite un token de acceso. Puede utilizar la Consola de administración de AWS, la API y la CLI para definir los servidores de recursos y los ámbitos del grupo de usuarios.
Definir un servidor de recursos para el grupo de usuarios (Consola de administración de AWS) Puede utilizar la Consola de administración de AWS, para definir un servidor de recursos para el grupo de usuarios.
46
Amazon Cognito Guía para desarrolladores Definir servidores de recursos
Para definir un servidor de recursos 1.
Inicie sesión en la consola de Amazon Cognito.
2.
En el panel de navegación, vaya aManage User Pools (Administrar grupos de usuarios) y elija el grupo de usuarios que desea editar.
3.
Seleccione la pestaña Resource servers (Servidores de recursos).
4.
Seleccione Add a resource server (Añadir un servidor de recursos).
5.
Escriba el nombre de su servidor de recursos, por ejemplo, Photo Server.
6.
Escriba el identificador de su servidor de recursos, por ejemplo, com.example.photos.
7.
Escriba los nombres de los ámbitos personalizados de sus recurso, por ejemplo, read y write.
8.
Escriba una descripción para cada nombre de ámbito, por ejemplo, view your photos y update your photos.
9.
Elija Save changes.
Cada uno de los ámbitos personalizados que defina aparecerá en la pestaña App client settings (Configuración del cliente de aplicación), en OAuth2.0 Allowed Custom Scopes (Ámbitos personalizados permitidos de OAuth2.0), por ejemplo, com.example.photos/read.
Definir un servidor de recursos para el grupo de usuarios (AWS CLI y API de AWS) Utilice los siguientes comandos para especificar la configuración del servidor de recursos para su grupo de usuarios.
Para crear un servidor de recursos • AWS CLI: aws cognito-idp create-resource-server • API de AWS: CreateResourceServer
Para obtener información acerca de la configuración del servidor de recursos • AWS CLI: aws cognito-idp describe-resource-server • API de AWS: DescribeResourceServer
Para mostrar información acerca de todos los servidores de recursos del grupo de usuarios • AWS CLI: aws cognito-idp list-resource-servers • API de AWS: ListResourceServers
Para eliminar un servidor de recursos • AWS CLI: aws cognito-idp delete-resource-server • API de AWS: DeleteResourceServer
Para actualizar la configuración de un servidor de recursos • AWS CLI: aws cognito-idp update-resource-server • API de AWS: UpdateResourceServer
47
Amazon Cognito Guía para desarrolladores Agregar inicio de sesión a través de un tercero
Agregar inicio de sesión de grupo de usuarios a través de un tercero Los usuarios de la aplicación pueden iniciar sesión directamente a través de un grupo de usuarios o pueden federarse a través de un proveedor de identidades (IdP) externo. El grupo de usuarios administra la sobrecarga que conlleva el tratamiento de los tokens que se devuelven desde el inicio de sesión de redes sociales mediante Facebook, Google, Amazon y Apple, así como de los IdP de OpenID Connect (OIDC) y SAML. Con la interfaz de usuario web integrada que aloja, Amazon Cognito proporciona la gestión y la administración de los tokens de los usuarios autenticados por todos los proveedores de identidad, de modo que los sistemas backend pueden estandarizar un conjunto de tokens para los grupos de usuarios.
Note El inicio de sesión a través de un tercero (federación) está disponible en los grupos de usuarios de Amazon Cognito. Esta característica es independiente de la federación a través de grupos de identidades de Amazon Cognito (identidades federadas). Temas • Agregar proveedores de identidad sociales a un grupo de usuarios (p. 48) • Agregar proveedores de identidad SAML a un grupo de usuarios (p. 54) • Agregar proveedores de identidad OIDC a un grupo de usuarios (p. 62) • Especificación de asignaciones de atributos del proveedor de identidad para su grupo de usuarios (p. 68)
Agregar proveedores de identidad sociales a un grupo de usuarios Los usuarios de web y aplicaciones móviles pueden iniciar sesión a través de proveedores de identidad de redes sociales como Facebook, Google, Amazon y Apple. Con la interfaz de usuario web alojada integrada, Amazon Cognito proporciona la gestión y la administración de los tokens de todos usuarios autenticados, de modo que los sistemas backend pueden estandarizar un conjunto de tokens para los grupos de usuarios. Puede agregar un proveedor de identidad social en la Consola de administración de AWS, con la CLI de AWS o con llamadas a la API de Amazon Cognito.
Note El inicio de sesión a través de un tercero (federación) está disponible en los grupos de usuarios de Amazon Cognito. Esta característica es independiente de la federación a través de grupos de identidades de Amazon Cognito (identidades federadas).
48
Amazon Cognito Guía para desarrolladores Añadir proveedores de identidad social
Temas • Prerequisites (p. 49) • Paso 1: Registrarse en un proveedor de identidad social (p. 49) • Paso 2: Añadir un proveedor de identidad social al grupo de usuarios (p. 52) • Paso 3: Probar la configuración del proveedor de identidad social (p. 54)
Prerequisites Antes de comenzar, necesitará: • Un grupo de usuarios con un cliente de aplicación y un dominio de grupo de usuarios. Para obtener más información, consulte Crear un grupo de usuarios. • Un proveedor de identidad social.
Paso 1: Registrarse en un proveedor de identidad social Antes de crear un proveedor de identidad social con Amazon Cognito, debe registrar su aplicación en el proveedor de identidad para recibir un ID y un secreto de cliente.
Para registrar una aplicación en Facebook 1.
Cree una cuenta de desarrollador con Facebook.
2.
Inicie sesión con sus credenciales de Facebook.
3.
En el menú My Apps (Mis aplicaciones), elija Create New App (Crear nueva aplicación).
4.
Asigne un nombre a la aplicación de Facebook y elija Create App ID (Crear Id. de aplicación).
5.
En la barra de navegación de la izquierda, elija Settings (Configuración) y luego Basic (Básica).
6.
Tome nota del valor de App ID (ID de aplicación) y de App Secret (Secreto de la aplicación). Los usará en la sección siguiente.
7.
Elija + Add Platform (+ Agregar plataforma) en la parte inferior de la página.
8.
Elija Website (Sitio web).
9.
En Website (Sitio web), escriba el dominio del grupo de usuarios con el punto de enlace /oauth2/ idpresponse en Site URL (URL del sitio).
https:///login? response_type=code&client_id=&redirect_uri=https://www.example.com
10. Elija Save changes. 11. Escriba el dominio del grupo de usuarios en dominios de App Domains (Dominios de la aplicación).
https://
12. Elija Save changes. 13. En la barra de navegación elija Products (Productos) y, a continuación, Set up (Configurar) en Facebook Login (Inicio de sesión con Facebook). 14. En la barra de navegación elija Facebook Login (Inicio de sesión con Facebook) y, a continuación, Settings (Configuración). Escriba su URL de redirección en Valid OAuth Redirect URIs (URI de redireccionamiento de OAuth válidos). Se compone de su dominio de grupo de usuarios con el punto de enlace /oauth2/ idpresponse.
49
Amazon Cognito Guía para desarrolladores Añadir proveedores de identidad social
https:///oauth2/idpresponse
15. Elija Save changes.
Para registrar una aplicación en Amazon 1.
Cree una cuenta de desarrollador con Amazon.
2.
Inicie sesión con las credenciales de Amazon.
3.
Debe crear un perfil de seguridad de Amazon para recibir un ID y un secreto de cliente de Amazon. Elija Apps and Services (Aplicaciones y servicios) en la barra de navegación de la parte superior de la página y, a continuación, elija Login with Amazon.
4.
Elija Create a Security Profile (Crear un perfil de seguridad).
5.
Escriba un valor en Security Profile Name (Nombre del perfil de seguridad), en Security Profile Description (Descripción del perfil de seguridad) y en Consent Privacy Notice URL (URL del aviso sobre consentimiento de confidencialidad).
6.
Elija Save (Guardar).
7.
Elija Client ID (ID de cliente) y Client Secret (Secreto de cliente) para mostrar el ID de cliente y el secreto. Los usará en la sección siguiente.
8.
Coloque el cursor sobre el engranaje, elija Web Settings (Configuración de web) y, a continuación, elija Edit (Editar).
9.
Escriba el dominio del grupo de usuarios en Allowed Origins (Orígenes permitidos).
https://
10. Escriba el dominio del grupo de usuarios con el punto de enlace /oauth2/idpresponse en Allowed Return URLs (URL de retorno permitidas).
https:///oauth2/idpresponse
11. Elija Save (Guardar).
Para registrar una aplicación en Google 1.
Cree una cuenta de desarrollador con Google.
2.
Iniciar sesión con las credenciales de Google.
3.
Elija CONFIGURE A PROJECT (CONFIGURAR UN PROYECTO).
4.
Escriba un nombre de proyecto y elija NEXT (SIGUIENTE).
5.
Escriba el nombre de su producto y elija NEXT (SIGUIENTE).
6.
Elija Web browser (Navegador web) en la lista desplegable Where are you calling from? (¿Desde dónde llama?).
7.
Escriba el dominio del grupo de usuarios en Authorized JavaScript origins (Orígenes de JavaScript autorizados).
https://
8.
Elija CREATE (CREAR). No utilizará los valores de Client ID (ID de cliente) y Client Secret (Secreto de cliente) de este paso.
50
Amazon Cognito Guía para desarrolladores Añadir proveedores de identidad social
9.
Elija DONE (HECHO).
10. Inicie sesión en la consola de Google. 11. En la barra de navegación de la izquierda, elija Credentials (Credenciales). 12. Cree sus credenciales OAuth 2.0 eligiendo OAuth client ID (ID de cliente OAuth) en la lista desplegable Create credentials (Crear credenciales). 13. Elija Web application (Aplicación web). 14. Escriba el dominio del grupo de usuarios en Authorized JavaScript origins (Orígenes de JavaScript autorizados).
https://
15. Escriba el dominio del grupo de usuarios con el punto de enlace /oauth2/idpresponse en Authorized Redirect URIs (URI de redireccionamiento autorizadas).
https:///oauth2/idpresponse
16. Elija Create (Crear) dos veces. 17. Tome nota de los valores de OAuth client ID (ID de cliente OAuth) y Client secret (Secreto de cliente). Los necesitará en la sección siguiente. 18. Seleccione OK.
Para registrar una aplicación en Apple 1.
Cree una cuenta de desarrollador en Apple.
2.
Inicie sesión con las credenciales de Apple.
3.
En la barra de navegación izquierda, elija Certificates, IDs & Profiles (Certificados, ID y perfiles).
4.
En la barra de navegación izquierda, elija Identifiers (Identificadores).
5.
En la página Identifiers (Identificadores), elija el icono +.
6.
En la página Register a New Identifier (Registrar un nuevo identificador), elija App IDs (ID de aplicación) y, a continuación, elija Continue (Continuar).
7.
En la página Register an App ID (Registrar un ID de aplicación), haga lo siguiente: 1. En Description (Descripción), escriba una descripción. 2. En App ID Prefix (Prefijo de ID de aplicación), escriba un identificador. Anote el valor de App ID Prefix (Prefijo de ID de aplicación), ya que lo necesitará después de elegir Apple como su proveedor de identidad en Paso 2: Añadir un proveedor de identidad social al grupo de usuarios (p. 52). 3. En Capabilities (Capacidades), elija Sign In with Apple (Iniciar sesión con Apple) y, a continuación, elija Edit (Editar). 4. En la página Sign in with Apple: App ID Configuration, seleccione la configuración adecuada para su aplicación y, a continuación, elija Save. 5. Elija Continue.
8.
En la página Confirm your App ID (Confirmar ID de Apple), elija Register (Registrarse).
9.
En la página Identifiers (Identificadores), coloque el cursor sobre App IDs (ID de aplicación) en la parte derecha de la página, elija Services IDs (ID de servicios) y, a continuación, elija el icono +.
10. En la página Register a New Identifier (Registrar un nuevo identificador), elija Services IDs (ID de servicios) y, a continuación, elija Continue (Continuar). 11. En la página Register a Services ID (Registrar un ID de servicio), haga lo siguiente: 1. En Description (Descripción), escriba una descripción. 51
Amazon Cognito Guía para desarrolladores Añadir proveedores de identidad social
2. En Identifier (Identificador), escriba un identificador. Anote este ID de servicios, ya que necesitará este valor después de elegir Apple como su proveedor de identidad en Paso 2: Añadir un proveedor de identidad social al grupo de usuarios (p. 52). 3. Seleccione Sign In with Apple (Iniciar sesión con Apple) y, a continuación, elija Configure (Configurar). 4. En la página Web Authentication Configuration (Configuración de autenticación web), elija Primary App ID (ID de aplicación principal). En Web Domain (Dominio web), escriba el dominio del grupo de usuarios. En Return URLs (URL de retorno), escriba el dominio del grupo de usuarios e incluya el punto de enlace /oauth2. Por ejemplo:
https:///oauth2/idpresponse
5. Elija Add (Añadir) y, a continuación, Save (Guardar). No es necesario verificar el dominio. 6. Elija Continue (Continuar) y, a continuación, elija Register (Registrar). 12. En la barra de navegación izquierda, elija Keys (Claves). 13. En la página Keys (Claves), elija el icono +. 14. En la página Register a New Key (Registrar una nueva clave), haga lo siguiente: 1. En Key Name (Nombre de clave), escriba un nombre de clave. 2. Elija Sign In with Apple (Iniciar sesión con Apple) y, a continuación, elija Configure (Configurar). 3. En la página Configure Key (Configurar clave), elija un Primary App ID (ID de aplicación principal) y, a continuación, elija Save (Guardar). 4. Elija Continue (Continuar) y, a continuación, elija Register (Registrar). 15. En la página Download Your Key, elija Download para descargar la clave privada y, a continuación, elija Done. Necesitará esta clave privada y el valor de Key ID (ID de clave) que se muestra en esta página después de elegir Apple como su proveedor de identidad en Paso 2: Añadir un proveedor de identidad social al grupo de usuarios (p. 52).
Paso 2: Añadir un proveedor de identidad social al grupo de usuarios En esta sección configurará un proveedor de identidad social en el grupo de usuarios utilizando el ID y el secreto de cliente de la sección anterior.
Para configurar el proveedor de identidad social de un grupo de usuarios con la Consola de administración de AWS 1.
Vaya a la consola de Amazon Cognito. Es posible que se le soliciten sus credenciales de AWS.
2.
Elija Manage your User Pools.
3.
Elija un grupo de usuarios existente en la lista o cree un grupo de usuarios.
4.
En la barra de navegación de la izquierda, elija Identity providers (Proveedores de identidad).
5.
Elija un proveedor de identidad de red social: Facebook, Google, Login with Amazon o Apple.
6.
Para Google o Login with Amazon, escriba el ID y el secreto de cliente de aplicación que obtuvo del proveedor de identidad social en la sección anterior. Para Facebook, escriba el ID de cliente, el secreto de cliente de aplicación que obtuvo del proveedor de identidad social en la sección anterior, y elija una versión de la API. Recomendamos elegir la versión más reciente disponible posible, ya que cada versión de la API de Facebook tiene un ciclo de vida y una fecha de obsolescencia, por ejemplo, la versión 2.12. Puede cambiar la versión de la API después de su creación si encuentra algún problema. Los ámbitos y atributos de Facebook pueden variar con cada versión de la API, por lo que recomendamos probar su integración.” Para Sign in with Apple (Inicio de sesión con Apple), 52
Amazon Cognito Guía para desarrolladores Añadir proveedores de identidad social
indique el ID de servicios, el ID de equipo, el ID de clave y la clave privada que ha recibido en la sección anterior. 7.
Escriba los nombres de los ámbitos que desea autorizar. Los ámbitos definen a qué atributos de usuario (como name y email) desea acceder con su aplicación. En el caso de Facebook, deben separarse con comas. En el caso de Google y Login with Amazon, deben separarse con espacios. Para Sign in with Apple (Inicio de sesión con Apple), marque las casillas de verificación de los ámbitos a los que desee acceder. Proveedor de identidad social
Ámbitos de ejemplo
public_profile, email
profile email openid
Login with Amazon
profile postal_code
Inicio de sesión con Apple
email name
Al usuario de la aplicación se le pedirá que esté de acuerdo con proporcionar estos atributos a su aplicación. Para obtener más información acerca de sus ámbitos, consulte la documentación de Google, Facebook, Login with Amazon o Inicio de sesión con Apple. En el caso de Sign in with Apple (Inicio de sesión con Apple), estos son escenarios de usuario en los que es posible que no se devuelvan los ámbitos. • Un usuario final se encuentra con errores después de salir de la página de inicio de sesión de Apple (puede ser un error interno de Cognito o de cualquier cosa que haya escrito el desarrollador). • El identificador de ID de servicio se utiliza en todos los grupos de usuarios u otros servicios de autenticación. • Un desarrollador añade ámbitos adicionales después de que el usuario final haya iniciado sesión (no se recupera ninguna información nueva). • Un desarrollador elimina al usuario y luego el usuario vuelve a iniciar sesión sin quitar la aplicación de su perfil de ID de Apple. 8.
Elija Enable (Habilitar) para el proveedor de identidad social que está configurando.
9.
Elija App client settings (Configuración del cliente de aplicación) en la barra de navegación.
10. Seleccione como proveedor de identidad social uno de los valores de Enabled Identity Providers (Proveedores de identidad habilitados) para la aplicación del grupo de usuarios. 11. Escriba la URL de devolución de llamada en Callback URL(s) (Direcciones URL de devolución de llamada) para la aplicación del grupo de usuarios. Esta es la URL de la página a la que se redirigirá al usuario después de una autenticación correcta.
https://www.example.com
12. Elija Save changes. 13. En la pestaña Attribute mapping (Asignación de atributos), añada asignaciones para al menos los atributos obligatorios, por lo general email, tal y como se indica a continuación: a.
Marque la casilla para elegir el nombre de atributo de Facebook, Google o Amazon, según corresponda. También puede escribir los nombres de atributos adicionales que no se muestran en la consola de Amazon Cognito.
b.
Elija el atributo del grupo de usuarios de destino en la lista desplegable.
c.
Elija Save changes.
d.
Seleccione Go to summary (Ir al resumen). 53
Amazon Cognito Guía para desarrolladores Agregar proveedores SAML
Paso 3: Probar la configuración del proveedor de identidad social Puede crear una URL de inicio de sesión con los elementos de las dos secciones anteriores. Úselo para probar la configuración del proveedor de identidad social.
https:///login? response_type=code&client_id=&redirect_uri=https://www.example.com
Puede encontrar el dominio en la página de la consola Domain name (Nombre de dominio) del grupo de usuarios. El valor de client_id se encuentra en la página App client settings (Configuración del cliente de aplicación). Use la URL de devolución de llamada para el parámetro redirect_uri. Esta es la URL de la página a la que se redirigirá al usuario después de una autenticación correcta.
Note Se cancelarán las solicitudes que no se completen en un plazo de 5minutos, se le redirigirá a la página de inicio de sesión y, a continuación, se mostrará un mensaje de error Something went wrong.
Agregar proveedores de identidad SAML a un grupo de usuarios Puede permitir a los usuarios web y de aplicaciones móviles iniciar sesión a través de un proveedor de identidad SAML como Microsoft Active Directory Federation Services (ADFS) o Shibboleth. Elija un proveedor de identidad SAML compatible con el estándar SAML 2.0. Con la interfaz de usuario web alojada integrada, Amazon Cognito proporciona la gestión y la administración de los tokens de todos usuarios autenticados, de modo que los sistemas backend pueden estandarizar un conjunto de tokens para los grupos de usuarios. Puede crear y administrar un proveedor de identidad SAML en la Consola de administración de AWS, con la CLI de AWS o con llamadas a la API de Amazon Cognito. Para comenzar a utilizar la consola, consulte Añadir inicio de sesión con un proveedor de identidad SAML a un grupo de usuarios con la Consola de administración de AWS.
Note El inicio de sesión a través de un tercero (federación) está disponible en los grupos de usuarios de Amazon Cognito. Esta característica es independiente de la federación a través de grupos de identidades de Amazon Cognito (identidades federadas). Tiene que actualizar su proveedor de identidad SAML y configurar su grupo de usuarios para que lo admita. Consulte la documentación de su proveedor de identidad SAML para obtener información acerca de cómo agregar su grupo de usuarios como relación de confianza o aplicación para su proveedor de identidad SAML 2.0.
Note Cognito admite valores de relayState superiores a 80bytes. Aunque en las especificaciones de SAML se establece que el valor de relayState "NO DEBE superar los 80bytes de tamaño", la práctica actual del sector se desvía con frecuencia de este comportamiento. Como consecuencia, rechazar relayState de más de 80bytes interrumpirá muchas integraciones de proveedores SAML estándar.
54
Amazon Cognito Guía para desarrolladores Agregar proveedores SAML
También tiene que proporcionar un punto de enlace de consumidor de aserción a su proveedor de identidad SAML. Configure este punto de enlace para enlace POST de SAML 2.0 en su proveedor de identidad SAML: https://.auth..amazoncognito.com/saml2/idpresponse
El prefijo de dominio y el valor de región de su grupo de usuarios se encuentran en la pestaña Domain name (Nombre de dominio) de la consola de Amazon Cognito. Para algunos proveedores de identidad SAML, también tiene que proporcionar el SP urn / URI de destino / ID de entidad del SP, con el formato: urn:amazon:cognito:sp:
Encontrará el ID del grupo de usuarios en la pestaña General settings (Configuración general) de la consola de Amazon Cognito. Asimismo, debe configurar el proveedor de identidad SAML para que proporcione los valores de todos los atributos necesarios en su grupo de usuarios. Normalmente, email es un atributo obligatorio para grupos de usuarios. En ese caso, el proveedor de identidad SAML debe proporcionar un valor email (reclamación) en la aserción SAML. Amazon CognitoLos grupos de usuarios de admiten federación SAML 2.0 con puntos de enlace "postbinding". De esta forma, se suprime la necesidad de que la aplicación recupere o analice las respuestas de aserciones SAML, ya que el grupo de usuarios recibe directamente la respuesta SAML del proveedor de identidad a través de un agente de usuario. Su grupo de usuarios actúa como un proveedor de servicio en nombre de la aplicación. Amazon Cognito admite inicio de sesión único (SSO) iniciado por el proveedor de servicio tal y como se describe en la sección 5.1.2 de SAML V2.0 Technical Overview. Temas • Flujo de autenticación de proveedores de identidad de grupos de usuarios de SAML (p. 55) • Elegir nombres de proveedor de identidad SAML (p. 56) • Creación y administración de un proveedor de identidad SAML para un grupo de usuarios (Consola de administración de AWS) (p. 57) • Creación y administración de un proveedor de identidad SAML para un grupo de usuarios (AWS CLI y API de AWS) (p. 59) • Integración de proveedores de identidad SAML de terceros con Grupos de usuarios de Amazon Cognito (p. 61)
Flujo de autenticación de proveedores de identidad de grupos de usuarios de SAML Puede integrar proveedores de identidad basados en SAML directamente desde el grupo de usuarios. 1. 2.
La aplicación inicia el proceso de inscripción y de inicio de sesión dirigiendo al usuario a la interfaz de usuario alojada por AWS. Una aplicación móvil puede utilizar la vista web para mostrar las páginas alojadas por AWS. Normalmente, el grupo de usuarios determina el proveedor de identidad del usuario a partir de la dirección de correo electrónico del usuario. De forma alternativa, si la aplicación recopiló información antes de dirigir al usuario al grupo de usuarios, puede proporcionar esa información a Amazon Cognito a través de un parámetro de consulta.
55
Amazon Cognito Guía para desarrolladores Agregar proveedores SAML
3.
Se redirige al usuario al proveedor de identidad.
4.
El proveedor de identidad autentica al usuario si es necesario. Si el proveedor de identidad reconoce que el usuario tiene una sesión activa, omite la autenticación para proporcionar una experiencia de inicio de sesión único (SSO).
5.
El proveedor de identidad envía (POST) la aserción SAML al servicio de Amazon Cognito.
6.
Después de verificar la aserción SAML y recopilar los atributos de usuario (notificaciones) de la aserción, crea o actualiza Amazon Cognito internamente el perfil del usuario en el grupo de usuarios. Amazon Cognito devuelve tokens de OIDC a la aplicación para el usuario que acaba de iniciar sesión.
En el siguiente diagrama se muestra el flujo de autenticación de este proceso:
Note Se cancelarán las solicitudes que no se completen en un plazo de 5minutos, se le redirigirá a la página de inicio de sesión y, a continuación, se mostrará un mensaje de error Something went wrong. Cuando un usuario se autentica, el grupo de usuarios devuelve tokens de ID, acceso y actualización. El token de ID es un token OIDC estándar para la administración de identidades y el token de acceso es un token OAuth 2.0 estándar. Los tokens de ID y acceso caducan al cabo de una hora, pero la aplicación puede usar el token de actualización para obtener nuevos tokens sin tener que volver a autenticar al usuario. Como desarrollador, puede elegir la fecha de vencimiento de los tokens de actualización y, por tanto, la frecuencia con la que los usuarios necesitan reautenticarse. Si el usuario se ha autenticado a través de un proveedor de identidad externo (es decir, es un usuario federado), la aplicación sigue usando los tokens de Amazon Cognito con el token de actualización para determinar cuánto tiempo debe transcurrir hasta que se vuelva a autenticar al usuario, independientemente de cuándo caduque el token del proveedor de identidad externo. El grupo de usuarios utiliza automáticamente el token de actualización para obtener nuevos tokens de ID y acceso cuando estos caducan. Si el token de actualización también ha caducado, el servidor inicia automáticamente la autenticación a través de las páginas de su aplicación que se alojan en AWS.
Elegir nombres de proveedor de identidad SAML Debe elegir los nombres de sus proveedores SAML. El formato de cadena es [\w\s+=.@-]+ y puede tener hasta 40 caracteres. También puede elegir los identificadores para sus proveedores SAML. Un identificador se resuelve de forma inequívoca en un proveedor de identidad asociado al grupo de usuarios. Normalmente, cada identificador se corresponde con un dominio que pertenece a la empresa a la que representa el proveedor de identidad SAML. Para una aplicación multiempresa utilizada por varias empresas, se pueden usar
56
Amazon Cognito Guía para desarrolladores Agregar proveedores SAML
identificadores para redirigir a los usuarios al proveedor de identidad correcto. Como la misma compañía puede poseer varios dominios, puede proporcionar varios identificadores. Puede asociar hasta 50 identificadores con cada proveedor SAML. Los identificadores deben ser únicos para el proveedor de identidad. Suponga, por ejemplo, que ha creado una aplicación que pueden utilizar empleados de dos empresas diferentes, A y B. La empresa A posee domainA.com y domainA.co.uk; la empresa B posee domainB.com. Suponga también que configura dos proveedores de identidad, uno para cada empresa: • Para el proveedor de identidad A, puede definir los identificadores DomainA.com y DomainA.co.uk. • Para el proveedor de identidad B, puede definir el identificador DomainB.com. En la aplicación, puede pedir a los usuarios que introduzcan sus direcciones de correo electrónico. Obteniendo el dominio de la dirección de correo electrónico, puede redirigir al usuario al proveedor de identidad correcto especificando el dominio en la llamada IdPIdentifier al punto de enlace / authorize. Por ejemplo, si un usuario introduce [emailprotected], el usuario se redirige al proveedor de identidad A. La página de inicio de sesión alojada por Amazon Cognito analiza la dirección de correo electrónico automáticamente para obtener la información. Analiza el dominio del correo electrónico de correo electrónico y lo utiliza como IdPIdentifier cuando llama al punto de enlace /authorize. • Si tiene varios proveedores de identidad SAML y especifica un valor IdPIdentifier en todos ellos, verá una casilla para escribir una dirección de correo electrónico en la página alojada. • Si tiene varios proveedores de identidad y no especifica un valor IdPIdentifier para ninguno de ellos, se mostrará una lista de proveedores de identidad en la página alojada. Si va a crear su propia interfaz de usuario, debe analizar el nombre de dominio de forma que coincida con el IdPIdentifiers proporcionado durante la configuración del proveedor de identidad. Para obtener más información sobre la configuración de proveedores de identidad, consulte Configuración de proveedores de identidad para su grupo de usuarios (p. 191).
Creación y administración de un proveedor de identidad SAML para un grupo de usuarios (Consola de administración de AWS) Puede utilizar la Consola de administración de AWS para crear y eliminar proveedores de identidad SAML. Antes de crear un proveedor de identidad SAML, necesita el documento de metadatos de SAML facilitado por el proveedor de identidad externo. Para obtener instrucciones sobre cómo obtener o generar el documento de metadatos de SAML necesario, consulte Integración de proveedores de identidad SAML de terceros con Grupos de usuarios de Amazon Cognito (p. 61).
Para configurar un proveedor de identidad SAML 2.0 en su grupo de usuarios 1.
Vaya a la consola de Amazon Cognito. Es posible que se le soliciten sus credenciales de AWS.
2.
Manage User Pools (Administrar grupos de usuarios.
3.
Elija un grupo de usuarios existente en la lista o cree un grupo de usuarios.
4.
En la barra de navegación de la izquierda, elija Identity providers (Proveedores de identidad).
5.
Elija SAML para abrir el cuadro de diálogo de SAML.
6.
En Metadata document (Documento de metadatos), cargue un documento de metadatos del proveedor de identidad SAML. También puede escribir una URL que apunte al documento de metadatos. Para obtener más información, consulte Integración de proveedores de identidad SAML de terceros con Grupos de usuarios de Amazon Cognito (p. 61).
57
Amazon Cognito Guía para desarrolladores Agregar proveedores SAML
Note Le recomendamos que proporcione la URL del punto de enlace, si se trata de un punto de enlace público, en lugar de cargar el archivo, ya que de esta forma Amazon Cognito podrá actualizar los metadatos de forma automática. Normalmente, los metadatos se actualizan cada seis horas o antes de que caduquen, lo que ocurra primero. 7.
Escriba el nombre del proveedor SAML en Provider name (Nombre de proveedor). Para obtener más información acerca de los nombres de SAML, consulte Elegir nombres de proveedor de identidad SAML (p. 56).
8.
Escriba los identificadores de SAML opcionales que desee usar en Identifiers (Identificadores).
9.
Seleccione Enable IdP sign out flow (Habilitar el flujo de cierre de sesión en el proveedor de identidad) si desea que el usuario cierre la sesión en el proveedor de identidad SAML al cerrar la sesión en Amazon Cognito. Al activar este flujo, se envía una solicitud de cierre de sesión firmada al proveedor de identidad SAML cuando se llama al Punto de enlace LOGOUT (p. 376). Configure este punto de enlace para consumir las respuestas de cierre de sesión del proveedor de identidad. Este punto de enlace utiliza el método "post binding". https://.auth..amazoncognito.com/saml2/logout
Note Si esta opción está seleccionada y el proveedor de identidad SAML espera una solicitud de cierre de sesión firmada, también se deberá configurar el certificado de firma proporcionado por Amazon Cognito en el proveedor de identidad SAML. El proveedor de identidad SAML procesará la solicitud de cierre de sesión firmada y cerrará la sesión de Amazon Cognito del usuario. 10. Elija Create provider (Crear proveedor). 11. En la pestaña Attribute mapping (Asignación de atributos), añada asignaciones para al menos los atributos obligatorios, por lo general email, tal y como se indica a continuación: a.
Escriba el nombre de atributo SAML tal como aparece en la aserción SAML del proveedor de identidad. Si su proveedor de identidad SAML ofrece aserciones SAML de ejemplo, podría servirle para encontrar el nombre. Algunos proveedores de identidad utilizan nombres sencillos, como email, mientras que otros utilizan nombres similares a este:
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
b.
Elija el atributo del grupo de usuarios de destino en la lista desplegable.
12. Elija Save changes. 13. Seleccione Go to summary (Ir al resumen).
Note Si aparece InvalidParameterException al crear un proveedor de identidad SAML con una URL de punto de enlace de metadatos HTTPS, por ejemplo, "Error al recuperar los metadatos de "Asegúrese de que el punto de enlace de metadatos tenga SSL configurado correctamente y de que tenga un certificado SSL válido asociado.
58
Amazon Cognito Guía para desarrolladores Agregar proveedores SAML
Para configurar el proveedor de identidad SAML para añadir un grupo de usuarios como una relación de confianza • El URN del proveedor de servicio de grupos de usuario es: urn:amazon:cognito:sp:. Amazon Cognito envía AuthnRequest al proveedor de identidad SAML para emitir una aserción SAML con restricciones de destino a este URN. El proveedor de identidad utiliza el siguiente punto de enlace POST para el mensaje de respuesta del proveedor de identidad al proveedor del servicio: https://.auth..amazoncognito.com/saml2/idpresponse. • Asegúrese de que el IdP de identidad SAML rellene NameID y todos los atributos obligatorios para el grupo de usuarios en la aserción SAML. NameID se utiliza para identificar al usuario federado de SAML de forma inequívoca en el grupo de usuarios. Utilice el formato de ID de nombres de SAML persistente.
Para configurar el proveedor de identidad SAML para añadir un certificado de firma • Para obtener el certificado que contiene la clave pública que utilizará el proveedor de identidad para verificar la solicitud de cierre de sesión firmada, elija Show signing certificate (Mostrar certificado de firma) en Active SAML Providers (Proveedores SAML activos) en el cuadro de diálogo SAML en Identity providers (Proveedores de identidad) de la página Federation (Federación) de la consola.
Para eliminar un proveedor SAML 1.
Inicie sesión en la consola de Amazon Cognito.
2.
En el panel de navegación, elija Manage your User Pools (Administrar sus grupos de usuarios) y elija el grupo de usuarios que desea editar.
3.
Elija Identity providers (Proveedores de identidad) en la página Federation (Federación) de la consola.
4.
Elija SAML para mostrar los proveedores de identidad SAML.
5.
Active la casilla de verificación situada junto al proveedor que va a eliminar.
6.
Elija Delete provider (Eliminar proveedor).
Creación y administración de un proveedor de identidad SAML para un grupo de usuarios (AWS CLI y API de AWS) Utilice los siguientes comandos para crear y administrar un proveedor SAML.
Para crear un proveedor de identidad y cargar un documento de metadatos • AWS CLI: aws cognito-idp create-identity-provider Ejemplo con archivo de metadatos: aws cognito-idp create-identity-provider --userpool-id --provider-name=SAML_provider_1 --provider-type SAML --provider-details file:///details.json --attribute-mapping email=http:// schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress Donde details.json contiene: { }
"MetadataFile": ""
59
Amazon Cognito Guía para desarrolladores Agregar proveedores SAML
Note Si el archivo de contiene todas las comillas ("), deben tener caracteres de escape (\"). Ejemplo con URL de metadatos: aws cognito-idp create-identity-provider --user-poolid --provider-name=SAML_provider_1 --provider-type SAML -provider-details MetadataURL= --attribute-mapping email=http:// schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress • API de AWS: CreateIdentityProvider
Para cargar un nuevo documento de metadatos para un proveedor de identidad • AWS CLI: aws cognito-idp update-identity-provider Ejemplo con archivo de metadatos: aws cognito-idp update-identity-provider --userpool-id --provider-name=SAML_provider_1 --provider-details file:///details.json --attribute-mapping email=http://schemas.xmlsoap.org/ ws/2005/05/identity/claims/emailaddress Donde details.json contiene: { }
"MetadataFile": ""
Note Si el archivo de contiene todas las comillas ("), deben incluirse en una secuencia de escape (\"). Ejemplo con URL de metadatos: aws cognito-idp update-identity-provider -user-pool-id --provider-name=SAML_provider_1 --providerdetails MetadataURL= --attribute-mapping email=http:// schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress • API de AWS: UpdateIdentityProvider
Para obtener información acerca de un proveedor de identidad específico • AWS CLI: aws cognito-idp describe-identity-provider aws cognito-idp describe-identity-provider --user-pool-id -provider-name=SAML_provider_1 • API de AWS: DescribeIdentityProvider
Para mostrar información de todos los proveedores de identidad • AWS CLI: aws cognito-idp list-identity-providers Ejemplo: aws cognito-idp list-identity-providers --user-pool-id --max-results 3 • API de AWS: ListIdentityProviders
60
Amazon Cognito Guía para desarrolladores Agregar proveedores SAML
Para eliminar un proveedor de identidad • AWS CLI: aws cognito-idp delete-identity-provider aws cognito-idp delete-identity-provider --user-pool-id -provider-name=SAML_provider_1 • API de AWS: DeleteIdentityProvider
Integración de proveedores de identidad SAML de terceros con Grupos de usuarios de Amazon Cognito Para configurar soluciones de proveedor de identidad SAML 2.0 de terceros de modo que puedan funcionar con federación para grupos de usuarios de Amazon Cognito, debe escribir una URL de redirección o de inicio de sesión, que será https://.auth..amazoncognito.com/saml2/idpresponse. El prefijo de dominio y el valor de región de su grupo de usuarios se encuentran en la página Domain name (Nombre de dominio) de la consola de Amazon Cognito.
Note Las URL de redirección de todos los proveedores de identidad SAML que haya creado en grupos de usuarios durante el periodo de prueba público antes del 10 de agosto de 2017 tienen el siguiente formato: https://.auth..amazoncognito.com/ login/redirect. Si tiene proveedores de identidad SAML creados durante el periodo de prueba público en el grupo de usuarios, deberá realizar una de estas dos acciones: • Sustituirlos por otros nuevos, que utilicen la nueva URL de redirección. • Actualizar la configuración de sus proveedores de identidad SAML para que acepten tanto las URL de redirección antiguas como las nuevas. Todos los proveedores de identidad SAML de Amazon Cognito cambiarán a las URL nuevas, y las antiguas dejarán de funcionar el 31 de octubre de 2017. En el caso de algunos proveedores de identidad SAML, deberá proporcionar el urn / URI de destino / ID de entidad del SP, con el formato urn:amazon:cognito:sp:. Encontrará el ID del grupo de usuarios en la pestaña General settings (Configuración general) de la consola de Amazon Cognito. Asimismo, debe configurar el proveedor de identidad SAML para que proporcione los valores de todos los atributos necesarios en su grupo de usuarios de Normalmente, email es un atributo obligatorio para los grupos de usuarios, y en tal caso el proveedor de identidad SAML, deberá proporcionar un valor de email (notificación) en la aserción SAML. Los siguientes enlaces le ayudarán a configurar soluciones de proveedores de identidad SAML 2.0 de terceros para trabajar con la federación de Grupos de usuarios de Amazon Cognito.
Note La compatibilidad con los proveedores de identidad está integrada en Amazon Cognito, por lo que solo necesita visitar los siguientes sitios del proveedor para obtener el documento de metadatos SAML. Puede que vea instrucciones adicionales en el sitio web del proveedor sobre la integración con AWS, pero no las necesita. Solución
Más información
Microsoft Active Directory Federation Services (AD FS)
Puede descargar el documento de metadatos SAML de su servidor de
61
Amazon Cognito Guía para desarrolladores Añadir proveedores OIDC
Solución
Más información federación de ADFS desde la siguiente dirección: https:/// FederationMetadata/2007-06/ FederationMetadata.xml.
Okta
Una vez que haya configurado su Grupo de usuarios de Amazon Cognito como una aplicación en Okta, puede encontrar el documento de metadatos en la sección Admin del panel de Okta. Elija la aplicación, seleccione la sección Sign On (Inicio de sesión) y busque en Settings for SAML (Configuración de SAML). La dirección URL debe tener un aspecto similar al siguiente: https://.oktapreview.com/ app//sso/saml/ metadata.
Auth0
El documento de descarga de metadatos se obtiene del panel de Auth0. Elija Clients (Clientes) y después Settings (Configuración). Desplácese hacia abajo, elija Show Advanced Settings (Mostrar configuración avanzada) y busque su SAML Metadata URL (URL de metadatos de SAML). Debe tener un aspecto similar al siguiente: https://.auth0.com/samlp/ metadata/.
Ping Identity
Para PingFederate, puede encontrar instrucciones para descargar un archivo XML de metadatos en Provide general SAML metadata by file.
Agregar proveedores de identidad OIDC a un grupo de usuarios Puede habilitar a los usuarios que ya tienen cuentas con proveedores de identidad OpenID Connect (OIDC) IdPs(como Salesforce o Ping Identity) para que omitan el paso —de inscripción e inicien sesión en la aplicación con una cuenta existente. Con la interfaz de usuario web alojada integrada, Amazon Cognito proporciona la gestión y la administración de los tokens de todos usuarios autenticados, de modo que los sistemas backend pueden estandarizar un conjunto de tokens para los grupos de usuarios.
Note El inicio de sesión a través de un tercero (federación) está disponible en los grupos de usuarios de Amazon Cognito. Esta característica es independiente de la federación a través de grupos de identidades de Amazon Cognito (identidades federadas).
62
Amazon Cognito Guía para desarrolladores Añadir proveedores OIDC
Puede añadir un proveedor de identidad OIDC a un grupo de usuarios en la consola de administración de AWS, con la CLI de AWS o mediante el método CreateIdentityProvider de la API de grupos de usuarios. Temas • Prerequisites (p. 63) • Paso 1: Registrarse en un proveedor de identidad OIDC (p. 63) • Paso 2: Añadir un proveedor de identidad OIDC al grupo de usuarios (p. 65) • Paso 3: Probar la configuración del proveedor de identidad OIDC (p. 67) • Flujo de autenticación de proveedores de identidad de grupos de usuarios de OIDC (p. 67)
Prerequisites Antes de comenzar, necesitará: • Un grupo de usuarios con un cliente de aplicación y un dominio de grupo de usuarios. Para obtener más información, consulte Crear un grupo de usuarios. • Un proveedor de identidad OIDC.
Paso 1: Registrarse en un proveedor de identidad OIDC Antes de crear un proveedor de identidad OIDC con Amazon Cognito, debe registrar su aplicación en el proveedor de identidad para recibir un ID y un secreto de cliente.
Para registrarse en un proveedor de identidad OIDC 1.
Crear una cuenta de desarrollador con el proveedor de identidad OIDC.
Enlaces a proveedores de identidad OIDC Proveedor de identidad OIDC
Instalación
URL de detección de OIDC
Salesforce
Instalar un proveedor de identidad Salesforce
https://login.salesforce.com
Ping Identity
Instalar un proveedor de identidad Ping Identity
https://Your Ping domain address:9031/idp/ userinfo.openid Por ejemplo: https:// pf.company.com:9031/ idp/userinfo.openid
Okta
Instalar un proveedor de identidad Okta
https://Your Okta subdomain.oktapreview.com o bien https://Your Okta subdomain.okta.com
Microsoft Azure Active Directory Instalar un proveedor de (Azure AD) identidad Microsoft Azure AD
https://login.windows.net/ common
https://accounts.google.com
Instalar un proveedor de identidad Google
63
Amazon Cognito Guía para desarrolladores Añadir proveedores OIDC
Proveedor de identidad OIDC
Instalación
URL de detección de OIDC
Note Amazon Cognito tiene integrado a Google como proveedor de identidad social para inicio de sesión. Le recomendamos que utilice el proveedor de identidad integrado. Consulte Agregar proveedores de identidad sociales a un grupo de usuarios (p. 48). 2.
Registre la URL de dominio del grupo de usuarios con el punto de enlace /oauth2/idpresponse en el proveedor de identidad OIDC. De este modo, se garantiza que el proveedor de identidad OIDC la aceptará cuando Amazon Cognito la presente para autenticar usuarios.
https:///oauth2/idpresponse
3.
Registre su URL de devolución de llamada en su grupo de usuarios de Cognito. Esta es la URL de la página a la que se redirigirá al usuario después de una autenticación correcta.
https://www.example.com
4.
Seleccione los ámbitos. El ámbito openid es obligatorio. El ámbito email es necesario para conceder acceso a las notificaciones email e email_verified .
5.
El proveedor de identidad OIDC le proporciona un ID y un secreto de cliente. Los usará al configurar un proveedor de identidad OIDC en el grupo de usuarios.
Ejemplo: Utilizar Salesforce como un proveedor de identidad OIDC con el grupo de usuarios Puede utilizar un proveedor de identidad OIDC cuando desee establecer una relación de confianza entre un proveedor de identidad compatible con OIDC como Salesforce y un grupo de usuarios. 1.
Cree una cuenta en el sitio web de desarrolladores de Salesforce.
2.
Inicie sesión con la cuenta de desarrollador que ha configurado en el paso anterior.
3.
Fíjese en la parte superior de la página de Salesforce. • Si utiliza Lightning Experience, elija el icono de engranaje de configuración y, a continuación, elija Setup Home (Inicio de configuración). • Si utiliza Salesforce Classic y ve la opción Setup (Configuración) en el encabezado de la interfaz de usuario, elíjala. • Si utiliza Salesforce Classic y no aparece la opción Setup (Configuración) en el encabezado, elija su nombre en la barra de navegación superior y elija Setup (Configuración) en la lista desplegable.
4.
En la barra de navegación de la izquierda, elija Company Settings (Configuración de la empresa).
5.
En la barra de navegación, elija Domain (Dominio), escriba un dominio y elija Create (Crear).
6.
En la barra de navegación izquierda, vaya a Platform Tools (Herramientas de plataforma y elija Apps (Aplicaciones). 64
Amazon Cognito Guía para desarrolladores Añadir proveedores OIDC
7.
Elija App Manager (Administrador de aplicaciones).
8.
a.
Elija new connected app (nueva aplicación conectada).
b.
Rellene los campos obligatorios. En Start URL (URL de inicio), escriba la URL de dominio del grupo de usuarios con el punto de enlace /oauth2/idpresponse.
https:///oauth2/idpresponse
c.
Habilite OAuth settings (Configuración de OAuth) y escriba la URL de devolución de llamada en Callback URL (URL de devolución de llamada). Esta es la URL de la página a la que se redirigirá al usuario después de iniciar sesión correctamente.
https://www.example.com
9.
Seleccione los ámbitos. El ámbito openid es obligatorio. El ámbito email es necesario para conceder acceso a las notificaciones email e email_verified . Los ámbitos se separan con espacios.
10. Seleccione Create (Crear). En Salesforce, el ID de cliente se denomina Consumer Key (Clave de consumidor)y el secreto de cliente se llama Consumer Secret (Secreto de consumidor). Observe los valores del ID de cliente y el secreto de cliente. Los usará en la sección siguiente.
Paso 2: Añadir un proveedor de identidad OIDC al grupo de usuarios En esta sección configurará el grupo de usuarios para procesar las solicitudes de autenticación basada en OIDC provenientes de un proveedor de identidad OIDC.
Para añadir un proveedor de identidad OIDC (consola de Amazon Cognito) 1.
Vaya a la consola de Amazon Cognito. Es posible que se le soliciten sus credenciales de AWS.
2.
Manage User Pools (Administrar grupos de usuarios.
3.
Elija un grupo de usuarios existente en la lista o cree un grupo de usuarios.
4.
En la barra de navegación de la izquierda, elija Identity providers (Proveedores de identidad).
5.
Elija OpenId Connect.
6.
Escriba un nombre único en Provider name (Nombre de proveedor).
7.
Escriba el ID de cliente del proveedor de identidad OIDC de la sección anterior en Client ID (ID de cliente).
8.
Escriba el secreto de cliente de la sección anterior en Client secret (Secreto de cliente).
9.
En la lista desplegable, elija el método de HTTP (GET o POST) empleado para obtener los detalles de usuario del punto de enlace userinfo para incluirlo en Attributes request method (Método de solicitud de atributos).
10. Escriba los nombres de los ámbitos que desea autorizar. Los ámbitos definen a qué atributos de usuario (como name y email) desea tener acceso con la aplicación. Los ámbitos se separan con espacios, conforme a la especificación OAuth 2.0. Al usuario de la aplicación se le pedirá su consentimiento para proporcionar estos atributos a la aplicación. 65
Amazon Cognito Guía para desarrolladores Añadir proveedores OIDC
11. Escriba la URL del proveedor de identidad y elija Run discovery (Ejecutar detección).
Note La URL debe comenzar por https:// y no debe terminar con una barra /. Solo se pueden utilizar los números de puerto 443 y 80 con esta URL. Por ejemplo, Salesforce usa esta URL: https://login.salesforce.com •
Si Run discovery (Ejecutar detección) no tiene éxito, deberá especificar Authorization endpoint (Punto de enlace de autorización), Token endpoint (Punto de enlace de token), Userinfo endpoint (Punto de enlace userinfo) y Jwks uri (URI de Jwks) (la ubicación de la clave de web JSON).
Note Si el proveedor utiliza la detección para el inicio de sesión federado, el documento de detección debe utilizar HTTPS para los siguientes valores: authorization_endpoint, token_endpoint, userinfo_endpoint y jwks_uri. De lo contrario, el inicio de sesión producirá un error. 12. Elija Create provider (Crear proveedor). 13. En la barra de navegación de la izquierda, elija App client settings (Configuración del cliente de aplicación). 14. Seleccione el proveedor OIDC que configuró en el paso anterior como uno de los proveedores de identidad habilitados en Enabled Identity Providers (Proveedores de identidad habilitados). 15. Escriba una URL de devolución de llamada para el servidor de autorización de Amazon Cognito que se llama una vez autenticados los usuarios. Esta es la URL de la página a la que se redirigirá al usuario después de una autenticación correcta.
https://www.example.com
16. En Allowed OAuth Flows (Flujos OAuth permitidos), habilite Authorization code grant (Concesión de código de autorización) y también Implicit code grant (Concesión de código implícita). A menos que desee excluir específicamente alguno, seleccione las casillas de verificación de todos los Allowed OAuth scopes (Ámbitos de OAuth permitidos). 17. Elija Save changes. 18. En la pestaña Attribute mapping (Mapeo de atributos) de la barra de navegación izquierda, añada mapeos de notificaciones OIDC a atributos de grupos de usuarios. a.
De forma predeterminada, a la reclamación OIDC sub se le asigna el atributo de grupo de usuarios Username (Nombre de usuario). Puede asignar a las notificaciones OIDC otros atributos de grupo de usuarios. Escriba la reclamación OIDC y elija el atributo de grupo de usuarios correspondiente en la lista desplegable. Por ejemplo, a la reclamación email (correo electrónico) se le suele asignar el atributo de grupo de usuarios Email (Correo electrónico).
b.
En la lista desplegable, elija el atributo de grupo de usuarios que desea asignar.
c.
Elija Save changes.
d.
Seleccione Go to summary (Ir al resumen).
Para añadir un proveedor de identidad OIDC (AWS CLI) •
Consulte las descripciones de los parámetros del método de API CreateIdentityProvider.
66
Amazon Cognito Guía para desarrolladores Añadir proveedores OIDC aws cognito-idp create-identity-provider --user-pool-id string --provider-name string --provider-type OIDC --provider-details map --attribute-mapping string --idp-identifiers (list) --cli-input-json string --generate-cli-skeleton string
Utilice este mapa de detalles de proveedor:
{
}
"client_id": "string", "client_secret": "string", "authorize_scopes": "string", "attributes_request_method": "string", "oidc_issuer": "string", "authorize_url": "string", "token_url": "string", "attributes_url": "string", "jwks_uri": "string"
Paso 3: Probar la configuración del proveedor de identidad OIDC Puede crear la URL de autorización con los elementos de las dos secciones anteriores y utilizarlos para probar la configuración del proveedor de identidad OIDC.
https:///oauth2/authorize? response_type=code&client_id=&redirect_uri=https://www.example.com
Puede encontrar el dominio en la página de la consola Domain name (Nombre de dominio) del grupo de usuarios. El client_id se encuentra en la página General settings (Configuración general). Use la URL de devolución de llamada para el parámetro redirect_uri. Esta es la URL de la página a la que se redirigirá al usuario después de una autenticación correcta.
Flujo de autenticación de proveedores de identidad de grupos de usuarios de OIDC Cuando un usuario inicia sesión en su aplicación a través de un proveedor de identidad OIDC, este es el flujo de autenticación. 1. El usuario llega a la página de inicio de sesión integrada de Amazon Cognito, donde se le ofrece la opción de iniciar sesión a través de un proveedor de identidad OIDC como Salesforce. 2. Se redirige al usuario al punto de enlace authorization del proveedor de identidad OIDC. 3. Una vez que el usuario está autenticado, el proveedor de identidad OIDC redirige a Amazon Cognito con un código de autorización. 67
Amazon Cognito Guía para desarrolladores Especificación de mapeos de atributos
4. Amazon Cognito intercambia el código de autorización con el proveedor de identidad OIDC para obtener un token de acceso. 5. Amazon Cognito crea o actualiza de la cuenta de usuario en el grupo de usuarios. 6. Amazon Cognito otorga a la aplicación tokens de portador, que pueden incluir tokens de identidad, acceso y actualización:
Note Se cancelarán las solicitudes que no se completen en un plazo de 5minutos, se le redirigirá a la página de inicio de sesión y, a continuación, se mostrará un mensaje de error Something went wrong. OIDC es una capa de identidad situada sobre OAuth 2.0, que especifica tokens de identidad con formato JSON (JWT) expedidos por los proveedores de identidad a las aplicaciones clientes (que son la parte que otorga la confianza). Consulte la documentación de su proveedor de identidad OIDC para obtener información acerca del modo de añadir Amazon Cognito como parte aceptante OIDC. Cuando un usuario se autentica, el grupo de usuarios devuelve tokens de ID, acceso y actualización. El token de ID es un token OIDC estándar para la administración de identidades, y el token de acceso es un token OAuth 2.0 estándar.
Especificación de asignaciones de atributos del proveedor de identidad para su grupo de usuarios Puede utilizar la Consola de administración de AWS, o la AWS CLI o la API para especificar mapeos de atributos para los proveedores de identidad de su grupo de usuarios.
Cosas que debe saber sobre los mapeos Antes de utilizar mapeos, revise los siguientes detalles importantes: • Debe haber un mapeo para cada atributo del grupo de usuarios que sea obligatorio cuando un usuario inicie sesión en la aplicación. Por ejemplo, si el grupo de usuarios requiere un atributo de correo
68
Amazon Cognito Guía para desarrolladores Especificación de mapeos de atributos
electrónico para el inicio de sesión, asigne este atributo al atributo equivalente del proveedor de identidad. • De forma predeterminada, las direcciones de correo electrónico asignadas no se verifican. No puede verificar una dirección de correo electrónico asignada mediante un código de un solo uso. En su lugar, asigne un atributo de su proveedor de identidad para obtener el estado de verificación. Por ejemplo, Google y la mayoría de los proveedores OIDC incluyen el email_verified atributo . • Para cada atributo del grupo de usuarios asignado, la longitud máxima del valor (2048 caracteres) debe ser lo suficientemente grande para el valor que Amazon Cognito obtiene del proveedor de identidad. De lo contrario, Amazon Cognito genera un error cuando los usuarios inician sesión en la aplicación. Si asigna un atributo personalizado a un token de proveedor de identidad, establezca la longitud en 2048 caracteres. • El atributo de grupos de usuarios username solo se debe asignar a los atributos específicos de los siguientes proveedores de identidad: Proveedor de identidad
Atributo que se debe asignar para username
id
sub
Login with Amazon
user_id
Proveedores de OpenID Connect (OIDC)
sub
Inicio de sesión con Apple
sub
• Amazon Cognito debe ser capaz de actualizar los atributos del grupo de usuarios asignados cuando los usuarios inician sesión en la aplicación. Cuando un usuario inicia sesión a través de un proveedor de identidad, Amazon Cognito actualiza los atributos asignados con la información más reciente del proveedor de identidades. Amazon Cognito actualiza cada atributo asignado, incluso si su valor actual ya coincide con la información más reciente. Si Amazon Cognito no puede actualizar el atributo, se genera un error. Para asegurarse de que Amazon Cognito puede actualizar los atributos, consulte los siguientes requisitos: • Los atributos del grupo de usuarios asignados deben ser mutables. Loa atributos mutables se pueden actualizar en clientes de aplicación que disponen de permisos de escritura para estos atributos. Puede configurar los atributos del grupo de usuarios como mutables al definirlos en la consola de Amazon Cognito. O bien, si crea el grupo de usuarios mediante la operación de API CreateUserPool, puede configurar el parámetro Mutable como true para cada uno de esos atributos. • En la configuración del cliente de la aplicación, los atributos asignados deben ser de escritura. Puede definir los atributos que se pueden escribir en la página App clients (Clientes de aplicaciones) en la consola de Amazon Cognito. O bien, si crea el cliente de aplicación mediante la operación CreateUserPoolClient de la API, puede agregar estos atributos a la matriz WriteAttributes.
Especificación de asignaciones de atributos del proveedor de identidad para su grupo de usuarios (Consola de administración de AWS) Puede utilizar la Consola de administración de AWS para especificar asignaciones de atributos para los proveedores de identidad de su grupo de usuarios.
Note Amazon Cognito asignará las notificaciones entrantes a los atributos del grupo de usuarios solo si las notificaciones existen en el token de entrada. Si una notificación asignada anteriormente ya no existe en el token de entrada, no cambiará ni se eliminará. Si su aplicación requiere la asignación
69
Amazon Cognito Guía para desarrolladores Especificación de mapeos de atributos
de notificaciones eliminadas, puede usar el desencadenador lambda de autenticación previa para eliminar el atributo personalizado durante la autenticación y permitir que estos atributos vuelvan a rellenarse desde el token de entrada.
Para especificar un mapeo de atributo de proveedor de identidad social 1.
Inicie sesión en la consola de Amazon Cognito.
2.
En el panel de navegación, elija Manage your User Pools (Administrar sus grupos de usuarios) y elija el grupo de usuarios que desea editar.
3.
Elija la pestaña Attribute mapping (Mapeo de atributos).
4.
Elija la pestaña Facebook, Google, Amazon o Apple.
5.
Para cada atributo que necesite asignar, realice los pasos siguientes: a.
Seleccione la casilla Capture (Capturar).
b.
En el campo User pool attribute (Atributo de grupo de usuarios), elija en la lista desplegable el atributo del grupo de usuarios al que desee asignar el atributo de proveedor de identidad social.
c.
Si necesita más atributos, elija Add Facebook attribute (Añadir atributo de Facebook), Add Google attribute (Añadir atributo de Google), Add Amazon attribute (Añadir atributo de Amazon) o Add Apple attribute (Añadir atributo de Apple) y siga los pasos que se describen a continuación:
d.
i.
En el campo Facebook attribute (Atributo de Facebook), Google attribute (Atributo de Google), Amazon attribute (Atributo de Amazon) o Apple attribute (Atributo de Apple), escriba el nombre del atributo que desea asignar.
ii.
En el campo User pool attribute (Atributo de grupo de usuarios), elija el atributo del grupo de usuarios al que va a asignar el atributo de proveedor de identidad social en la lista desplegable.
Elija Save changes.
Para especificar un mapeo de atributo de proveedor SAML 1.
Inicie sesión en la consola de Amazon Cognito.
2.
En el panel de navegación, elija Manage your User Pools (Administrar sus grupos de usuarios) y elija el grupo de usuarios que desea editar.
3.
Elija la pestaña Attribute mapping (Mapeo de atributos).
4.
Seleccione la pestaña SAML.
5.
Seleccione la casilla Capture (Capturar) de todos los atributos cuyos valores desee capturar. Si desactiva la casilla Capture (Capturar) de un atributo y guarda los cambios, se elimina la asignación de ese atributo.
6.
Elija el proveedor de identidad en la lista desplegable.
7.
Para cada atributo que necesite asignar, realice los pasos siguientes:
8.
a.
Elija Add SAML attribute (Añadir atributo SAML).
b.
En el campo SAML attribute (Atributo SAML), introduzca el nombre del atributo SAML que va a asignar.
c.
En el campo User pool attribute (Atributo de grupo de usuarios), elija el atributo del grupo de usuarios al que va a asignar el atributo SAML de la lista desplegable.
Elija Save changes.
70
Amazon Cognito Guía para desarrolladores Especificación de mapeos de atributos
Especificación de mapeos de atributos del proveedor de identidad para su grupo de usuarios (AWS CLI y API de AWS) Utilice los siguientes comandos para especificar asignaciones de atributos del proveedor de identidad para su grupo de usuarios.
Para especificar asignaciones de atributos en el momento de crear el proveedor • AWS CLI: aws cognito-idp create-identity-provider Ejemplo con archivo de metadatos: aws cognito-idp create-identity-provider --userpool-id --provider-name=SAML_provider_1 --provider-type SAML --provider-details file:///details.json --attribute-mapping email=http:// schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress Donde details.json contiene: { }
"MetadataFile": ""
Note Si el archivo de contiene todas las comillas ("), deben incluirse en una secuencia de escape (\"). Ejemplo con URL de metadatos: aws cognito-idp create-identity-provider --user-poolid --provider-name=SAML_provider_1 --provider-type SAML -provider-details MetadataURL= --attribute-mapping email=http:// schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress • API de AWS: CreateIdentityProvider
Para especificar asignaciones de atributo de un proveedor de identidad existente • AWS CLI: aws cognito-idp update-identity-provider Ejemplo: aws cognito-idp update-identity-provider --user-pool-id --provider-name --attribute-mapping email=http:// schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress • API de AWS: UpdateIdentityProvider
Para obtener información sobre la asignación de atributos de un proveedor de identidad específico • AWS CLI: aws cognito-idp describe-identity-provider Ejemplo: aws cognito-idp describe-identity-provider --user-pool-id --provider-name • API de AWS: DescribeIdentityProvider
71
Amazon Cognito Guía para desarrolladores Uso de los disparadores de Lambda
Personalizar flujos de trabajo de grupos de usuarios con disparadores de Lambda Puede crear una función de AWS Lambda y hacer que se ejecute durante operaciones de un grupo de usuarios como la inscripción, la confirmación y el inicio de sesión (autenticación) mediante un disparador de Lambda. Puede agregar los desafíos de autenticación, migrar usuarios, y personalizar los mensajes de verificación. En la tabla siguiente se resumen algunas de las personalizaciones que se pueden realizar: Flujo del grupo de usuarios
Operation
Descripción
Flujo de autenticación personalizado
Definición de desafíos de autenticación
Determina el siguiente desafío en un flujo de autenticación personalizado
Creación de desafíos de autenticación
Crea un desafío en un flujo de autenticación personalizado
Verificación de la respuesta al desafío de autenticación
Determina si una respuesta es correcta en un flujo de autenticación personalizado
the section called “Disparador de Lambda anterior a la autenticación.” (p. 86)
Validación personalizada para aceptar o denegar la solicitud de inicio de sesión
the section called “Disparador de Lambda posterior a la autenticación” (p. 89)
Registro de eventos para análisis personalizados
the section called “Disparador de Lambda anterior a la generación del token” (p. 102)
Aumento o supresión de solicitudes de tokens
the section called “Disparador de Lambda anterior a la inscripción” (p. 77)
Validación personalizada para aceptar o denegar la solicitud de inscripción
the section called “Disparador de Lambda posterior a la confirmación” (p. 83)
Mensajes de bienvenida personalizados o registro de eventos para análisis personalizados
the section called “Disparador de Lambda de migración de usuario” (p. 106)
Migración de un usuario de un directorio de usuarios existente a grupos de usuarios
Mensajes
the section called “Disparador de Lambda para mensajes personalizados” (p. 109)
Personalización avanzada y localización de mensajes
Token Creation (Creación de tokens)
the section called “Disparador de Lambda anterior a la generación del token” (p. 102)
Adición o eliminación de atributos en tokens de identificación
Authentication Events (Eventos de autenticación)
Sign-Up (Inscripción)
72
Amazon Cognito Guía para desarrolladores Consideraciones importantes
Flujo del grupo de usuarios
Operation
Descripción
Proveedores de terceros de correo electrónico y SMS
the section called “Disparadores de Lambda de remitente personalizados” (p. 114)
Utilizar un proveedor externo para enviar mensajes SMS y de correo electrónico
Temas • Consideraciones importantes (p. 73) • Agregar un disparador de Lambda para un grupo de usuarios (p. 74) • Evento disparador de Lambda para un grupo de usuarios (p. 74) • Parámetros comunes de los disparadores de Lambda para un grupo de usuarios (p. 74) • Orígenes del disparador de Lambda para un grupo de usuarios (p. 75) • Disparador de Lambda anterior a la inscripción (p. 77) • Disparador de Lambda posterior a la confirmación (p. 83) • Disparador de Lambda anterior a la autenticación. (p. 86) • Disparador de Lambda posterior a la autenticación (p. 89) • Disparadores de desafío de autenticación personalizados de Lambda (p. 92) • Disparador de Lambda anterior a la generación del token (p. 102) • Disparador de Lambda de migración de usuario (p. 106) • Disparador de Lambda para mensajes personalizados (p. 109) • Disparadores de Lambda de remitente personalizados (p. 114)
Consideraciones importantes Es importante tener en cuenta la siguiente información antes de comenzar a utilizar las funciones de Lambda: • Excepto para los disparadores de Lambda de remitente personalizado, Amazon Cognito invoca funciones de Lambda de forma síncrona. Cuando se realiza una llamada a su función Lambda, esta debe responder en un plazo de 5 segundos. Si no responde, Amazon Cognito reintenta la llamada. Después de tres intentos fallidos, la función agota el tiempo de espera. El valor de tiempo de espera de 5 segundos no se puede cambiar. Para obtener más información, consulte el modelo de programación de Lambda. • Si elimina un disparador de AWS Lambda, deberá actualizar el disparador correspondiente en el grupo de usuarios. Por ejemplo, si elimina el disparador posterior a la autenticación, deberá establecer el disparador Post authentication (Posterior a la autenticación) del grupo de usuarios correspondiente en none (ninguno). • Excepto para los disparadores de Lambda de remitente personalizado, los errores generados por los disparadores de Lambda serán visibles directamente para los usuarios finales si utilizan la interfaz de usuario alojada de Amazon Cognito como parámetros de consulta en la URL de devolución de llamada. Como práctica recomendada, los errores que reciba el usuario final se deberán generar desde los disparadores de Lambda y cualquier información confidencial o de depuración se deberá registrar en el propio disparador de Lambda.
73
Amazon Cognito Guía para desarrolladores Uso de los disparadores de Lambda
Agregar un disparador de Lambda para un grupo de usuarios Para añadir un disparador de Lambda para un grupo de usuarios con la consola 1. 2.
Cree una función de Lambda con la consola de Lambda. Para obtener más información sobre las funciones de Lambda, consulte la AWS Lambda Developer Guide. Vaya a la consola de Amazon Cognito y elija Manage User Pools (Administrar grupos de usuarios).
3.
Elija un grupo de usuarios existente en la lista o cree un grupo de usuarios.
4. 5.
En el grupo de usuarios, elija la pestaña Triggers (Disparadores) en la barra de navegación. Elija un disparador de Lambda, como Pre sign-up (Antes de inscripción) o Pre authentication (Antes de autenticación) y elija su función Lambda en la lista desplegable Lambda function (Función Lambda).
6.
Elija Save changes.
7.
Puede registrar la función Lambda con CloudWatch en la consola de Lambda. Para obtener más información, consulte Acceso a los logs de CloudWatch Logs para Lambda.
Evento disparador de Lambda para un grupo de usuarios Amazon Cognito transfiere la información sobre eventos a la función Lambda que devuelve el mismo objeto de evento a Amazon Cognito con los cambios en la respuesta. Este evento muestra los parámetros comunes del disparador de Lambda: JSON {
}
"version": "string", "triggerSource": "string", "region": AWSRegion, "userPoolId": "string", "userName": "string", "callerContext": { "awsSdkVersion": "string", "clientId": "string" }, "request": { "userAttributes": { "string": "string", .... } }, "response": {}
Parámetros comunes de los disparadores de Lambda para un grupo de usuarios versión El número de versión de la función de Lambda.
74
Amazon Cognito Guía para desarrolladores Orígenes del disparador de Lambda
triggerSource El nombre del evento que activó la función de Lambda. Para obtener una descripción de cada triggerSource, consulte Orígenes del disparador de Lambda para un grupo de usuarios (p. 75). region La región de AWS, indicada como una instancia de AWSRegion. userPoolId El ID del grupo de usuarios. userName El nombre del usuario actual. callerContext El contexto del intermediario, que consta de la información siguiente: awsSdkVersion El número de la versión de AWS SDK. clientId El ID del cliente asociado al grupo de usuarios. request La solicitud del servicio Amazon Cognito. Esta solicitud debe contener: userAttributes Uno o varios pares de nombres y valores de atributos de usuario. Cada par tiene el formato "name": "value". response La respuesta del disparador de Lambda. Los parámetros de retorno de la respuesta dependen del evento disparador.
Orígenes del disparador de Lambda para un grupo de usuarios En esta sección se describe cada parámetro Amazon Cognito Lambda triggerSource y su evento de activación.
Disparadores de inscripción, confirmación e inicio de sesión (autenticación) Trigger
triggerSource value
Evento desencadenante
Anterior a la inscripción
PreSignUp_SignUp
Anterior a la inscripción.
Anterior a la inscripción
PreSignUp_AdminCreateUser Anterior a la inscripción cuando un administrador crea un nuevo usuario.
Posterior a la confirmación
PostConfirmation_ConfirmSignUp Posterior a la confirmación de la inscripción.
Posterior a la confirmación
PostConfirmation_ConfirmForgotPassword Posterior a la confirmación de la contraseña olvidada.
75
Amazon Cognito Guía para desarrolladores Orígenes del disparador de Lambda
Trigger
triggerSource value
Evento desencadenante
Anterior a la autenticación
PreAuthentication_Authentication Anterior a la autenticación.
Posterior a la autenticación
PostAuthentication_Authentication Posterior a la autenticación.
Disparadores de desafío de autenticación personalizados Trigger
triggerSource value
Evento desencadenante
Definición de desafíos de autenticación
DefineAuthChallenge_Authentication Definición de desafíos de autenticación.
Creación de desafíos de autenticación
CreateAuthChallenge_Authentication Creación de desafíos de autenticación.
Verificación de desafío de autenticación
VerifyAuthChallengeResponse_Authentication Verificación de la respuesta a los desafíos de autenticación.
Disparadores anteriores a la generación del token Trigger
triggerSource value
Evento desencadenante
Anterior a la generación del token TokenGeneration_HostedAuth Se llama durante la autenticación desde la página de inicio de sesión alojada en Amazon Cognito. Anterior a la generación del token TokenGeneration_Authentication Se llama después de que se hayan completado los flujos de autenticación. Anterior a la generación del token TokenGeneration_NewPasswordChallenge Se llama después de que un administrador cree al usuario. Este flujo se invoca cuando el usuario tiene que cambiar una contraseña temporal. Anterior a la generación del token TokenGeneration_AuthenticateDevice Se llama al final de la autenticación de un dispositivo de usuario. Anterior a la generación del token TokenGeneration_RefreshTokens Se llama cuando un usuario intenta actualizar los tokens de identidad y acceso.
Disparadores de migración de usuarios Trigger
triggerSource value
Migración de usuario
UserMigration_Authentication Migración de usuarios durante el inicio de sesión.
Migración de usuario
UserMigration_ForgotPassword Migración de usuarios durante el flujo de recuperación de contraseñas olvidadas.
76
Evento desencadenante
Amazon Cognito Guía para desarrolladores Disparador de Lambda anterior a la inscripción
Disparadores de mensaje personalizado Trigger
triggerSource value
Evento desencadenante
Mensaje personalizado
CustomMessage_SignUp
Mensaje personalizado para enviar el código de confirmación posterior a la inscripción.
Mensaje personalizado
CustomMessage_AdminCreateUser Mensaje personalizado para enviar la contraseña temporal a un usuario nuevo.
Mensaje personalizado
CustomMessage_ResendCode
Mensaje personalizado
CustomMessage_ForgotPassword Mensaje personalizado para enviar el código de confirmación a una solicitud de contraseña olvidada.
Mensaje personalizado
CustomMessage_UpdateUserAttribute Mensaje personalizado: cuando el correo electrónico o el número de teléfono de un usuario cambia, este disparador envía automáticamente un código de verificación al usuario. No se puede utilizar para otros atributos.
Mensaje personalizado
CustomMessage_VerifyUserAttribute Mensaje personalizado: este disparador envía un código de verificación al usuario cuando este lo solicita manualmente para un correo electrónico o un número de teléfono nuevo.
Mensaje personalizado
CustomMessage_Authentication Mensaje personalizado para enviar código de MFA durante la autenticación.
Mensaje personalizado para volver a enviar el código de confirmación a un usuario ya existente.
Disparador de Lambda anterior a la inscripción La función Lambda previa a la inscripción se ejecuta justo antes de que Amazon Cognito inscriba un nuevo usuario. Le permite realizar una validación personalizada para aceptar o denegar la solicitud de inscripción como parte del proceso de inscripción. Temas • Flujos de Lambda anteriores a la inscripción (p. 78) • Parámetros del disparador de Lambda anterior a la inscripción (p. 78) • Tutoriales sobre inscripción (p. 79) • Ejemplo anterior a la inscripción: Confirmación automática de los usuarios de un dominio registrado (p. 80) • Ejemplo de invocación anterior a la inscripción: Confirmación y verificación automáticas de todos los usuarios (p. 82)
77
Amazon Cognito Guía para desarrolladores Disparador de Lambda anterior a la inscripción
Flujos de Lambda anteriores a la inscripción Flujo de inscripción del cliente
Flujo de inscripción del servidor
La solicitud contiene datos de validación del cliente provenientes de los valores ValidationData transferidos a los métodos de API SignUp y AdminCreateUser del grupo de usuarios.
Parámetros del disparador de Lambda anterior a la inscripción Estos son los parámetros que requiere esta función de Lambda además de los parámetros habituales. JSON {
}
"request": { "userAttributes": { "string": "string", . . . }, "validationData": { "string": "string", . . . }, "clientMetadata": { "string": "string", . . . } }, "response": { "autoConfirmUser": "boolean", "autoVerifyPhone": "boolean", "autoVerifyEmail": "boolean" }
78
Amazon Cognito Guía para desarrolladores Disparador de Lambda anterior a la inscripción
Parámetros de la solicitud anteriores a la inscripción userAttributes Uno o varios pares de nombre y valor que representan atributos de usuario. Los nombres de atributo son las claves. validationData Uno o varios pares de nombre y valor que contienen los datos de validación en la solicitud de registro de un usuario. Los datos de validación se definen y se pasan desde el cliente de la solicitud de registro de un usuario. Puede transferir estos datos a la función de Lambda mediante el parámetro ClientMetadata de las acciones InitiateAuth y AdminInitiateAuth de la API. clientMetadata Uno o varios pares de clave y valor que puede proporcionar como entrada personalizada a la función de Lambda especificada para el desencadenador anterior a la inscripción. Puede transferir estos datos a la función de Lambda mediante el parámetro ClientMetadata en las siguientes acciones de la API: AdminCreateUser, AdminRespondToAuthChallenge, ForgotPassword y SignUp.
Parámetros de la respuesta anterior a la inscripción En la respuesta, puede establecer autoConfirmUser en true si desea confirmar automáticamente al usuario. Puede establecer autoVerifyEmail en true para verificar automáticamente el correo electrónico del usuario. Puede establecer autoVerifyPhone en true para verificar automáticamente el número de teléfono del usuario. autoConfirmUser Establezca este parámetro en true para confirmar automáticamente al usuario, o en false en caso contrario. autoVerifyEmail Si se establece en true, se verifica el correo electrónico de un usuario registrado; en caso contrario, false. Si autoVerifyEmail está establecido en true, el atributo email debe ser un valor válido distinto de null. De lo contrario, se producirá un error y el usuario no podrá completar la inscripción. Si el atributo email se selecciona como un alias, se creará un alias de correo electrónico del usuario cuando se establezca autoVerifyEmail. Si ya existe un alias con ese correo electrónico, el alias se moverá al usuario nuevo y el correo electrónico del usuario anterior se marcará como no verificado. Para obtener más información, consulte Información general de los alias (p. 174). autoVerifyPhone Si se establece en true, se verifica el número de teléfono de un usuario registrado; en caso contrario, false. Si autoVerifyPhone está establecido en true, el atributo phone_number debe ser un valor válido distinto de null. De lo contrario, se producirá un error y el usuario no podrá completar la inscripción. Si el atributo phone_number se selecciona como un alias, se creará un alias de número de teléfono del usuario cuando se establezca autoVerifyPhone. Si ya existe un alias con ese número de teléfono, el alias se moverá al número de teléfono del usuario nuevo y anterior y se marcará como no verificado. Para obtener más información, consulte Información general de los alias (p. 174).
Tutoriales sobre inscripción La función de Lambda anterior a la inscripción se ejecuta antes de la inscripción del usuario. Consulte estos tutoriales de inscripción de Amazon Cognito en JavaScript, Android e iOS.
79
Amazon Cognito Guía para desarrolladores Disparador de Lambda anterior a la inscripción
Plataforma
Tutorial
SDK de identidad JavaScript
Inscripción de usuarios con JavaScript
SDK de identidad para Android
Inscripción de usuarios con Android
SDK de identidad para iOS
Inscripción de usuarios con iOS
Ejemplo anterior a la inscripción: Confirmación automática de los usuarios de un dominio registrado El disparador de Lambda anterior a la inscripción le permite añadir lógica personalizada para validar la inscripción de usuarios nuevos en un grupo de usuarios. Se trata de un programa de ejemplo en JavaScript que demuestra cómo inscribir un usuario nuevo. Invocará un disparador de Lambda anterior a la inscripción como parte de la autenticación. JavaScript var attributeList = []; var dataEmail = { Name : 'email', Value : '...' // your email here }; var dataPhoneNumber = { Name : 'phone_number', Value : '...' // your phone number here with +country code and no delimiters in front }; var dataEmailDomain = { Name: "custom:domain", Value: "example.com" } var attributeEmail = new AmazonCognitoIdentity.CognitoUserAttribute(dataEmail); var attributePhoneNumber = new AmazonCognitoIdentity.CognitoUserAttribute(dataPhoneNumber); var attributeEmailDomain = new AmazonCognitoIdentity.CognitoUserAttribute(dataEmailDomain); attributeList.push(attributeEmail); attributeList.push(attributePhoneNumber); attributeList.push(attributeEmailDomain); var cognitoUser; userPool.signUp('username', 'password', attributeList, null, function(err, result){ if (err) { alert(err); return; } cognitoUser = result.user; console.log('user name is ' + cognitoUser.getUsername()); });
Es un ejemplo de disparador de Lambda invocado justo antes de la inscripción en el grupo de usuarios mediante el disparador de Lambda anterior a la inscripción. Utiliza un atributo personalizado,
80
Amazon Cognito Guía para desarrolladores Disparador de Lambda anterior a la inscripción
custom:domain, para confirmar automáticamente a los usuarios nuevos de un determinado dominio de correo electrónico. Los usuarios nuevos que no pertenezcan al dominio personalizado se añadirán al grupo de usuarios, pero no se confirmarán automáticamente. Node.js exports.handler = (event, context, callback) => { // Set the user pool autoConfirmUser flag after validating the email domain event.response.autoConfirmUser = false; // Split the email address so we can compare domains var address = event.request.userAttributes.email.split("@") // This example uses a custom attribute "custom:domain" if (event.request.userAttributes.hasOwnProperty("custom:domain")) { if ( event.request.userAttributes['custom:domain'] === address[1]) { event.response.autoConfirmUser = true; } }
};
// Return to Amazon Cognito callback(null, event);
Python def lambda_handler(event, context): # It sets the user pool autoConfirmUser flag after validating the email domain event['response']['autoConfirmUser'] = False # Split the email address so we can compare domains address = event['request']['userAttributes']['email'].split('@') # This example uses a custom attribute 'custom:domain' if 'custom:domain' in event['request']['userAttributes']: if event['request']['userAttributes']['custom:domain'] == address[1]: event['response']['autoConfirmUser'] = True # Return to Amazon Cognito return event
Amazon Cognito pasa información del evento a la función Lambda. La función devuelve el mismo objeto de evento de nuevo a Amazon Cognito con cualquier cambio que se haya realizado en la respuesta. En la consola de Lambda, puede configurar un evento de prueba con los datos que son relevantes para el disparador de Lambda. A continuación, se muestra un evento de prueba para este ejemplo de código: JSON {
}
"request": { "userAttributes": { "email": "[emailprotected]", "custom:domain": "example.com" } }, "response": {}
81
Amazon Cognito Guía para desarrolladores Disparador de Lambda anterior a la inscripción
Ejemplo de invocación anterior a la inscripción: Confirmación y verificación automáticas de todos los usuarios En este ejemplo se confirman todos los usuarios y se establece la verificación de los atributos email y phone_number de cada usuario si se especifican. Además, si están habilitados los alias, se crearán alias automáticamente para phone_number y email cuando esté habilitada la verificación automática.
Note Si ya existe un alias con el mismo número de teléfono, el alias se moverá al número de teléfono del usuario nuevo y el atributo phone_number del usuario anterior se marcará como no verificado. Lo mismo sucede con las direcciones de correo electrónico. Para evitar que esto ocurra, puede utilizar la API ListUsers de los grupos de usuarios para comprobar si ya hay un usuario que utilice el número de teléfono o la dirección de correo electrónico del usuario nuevo como alias. Node.js exports.handler = (event, context, callback) => { // Confirm the user event.response.autoConfirmUser = true; // Set the email as verified if it is in the request if (event.request.userAttributes.hasOwnProperty("email")) { event.response.autoVerifyEmail = true; } // Set the phone number as verified if it is in the request if (event.request.userAttributes.hasOwnProperty("phone_number")) { event.response.autoVerifyPhone = true; }
};
// Return to Amazon Cognito callback(null, event);
Python def lambda_handler(event, context): # Confirm the user event['response']['autoConfirmUser'] = True # Set the email as verified if it is in the request if 'email' in event['request']['userAttributes']: event['response']['autoVerifyEmail'] = True # Set the phone number as verified if it is in the request if 'phone_number' in event['request']['userAttributes']: event['response']['autoVerifyPhone'] = True # Return to Amazon Cognito return event
Amazon Cognito pasa información del evento a la función Lambda. La función devuelve el mismo objeto de evento de nuevo a Amazon Cognito con cualquier cambio que se haya realizado en la respuesta. En la consola de Lambda, puede configurar un evento de prueba con los datos que son relevantes para el disparador de Lambda. A continuación, se muestra un evento de prueba para este ejemplo de código:
82
Amazon Cognito Guía para desarrolladores Disparador de Lambda posterior a la confirmación
JSON {
}
"request": { "userAttributes": { "email": "[emailprotected]", "phone_number": "+12065550100" } }, "response": {}
Disparador de Lambda posterior a la confirmación Amazon Cognito invoca este disparador después la confirmación de un nuevo usuario, lo que le permite enviar mensajes personalizados o añadir lógica personalizada. Por ejemplo, puede utilizar este disparador para recopilar nuevos datos del usuario. La solicitud contiene los atributos actuales del usuario confirmado. Temas • Flujos de Lambda posteriores a la confirmación (p. 83) • Parámetros del disparador de Lambda posterior a la confirmación (p. 84) • Tutoriales de confirmación del usuario (p. 84) • Ejemplo de invocación posterior a la confirmación (p. 85)
Flujos de Lambda posteriores a la confirmación Flujo de confirmación de inscripción del cliente
Flujo de confirmación de inscripción del servidor
83
Amazon Cognito Guía para desarrolladores Disparador de Lambda posterior a la confirmación
Flujo de confirmación de contraseña olvidada
Parámetros del disparador de Lambda posterior a la confirmación Estos son los parámetros que requiere esta función de Lambda además de los parámetros habituales. JSON {
}
"request": { "userAttributes": { "string": "string", . . . }, "clientMetadata": { "string": "string", . . . } }, "response": {}
Parámetros de solicitud posterior a la confirmación userAttributes Uno o varios pares de clave y valor que representan atributos de usuario. clientMetadata Uno o varios pares de clave y valor que puede proporcionar como entrada personalizada a la función de Lambda especificada para el desencadenador posterior a la confirmación. Puede transferir estos datos a la función de Lambda mediante el parámetro ClientMetadata de las siguientes acciones de la API: AdminConfirmSignUp, ConfirmForgotPassword, ConfirmSignUp y SignUp.
Parámetros de la respuesta posterior a la confirmación No se espera que la respuesta contenga información adicional.
Tutoriales de confirmación del usuario La función Lambda posterior a la confirmación se ejecuta inmediatamente después de que Amazon Cognito confirme un nuevo usuario. Consulte estos tutoriales de confirmación de usuario en JavaScript, Android e iOS.
84
Amazon Cognito Guía para desarrolladores Disparador de Lambda posterior a la confirmación
Plataforma
Tutorial
SDK de identidad JavaScript
Confirmación de usuarios con JavaScript
SDK de identidad para Android
Confirmación de usuarios con Android
SDK de identidad para iOS
Confirmación de usuarios con iOS
Ejemplo de invocación posterior a la confirmación Este ejemplo de función Lambda envía un mensaje de correo electrónico de confirmación al usuario utilizando Amazon SES. Para obtener más información, consulte Guía para desarrolladores de Amazon Simple Email Service. Node.js var aws = require('aws-sdk'); var ses = new aws.SES(); exports.handler = (event, context, callback) => { console.log(event); if (event.request.userAttributes.email) { sendEmail(event.request.userAttributes.email, "Congratulations " + event.userName + ", you have been confirmed: ", function(status) { // Return to Amazon Cognito callback(null, event);
};
}); } else { // Nothing to do, the user's email ID is unknown callback(null, event); }
function sendEmail(to, body, completedCallback) { var eParams = { Destination: { ToAddresses: [to] }, Message: { Body: { Text: { Data: body } }, Subject: { Data: "Cognito Identity Provider registration completed" } },
};
// Replace source_email with your SES validated email address Source: ""
var email = ses.sendEmail(eParams, function(err, data){ if (err) { console.log(err);
85
Amazon Cognito Guía para desarrolladores Disparador de Lambda anterior a la autenticación. } else { console.log("===EMAIL SENT==="); } completedCallback('Email sent');
};
}); console.log("EMAIL CODE END");
Amazon Cognito pasa información del evento a la función Lambda. La función devuelve el mismo objeto de evento de nuevo a Amazon Cognito con cualquier cambio que se haya realizado en la respuesta. En la consola de Lambda, puede configurar un evento de prueba con los datos que son relevantes para el disparador de Lambda. A continuación, se muestra un evento de prueba para este ejemplo de código: JSON
{
}
"request": { "userAttributes": { "email": "[emailprotected]", "email_verified": true } }, "response": {}
Disparador de Lambda anterior a la autenticación. Amazon Cognito invoca este disparador cuando un usuario intenta iniciar sesión, lo que le permite realizar una validación personalizada para aceptar o denegar la solicitud de autenticación.
Note Los desencadenadores dependen de que el usuario exista en el grupo de usuarios antes de activar el desencadenador. Temas • Flujos de Lambda anteriores a la autenticación (p. 87) • Parámetros del disparador de Lambda anterior a la autenticación (p. 87) • Tutoriales de autenticación (p. 88) • Ejemplo invocación anterior a la autenticación (p. 88)
86
Amazon Cognito Guía para desarrolladores Disparador de Lambda anterior a la autenticación.
Flujos de Lambda anteriores a la autenticación Flujo de autenticación del cliente
Flujo de autenticación del servidor
La solicitud contiene datos de validación del cliente provenientes de los valores ClientMetadata transferidos a los métodos de API InitiateAuth y AdminInitiateAuth del grupo de usuarios. Para obtener más información, consulte Flujo de autenticación de los grupos de usuarios (p. 314).
Parámetros del disparador de Lambda anterior a la autenticación Estos son los parámetros que requiere esta función de Lambda además de los parámetros habituales. JSON {
}
"request": { "userAttributes": { "string": "string", . . . }, "validationData": { "string": "string", . . . }, "userNotFound": boolean }, "response": {}
87
Amazon Cognito Guía para desarrolladores Disparador de Lambda anterior a la autenticación.
Parámetros de la solicitud anterior a la autenticación userAttributes Uno o varios pares de nombre y valor que representan atributos de usuario. userNotFound Este valor booleano se rellena cuando PreventUserExistenceErrors se establece como ENABLED en el cliente del grupo de usuarios. validationData Uno o varios pares de clave y valor que contienen los datos de validación de la solicitud de inicio de sesión del usuario. Puede transferir estos datos a la función de Lambda mediante el parámetro ClientMetadata de las acciones InitiateAuth y AdminInitiateAuth de la API.
Parámetros de la respuesta anterior a la autenticación No se espera que la respuesta contenga información adicional.
Tutoriales de autenticación La función Lambda previa a la autenticación se dispara justo antes de que Amazon Cognito permita el inicio de sesión de un nuevo usuario. Consulte estos tutoriales de inicio de sesión en JavaScript, Android e iOS. Plataforma
Tutorial
SDK de identidad JavaScript
Inicio de sesión de usuarios con JavaScript
SDK de identidad para Android
Inicio de sesión de usuarios con Android
SDK de identidad para iOS
Inicio de sesión de usuarios con iOS
Ejemplo invocación anterior a la autenticación Esta función de ejemplo impide que los usuarios de un cliente de aplicación del grupo de usuarios específico inicien sesión en el grupo de usuarios. Node.js exports.handler = (event, context, callback) => { if (event.callerContext.clientId === "user-pool-app-client-id-to-be-blocked") { var error = new Error("Cannot authenticate users from this user pool app client");
}
};
// Return error to Amazon Cognito callback(error, event);
// Return to Amazon Cognito callback(null, event);
88
Amazon Cognito Guía para desarrolladores Disparador de Lambda posterior a la autenticación
Python def lambda_handler(event, context): if event['callerContext']['clientId'] == "": raise Exception("Cannot authenticate users from this user pool app client") # Return to Amazon Cognito return event
Amazon Cognito pasa información del evento a la función Lambda. La función devuelve el mismo objeto de evento de nuevo a Amazon Cognito con cualquier cambio que se haya realizado en la respuesta. En la consola de Lambda, puede configurar un evento de prueba con los datos que son relevantes para el disparador de Lambda. A continuación, se muestra un evento de prueba para este ejemplo de código: JSON {
}
"callerContext": { "clientId": "" }, "response": {}
Disparador de Lambda posterior a la autenticación Amazon Cognito invoca este disparador después de permitir el inicio de sesión de un usuario, lo que le permite añadir lógica personalizada después de la autenticación. Temas • Flujos de Lambda posteriores a la autenticación (p. 89) • Parámetros del disparador de Lambda posterior a la autenticación (p. 90) • Tutoriales de autenticación (p. 91) • Ejemplo de invocación posterior a la autenticación (p. 91)
Flujos de Lambda posteriores a la autenticación Flujo de autenticación del cliente
89
Amazon Cognito Guía para desarrolladores Disparador de Lambda posterior a la autenticación
Flujo de autenticación del servidor
Para obtener más información, consulte Flujo de autenticación de los grupos de usuarios (p. 314).
Parámetros del disparador de Lambda posterior a la autenticación Estos son los parámetros que requiere esta función de Lambda además de los parámetros habituales. JSON {
}
"request": { "userAttributes": { "string": "string", . . . }, "newDeviceUsed": boolean, "clientMetadata": { "string": "string", . . . } }, "response": {}
Parámetros de la solicitud posterior a la autenticación newDeviceUsed Este indicador señala si el usuario ha iniciado sesión en un nuevo dispositivo. Solo se establece si la opción de dispositivos recordados del grupo de usuarios tiene el valor Always o User Opt-In. userAttributes Uno o varios pares de nombre y valor que representan atributos de usuario. clientMetadata Uno o varios pares de clave y valor que puede proporcionar como entrada personalizada a la función de Lambda especificada para el desencadenador posterior a la autenticación. Puede transferir estos datos a la función de Lambda mediante el parámetro ClientMetadata de las acciones AdminRespondToAuthChallenge y RespondToAuthChallenge de la API.
Parámetros de la respuesta posterior a la autenticación No se espera que la respuesta contenga información adicional.
90
Amazon Cognito Guía para desarrolladores Disparador de Lambda posterior a la autenticación
Tutoriales de autenticación La función Lambda posterior a la autenticación se ejecuta inmediatamente después de que Amazon Cognito permita el inicio de sesión de un nuevo usuario. Consulte estos tutoriales de inicio de sesión en JavaScript, Android e iOS. Plataforma
Tutorial
SDK de identidad JavaScript
Inicio de sesión de usuarios con JavaScript
SDK de identidad para Android
Inicio de sesión de usuarios con Android
SDK de identidad para iOS
Inicio de sesión de usuarios con iOS
Ejemplo de invocación posterior a la autenticación Este ejemplo de función Lambda posterior a la autenticación envía datos de un inicio de sesión correcto a CloudWatch Logs. Node.js exports.handler = (event, context, callback) => { // Send post authentication data to Cloudwatch logs console.log ("Authentication successful"); console.log ("Trigger function =", event.triggerSource); console.log ("User pool = ", event.userPoolId); console.log ("App client ID = ", event.callerContext.clientId); console.log ("User ID = ", event.userName);
};
// Return to Amazon Cognito callback(null, event);
Python from __future__ import print_function def lambda_handler(event, context): # Send post authentication data to Cloudwatch logs print ("Authentication successful") print ("Trigger function =", event['triggerSource']) print ("User pool = ", event['userPoolId']) print ("App client ID = ", event['callerContext']['clientId']) print ("User ID = ", event['userName']) # Return to Amazon Cognito return event
Amazon Cognito pasa información del evento a la función Lambda. La función devuelve el mismo objeto de evento de nuevo a Amazon Cognito con cualquier cambio que se haya realizado en la respuesta. En la consola de Lambda, puede configurar un evento de prueba con los datos que son relevantes para el disparador de Lambda. A continuación, se muestra un evento de prueba para este ejemplo de código:
91
Amazon Cognito Guía para desarrolladores Disparadores de desafío de Lambda
JSON {
}
"triggerSource": "testTrigger", "userPoolId": "testPool", "userName": "testName", "callerContext": { "clientId": "12345" }, "response": {}
Disparadores de desafío de autenticación personalizados de Lambda
Estos disparadores de Lambda emiten y verifican sus propios desafíos como parte de un flujo de autenticación personalizado de un grupo de usuarios. Definición de desafíos de autenticación Amazon Cognito invoca este disparador para iniciar el flujo de autenticación personalizado. Creación de desafíos de autenticación Amazon Cognito invoca este disparador después de Define Auth Challenge (Definir desafío de autenticación) para crear un desafío personalizado.
92
Amazon Cognito Guía para desarrolladores Disparadores de desafío de Lambda
Verificación de la respuesta a los desafíos de autenticación Amazon Cognito invoca este disparador para verificar si la respuesta del usuario final a un desafío personalizado es válida o no. Puede incorporar nuevos tipos de desafío con estos disparadores de desafío de Lambda. Por ejemplo, estos tipos de desafío podrían incluir CAPTCHA o preguntas de desafío dinámicas. Puede generalizar la autenticación en dos pasos comunes con los métodos de API InitiateAuth y RespondToAuthChallenge del grupo de usuarios. En este flujo, un usuario se autentica respondiendo a desafíos sucesivos hasta que se produce un error de autenticación o se emiten tokens para el usuario. Estas dos llamadas a la API se puede repetir para incluir desafíos distintos.
Note La página web de inicio de sesión alojada en Amazon Cognito no admite el flujo de autenticación personalizado. Temas • Definir un disparador de Lambda para desafío de autenticación (p. 93) • Crear un disparador de Lambda para desafío de autenticación (p. 97) • Disparador de Lambda para la verificación de la respuesta a desafíos de autenticación (p. 100)
Definir un disparador de Lambda para desafío de autenticación
93
Amazon Cognito Guía para desarrolladores Disparadores de desafío de Lambda
Definición de desafíos de autenticación Amazon Cognito invoca este disparador para iniciar el flujo de autenticación personalizado. La solicitud de este Lambda el gatillo contiene session, que es una matriz que contiene todos los retos que se presentan al usuario en el proceso de autenticación actual. La solicitud también incluye el resultado correspondiente. Los detalles de los desafíos (ChallengeResult) se almacenan en orden cronológico en la matriz session, junto con session[0], que representa el primer desafío que se presenta al usuario. Puede tener Amazon Cognito verifique las contraseñas de usuario antes de que resuelva sus desafíos personalizados. Esta es una descripción general del proceso: 1. Para empezar, haga que su aplicación inicie sesión llamando al InitiateAuth o AdminInitiateAuth con el AuthParameters mapa, incluyendo CHALLENGE_NAME: SRP_A, y valores para SRP_A y USERNAME. 2. Se invoca el desencadenante de aut. Lambda con una sesión inicial que contiene challengeName: SRP_A y challengeResult: true. 3. Después de recibir esas entradas, su función Lambda responde con challengeName: PASSWORD_VERIFIER, , issueTokens: false, , failAuthentication: false. 4. Si la verificación de contraseña es correcta, la función Lambda se vuelve a activar con una nueva sesión que contiene challengeName: PASSWORD_VERIFIER y challengeResult: true. 5. Su función Lambda inicia sus desafíos personalizados respondiendo con challengeName: CUSTOM_CHALLENGE, , issueTokens: false, y failAuthentication: false. Si no desea iniciar su flujo de autenticación personalizado con verificación de contraseña, puede iniciar sesión con el AuthParameters mapa que incluye CHALLENGE_NAME: CUSTOM_CHALLENGE. 6. El bucle de desafíos se repite hasta que todos los desafíos tengan respuesta. Temas • Parámetros del disparador de Lambda para definir desafíos de autenticación (p. 94) • Ejemplo de definición de desafíos de autenticación (p. 96)
Parámetros del disparador de Lambda para definir desafíos de autenticación Estos son los parámetros que requiere esta función de Lambda además de los parámetros habituales. JSON {
"request": { "userAttributes": { "string": "string", . . . }, "session": [ ChallengeResult, . . . ], "clientMetadata": { "string": "string", . . . }, "userNotFound": boolean }, "response": { "challengeName": "string", "issueTokens": boolean,
94
Amazon Cognito Guía para desarrolladores Disparadores de desafío de Lambda "failAuthentication": boolean
}
Parámetros de la solicitud para definir desafíos de autenticación Estos son los parámetros proporcionados a la función Lambda cuando se invoca. userAttributes Uno o varios pares de nombre y valor que representan atributos de usuario. userNotFound Un valor booleano que se rellena cuando PreventUserExistenceErrors se establece como ENABLED en el cliente del grupo de usuarios. Un valor de true significa que el ID de usuario (nombre de usuario, dirección de correo electrónico, etc.) no coincide con ningún usuario existente. Cuando PreventUserExistenceErrors se establece en ENABLED, el servicio no informará a la aplicación de que el usuario no existe. La práctica recomendada es que las funciones Lambda mantengan la misma experiencia de usuario, incluida la latencia, de modo que el intermediario no pueda detectar un comportamiento diferente cuando el usuario existe o no existe. --session una matriz de elementos ChallengeResult, cada uno de los cuales contiene los siguientes elementos: challengeName El tipo de desafío. Uno de los siguientes: CUSTOM_CHALLENGE, , SRP_A, , PASSWORD_VERIFIER, , SMS_MFA, DEVICE_SRP_AUTH, , DEVICE_PASSWORD_VERIFIER, o ADMIN_NO_SRP_AUTH.
Important Siempre debe comprobar challengeName en el disparador de Lambda de DefineAuthChallenge para asegurarse de que coincida con el valor esperado al determinar si un usuario se ha autenticado correctamente y se deben emitir tokens. challengeResult Establezca este parámetro en true si el usuario ha respondido correctamente al desafío o en false, en caso contrario. challengeMetadata El nombre del desafío personalizado. Solo se usa si challengeName es CUSTOM_CHALLENGE. clientMetadata Uno o varios pares de clave y valor que puede proporcionar como entrada personalizada a la función de Lambda especificada para el desencadenador de definición de desafíos de autenticación. Puede transferir estos datos a la función de Lambda mediante el parámetro ClientMetadata de las operaciones AdminRespondToAuthChallenge y RespondToAuthChallenge de la API.
Parámetros de la respuesta para definir desafíos de autenticación En la respuesta puede devolver la etapa siguiente del proceso de autenticación. challengeName Una cadena que contiene el nombre del siguiente desafío. Si quiere plantear un nuevo desafío al usuario, especifique aquí el nombre de dicho desafío.
95
Amazon Cognito Guía para desarrolladores Disparadores de desafío de Lambda
issueTokens Establezca este parámetro en true si cree que el usuario se ha autenticado correctamente respondiendo a los desafíos o, en caso contrario, establézcalo en false. failAuthentication Establezca este parámetro en true si desea terminar el proceso de autenticación en curso, o bien en false, en caso contrario.
Ejemplo de definición de desafíos de autenticación Este ejemplo define una serie de desafíos de autenticación y emite tokens solo si se ha respondido correctamente a todos los desafíos. Node.js exports.handler = (event, context, callback) => { if (event.request.session.length == 1 && event.request.session[0].challengeName == 'SRP_A') { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = 'PASSWORD_VERIFIER'; } else if (event.request.session.length == 2 && event.request.session[1].challengeName == 'PASSWORD_VERIFIER' && event.request.session[1].challengeResult == true) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = 'CUSTOM_CHALLENGE'; } else if (event.request.session.length == 3 && event.request.session[2].challengeName == 'CUSTOM_CHALLENGE' && event.request.session[2].challengeResult == true) { event.response.issueTokens = true; event.response.failAuthentication = false; } else { event.response.issueTokens = false; event.response.failAuthentication = true; }
}
// Return to Amazon Cognito callback(null, event);
96
Amazon Cognito Guía para desarrolladores Disparadores de desafío de Lambda
Crear un disparador de Lambda para desafío de autenticación
Creación de desafíos de autenticación Amazon Cognito invoca este disparador después de Define Auth Challenge (Definir desafío de autenticación) si se ha especificado un desafío personalizado como parte del disparador Define Auth Challenge (Definir desafío de autenticación). Crea un flujo de autenticación personalizado. Este disparador de Lambda se invoca para crear un desafío que se presentará al usuario. La solicitud de este disparador de Lambda contiene los parámetros challengeName y session. challengeName es una cadena y es el nombre del siguiente desafío al usuario. El valor de este atributo se establece en el disparador de Lambda de definición de desafíos de autenticación. El bucle de desafíos se repetirá hasta que todos los desafíos tengan respuesta. Temas • Parámetros del disparador de Lambda para crear desafíos de autenticación (p. 97) • Ejemplo de creación de desafíos de autenticación (p. 99)
Parámetros del disparador de Lambda para crear desafíos de autenticación Estos son los parámetros que requiere esta función de Lambda además de los parámetros habituales. JSON {
97
Amazon Cognito Guía para desarrolladores Disparadores de desafío de Lambda
}
"request": { "userAttributes": { "string": "string", . . . }, "challengeName": "string", "session": [ ChallengeResult, . . . ], "clientMetadata": { "string": "string", . . . }, "userNotFound": boolean }, "response": { "publicChallengeParameters": { "string": "string", . . . }, "privateChallengeParameters": { "string": "string", . . . }, "challengeMetadata": "string" }
Parámetros de la solicitud para crear desafíos de autenticación userAttributes Uno o varios pares de nombre y valor que representan atributos de usuario. userNotFound Este valor booleano se rellena cuando PreventUserExistenceErrors se establece como ENABLED en el cliente del grupo de usuarios. challengeName El nombre del nuevo desafío. sesión El elemento session consiste en una matriz de elementos de ChallengeResult que contienen, cada uno, los elementos siguientes: challengeName El tipo de desafío. Puede ser uno de los siguientes: "CUSTOM_CHALLENGE", "PASSWORD_VERIFIER", "SMS_MFA", "DEVICE_SRP_AUTH", "DEVICE_PASSWORD_VERIFIER" o "ADMIN_NO_SRP_AUTH". challengeResult Establezca este parámetro en true si el usuario ha respondido correctamente al desafío o en false, en caso contrario. challengeMetadata El nombre del desafío personalizado. Solo se usa si challengeName es "CUSTOM_CHALLENGE". 98
Amazon Cognito Guía para desarrolladores Disparadores de desafío de Lambda
clientMetadata Uno o varios pares de clave y valor que puede proporcionar como entrada personalizada a la función de Lambda especificada para el desencadenador de creación de desafíos de autenticación. Puede transferir estos datos a la función de Lambda mediante el parámetro ClientMetadata de las acciones AdminRespondToAuthChallenge y RespondToAuthChallenge de la API.
Parámetros de la respuesta para crear desafíos de autenticación publicChallengeParameters Uno o varios pares de clave y valor para que la aplicación cliente los use en el desafío que se va a presentar al usuario. Este parámetro debe contener toda la información necesaria para que el desafío que se presente al usuario sea preciso. privateChallengeParameters Este parámetro solo lo usa el disparador de Lambda de verificación de la respuesta a los desafíos de autenticación. Debe contener toda la información necesaria para validar la respuesta del usuario al desafío. Dicho de otro modo, el parámetro publicChallengeParameters contiene la pregunta que se formula al usuario y privateChallengeParameters contiene las respuestas válidas a la pregunta. challengeMetadata El nombre del desafío personalizado, si se trata de uno.
Ejemplo de creación de desafíos de autenticación Se crea un CAPTCHA como desafío para el usuario. La URL de la imagen del CAPTCHA se añade a los parámetros de desafío públicos como "captchaUrl", mientras que la respuesta esperada se añade a los parámetros de desafío privados. Node.js exports.handler = (event, context, callback) => { if (event.request.challengeName == 'CUSTOM_CHALLENGE') { event.response.publicChallengeParameters = {}; event.response.publicChallengeParameters.captchaUrl = 'url/123.jpg' event.response.privateChallengeParameters = {}; event.response.privateChallengeParameters.answer = '5'; event.response.challengeMetadata = 'CAPTCHA_CHALLENGE'; }
}
Return to Amazon Cognito callback(null, event);
99
Amazon Cognito Guía para desarrolladores Disparadores de desafío de Lambda
Disparador de Lambda para la verificación de la respuesta a desafíos de autenticación
Verificación de la respuesta a los desafíos de autenticación Amazon Cognito invoca este disparador para verificar si la respuesta del usuario final a un desafío de autenticación personalizado es correcta o no. Forma parte del flujo de autenticación personalizado de un grupo de usuarios. La solicitud de este disparador contiene los parámetros privateChallengeParameters y challengeAnswer. El disparador de Lambda Create Auth Challenge (Crear desafío de autenticación) devuelve los valores de privateChallengeParameters, que contienen la respuesta esperada del usuario. El parámetro challengeAnswer contiene la respuesta del usuario al desafío. La respuesta contiene el atributo answerCorrect, que se establece en true si el usuario ha completado correctamente el desafío, o el atributo false, en caso contrario. El bucle de desafíos se repetirá hasta que todos los desafíos tengan respuesta. Temas • Parámetros del disparador de Lambda para verificar desafíos de autenticación (p. 100) • Ejemplo de verificación de la respuesta a los desafíos de autenticación (p. 102)
Parámetros del disparador de Lambda para verificar desafíos de autenticación Estos son los parámetros que requiere esta función de Lambda además de los parámetros habituales.
100
Amazon Cognito Guía para desarrolladores Disparadores de desafío de Lambda
JSON {
}
"request": { "userAttributes": { "string": "string", . . . }, "privateChallengeParameters": { "string": "string", . . . }, "challengeAnswer": { "string": "string", . . . }, "clientMetadata": { "string": "string", . . . }, "userNotFound": boolean }, "response": { "answerCorrect": boolean }
Parámetros de la solicitud para verificar desafíos de autenticación userAttributes Uno o varios pares de nombre y valor que representan atributos de usuario. userNotFound Este valor booleano se rellena cuando PreventUserExistenceErrors se establece como ENABLED en el cliente del grupo de usuarios. privateChallengeParameters Este parámetro proviene del disparador Create Auth Challenge (Crear desafío de autenticación) y se compara con el valor de challengeAnswer de un usuario para determinar si el usuario ha superado el desafío. Este parámetro solo lo usa el disparador de Lambda de verificación de la respuesta a los desafíos de autenticación. Debe contener toda la información necesaria para validar la respuesta del usuario al desafío. Eso incluye el parámetro publicChallengeParameters, que contiene la pregunta que se formula al usuario y privateChallengeParameters, que contiene las respuestas válidas a la pregunta. challengeAnswer La respuesta del usuario al desafío. clientMetadata Uno o varios pares de clave y valor que puede proporcionar como entrada personalizada a la función de Lambda especificada para el desencadenador de verificación de desafíos de autenticación. Puede transferir estos datos a la función de Lambda mediante el parámetro ClientMetadata de las acciones AdminRespondToAuthChallenge y RespondToAuthChallenge de la API.
101
Amazon Cognito Guía para desarrolladores Disparador de Lambda anterior a la generación del token
Parámetros de la respuesta para verificar desafíos de autenticación answerCorrect Establezca este parámetro en true si el usuario ha respondido correctamente al desafío o en false, en caso contrario.
Ejemplo de verificación de la respuesta a los desafíos de autenticación En este ejemplo, la función de Lambda comprueba si la respuesta del usuario a un desafío coincide con la respuesta esperada. El parámetro answerCorrect se establece en true si la respuesta del usuario coincide con la respuesta esperada. Node.js exports.handler = (event, context, callback) => { if (event.request.privateChallengeParameters.answer == event.request.challengeAnswer) { event.response.answerCorrect = true; } else { event.response.answerCorrect = false; }
}
// Return to Amazon Cognito callback(null, event);
Disparador de Lambda anterior a la generación del token Amazon Cognito invoca este disparador antes de que el token se genere para que pueda personalizar las notificaciones de los tokens de identidad. Este disparador de Lambda permite personalizar tokens de identidad antes de que se generen. Puede utilizar este disparador para añadir, actualizar o suprimir notificaciones en el token de identidad. Para utilizar esta característica, puede asociar una función Lambda desde la consola de Grupos de usuarios de Amazon Cognito o actualizar su grupo de usuarios a través de la AWS CLI. Existen algunas notificaciones que no se pueden modificar. Se incluyen las siguientes acr, amr, aud, auth_time, azp, exp, iat, identities, iss, sub, token_use, nonce, at_hash y cognito:username. Temas • Orígenes del disparador de Lambda anterior a la generación del token (p. 103) • Parámetros del disparador de Lambda anterior a la generación del token (p. 103) • Ejemplo de invocación anterior a la generación del token: Adición de una notificación nueva y supresión de otra existente (p. 104) • Ejemplo de invocación anterior a la generación del token: Modificación de la pertenencia de un usuario a un grupo (p. 105)
102
Amazon Cognito Guía para desarrolladores Disparador de Lambda anterior a la generación del token
Orígenes del disparador de Lambda anterior a la generación del token Valor de triggerSource
Evento desencadenante
TokenGeneration_HostedAuth
Se llama durante la autenticación desde la página de inicio de sesión alojada en Amazon Cognito.
TokenGeneration_Authentication
Se llama después de que se hayan completado los flujos de autenticación.
TokenGeneration_NewPasswordChallenge
Se llama después de que un administrador cree al usuario. Este flujo se invoca cuando el usuario tiene que cambiar una contraseña temporal.
TokenGeneration_AuthenticateDevice
Se llama al final de la autenticación de un dispositivo de usuario.
TokenGeneration_RefreshTokens
Se llama cuando un usuario intenta actualizar los tokens de identidad y acceso.
Parámetros del disparador de Lambda anterior a la generación del token Estos son los parámetros que requiere esta función de Lambda además de los parámetros habituales. JSON {
"request": { "userAttributes": { "string": "string", . . . }, "groupConfiguration": { "groupsToOverride": ["string", . . .], "iamRolesToOverride": ["string", . . .], "preferredRole": "string", "clientMetadata": { "string": "string", . . . } }, "response": { "claimsOverrideDetails": { "claimsToAddOrOverride": { "string": "string", . . . }, "claimsToSuppress": ["string", . . .],
}
}
"groupOverrideDetails": { "groupsToOverride": ["string", . . .], "iamRolesToOverride": ["string", . . .], "preferredRole": "string" }
103
Amazon Cognito Guía para desarrolladores Disparador de Lambda anterior a la generación del token }
Parámetros de la solicitud anterior a la generación del token groupConfiguration El objeto de entrada que contiene la configuración de grupo actual. Incluye groupsToOverride, iamRolesToOverride y preferredRole. groupsToOverride Una lista de los nombres de los grupos asociados al usuario para el que se emite el token de identidad. iamRolesToOverride Una lista actual de roles de IAM actuales asociados a estos grupos. preferredRole Una cadena que indican el rol preferente de IAM. clientMetadata Uno o varios pares de clave y valor que puede proporcionar como entrada personalizada a la función de Lambda especificada para el desencadenador anterior a la generación del token. Puede transferir estos datos a la función de Lambda mediante el parámetro ClientMetadata de las acciones AdminRespondToAuthChallenge y RespondToAuthChallenge de la API.
Parámetros de la respuesta anterior a la generación del token claimsToAddOrOverride Un mapa de uno o varios pares clave-valor de notificaciones que añadir o anular. Para agrupar las notificaciones vinculadas, utilice groupOverrideDetails en lugar de claimsToAddOrOverride. claimsToSuppress Una lista que contiene notificaciones que el token de identidad suprimirá.
Note Si un valor es suprimido y sustituido a la vez, se suprimirá. groupOverrideDetails El objeto de salida que contiene la configuración de grupo actual. Incluye groupsToOverride, iamRolesToOverride y preferredRole. El objeto groupOverrideDetails se reemplazará por el que proporcione. Si proporciona un objeto vacío o nulo en la respuesta, los grupos se suprimen. Para dejar la configuración de grupos existente tal como está, copie el valor del objeto groupConfiguration de la solicitud en el objeto groupOverrideDetails de la respuesta y páselo al servicio.
Ejemplo de invocación anterior a la generación del token: Adición de una notificación nueva y supresión de otra existente En este ejemplo se utiliza el disparador de Lambda anterior a la generación del token para añadir una notificación nueva y suprimir otra existente.
104
Amazon Cognito Guía para desarrolladores Disparador de Lambda anterior a la generación del token
Node.js exports.handler = (event, context, callback) => { event.response = { "claimsOverrideDetails": { "claimsToAddOrOverride": { "attribute_key2": "attribute_value2", "attribute_key": "attribute_value" }, "claimsToSuppress": ["email"] } }; // Return to Amazon Cognito callback(null, event);
};
Amazon Cognito pasa información del evento a la función Lambda. La función devuelve el mismo objeto de evento de nuevo a Amazon Cognito con cualquier cambio que se haya realizado en la respuesta. En la consola de Lambda, puede configurar un evento de prueba con los datos que son relevantes para el disparador de Lambda. A continuación, se muestra un evento de prueba para este ejemplo de código: JSON { }
"request": {}, "response": {}
Ejemplo de invocación anterior a la generación del token: Modificación de la pertenencia de un usuario a un grupo En este ejemplo se utiliza el disparador de Lambda anterior a la generación del token para modificar la pertenencia a un grupo de usuarios Node.js exports.handler = (event, context, callback) => { event.response = { "claimsOverrideDetails": { "claimsToAddOrOverride": { "attribute_key2": "attribute_value2", "attribute_key": "attribute_value" }, "claimsToSuppress": ["email"], "groupOverrideDetails": { "groupsToOverride": ["group-A", "group-B", "group-C"], "iamRolesToOverride": ["arn:aws:iam::XXXXXXXXXXXX:role/sns_callerA", "arn:aws:iam::XXXXXXXXX:role/sns_callerB", "arn:aws:iam::XXXXXXXXXX:role/ sns_callerC"], "preferredRole": "arn:aws:iam::XXXXXXXXXXX:role/sns_caller" } } };
};
// Return to Amazon Cognito callback(null, event);
105
Amazon Cognito Guía para desarrolladores Disparador de Lambda de migración de usuario
Amazon Cognito pasa información del evento a la función Lambda. La función devuelve el mismo objeto de evento de nuevo a Amazon Cognito con cualquier cambio que se haya realizado en la respuesta. En la consola de Lambda, puede configurar un evento de prueba con los datos que son relevantes para el disparador de Lambda. A continuación, se muestra un evento de prueba para este ejemplo de código: JSON { }
"request": {}, "response": {}
Disparador de Lambda de migración de usuario Amazon Cognito invoca este disparador cuando un usuario no existe en el grupo de usuarios en el momento del inicio de sesión con una contraseña o en el flujo de recuperación de contraseñas olvidadas. Cuando la función Lambda finaliza correctamente, Amazon Cognito crea el usuario en el grupo de usuarios. Para obtener información detallada sobre el flujo de autenticación con el disparador de Lambda para la migración de usuarios, consulte Importación de usuarios en grupos de usuarios con un disparador de Lambda para la migración de usuarios (p. 142). Este disparador de Lambda le permite migrar usuarios desde el directorio de usuarios existente a Grupos de usuarios de Amazon Cognito en el momento del inicio de sesión o durante el flujo de recuperación de contraseñas olvidadas. Temas • Orígenes del disparador de Lambda para la migración de usuarios (p. 106) • Parámetros del disparador de Lambda para la migración de usuarios (p. 106) • Ejemplo: Migración un usuario con una contraseña existente (p. 109)
Orígenes del disparador de Lambda para la migración de usuarios Valor de triggerSource
Evento desencadenante
UserMigration_Authentication
Migración de usuarios durante el inicio de sesión.
UserMigration_ForgotPassword
Migración de usuarios durante el flujo de recuperación de contraseñas olvidadas.
Parámetros del disparador de Lambda para la migración de usuarios Estos son los parámetros que requiere esta función de Lambda además de los parámetros habituales. JSON {
"userName": "string", "request": { "password": "string",
106
Amazon Cognito Guía para desarrolladores Disparador de Lambda de migración de usuario "validationData": { "string": "string", . . . }, "clientMetadata": { "string": "string", . . . }
}
}, "response": { "userAttributes": { "string": "string", . . . }, "finalUserStatus": "string", "messageAction": "string", "desiredDeliveryMediums": [ "string", . . .], "forceAliasCreation": boolean }
Parámetros de la solicitud para la migración de usuarios userName El nombre de usuario especificado por el usuario. password La contraseña introducida por el usuario para el inicio de sesión. No se establece en el flujo de recuperación de contraseñas olvidadas. validationData Uno o varios pares de clave y valor que contienen los datos de validación de la solicitud de inicio de sesión del usuario. Puede transferir estos datos a la función de Lambda mediante el parámetro ClientMetadata de las acciones InitiateAuth y AdminInitiateAuth de la API. clientMetadata Uno o varios pares de clave y valor que puede proporcionar como entrada personalizada a la función de Lambda especificada para el desencadenador de migración de usuario. Puede transferir estos datos a la función de Lambda mediante el parámetro ClientMetadata de las acciones AdminRespondToAuthChallenge y ForgotPassword de la API.
Parámetros de la respuesta para la migración de usuarios userAttributes Este campo es obligatorio. Debe contener uno o varios pares nombre-valor que representan los atributos del usuario que se deben almacenar en el perfil del usuario del grupo de usuarios. Puede incluir atributos de usuario estándar y personalizados. Los atributos personalizados deben tener el prefijo custom: para distinguirlos de los atributos estándar. Para obtener más información, consulte Atributos personalizados.
Note Para que los usuarios restablezcan sus contraseñas en el flujo de contraseña olvidada, deben tener un correo electrónico o un número de teléfono verificado. Amazon Cognito envía un
107
Amazon Cognito Guía para desarrolladores Disparador de Lambda de migración de usuario
mensaje que contiene el código de restablecimiento de la contraseña al correo electrónico o al número de teléfono especificado en los atributos del usuario. Atributos
Requisito
Todos los atributos que ha Si faltan atributos obligatorios durante la migración, se usarán los marcado como obligatorios valores predeterminados. al crear el grupo de usuarios username
Obligatorio si se ha configurado el grupo de usuarios con correo electrónico y/o alias preferred_username además del nombre de usuario para el inicio de sesión, y el usuario ha introducido un correo electrónico o un número de teléfono para el inicio de sesión. De lo contrario, es opcional y se utilizará como nombre de usuario en lugar del nombre de usuario especificado por este.
Note username debe ser único en el grupo de usuarios. finalUserStatus Durante el inicio de sesión, este atributo se puede establecer en CONFIRMED, o no establecerse, para confirmar los usuarios automáticamente y permitirles que inicien sesión con sus contraseñas anteriores. Esta es la experiencia más sencilla para el usuario. Si este atributo se establece en RESET_REQUIRED, el usuario debe cambiar su contraseña inmediatamente después de la migración en el momento del inicio de sesión, y la aplicación cliente debe controlar la excepción PasswordResetRequiredException durante el flujo de autenticación.
Note La política de contraseñas del grupo de usuarios nuevo no debe ser más segura que la política de contraseñas del directorio de usuarios existente. messageAction Este atributo puede establecerse en "SUPPRESS" para suprimir el mensaje de bienvenida que suele enviar Amazon Cognito a los usuarios nuevos. Si no ese devuelve este atributo, se enviará el mensaje de bienvenida. desiredDeliveryMediums Este atributo puede establecerse en "EMAIL" para enviar el mensaje de bienvenida por correo electrónico, o en "SMS" para enviar el mensaje de bienvenida por SMS. Si no ese devuelve este atributo, el mensaje de bienvenida se enviará por SMS. forceAliasCreation Si este parámetro se establece en "true" y el número de teléfono o la dirección de correo electrónico que se han especificado en el parámetro UserAttributes ya existen como alias para otro usuario, la llamada a la API migrará el alias del usuario anterior al usuario recién creado. El usuario anterior ya no podrá iniciar sesión utilizando ese alias. Si este atributo se establece en "false" y el alias existe, el usuario no se migrará, y se devolverá un error a la aplicación cliente. Si no se devuelve este atributo, se supone que tiene el valor "false".
108
Amazon Cognito Guía para desarrolladores Disparador de Lambda para mensajes personalizados
Ejemplo: Migración un usuario con una contraseña existente Esta función Lambda de ejemplo migra el usuario con una contraseña existente y suprime el mensaje de bienvenida de Amazon Cognito. Node.js exports.handler = (event, context, callback) => { var user; if ( event.triggerSource == "UserMigration_Authentication" ) { // authenticate the user with your existing user directory service user = authenticateUser(event.userName, event.request.password); if ( user ) { event.response.userAttributes = { "email": user.emailAddress, "email_verified": "true" }; event.response.finalUserStatus = "CONFIRMED"; event.response.messageAction = "SUPPRESS"; context.succeed(event); } else { // Return error to Amazon Cognito callback("Bad password"); }
} else if ( event.triggerSource == "UserMigration_ForgotPassword" ) {
// Lookup the user in your existing user directory service user = lookupUser(event.userName); if ( user ) { event.response.userAttributes = { "email": user.emailAddress, // required to enable password-reset code to be sent to user "email_verified": "true" }; event.response.messageAction = "SUPPRESS"; context.succeed(event); } else { // Return error to Amazon Cognito callback("Bad password"); }
};
} else { // Return error to Amazon Cognito callback("Bad triggerSource " + event.triggerSource); }
Disparador de Lambda para mensajes personalizados Amazon Cognito invoca este disparador antes de enviar un mensaje de verificación telefónico o por correo electrónico, o un código de autenticación multifactor (MFA), lo que le permite personalizar el mensaje de forma dinámica. Los mensajes personalizados estáticos se pueden editar en la pestaña Message Customizations (Personalizaciones de mensajes) de la consola de Amazon Cognito.
109
Amazon Cognito Guía para desarrolladores Disparador de Lambda para mensajes personalizados
La solicitud contiene el parámetro codeParameter, que es una cadena que actúa de marcador de posición del código que se entrega al usuario. Especifique la cadena codeParameter en el cuerpo del mensaje, en el lugar donde desee que se inserte el código de verificación. Al recibir esta respuesta, el servicio Amazon Cognito sustituirá la cadena codeParameter por el código de verificación real.
Note Una función Lambda de mensaje personalizado con el disparador CustomMessage_AdminCreateUser devuelve un nombre de usuario y un código de verificación, por lo que la solicitud debe incluir tanto request.usernameParameter como request.codeParameter. Temas • Orígenes del disparador de Lambda para mensajes personalizados (p. 110) • Parámetros del disparador de Lambda para mensajes personalizados (p. 110) • Ejemplo de mensaje personalizado para la inscripción (p. 112) • Ejemplo de mensaje personalizado para la creación de usuarios por parte del administrador (p. 113)
Orígenes del disparador de Lambda para mensajes personalizados triggerSource value
Evento desencadenante
CustomMessage_SignUp
Mensaje personalizado para enviar el código de confirmación posterior a la inscripción.
CustomMessage_AdminCreateUser
Mensaje personalizado para enviar la contraseña temporal a un usuario nuevo.
CustomMessage_ResendCode
Mensaje personalizado para volver a enviar el código de confirmación a un usuario ya existente.
CustomMessage_ForgotPassword
Mensaje personalizado para enviar el código de confirmación a una solicitud de contraseña olvidada.
CustomMessage_UpdateUserAttribute
Mensaje personalizado: cuando el correo electrónico o el número de teléfono de un usuario cambia, este disparador envía automáticamente un código de verificación al usuario. No se puede utilizar para otros atributos.
CustomMessage_VerifyUserAttribute
Mensaje personalizado: este disparador envía un código de verificación al usuario cuando este lo solicita manualmente para un correo electrónico o un número de teléfono nuevo.
CustomMessage_Authentication
Mensaje personalizado para enviar código de MFA durante la autenticación.
Parámetros del disparador de Lambda para mensajes personalizados Estos son los parámetros que requiere esta función de Lambda además de los parámetros habituales.
110
Amazon Cognito Guía para desarrolladores Disparador de Lambda para mensajes personalizados
JSON {
}
"request": { "userAttributes": { "string": "string", . . . } "codeParameter": "####", "usernameParameter": "string", "clientMetadata": { "string": "string", . . . } }, "response": { "smsMessage": "string", "emailMessage": "string", "emailSubject": "string" }
Parámetros de la solicitud para mensajes personalizados userAttributes Uno o varios pares de nombre y valor que representan atributos de usuario. codeParameter Cadena que se usa como marcador de posición del código de verificación en los mensajes personalizados. nombre de usuarioParámetro El parámetro de nombre de usuario. Se trata de un parámetro de solicitud obligatorio para el flujo de creación de usuarios por parte del administrador. clientMetadata Uno o varios pares de clave y valor que puede proporcionar como entrada personalizada a la función de Lambda especificada para el desencadenador de mensajes personalizados. Puede pasar estos datos a su Lambda con la función de ClientMetadata en las siguientes acciones de la API: • AdminResetUserPassword • AdminRespondToAuthChallenge • AdminUpdateUserAttributes • ForgotPassword • GetUserAttributeVerificationCode • ResendConfirmationCode • SignUp • UpdateUserAttributes
Parámetros de la respuesta para mensajes personalizados En la respuesta, especifique el texto personalizado que se usará en los mensajes a los usuarios.
111
Amazon Cognito Guía para desarrolladores Disparador de Lambda para mensajes personalizados
smsMessage El mensaje de texto SMS personalizado que se envía a los usuarios. Debe incluir el valor de codeParameter recibido en la solicitud. emailMessage El mensaje de correo electrónico personalizado que se envía a los usuarios. Debe incluir el valor de codeParameter recibido en la solicitud. Si EmailSendingAccount no es DEVELOPER y EmailMessage se devuelve, código de error 400 com.amazonaws.cognito.identity.idp.model.InvalidLambdaResponseException se lanzará. emailMessage está permitido solo si UserPoolde EmailSendingAccount es DEVELOPER. emailSubject La línea de asunto del mensaje personalizado. Si EmailSendingAccount no es DEVELOPER y EmailMessage se devuelve, código de error 400 com.amazonaws.cognito.identity.idp.model.InvalidLambdaResponseException se lanzará. emailSubject está permitido solo si UserPoolde EmailSendingAccount es DEVELOPER.
Ejemplo de mensaje personalizado para la inscripción Esta función de Lambda se invoca para personalizar un mensaje de correo electrónico o un mensaje SMS cuando el servicio necesita que una aplicación envíe un código de verificación al usuario. Es posible invocar un disparador de Lambda en numerosos puntos: después del registro, al reenviar un código de verificación, cuando se haya olvidado una contraseña o cuando se verifica un atributo de usuario. La respuesta contiene mensajes tanto para SMS como para correo electrónico. El mensaje debe incluir el parámetro de código "####", que es el marcador de posición del código de verificación que se entrega al usuario. En el caso de los correos electrónicos, la longitud máxima del mensaje es de 20.000 caracteres UTF-8, incluido el código de verificación. Se pueden usar etiquetas HTML en estos correos electrónicos. En el caso de los SMS, la longitud máxima permitida es de 140 caracteres UTF-8, incluido el código de verificación. Node.js exports.handler = (event, context, callback) => { // if(event.userPoolId === "theSpecialUserPool") { // Identify why was this function invoked if(event.triggerSource === "CustomMessage_SignUp") { // Ensure that your message contains event.request.codeParameter. This is the placeholder for code that will be sent event.response.smsMessage = "Welcome to the service. Your confirmation code is " + event.request.codeParameter; event.response.emailSubject = "Welcome to the service"; event.response.emailMessage = "Thank you for signing up. " + event.request.codeParameter + " is your verification code"; } // Create custom message for other events } // Customize messages for other user pools
};
// Return to Amazon Cognito callback(null, event);
112
Amazon Cognito Guía para desarrolladores Disparador de Lambda para mensajes personalizados
Amazon Cognito pasa información del evento a la función Lambda. La función devuelve el mismo objeto de evento de nuevo a Amazon Cognito con cualquier cambio que se haya realizado en la respuesta. En la consola de Lambda, puede configurar un evento de prueba con los datos que son relevantes para el disparador de Lambda. A continuación, se muestra un evento de prueba para este ejemplo de código: JSON {
"version": 1, "triggerSource": "CustomMessage_SignUp/CustomMessage_ResendCode/ CustomMessage_ForgotPassword/CustomMessage_VerifyUserAttribute", "region": "", "userPoolId": "", "userName": "", "callerContext": { "awsSdk": "", "clientId": "", ... }, "request": { "userAttributes": { "phone_number_verified": false, "email_verified": true, ... }, "codeParameter": "####" }, "response": { "smsMessage": "" "emailMessage": "" "emailSubject": "" } }
Ejemplo de mensaje personalizado para la creación de usuarios por parte del administrador Una función Lambda de mensaje personalizado con el disparador CustomMessage_AdminCreateUser devuelve un nombre de usuario y un código de verificación, por lo que se debe incluir tanto request.usernameParameter como request.codeParameter en el cuerpo del mensaje. El valor del parámetro de código "####" es un marcador de posición para la contraseña temporal y "username" es un marcador de posición para el nombre de usuario que se entrega al usuario. En el caso de los correos electrónicos, la longitud máxima del mensaje es de 20.000 caracteres UTF-8, incluido el código de verificación. Se pueden usar etiquetas HTML en estos correos electrónicos. En el caso de los SMS, la longitud máxima permitida es de 140 caracteres UTF-8, incluido el código de verificación. La respuesta contiene mensajes tanto para SMS como para correo electrónico. Node.js exports.handler = (event, context, callback) => { // if(event.userPoolId === "theSpecialUserPool") { // Identify why was this function invoked if(event.triggerSource === "CustomMessage_AdminCreateUser") {
113
Amazon Cognito Guía para desarrolladores Disparadores de Lambda de remitente personalizados // Ensure that your message contains event.request.codeParameter event.request.usernameParameter. This is the placeholder for the code and username that will be sent to your user. event.response.smsMessage = "Welcome to the service. Your user name is " + event.request.usernameParameter + " Your temporary password is " + event.request.codeParameter; event.response.emailSubject = "Welcome to the service"; event.response.emailMessage = "Welcome to the service. Your user name is " + event.request.usernameParameter + " Your temporary password is " + event.request.codeParameter; } // Create custom message for other events } // Customize messages for other user pools
};
// Return to Amazon Cognito callback(null, event);
Amazon Cognito pasa información del evento a la función Lambda. La función devuelve el mismo objeto de evento de nuevo a Amazon Cognito con cualquier cambio que se haya realizado en la respuesta. En la consola de Lambda, puede configurar un evento de prueba con los datos que son relevantes para el disparador de Lambda. A continuación, se muestra un evento de prueba para este ejemplo de código: JSON {
"version": 1, "triggerSource": "CustomMessage_AdminCreateUser", "region": "", "userPoolId": "", "userName": "", "callerContext": { "awsSdk": "", "clientId": "", ... }, "request": { "userAttributes": { "phone_number_verified": false, "email_verified": true, ... }, "codeParameter": "####", "usernameParameter": "username" }, "response": { "smsMessage": "" "emailMessage": "" "emailSubject": "" }
}
Disparadores de Lambda de remitente personalizados Los grupos de usuarios de Amazon Cognito proporcionan dos disparadores de Lambda y CustomEmailSender para habilitar las notificaciones por correo electrónico y SMS de terceros.CustomSMSSender Puede utilizar los proveedores de SMS y correo electrónico que prefiera para
114
Amazon Cognito Guía para desarrolladores Disparadores de Lambda de remitente personalizados
enviar notificaciones a usuarios desde el código de la función de Lambda. Se activan las funciones de Lambda configuradas cuando es necesario enviar notificaciones como códigos de confirmación, códigos de verificación o contraseñas temporales a los usuarios. Amazon Cognito envía el código y las contraseñas temporales (secretos) a las funciones de Lambda activadas. Los secretos se cifrarán mediante una clave administrada por el cliente de AWS KMS y la SDK de cifrado de AWS. El SDK de cifrado de AWS es una biblioteca de cifrado del lado del cliente que le ayuda a cifrar y descifrar datos genéricos.
Note Puede utilizar la AWS CLI o el SDK para configurar sus grupos de usuarios para utilizar estos disparadores de Lambda. Estas configuraciones no están disponibles desde la consola de Amazon Cognito. CustomEmailSender (p. 115) Amazon Cognito invoca este disparador para enviar notificaciones por correo electrónico a los usuarios. CustomSMSSender (p. 118) Amazon Cognito invoca este disparador para enviar notificaciones por SMS a los usuarios.
Resources Los siguientes recursos pueden ayudarle a utilizar los disparadores CustomEmailSender y CustomSMSSender. AWS KMS AWS KMS es un servicio administrado que le permite crear y controlar fácilmente claves maestras de cliente (CMK), que son las claves de cifrado que se utilizan para cifrar los datos. Para obtener más información, consulte ¿Qué es AWS Key Management Service? Clave maestra de cliente Una clave maestra de cliente (CMK) es una representación lógica de una clave principal. La CMK incluye metadatos, como el ID de clave, la fecha de creación, la descripción y el estado de la clave. La CMK también contiene el material de claves utilizado para cifrar y descifrar datos. Para obtener más información, consulte Claves maestras de cliente. Clave maestra de cliente simétrica Una clave maestra del cliente simétrica representa una clave de cifrado de 256 bits que nunca deja AWS KMS sin cifrar. Para utilizar una CMK simétrica, tiene que llamar a AWS KMS. Las claves simétricas se utilizan en el cifrado simétrico, donde se utiliza la misma clave para cifrar y descifrar. Para obtener más información, consulte Claves maestras de cliente simétricas.
Lambda Disparador de correo electrónico personalizado El CustomEmailSender disparador se invoca para permitir que un proveedor externo envíe notificaciones por correo electrónico a los usuarios desde el código de la función Lambda. El uso de este disparador implica cinco pasos principales:
Note El CustomEmailSender disparador no está disponible en la Amazon Cognito consola de . • Cree una Lambda función de para el CustomEmailSender. Amazon Cognito utiliza el SDK de cifrado de AWS para cifrar los secretos (contraseñas temporales o códigos de autorización).
115
Amazon Cognito Guía para desarrolladores Disparadores de Lambda de remitente personalizados
• Cree una clave de cifrado en AWS KMS. Esta clave se utilizará para cifrar las contraseñas temporales y los códigos de autorización que Amazon Cognito genera . A continuación, puede descifrar estos secretos en la Lambda función de remitente personalizada para enviarlos al usuario final en texto sin formato. • Conceda a la entidad principal del Amazon Cognito servicio cognito-idp.amazonaws.com acceso para invocar la Lambda función. • Edite el código de la Lambda función para utilizar remitentes de clientes o proveedores de terceros. • Actualice el grupo de usuarios existente para añadir Lambda disparadores de remitente personalizados.
Important Para aumentar la seguridad, debe configurar una clave maestra de cliente simétrica en AWS KMS (KMS), cuando CustomEmailSender o CustomSMSSender se configuran con su grupo de usuarios. Amazon Cognito utiliza su clave de KMS configurada para cifrar códigos o contraseñas temporales. Amazon Cognito envía el texto cifrado en base64 a sus Lambda funciones de . Para obtener más información, consulte Claves maestras de cliente simétricas.
Habilitar el CustomEmailSender Lambda disparador Puede habilitar el CustomEmailSender Lambda disparador mediante una Lambda función . Paso 1: Crear una Lambda función Cree una Lambda función de para el CustomEmailSender disparador. Amazon Cognito utiliza el SDK de cifrado de AWS para cifrar los secretos (contraseñas temporales o códigos de autorización). Paso 2: Crear una clave de cifrado en AWS KMS Cree una clave de cifrado en AWS KMS. Esta clave se utilizará para cifrar las contraseñas temporales y los códigos de autorización que Amazon Cognito genera . A continuación, puede descifrar estos secretos en la Lambda función de remitente personalizada para poder enviarlos al usuario final en texto no cifrado. Paso 3: Conceder a la entidad principal del Amazon Cognito servicio cognito-idp.amazonaws.com acceso para invocar la Lambda función Use el siguiente comando:
aws lambda add-permission --function-name lambda_arn --statement-id "CognitoLambdaInvokeAccess" --action lambda:InvokeFunction --principal cognitoidp.amazonaws.com
Paso 4: Editar el código para utilizar un remitente personalizado Amazon Cognito utiliza SDK de cifrado de AWS para cifrar secretos (contraseñas temporales y códigos de autorización) antes de enviarlos a la Lambda función de remitente personalizada. Debe descifrar estos secretos antes de enviarlos a los usuarios finales utilizando el proveedor personalizado de su elección. Para utilizar el SDK de cifrado de AWS con la Lambda función de , debe empaquetar el SDK con la función de . Para obtener más información, consulte Instalación de AWS Encryption SDK para JavaScript. También puede actualizar el Lambda paquete completando los pasos siguientes. 1. Exporte el paquete de Lambda la función de desde la consola de . 2. Descomprima el paquete. 3. Añada al SDK de cifrado de AWS paquete. Por ejemplo, si utiliza Node.js, añada el node_modules directorio e incluya las bibliotecas de @aws-crypto/client-node.
116
Amazon Cognito Guía para desarrolladores Disparadores de Lambda de remitente personalizados
4. Vuelva a crear el paquete. 5. Actualice el código de la Lambda función del directorio modificado. Paso 5: Actualizar el grupo de usuarios para añadir Lambda disparadores de remitente personalizados Actualice el grupo de usuarios para añadir el CustomEmailSender disparador.
#Send the parameter to update-user-pool along with any existing user pool configurations. --lambda-config "CustomEmailSender={LambdaVersion=V1_0,LambdaArn= lambdaarn },KMSKeyID= key-id"
El siguiente ejemplo de Node.js muestra cómo utilizar la CustomEmailSender Lambda función .
const AWS = require('aws-sdk'); const b64 = require('base64-js'); const encryptionSdk = require('@aws-crypto/client-node');
variables.
#Configure the encryption SDK client with the KMS key from the environment
const { encrypt, decrypt } = encryptionSdk.buildClient(encryptionSdk.CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT); const generatorKeyId = process.env.KEY_ALIAS; const keyIds = [ process.env.KEY_ID ]; const keyring = new encryptionSdk.KmsKeyringNode({ generatorKeyId, keyIds }) exports.handler = async (event) => { #Decrypt the secret code using encryption SDK. let plainTextCode; if(event.request.code){ const { plaintext, messageHeader } = await decrypt(keyring, b64.toByteArray(event.request.code)); plainTextCode = plaintext } #PlainTextCode now has the decrypted secret. if(event.triggerSource == 'CustomEmailSender_SignUp'){ #Send email to end-user using custom or 3rd party provider. #Include temporary password in the email. }else if(event.triggerSource == 'CustomEmailSender_ResendCode'){ }else if(event.triggerSource == 'CustomEmailSender_ForgotPassword'){ }else if(event.triggerSource == 'CustomEmailSender_UpdateUserAttribute'){ }else if(event.triggerSource == 'CustomEmailSender_VerifyUserAttribute'){ }else if(event.triggerSource == 'CustomEmailSender_AdminCreateUser'){ }else if(event.triggerSource == 'CustomEmailSender_AccountTakeOverNotification'){
117
Amazon Cognito Guía para desarrolladores Disparadores de Lambda de remitente personalizados
} return; };
Orígenes del Lambda disparador de remitente de correo electrónico personalizado En la siguiente tabla se muestra el evento de activación para orígenes de disparadores de correo electrónico personalizado en el Lambda código. TriggerSource value
Evento desencadenante
CustomEmailSender_SignUp
Para enviar el código de confirmación después de la inscripción.
CustomEmailSender_ResendCode
Para volver a enviar la contraseña temporal a un nuevo usuario.
CustomEmailSender_ForgotPassword
Para volver a enviar el código de confirmación a un usuario existente.
CustomEmailSender_UpdateUserAttribute
Cuando se cambia el correo electrónico de un usuario, este disparador envía automáticamente un código de verificación al usuario. No se puede utilizar para otros atributos.
CustomEmailSender_VerifyUserAttribute
Este disparador envía un código de verificación al usuario cuando este lo solicita manualmente para una nueva dirección de correo electrónico.
CustomEmailSender_AdminCreateUser
Para enviar la contraseña temporal a un nuevo usuario.
CustomEmailSender_AccountTakeOverNotification Este disparador envía a los clientes una notificación cuando se detecta un intento de hacerse cargo de su cuenta.
Lambda Disparador de remitente de SMS personalizado El CustomSMSSender disparador se invoca desde el código de la Lambda función para permitir que un proveedor externo envíe notificaciones SMS a los usuarios. El uso de este disparador implica cinco pasos principales:
Note El CustomSMSSender disparador no está disponible en la Amazon Cognito consola de . • Cree una Lambda función de para CustomSMSSender. • Cree una clave de cifrado en AWS KMS. • Conceda a la entidad principal del Amazon Cognito servicio cognito-idp.amazonaws.com acceso para invocar la Lambda función. • Edite el código de la Lambda función de para incluir proveedores de terceros.
118
Amazon Cognito Guía para desarrolladores Disparadores de Lambda de remitente personalizados
• Actualice el grupo de usuarios para añadir disparadores personalizados.
Important Para mayor seguridad, debe configurar una clave maestra de cliente simétrica en AWS KMS, cuando CustomEmailSender o CustomSMSSender se configuran con su grupo de usuarios. Amazon Cognito utiliza su clave de KMS configurada para cifrar códigos o contraseñas temporales. Amazon Cognito envía el texto cifrado en base64 a sus Lambda funciones de . Para obtener más información, consulte Claves maestras de cliente simétricas.
Habilitar el CustomSMSSender Lambda disparador Puede habilitar el CustomSMSSender disparador mediante una Lambda función . Paso 1: Crear una Lambda función Cree una Lambda función de para el CustomSMSSender disparador. Amazon Cognito utiliza el SDK de cifrado de AWS para cifrar los secretos (contraseñas temporales o códigos de autorización). Paso 2: Crear una clave de cifrado en AWS KMS Cree una clave de cifrado en AWS KMS. Esta clave se utilizará para cifrar las contraseñas temporales y los códigos de autorización que Amazon Cognito genera . A continuación, puede descifrar estos secretos en la Lambda función de remitente personalizada para poder enviarlos al usuario final en texto no cifrado. Paso 3: Conceder a la entidad principal del Amazon Cognito servicio cognito-idp.amazonaws.com acceso para invocar la Lambda función Utilice el siguiente comando para conceder acceso a la función Lambda:
aws lambda add-permission --function-name lambda_arn --statement-id "CognitoLambdaInvokeAccess" --action lambda:InvokeFunction --principal cognitoidp.amazonaws.com
Paso 4: Editar el código para utilizar un remitente personalizado Amazon Cognito utiliza SDK de cifrado de AWS para cifrar secretos (contraseñas temporales y códigos de autorización) antes de enviarlos a la Lambda función de remitente personalizada. Debe descifrar estos secretos antes de enviarlos a los usuarios finales utilizando el proveedor personalizado de su elección. Para utilizar el SDK de cifrado de AWS con la Lambda función de , debe empaquetar el SDK con la función de . Para obtener más información, consulte Instalación de AWS Encryption SDK para JavaScript. También puede actualizar el Lambda paquete completando los pasos siguientes. 1. Exportar el paquete de Lambda la función de desde la consola de 2. Descomprima el paquete. 3. Añada al SDK de cifrado de AWS paquete. Por ejemplo, si utiliza Node.js, añada el node_modules directorio e incluya las bibliotecas de @aws-crypto/client-node. 4. Vuelva a crear el paquete. 5. Actualice el código de la Lambda función desde el directorio modificado. Paso 5: Actualizar el grupo de usuarios para añadir Lambda disparadores de remitente personalizados Actualice el grupo de usuarios para añadir el desencadenador CustomSMSSender.
119
Amazon Cognito Guía para desarrolladores Disparadores de Lambda de remitente personalizados
Ejemplos de código #Send the parameter to update-user-pool along with any existing user pool configurations. --lambda-config "CustomSMSSender={LambdaVersion=V1_0,LambdaArn= lambda-arn },KMSKeyID= key-id"
El siguiente ejemplo de Node.js muestra cómo utilizar la CustomSMSSender Lambda función .
const AWS = require('aws-sdk'); const b64 = require('base64-js'); const encryptionSdk = require('@aws-crypto/client-node'); #Configure the encryption SDK client with the KMS key from the environment
variables.
const { encrypt, decrypt } = encryptionSdk.buildClient(encryptionSdk.CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT); const generatorKeyId = process.env.KEY_ALIAS; const keyIds = [ process.env.KEY_ID ]; const keyring = new encryptionSdk.KmsKeyringNode({ generatorKeyId, keyIds }) exports.handler = async (event) => { #Decrypt the secret code using encryption SDK. let plainTextCode; if(event.request.code){ const { plaintext, messageHeader } = await decrypt(keyring, b64.toByteArray(event.request.code)); plainTextCode = plaintext } #PlainTextCode now has the decrypted secret. if(event.triggerSource == 'CustomSMSSender_SignUp'){ #Send sms to end-user using custom or 3rd party provider. #Include temporary password in the email. }else if(event.triggerSource == 'CustomSMSSender_ResendCode'){ }else if(event.triggerSource == 'CustomSMSSender_ForgotPassword'){ }else if(event.triggerSource == 'CustomSMSSender_UpdateUserAttribute'){ }else if(event.triggerSource == 'CustomSMSSender_VerifyUserAttribute'){ }else if(event.triggerSource == 'CustomSMSSender_AdminCreateUser'){ }else if(event.triggerSource == 'CustomSMSSender_AccountTakeOverNotification'){ } return; };
120
Amazon Cognito Guía para desarrolladores Usar análisis de Amazon Pinpoint
Temas • Orígenes del Lambda disparador del remitente de SMS personalizados (p. 118)
Orígenes del Lambda disparador del remitente de SMS personalizados En la siguiente tabla se muestra el evento de activación para orígenes de disparadores de SMS personalizados en el Lambda código. TriggerSource value
Evento desencadenante
CustomSMSSender_SignUp
Mensaje personalizado para enviar el código de confirmación después de la inscripción.
CustomSMSSender_ResendCode
Para enviar la contraseña temporal a un nuevo usuario.
CustomSMSSender_ForgotPassword
Para volver a enviar el código de confirmación a un usuario existente.
CustomSMSSender_UpdateUserAttribute
Cuando se cambia el correo electrónico o el número de teléfono de un usuario, este disparador envía automáticamente un código de verificación al usuario. Esto no se puede utilizar para otros atributos.
CustomSMSSender_VerifyUserAttribute
Este disparador envía un código de verificación al usuario cuando este lo solicita manualmente para un nuevo número de teléfono.
CustomSMSSender_Authentication
Para enviar código MFA durante la autenticación.
CustomSMSSender_AdminCreateUser
Para enviar la contraseña temporal a un nuevo usuario.
Usar análisis de Amazon Pinpoint con grupos de usuarios de Amazon Cognito Amazon Cognito User Pools El Amazon Pinpoint se integra con Amazon Cognito para proporcionar análisis para grupos de usuarios de Amazon Pinpoint y para enriquecer los datos de usuario para campañas de Amazon Pinpoint. proporciona análisis y campañas dirigidas a públicos específicos para mejorar la interacción de los usuarios con las aplicaciones móviles mediante notificaciones de inserción. Gracias a que los grupos de usuario de Amazon Cognito admiten análisis de Amazon Pinpoint, puede realizar un seguimiento de las inscripciones, los inicios de sesión y los errores de autenticación de los grupos de usuario, así como de los usuarios activos diarios (DAU) y mensuales (MAU), todo desde la consola de Amazon Pinpoint. Puede analizar los datos por intervalo de fechas o por atributos como plataforma del dispositivo, idioma del dispositivo o versión de la aplicación. También puede utilizar SDK de AWS Mobile para Android o AWS Mobile SDK for iOS para configurar atributos de usuario específicos de su aplicación. Estos atributos pueden usarse posteriormente para segmentar los usuarios en Amazon Pinpoint y enviarles notificaciones de inserción específicas. Si selecciona Share user attribute data with Amazon Pinpoint (Compartir datos de atributos de usuario con) en la pestaña Analytics (Análisis) de laAmazon Cognito consola de , se crearán puntos de enlace adicionales para las direcciones de correo electrónico y los números de teléfono de los usuarios.
121
Amazon Cognito Guía para desarrolladores Buscar mapeos de región de Amazon Cognito yAmazon Pinpoint
Buscar mapeos de región de Amazon Cognito yAmazon Pinpoint La siguiente tabla muestra los mapeos regionales entre Amazon Cognito y Amazon Pinpoint. Utilice la tabla para buscar la región en la que creó el grupo de usuarios de Amazon Cognito y la región de Amazon Pinpoint correspondiente. A continuación, utilice estas regiones para integrar Amazon Cognito y su proyecto de Amazon Pinpoint. Amazon Cognito Regiones de que admiten Amazon Pinpoint
Regiones del proyecto deAmazon Pinpoint
ap-northeast-1
us-east-1
ap-northeast-2
us-east-1
ap-south-1
us-east-1, ap-south-1
ap-southeast-1
us-east-1
ap-southeast-2
us-east-1, ap-southeast-2
ca-central-1
us-east-1
eu-central-1
us-east-1, eu-central-1
eu-west-1
us-east-1, eu-west-1
eu-west-2
us-east-1
us-east-1
us-east-1
us-east-2
us-east-1
us-west-2
us-east-1, us-west-2
Ejemplos de mapeo de región • Si crea un grupo de usuarios en ap-northest-1, tendrá que crear su proyecto de Amazon Pinpoint en useast-1. • Si crea un grupo de usuarios en ap-south-1, tendrá que crear su proyecto de Amazon Pinpoint en useast-1 o en ap-south-1.
Note Amazon Pinpoint está disponible en varias regiones de AWS en América del Norte, Europa, Asia y Oceanía. Además de las excepciones de la tabla, Amazon Cognito solo admitirá integraciones de Amazon Pinpoint dentro de la región. Si Amazon Pinpoint está disponible en la misma región que Amazon Cognito, Amazon Cognito envía eventos a proyectos de Amazon Pinpoint dentro de la misma región. Si Amazon Pinpoint no está disponible en la región, Amazon Cognito no admite integraciones de Amazon Pinpoint en esa región hasta que Amazon Pinpoint esté disponible. Para obtener información detallada sobre la región de Amazon Pinpoint, consulte Puntos de enlace y cuotas de Amazon Pinpoint.
122
Amazon Cognito Guía para desarrolladores Buscar mapeos de región de Amazon Cognito yAmazon Pinpoint
Especificar los ajustes de análisis de Amazon Pinpoint (Consola de administración de AWS) Para definir los ajustes de análisis 1.
Inicie sesión en la consola de Amazon Cognito.
2.
En el panel de navegación, vaya aManage User Pools (Administrar grupos de usuarios) y elija el grupo de usuarios que desea editar.
3.
Elija la pestaña Analytics (Análisis).
4.
Elija Add analytics and campaigns (Añadir análisis y campañas).
5.
Elija un valor de Cognito app client (Cliente de aplicación de Cognito) en la lista.
6.
Para mapear la aplicación de Amazon Cognito a un proyecto de Amazon Pinpoint, seleccione el proyecto de Amazon Pinpoint en la lista.
Note El ID de proyecto de Amazon Pinpoint es una cadena de 32 caracteres única por cada proyecto de Amazon Pinpoint. Aparece en la consola de Amazon Pinpoint. Puede asignar varias aplicaciones de Amazon Cognito a un único proyecto de Amazon Pinpoint. Sin embargo, no puede asignar una aplicación de Amazon Cognito a más de un proyecto de Amazon Pinpoint. En Amazon Pinpoint, cada proyecto debe ser una sola aplicación. Por ejemplo, si un desarrollador tiene dos juegos, cada uno debe ser un proyecto de Amazon Pinpoint independiente, incluso si ambos juegos utilizan el mismo grupo de usuarios de Amazon Cognito. Para obtener más información sobre los proyectos de Amazon Pinpoint, consulte Crear un proyecto en Amazon Pinpoint. 7.
Seleccione Share user attribute data with Amazon Pinpoint (Compartir datos de atributos de usuario con) si desea que Amazon Cognito envíe las direcciones de correo electrónico y los números de teléfono de los usuarios a Amazon Pinpoint, de modo que se creen puntos de enlace adicionales para dichos usuarios. Después de verificar el número de teléfono y la dirección de correo electrónico de la cuenta, estos solo se comparten con Amazon Pinpoint si están disponibles para la cuenta de usuario.
Note Un punto de enlace identifica de forma exclusiva el dispositivo de un usuario al que puede enviar notificaciones de inserción con Amazon Pinpoint. Para obtener más información acerca de puntos de enlace, consulte Adición de puntos de enlace en la Guía para desarrolladores de Amazon Pinpoint. 8.
Elija Save changes.
9.
Para definir asignaciones de aplicación adicionales, elija Add another app mapping (Añadir otra asignación de aplicación).
10. Elija Save changes.
Especificar la configuración de análisis de Amazon Pinpoint (AWS CLI y API de AWS) Utilice los siguientes comandos para especificar la configuración de análisis de Amazon Pinpoint para su grupo de usuarios.
Para especificar la configuración de análisis para la aplicación cliente existente del grupo de usuarios en momento de crear dicha aplicación • AWS CLI: aws cognito-idp create-user-pool-client 123
Amazon Cognito Guía para desarrolladores Administración de usuarios
• AWS API de : CreateUserPoolClient
Para actualizar la configuración de análisis para la aplicación cliente existente del grupo de usuarios • AWS CLI: aws cognito-idp update-user-pool-client • AWS API de : UpdateUserPoolClient
Note Amazon Cognito admite integraciones en la región cuando se utiliza ApplicationArn
Administración de usuarios en grupos de usuarios Después de crear un grupo de usuarios, puede crear, confirmar y administrar cuentas de usuarios. Con los grupos de Grupos de usuarios de Amazon Cognito puede administrar los usuarios y su acceso a los recursos mapeando los roles de IAM a sus grupos. Puede importar los usuarios en un grupo de usuarios mediante un disparador de Lambda para la migración de usuarios. Este enfoque permite la migración fluida de usuarios desde su directorio de usuarios existente a grupos de usuarios al iniciar sesión en el grupo de usuarios por primera vez. Temas • Inscripción y confirmación de cuentas de usuario (p. 124) • Creación de cuentas de usuario como administrador (p. 132) • Agregar grupos a un grupo de usuarios (p. 136) • Gestión y búsqueda de cuentas de usuario (p. 138) • Recuperación de cuentas de usuario (p. 141) • Importación de usuarios en un grupo de usuarios (p. 142)
Inscripción y confirmación de cuentas de usuario Las cuentas de usuario se añaden al grupo de usuarios según una de las formas siguientes: • El usuario se inscribe en la aplicación cliente del grupo de usuarios; dicha aplicación puede ser móvil o web. • Puede importar la cuenta de usuario al grupo de usuarios. Para obtener más información, consulte Importación de usuarios en grupos de usuarios desde un archivo CSV (p. 144). • Puede crear la cuenta de usuario en el grupo de usuarios e invitar al usuario a iniciar sesión. Para obtener más información, consulte Creación de cuentas de usuario como administrador (p. 132). Los usuarios que se inscriben necesitan que los confirmen para poder iniciar sesión. Los usuarios importados y creados ya están confirmados, pero deben crear su contraseña la primera vez que inicien sesión. En la sección siguiente se explica el proceso de confirmación y la verificación de teléfono y correo electrónico.
Información general sobre la confirmación de una cuenta de usuario En el diagrama siguiente se ilustra el proceso de confirmación:
124
Amazon Cognito Guía para desarrolladores Inscripción y confirmación de cuentas de usuario
Una cuenta de usuario puede tener cualquiera de los estados siguientes: Registrada (sin confirmar) El usuario se ha inscrito correctamente, pero no puede iniciar sesión hasta que la cuenta de usuario esté confirmada. En este estado, el usuario está habilitado, pero no confirmado. Los nuevos usuarios que se inscriben empiezan con este estado. Confirmada La cuenta de usuario está confirmada y el usuario puede iniciar sesión. Si el usuario ha confirmado la cuenta de usuario introduciendo un código de confirmación que ha recibido por correo electrónico o teléfono (SMS) —o, en el caso de correo electrónico, haciendo clic en un enlace —de confirmación, dicho correo electrónico o número de teléfono se verifica automáticamente. El código o enlace es válido durante 24 horas. Si el administrador o un disparador de Lambda anterior a la inscripción ha confirmado la cuenta del usuario, es posible que no haya un correo electrónico o un número de teléfono verificado asociado a la cuenta. Restablecimiento de contraseña requerido La cuenta de usuario está confirmada, pero el usuario debe solicitar un código y restablecer su contraseña para poder iniciar sesión. Las cuentas de usuario que el administrador o el desarrollador importan empiezan con este estado. Obligar a cambiar la contraseña La cuenta de usuario está confirmada y el usuario puede iniciar sesión con una contraseña temporal, pero la primera vez que inicie sesión, el usuario debe cambiar la contraseña para poder hacer cualquier cosa. Las cuentas de usuario que el administrador o el desarrollador crean empiezan con este estado. Deshabilitado Para poder eliminar una cuenta de usuario, es preciso deshabilitarla primero.
125
Amazon Cognito Guía para desarrolladores Inscripción y confirmación de cuentas de usuario
Verificación de la información de contacto durante el registro Tal vez desee que, cuando se registren nuevos usuarios en la aplicación, proporcionen al menos un método de contacto. Por ejemplo, con la información de contacto de los usuarios, podría: • Enviar una contraseña temporal cuando un usuario decida restablecer su contraseña. • Avisar a los usuarios cuando se actualicen sus datos personales o financieros. • Enviar mensajes promocionales, como ofertas o descuentos especiales. • Enviar resúmenes de cuenta o recordatorios de facturación. En casos de uso como estos, es importante que envíe sus mensajes a un destino verificado. De lo contrario, los mensajes podrían enviarse a una dirección de correo electrónico o un número de teléfono no válidos que se hayan especificado de forma incorrecta. O lo que es peor, podría enviarse información confidencial a agentes malintencionados que se hagan pasar por los usuarios. Para ayudar a garantizar que los mensajes se envían exclusivamente a las personas correctas, configure el grupo de usuarios de Amazon Cognito para que los usuarios tengan que proporcionar la siguiente información al registrarse: a. Una dirección de correo electrónico o un número de teléfono. b. Un código de verificación que Amazon Cognito envíe a esa dirección de correo electrónico o número de teléfono. Al proporcionar el código de verificación, el usuario demuestra que tiene acceso a la bandeja de correo o al teléfono donde se recibió el código. Cuando el usuario proporciona el código, Amazon Cognito actualiza la información sobre el usuario en el grupo de usuarios del modo siguiente: • Estableciendo el estado del usuario en CONFIRMED. • Actualizando los atributos del usuario para indicar que la dirección de correo electrónico o el número de teléfono se han verificado. Para ver esta información, puede utilizar la consola de Amazon Cognito. También puede utilizar la acción AdminGetUser de la API, el comando admin-get-user con la AWS CLI o la acción correspondiente de uno de los SDK de AWS. Si un usuario tiene un método de contacto verificado, Amazon Cognito le envía automáticamente un mensaje cuando solicita restablecer contraseña.
Para configurar el grupo de usuarios de forma que se solicite la verificación del correo electrónico o del teléfono Requerir la verificación del teléfono o del correo electrónico permite garantizar que la forma que tiene para contactar con los usuarios es de confianza. Siga los pasos que se indican a continuación para configurar el grupo de usuarios mediante la consola de Amazon Cognito.
Antes de empezar Si aún no tiene un grupo de usuarios en la cuenta, necesita uno. Para crear uno, consulte Introducción a los grupos de usuarios (p. 18).
Para configurar el grupo de usuarios 1. 2.
Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon Cognito en https:// console.aws.amazon.com/cognito. Elija Manage User Pools (Administrar grupos de usuarios).
126
Amazon Cognito Guía para desarrolladores Inscripción y confirmación de cuentas de usuario
3.
En la página Sus grupos de usuarios, seleccione el grupo de usuarios que desee configurar.
4.
En el menú de navegación de la izquierda, seleccione MFA and verifications (MFA y verificaciones). Las opciones de verificación del correo electrónico o del teléfono se muestran en Which attributes do you want to verify? (¿Qué atributos desea verificar?)
5.
Elija una de las siguientes opciones: Email Si elige esta opción, Amazon Cognito enviará por correo electrónico un código de verificación cuando el usuario se registre. Seleccione esta opción si normalmente se comunica con los usuarios a través del correo electrónico. Por ejemplo, conviene utilizar direcciones de correo electrónico verificadas para enviar facturas, resúmenes de pedidos u ofertas especiales. Número de teléfono Si elige esta opción, Amazon Cognito envía un SMS con un código de verificación cuando el usuario se registra. Seleccione esta opción si normalmente se comunica con los usuarios a través de SMS. Por ejemplo, conviene utilizar números de teléfono verificados si envía notificaciones de entrega, confirmaciones de citas o alertas. Correo electrónico o número de teléfono Seleccione esta opción si no quiere que todos los usuarios tengan el mismo método de contacto verificado. En este caso, la página de registro de la aplicación podría pedir a los usuarios que verifiquen únicamente el método de contacto preferido. Cuando Amazon Cognito envíe un código de verificación, utilizará el método especificado en la solicitud SignUp de la aplicación. Si un usuario proporciona una dirección de correo electrónico y un número de teléfono y se especifican los dos métodos de contacto en la solicitud SignUp de la aplicación, Amazon Cognito solamente enviará el código de verificación al número de teléfono. Si solicita a los usuarios que verifiquen la dirección de correo electrónico y el número de teléfono, elija esta opción. Amazon Cognito verificará uno de los métodos de contacto cuando el usuario se registre, mientras que la aplicación deberá verificar el otro cuando el usuario inicie sesión. Para obtener más información, consulte Si solicita a los usuarios que confirmen tanto el correo electrónico como el número de teléfono (p. 128). Ninguna Si elige esta opción, Amazon Cognito no enviará códigos de verificación cuando el usuario se registre. Seleccione esta opción si está utilizando un flujo de autenticación personalizado que verifica al menos un método de contacto sin utilizar códigos de verificación enviados por Amazon Cognito. Por ejemplo, es posible que desee utilizar un desencadenador Lambda previo al registro que verifique automáticamente las direcciones de correo electrónico que pertenecen a un dominio específico. Si no verifica la información de contacto de los usuarios, es posible que no pueda utilizar la aplicación en algunos casos. Recuerde que los usuarios necesitan tener verificada la información de contacto para: • Restablecer las contraseñas. Cuando un usuario realiza una acción en la aplicación que llama a la acción ForgotPassword de la API, Amazon Cognito envía una contraseña temporal a la dirección de correo electrónico o al número de teléfono del usuario. Amazon Cognito solamente envía esta contraseña si el usuario tiene al menos un método de contacto verificado. • Inicie sesión utilizando una dirección de correo electrónico o un número de teléfono como alias. Si configura el grupo de usuarios de forma que estos alias estén permitidos, los usuarios 127
Amazon Cognito Guía para desarrolladores Inscripción y confirmación de cuentas de usuario
solamente podrán iniciar sesión con un alias si dicho alias se ha verificado. Para obtener más información, consulte Información general de los alias (p. 174). 6.
Elija Save changes.
Flujo de autenticación con la verificación del correo electrónico o el teléfono Si el grupo de usuarios obliga a los usuarios a verificar los datos de contacto, la aplicación debe facilitar lo siguiente cuando el usuario se registre: 1.
Un usuario inicia sesión en su aplicación introduciendo un nombre de usuario, un número de teléfono o una dirección de correo electrónico y, posiblemente, otros atributos.
2.
El servicio Amazon Cognito recibe la solicitud de inscripción de la aplicación. Después de verificar que la solicitud contiene todos los atributos necesarios para la inscripción, el servicio completa el proceso de inscripción y envía un código de confirmación al teléfono (mediante SMS) o al correo electrónico del usuario. El código es válido durante 24 horas.
3.
El servicio indica a la aplicación que la inscripción se ha completado y que la cuenta de usuario está pendiente de confirmación. La respuesta contiene información acerca de dónde se ha enviado el código de confirmación. En este momento, la cuenta de usuario está sin confirmar y la dirección de correo electrónico y el número de teléfono del usuario están sin verificar.
4.
Ahora, la aplicación puede instar al usuario a que introduzca el código de confirmación. No es necesario que el usuario introduzca el código de inmediato. Sin embargo, no podrá iniciar sesión hasta después de introducir el código de confirmación. El usuario introduce el código de confirmación en la aplicación. La aplicación llama a ConfirmSignUp para enviar el código al servicio Amazon Cognito, que lo verifica y, si es correcto, establece la cuenta del usuario en el estado confirmado. Después de confirmar satisfactoriamente la cuenta de usuario, el servicio Amazon Cognito marca automáticamente el atributo que se utilizó para confirmar (correo electrónico o número de teléfono) como verificado. A menos que el valor de este atributo cambie, el usuario no tendrá que volver a verificarlo.
5. 6.
7.
En este punto, la cuenta de usuario se encuentra en estado confirmado y el usuario puede iniciar sesión.
Si solicita a los usuarios que confirmen tanto el correo electrónico como el número de teléfono Amazon Cognito solamente verificará uno de los métodos de contacto cuando el usuario se registre. En los casos en los que Amazon Cognito deba elegir entre la verificación de una dirección de correo electrónico o un número de teléfono, elegirá el número de teléfono y enviará un código de verificación a través de SMS. Por ejemplo, si configura el grupo de usuarios de forma que los usuarios puedan realizar la verificación utilizando una dirección correo electrónico o un número de teléfono y la aplicación proporciona estos atributos después del registro, Amazon Cognito solamente verificará el número de teléfono. Una vez que un usuario verifica el número de teléfono, Amazon Cognito establece el estado del usuario en CONFIRMED, por lo que el usuario tiene permiso para iniciar sesión en la aplicación. Una vez que el usuario inicia sesión, la aplicación puede dar la opción de verificar el método de contacto que no se ha verificado durante el registro. Para verificar este segundo método, la aplicación llama a la acción VerifyUserAttribute de la API. Tenga en cuenta que esta acción necesita un parámetro AccessToken y Amazon Cognito solamente proporciona tokens de acceso a los usuarios autenticados. Por lo tanto, solamente puede verificar el segundo método de contacto una vez que el usuario ha iniciado sesión. Si necesita que los usuarios verifiquen la dirección de correo electrónico y el número de teléfono, haga lo siguiente: 1.
Configure el grupo de usuarios para que permita a los usuarios verificar la dirección de correo electrónico o el número de teléfono.
128
Amazon Cognito Guía para desarrolladores Inscripción y confirmación de cuentas de usuario
2.
3.
4. 5.
En el flujo de registro de la aplicación, pida a los usuarios que proporcionen una dirección de correo electrónico y un número de teléfono. Llame a la acción SignUp de la API y proporcione la dirección de correo electrónico y el número de teléfono en el parámetro UserAttributes. En ese momento, Amazon Cognito envía un código de verificación al teléfono del usuario. En la interfaz de la aplicación, muestre una página de confirmación en la que el usuario pueda especificar el código de verificación. Confirme el usuario llamando a la acción ConfirmSignUp de la API. En ese momento, el estado del usuario es CONFIRMED y el número de teléfono del usuario está verificado, aunque la dirección de correo electrónico no lo está. Muestre la página de inicio de sesión y autentique el usuario llamando a la acción InitiateAuth de la API. Cuando el usuario esté autenticado, Amazon Cognito devolverá un token de acceso a la aplicación. Llame a la acción GetUserAttributeVerificationCode de la API. Especifique los siguientes parámetros en la solicitud: • AccessToken – El token de acceso devuelto por Amazon Cognito cuando el usuario inició sesión. • AttributeName – Especifique "email" como valor del atributo. Amazon Cognito envía un código de verificación a la dirección de correo electrónico del usuario.
6.
Muestre una página de confirmación en la que el usuario pueda especificar el código de verificación. Cuando el usuario envíe el código, llame a la acción VerifyUserAttribute de la API. Especifique los siguientes parámetros en la solicitud: • AccessToken – El token de acceso devuelto por Amazon Cognito cuando el usuario inició sesión. • AttributeName – Especifique "email" como valor del atributo. • Code – El código de verificación proporcionado por el usuario. En este momento, se verifica la dirección de correo electrónico.
Permitir que los usuarios se inscriban en su aplicación, pero con confirmación del administrador 1. 2.
3.
4.
Un usuario inicia sesión en su aplicación introduciendo un nombre de usuario, un número de teléfono o una dirección de correo electrónico y, posiblemente, otros atributos. El servicio Amazon Cognito recibe la solicitud de inscripción de la aplicación. Después de verificar que la solicitud contiene todos los atributos necesarios para la inscripción, el servicio completa el proceso de inscripción e indica a la aplicación que la inscripción está completa y pendiente de confirmación. En este punto, el estado de la cuenta del usuario es no confirmado. El usuario solo podrá iniciar sesión cuando la cuenta esté confirmada. El administrador confirma la cuenta de usuario, ya sea en la consola de Amazon Cognito (buscando la cuenta de usuario en la pestaña Users (Usuarios) y seleccionando el botón Confirm (Confirmar)) o en la CLI (ejecutando el comando admin-confirm-sign-up). Tanto el botón Confirm (Confirmar) como el comando admin-confirm-sign-up usan la API AdminConfirmSignUp para la confirmación. En este punto, la cuenta de usuario se encuentra en estado confirmado y el usuario puede iniciar sesión.
Cálculo de los valores SecretHash Las siguientes API de grupos de usuarios de Amazon Cognito tienen todas un parámetro SecretHash: • ConfirmForgotPassword • ConfirmSignUp
129
Amazon Cognito Guía para desarrolladores Inscripción y confirmación de cuentas de usuario
• ForgotPassword • ResendConfirmationCode • SignUp El valor SecretHash es un código de autenticación de mensajes mediante algoritmos hash con clave (HMAC) codificados en Base64 que se calcula con la clave secreta de un cliente de grupo de usuarios y un nombre de usuario más el ID de cliente en el mensaje. El pseudocódigo siguiente muestra cómo se calcula este valor. En este pseudocódigo, + indica una concatenación, HMAC_SHA256 representa una función que genera un valor HMAC utilizando HmacSHA256 y Base64 representa una función que genera una versión con codificación Base64 de la salida del hash. Base64 ( HMAC_SHA256 ( "Client Secret Key", "Username" + "Client Id" ) )
O bien, puede utilizar el ejemplo de código siguiente en el código de aplicación Java del lado de servidor: import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; public static String calculateSecretHash(String userPoolClientId, String userPoolClientSecret, String userName) { final String HMAC_SHA256_ALGORITHM = "HmacSHA256";
}
SecretKeySpec signingKey = new SecretKeySpec( userPoolClientSecret.getBytes(StandardCharsets.UTF_8), HMAC_SHA256_ALGORITHM); try { Mac mac = Mac.getInstance(HMAC_SHA256_ALGORITHM); mac.init(signingKey); mac.update(userName.getBytes(StandardCharsets.UTF_8)); byte[] rawHmac = mac.doFinal(userPoolClientId.getBytes(StandardCharsets.UTF_8)); return Base64.getEncoder().encodeToString(rawHmac); } catch (Exception e) { throw new RuntimeException("Error while calculating "); }
Confirmación de cuentas de usuario sin verificar el correo electrónico o el número de teléfono El disparador de Lambda de preinscripción se puede utilizar para confirmar automáticamente las cuentas de usuario en el momento de la inscripción, sin que sea necesario un código de confirmación ni verificar el correo electrónico o el número de teléfono. Los usuarios que se confirmen de esta forma pueden iniciar sesión de forma inmediata sin tener que recibir un código. Con este disparador, también puede marcar un correo electrónico o un número de teléfono del usuario como verificado.
Note Aunque este enfoque es práctico para los usuarios cuando están empezando, le recomendamos que compruebe automáticamente al menos el correo electrónico o el número de teléfono. De no ser así, el usuario puede quedarse sin poder recuperar la contraseña si la olvida. Si no exige que el usuario reciba e introduzca un código de confirmación al inscribirse y no verifica automáticamente el correo electrónico y el número de teléfono en el disparador de Lambda de preinscripción, corre el riesgo de no tener una dirección de correo electrónico o un número de teléfono verificados para dicha cuenta de usuario. El usuario puede verificar la dirección de correo electrónico o el
130
Amazon Cognito Guía para desarrolladores Inscripción y confirmación de cuentas de usuario
número de teléfono en otro momento. No obstante, si el usuario se olvida de su contraseña y no cuenta con una dirección de correo electrónico o un número de teléfono verificado, el usuario estará bloqueado fuera de la cuenta, ya que el flujo de contraseña olvidada requiere un correo electrónico o un número de teléfono verificado para enviar un código de verificación al usuario.
Verificación al cambiar los usuarios su correo electrónico o su número de teléfono Cuando un usuario cambia su dirección de correo electrónico o su número de teléfono en la aplicación, dicho atributo queda marcado como no verificado. Si se ha habilitado la verificación automática del atributo que se está actualizando, el servicio envía inmediatamente al usuario un mensaje que contiene un código de verificación, que el usuario debe introducir para verificar el cambio. Puede utilizar un disparador de Lambda para mensajes personalizados para personalizar este mensaje. Para obtener más información, consulte Personalizar flujos de trabajo de grupos de usuarios con disparadores de Lambda (p. 72). Siempre que la dirección de correo electrónico o el número de teléfono del usuario estén sin verificar, su aplicación debe mostrar el estado no verificado y proporcionar un botón o un enlace para que los usuarios verifiquen su correo electrónico o su número de teléfono nuevo.
Procesos de confirmación y verificación para las cuentas de usuario creadas por administradores o desarrolladores Las cuentas de usuario que un administrador o un desarrollador crean ya tienen el estado confirmado, por lo que los usuarios no tienen que introducir ningún código de confirmación. El mensaje de invitación que el servicio Amazon Cognito envía a estos usuarios incluye el nombre de usuario y una contraseña temporal. Se pide al usuario que cambie la contraseña antes de iniciar sesión. Para obtener más información, consulte la Pestaña Message Customizations (p. 134) en Creación de cuentas de usuario como administrador (p. 132) y el disparador para mensajes personalizados en Personalizar flujos de trabajo de grupos de usuarios con disparadores de Lambda (p. 72).
Procesos de confirmación y verificación para las cuentas de usuario importadas Las cuentas de usuario que se crean con la característica de importación del usuario en la Consola de administración de AWS, la CLI o la API (consulte Importación de usuarios en grupos de usuarios desde un archivo CSV (p. 144)) ya tienen el estado confirmado, por lo que los usuarios no tienen que introducir un código de confirmación. No se envía ningún mensaje de invitación. Sin embargo, las cuentas de usuario importadas requieren que los usuarios soliciten primero un código llamando al API ForgotPassword y que después creen una contraseña utilizando el código entregado llamando al API ConfirmForgotPassword antes de iniciar sesión. Para obtener más información, consulte Obligación de que los usuarios importados restablezcan sus contraseñas (p. 153). O bien el correo electrónico o el número de teléfono del usuario deben marcarse como verificados cuando se importa la cuenta de usuario, con lo que no es necesaria ninguna verificación cuando el usuario inicia sesión.
Envío de mensajes de correo electrónico para probar la aplicación Amazon Cognito envía un correo electrónico a los usuarios cuando crean y administran sus cuentas en la aplicación cliente del grupo de usuarios. Si configura el grupo de usuarios de forma que se solicite la verificación del correo electrónico, Amazon Cognito enviará un correo electrónico cuando: • Un usuario se registre.
131
Amazon Cognito Guía para desarrolladores Creación de usuarios como administrador
• Un usuario actualice su dirección de correo electrónico. • Un usuario realice una operación que llame a la acción ForgotPassword de la API. • Usted cree una cuenta de usuario como administrador. En función de la acción que inicie el correo electrónico, el correo electrónico contendrá un código de verificación o una contraseña temporal. Es necesario que los usuarios reciban estos correos electrónicos y comprendan el mensaje. De lo contrario, tal vez no puedan iniciar sesión ni utilizar la aplicación. Para asegurarse de que los correos electrónicos se envían correctamente y de que el mensaje se muestra correctamente, pruebe en la aplicación las acciones que inician el envío de correo electrónico desde Amazon Cognito. Por ejemplo, si utiliza la página de registro de la aplicación o la acción SignUp de la API, puede activar el envío de un correo electrónico registrándose con una dirección de correo electrónico de prueba. Cuando realice este tipo de pruebas, recuerde lo siguiente:
Important Cuando utilice una dirección de correo electrónico para probar acciones que activen el envío de correos electrónicos desde Amazon Cognito, no utilice una dirección de correo electrónico falsa (una que no tenga buzón de correo). Utilice una dirección de correo electrónico real que pueda recibir el correo electrónico de Amazon Cognito y no genere un rebote permanente. Los rebotes permanentes se producen cuando Amazon Cognito no puede entregar el correo electrónico en el buzón del destinatario, lo que siempre sucede si el buzón de correo no existe. Amazon Cognito limita el número de correos electrónicos que las cuentas de AWS pueden enviar y que generan rebotes permanentes de forma persistente. Cuando realice acciones de prueba que inicien correos electrónicos, utilice una de las siguientes direcciones de correo electrónico para impedir que se produzcan rebotes permanentes: • La dirección de una cuenta de correo electrónico de su propiedad y que utilice para realizar pruebas. Si utiliza su propia dirección de correo electrónico, recibirá el correo electrónico enviado por Amazon Cognito. Con este correo electrónico, podrá utilizar el código de verificación para probar la experiencia de registro en la aplicación. Si ha personalizado el mensaje de correo electrónico para su grupo de usuarios, podrá comprobar que el contenido personalizado tiene el aspecto deseado. • La dirección del simulador de bandeja de correo: [emailprotected]. Si utiliza la dirección del simulador, Amazon Cognito enviará el correo electrónico correctamente, pero usted no podrá verlo. Esta opción resulta útil cuando no es necesario utilizar el código de verificación ni comprobar el mensaje de correo electrónico. • La dirección del simulador de bandeja de correo con la incorporación de una etiqueta arbitraria; por ejemplo, [emailprotected] o [emailprotected]. Amazon Cognito enviará correctamente los mensajes a estas direcciones, pero usted no podrá verlos. Esta opción resulta útil si desea probar el proceso de registro agregando varios usuarios de prueba al grupo de usuarios y cada usuario de prueba tiene una dirección de correo electrónico diferente.
Creación de cuentas de usuario como administrador Después de crear el grupo de usuarios, puede crear usuarios con la Consola de administración de AWS, así como el AWS Command Line Interface o la API de Amazon Cognito. Puede crear un perfil para un usuario nuevo de un grupo de usuarios y enviar un mensaje de bienvenida con instrucciones de inscripción al usuario a través de SMS o correo electrónico. Los desarrolladores y los administradores pueden realizar las siguientes tareas: • Crear un perfil de usuario nuevo usando la Consola de administración de AWS o llamando a la API AdminCreateUser. • Especificar la contraseña temporal o permitir que Amazon Cognito genere una automáticamente.
132
Amazon Cognito Guía para desarrolladores Creación de usuarios como administrador
• Especificar si las direcciones de correo electrónico y los números de teléfono proporcionados se marcan como verificados para los nuevos usuarios. • Especificar mensajes personalizados de invitación por correo electrónico y SMS para los usuarios nuevos mediante la Consola de administración de AWS o un disparador de Lambda para mensajes personalizados. Para obtener más información, consulte Personalizar flujos de trabajo de grupos de usuarios con disparadores de Lambda (p. 72). • Especificar si los mensajes de la invitación se envían mediante SMS, correo electrónico o ambos. • Volver a enviar el mensaje de bienvenida a un usuario existente llamando al API AdminCreateUser y especificando RESEND para el parámetro MessageAction.
Note Esta acción no se puede realizar actualmente con la Consola de administración de AWS. • Suprimir el envío del mensaje de invitación cuando se crea el usuario. • Especificar un plazo de vencimiento para la cuenta de usuario (máximo 90 días). • Permitir a los usuarios inscribirse o requerir que solo el administrador añada a los usuarios nuevos.
Flujo de autenticación para usuarios creados por los administradores o los desarrolladores El flujo de autenticación para estos usuarios incluye el paso adicional de enviar la nueva contraseña y proporcionar todos los valores que falten a los atributos obligatorios. Los pasos se indican a continuación; los pasos 5, 6 y 7 son específicos para dicho usuarios. 1.
El usuario empieza el primer inicio de sesión enviando el nombre de usuario y la contraseña que se le hayan proporcionado.
2.
El SDK llama a InitiateAuth(Username, USER_SRP_AUTH).
3.
Amazon Cognito devuelve el desafío PASSWORD_VERIFIER con un bloque de sal y secreto.
4.
El SDK realiza los cálculos de SRP y llama a RespondToAuthChallenge(Username, , PASSWORD_VERIFIER).
5.
Amazon Cognito devuelve el desafío NEW_PASSWORD_REQUIRED junto con los atributos actuales y obligatorios.
6.
Se indica al usuario que especifique una nueva contraseña y todos los valores que faltan para los atributos obligatorios.
7.
El SDK llama a RespondToAuthChallenge(Username, , ).
8.
Si el usuario necesita otro factor para MFA, Amazon Cognito devuelve el desafío MFA por SMS y se envía el código.
9.
Una vez que el usuario haya cambiado correctamente su contraseña y, opcionalmente, haya proporcionado los valores de atributo o completado el MFA, se inicia sesión para el usuario y se emiten los tokens.
Cuando el usuario haya respondido a todos los desafíos, el servicio Amazon Cognito marcará al usuario como confirmado y generará los tokens de ID, acceso y actualización del usuario. Para obtener más información, consulte Uso de tokens con grupos de usuarios (p. 158).
Creación de un usuario nuevo en la Consola de administración de AWS La consola de Amazon Cognito para administrar los grupos de usuarios se ha actualizado para admitir esta característica, tal y como se muestra a continuación. 133
Amazon Cognito Guía para desarrolladores Creación de usuarios como administrador
Pestaña Policies La pestaña Policies (Políticas) tiene estos ajustes relacionados: • Especifique el nivel de seguridad de la contraseña requerida.
• Especifique si se permitirá a los usuarios inscribirse a sí mismos. Esta opción está establecida de forma predeterminada.
• Especifique el plazo (en días) de vencimiento de la cuenta de usuario de las cuentas nuevas. El valor predeterminado es de 7 días, medido a partir del momento en el que se crea la cuenta de usuario. El valor máximo es de 90 días. Tras el vencimiento de la cuenta, el usuario no puede iniciar sesión en la cuenta hasta que el administrador actualice el perfil del usuario.
Note Una vez que el usuario haya iniciado sesión, la cuenta nunca caducará.
Pestaña Message Customizations La pestaña Message Customizations (Personalizaciones de mensajes) contiene plantillas para especificar mensajes de verificación de correo electrónico y mensajes de invitación al usuario personalizados. Para el correo electrónico (mensajes de verificación o mensajes de invitación al usuario), la longitud máxima del mensaje es de 2048 caracteres UTF-8, incluido el código de verificación o la contraseña temporal. Para los SMS, la longitud máxima es de 140 caracteres UTF-8, incluido el código de verificación o la contraseña temporal. Los códigos de verificación son válidos durante 24 horas.
134
Amazon Cognito Guía para desarrolladores Creación de usuarios como administrador
Pestaña Users La pestaña Users (Usuarios), en la pestaña Users and groups (Usuarios y grupos), tiene un botón Create user (Crear usuario).
Cuando elija Create user (Crear usuario), aparecerá un formulario Create user (Crear usuario), que puede utilizar para introducir información acerca del nuevo usuario. Solo es obligatorio el campo Username (Nombre de usuario).
Note En cuanto a las cuentas de usuario que cree mediante el formulario Create user (Crear usuario) de la Consola de administración de AWS, solo los atributos que se muestren en el formulario se pueden establecer en la Consola de administración de AWS. Los demás atributos se deben establecer usando la AWS Command Line Interface o la API de Amazon Cognito, incluso aunque los tenga marcados como obligatorios.
135
Amazon Cognito Guía para desarrolladores Agregar grupos a un grupo de usuarios
Agregar grupos a un grupo de usuarios La admisión de grupos en los grupos de usuarios de Amazon Cognito le permite crear y administrar grupos, añadir usuarios a grupos y eliminar usuarios de grupos. Utilice los grupos para crear recopilaciones de usuarios para administrar sus permisos o representar diferentes tipos de usuarios. Puede asignar un rol de AWS Identity and Access Management (IAM) a un grupo para definir los permisos de los miembros de un grupo. Puede usar grupos para crear un conjunto de usuarios dentro de un grupo de usuarios, cosa que suele hacerse a menudo para establecer los permisos para dichos usuarios. Por ejemplo, puede crear grupos diferentes para los usuarios que son lectores, colaboradores o editores de su sitio web y su aplicación. Usando el rol de IAM asociado a un grupo, también puede configurar permisos diferentes para esos grupos diferentes con el fin de que solo los colaboradores puedan introducir contenido en Amazon S3 y solo los editores puedan publicar contenido mediante una API en Amazon API Gateway. Puede crear y administrar grupos en un grupo de usuarios desde la Consola de administración de AWS, la APIsy la CLI de . Como desarrollador (y con credenciales de AWS), puede crear, leer, actualizar, eliminar y enumerar los grupos de un grupo de usuarios. También puede añadir usuarios y eliminarlos de los grupos. No se aplica ningún cargo adicional por usar grupos dentro de un grupo de usuarios. Consulte Amazon Cognito Precios de para obtener más información. Puede ver esta característica utilizada en la aplicación de SpaceFinder referencia.
Asignación de roles de IAM a grupos Puede utilizar grupos para controlar los permisos de los recursos mediante un rol de IAM. Los roles de IAM incluyen políticas de confianza y políticas de permisos. La política de confianza del rol especifica quién puede utilizar el rol. Las políticas de https://docs.aws.amazon.com/cognito/latest/developerguide/iamroles.html#access-policies permisos especifican las acciones y los recursos a los que pueden acceder los miembros del grupo. Al crear un rol de IAM, configure la política de confianza del rol para permitir que los usuarios del grupo asuman el rol. En las políticas de permisos del rol, especifique los permisos que desea que tenga el grupo. Cuando se crea un grupo en Amazon Cognito, se especifica un rol de IAM proporcionando el ARN. del rol. Cuando los miembros del grupo inician sesión con Amazon Cognito, pueden recibir credenciales temporales de los grupos de identidades. Sus permisos están determinados por el rol de IAM asociado. Los usuarios individuales pueden pertenecer a varios grupos. En su calidad de desarrollador, tiene a disposición las opciones siguientes para elegir automáticamente el rol de IAM cuando un usuario pertenece a varios grupos: • Puede asignar valores de prioridad a cada grupo. Se elegirá el grupo que tenga la mejor prioridad (inferior) y se aplicará el rol de IAM que tenga asociado. • La aplicación también puede elegir entre los roles disponibles cuando solicite credenciales para un usuario a través de un grupo de identidades, especificando un ARN de rol en el AWSGetCredentialsForIdentity parámetro CustomRoleARN . El rol de IAM especificado debe coincidir con un rol que esté disponible para el usuario.
Asignación de valores de prioridad a los grupos Un usuario puede pertenecer a más de un grupo. En el token de ID de un usuario, la notificación cognito:groups contiene la lista de todos los grupos a los que pertenece el usuario. La notificación cognito:roles contiene la lista de los roles correspondientes a los grupos. Dado que un usuario puede pertenecer a más de un grupo, se puede asignar a cada grupo un nivel de prioridad. Se trata de un número que no es negativo y que indica la prioridad del grupo en relación con los
136
Amazon Cognito Guía para desarrolladores Agregar grupos a un grupo de usuarios
demás grupos a los que el usuario pertenece en el grupo de usuarios. Cero es la máxima prioridad. Los grupos con los valores de prioridad más bajos prevalecen sobre los grupos con los valores de prioridad más altos o nulos. Si un usuario pertenece a dos o más grupos, se aplica el grupo cuyo rol de IAM tenga el valor de prioridad más bajo a la notificación cognito:preferred_role del token de ID de usuario. Dos grupos pueden tener la misma prioridad. Si esto ocurre, ningún grupo prevalece sobre el otro. Si dos grupos con el mismo valor de prioridad tienen el mismo ARN de rol, ese rol se utiliza en la notificación cognito:preferred_role en tokens de ID para los usuarios de cada grupo. Si los dos grupos tienen un rol ARNsdiferente, la cognito:preferred_role notificación no se establece en los tokens de ID de los usuarios.
Uso de grupos para controlar los permisos con Amazon API Gateway Puede utilizar los grupos de un grupo de usuarios para controlar los permisos con Amazon API Gateway. Los grupos a los que pertenece un usuario están incluidos en el token de ID proporcionado por un grupo de usuarios cuando el usuario inicia sesión. Puede enviar dichos tokens de ID con solicitudes a Amazon API Gateway, usar una función de Lambda de autorizador personalizado para verificar el token e inspeccionar a qué grupos pertenece el usuario. Consulte esta entrada de blog para ver un ejemplo de uso de tokens de grupos de usuarios con un autorizador Amazon API Gateway personalizado de .
Limitaciones aplicadas a los grupos Los grupos de usuarios están sujetos a las siguientes limitaciones: • El número de grupos que puede crear está limitado por los límites de servicio de Amazon Cognito (p. 353). • Los grupos no pueden estar anidados. • No puede buscar usuarios en un grupo. • No se pueden buscar los grupos por nombre, aunque sí puede obtener una lista de ellos. • Solo se pueden eliminar los grupos que no tienen miembros.
Creación de un grupo nuevo en la Consola de administración de AWS La pestaña Groups (Grupos) de la pestaña Users and groups (Usuarios y grupos) tiene un botón Create group (Crear grupo).
Al elegir Create group (Crear grupo), aparece un formulario Create group (Crear grupo). En este formulario debe especificar la sobre el grupo nuevo. Solo es obligatorio el campo Name (Nombre). Si está integrando un grupo de usuarios con un grupo de identidades, la configuración del rol de IAM determina qué rol se asigna en el token de ID del usuario si el grupo de identidades está configurado para elegir el rol del token. Si no tiene roles definidos, seleccione Create new role (Crear nuevo rol). Si tiene más de un grupo y sus usuarios se pueden asignar a más de un grupo, puede establecer un valor de Precedence (Prioridad) para cada grupo. El valor de prioridad puede ser cualquier número entero que no sea negativo. Cero es la máxima prioridad.
137
Amazon Cognito Guía para desarrolladores Gestión y búsqueda de usuarios
Gestión y búsqueda de cuentas de usuario Una vez que haya creado el grupo de usuarios, puede ver y administrar los usuarios usando la Consola de administración de AWS, la AWS Command Line Interface o la API de Amazon Cognito. En este tema se describe cómo puede ver y buscar usuarios con la Consola de administración de AWS.
Visualización de atributos de los usuarios Existen una serie de operaciones que se pueden realizar en la Consola de administración de AWS: • Puede ver los Pool details (Detalles del grupo) y editar los atributos, las políticas de contraseña, la configuración de MFA, las aplicaciones y los disparadores del grupo de usuarios. Para obtener más información, consulte Referencia de grupos de usuarios (Consola de administración de AWS) (p. 170). • Puede ver los usuarios del grupo de usuarios y explorar para obtener más información. • También puede ver los detalles de un usuario individual del grupo de usuarios. • También puede buscar un usuario en el grupo de usuarios.
Para administrar grupos de usuario con la Consola de administración de AWS 1.
En la página de inicio de Amazon Cognito de la Consola de administración de AWS, elija Manage your user identities (Administrar identidades de usuario).
2.
Elija el grupo de usuarios en la página Your User Pools (Sus grupos de usuarios).
3.
Elija User and Groups (Usuarios y grupos) para ver la información de los usuarios.
4.
Elija un nombre de usuario para ver más información acerca de un usuario individual. Desde esta pantalla, puede realizar cualquiera de las siguientes acciones: • Añadir un usuario al grupo • Reset user password (Restablecer la contraseña del usuario) • Confirm user (Confirmar usuario) • Enable or disable MFA (Activar o desactivar MFA) • Delete user (Eliminar usuario) La acción Reset user password (Restablecer la contraseña del usuario) produce el envío inmediato de un código de confirmación al usuario y deshabilita la contraseña actual de este cambiando el estado del usuario a RESET_REQUIRED. La acción Enable MFA (Habilitar MFA) produce el envío de un código de confirmación al usuario cuando este intenta iniciar sesión. El código de Reset user password (Restablecer la contraseña del usuario) es válido durante una hora. El código de MFA es válido durante 3 minutos. 138
Amazon Cognito Guía para desarrolladores Gestión y búsqueda de usuarios
Búsqueda de atributos de usuario Si ya ha creado un grupo de usuarios, puede realizar búsquedas desde el panel Users (Usuarios) de la Consola de administración de AWS. También puede utilizar la API ListUsers de Amazon Cognito, que acepta un parámetro Filter (Filtro). Puede buscar cualquiera de los siguientes atributos estándar. No se pueden buscar los atributos personalizados. • username (distingue entre mayúsculas y minúsculas) • email • phone_number • name • given_name • family_name • preferred_username • cognito:user_status (denominado Status (Estado) en la consola) (no distingue entre mayúsculas y minúsculas) • status (denominado Enabled (Habilitado) en la consola) (distingue entre mayúsculas y minúsculas) • sub
Búsqueda de usuarios mediante la Consola de administración de AWS Si ya ha creado un grupo de usuarios, puede realizar búsquedas desde el panel Users (Usuarios) de la Consola de administración de AWS. Las búsquedas de la Consola de administración de AWS son siempre búsquedas de prefijo ("comienza con"). Todos los ejemplos siguientes utilizan el mismo grupo de usuarios. Por ejemplo, si desea enumerar todos los usuarios en una lista, deje el campo de búsqueda vacío.
Si desea buscar todos los usuarios confirmados, seleccione Status (Estado) en el menú desplegable. En el campo de búsqueda, escriba la primera letra de la palabra "confirmado".
139
Amazon Cognito Guía para desarrolladores Gestión y búsqueda de usuarios
Tenga en cuenta que algunos valores de atributo distinguen entre mayúsculas y minúsculas, por ejemplo User name (Nombre de usuario).
Búsqueda de usuarios que utilizan la API ListUsers Para buscar usuarios de su aplicación, utilice la API ListUsers de Amazon Cognito. Esta API utiliza los parámetros siguientes: • AttributesToGet: serie de cadenas, donde cada cadena es el nombre de un atributo de usuario que debe devolverse por cada usuario en los resultados de búsquedas. Si la serie de cadenas está vacía, se devuelven todos los atributos. • Filter: una cadena de filtro con la forma "AttributeName Filter-Type "AttributeValue"". Las comillas dentro de la cadena de filtro deben ir precedidas por una barra oblicua inversa (\). Por ejemplo, "family_name = \"Reddy\"". Si la cadena de filtro está vacía, ListUsers devuelve todos los usuarios del grupo de usuarios. • AttributeName: el nombre del atributo que debe buscarse. Solo puede buscar los atributos de uno en uno.
Note Solo puede buscar atributos estándar. No se pueden buscar los atributos personalizados. Esto se debe a que solo se pueden buscar atributos indizados y los atributos personalizados no se pueden indexar. • Filter-Type: para una coincidencia exacta, utilice =; por ejemplo, given_name = "Jon". Para una coincidencia de prefijo ("comienza con"), utilice ^=; por ejemplo, given_name ^= "Jon". • AttributeValue: el valor del atributo que debe asociarse para cada usuario. • Limit: número máximo de usuarios que debe devolverse. • PaginationToken: un token para obtener más resultados de una búsqueda anterior. • UserPoolId: el ID del grupo de usuarios en el que debe realizarse la búsqueda. Todas las búsquedas no distinguen entre mayúsculas y minúsculas. Los resultados de la búsqueda se ordenan según el atributo designado por la cadena AttributeName, en orden ascendente.
Ejemplos de uso de la API ListUsers En el ejemplo siguiente se devuelven todos los usuarios y se incluyen todos los atributos. 140
Amazon Cognito Guía para desarrolladores Recuperación de cuentas de usuario
{
}
"AttributesToGet": [], "Filter": "", "Limit": 10, "UserPoolId": "us-east-1_samplepool"
En el ejemplo siguiente se devuelven todos los usuarios cuyos números de teléfono empiezan por "+1312" y se incluyen todos los atributos.
{
}
"AttributesToGet": [], "Filter": "phone_number ^= \"+1312\"", "Limit": 10, "UserPoolId": "us-east-1_samplepool"
En el ejemplo siguiente se devuelven los 10 primeros usuarios cuyo apellido es "Reddy". Para cada usuario, los resultados de la búsqueda incluyen el nombre del usuario, su número de teléfono y su dirección de correo electrónico. Si hay más de 10 usuarios que coincidan con la búsqueda en el grupo de usuarios, la respuesta incluirá un token de paginación. {
}
"AttributesToGet": [ "given_name", "phone_number", "email" ], "Filter": "family_name = \"Reddy\"", "Limit": 10, "UserPoolId": "us-east-1_samplepool"
Mientras que en el ejemplo anterior se devuelve un token de paginación, en el ejemplo siguiente se devuelven los 10 usuarios siguientes que coincidan con la misma cadena de filtro. {
}
"AttributesToGet": [ "given_name", "phone_number", "email" ], "Filter": "family_name = \"Reddy\"", "Limit": 10, "PaginationToken": "pagination_token_from_previous_search", "UserPoolId": "us-east-1_samplepool"
Recuperación de cuentas de usuario El parámetro AccountRecoverySetting le permite personalizar el método que un usuario puede utilizar para recuperar su contraseña cuando llama a la API ForgotPassword. ForgotPassword envía un código de recuperación a un correo electrónico verificado o a un número de teléfono verificado. Cuando se especifica AccountRecoverySetting, la configuración preferida se elige entre las prioridades definidas por AccountRecoverySetting. Cuando se define AccountRecoverySetting y un usuario tiene la MFA con SMS configurada, el SMS no se puede utilizar como mecanismo de recuperación de la cuenta. La prioridad de esta configuración se
141
Amazon Cognito Guía para desarrolladores Importación de usuarios en un grupo de usuarios
determina con un 1, que es la prioridad más alta. Cognito envía una verificación solo a uno de los métodos especificados. Por ejemplo, admin_only es un valor que se utiliza cuando el administrador no desea que el usuario recupere la cuenta por sí mismo y, en su lugar, requiere que se ponga en contacto con el administrador para restablecerla. No se puede utilizar admin_only con ningún otro mecanismo de recuperación de la cuenta. Si no se especifica AccountRecoverySetting, Amazon Cognito utiliza el mecanismo heredado para determinar el método de recuperación de la contraseña. En este caso, Cognito utiliza primero un teléfono verificado. Si no se encuentra el teléfono verificado del usuario, Cognito retrocede y utiliza el correo electrónico verificado a continuación. Para obtener más información acerca de AccountRecoverySetting, consulte CreateUserPool y UpdateUserPool en la Referencia de la API de Amazon Cognito Identity Provider.
Comportamiento de contraseña olvidada En una hora determinada, permitimos entre 5 y 20 intentos para que un usuario solicite o introduzca un código de restablecimiento de contraseña como parte de las acciones forgot-password (contraseña olvidada) y confirm-forgot-password (confirmar contraseña olvidada). El valor exacto depende de los parámetros de riesgo asociados con las solicitudes. Tenga en cuenta que este comportamiento está sujeto a cambios.
Importación de usuarios en un grupo de usuarios Existen dos formas de importar o migrar usuarios a Grupos de usuarios de Amazon Cognito desde un directorio o una base de datos de usuarios existente. Puede migrar usuarios cuando inician sesión por primera vez mediante Amazon Cognito con un disparador de Lambda para la migración de usuarios. Con este método, los usuarios pueden seguir usando sus contraseñas y no es necesario restablecerlas tras la migración al grupo de usuarios. También puede migrar los usuarios de forma masiva cargando un archivo CSV que contiene los atributos del perfil de usuario de todos los usuarios. En las secciones siguientes se describen estos dos métodos. Temas • Importación de usuarios en grupos de usuarios con un disparador de Lambda para la migración de usuarios (p. 142) • Importación de usuarios en grupos de usuarios desde un archivo CSV (p. 144)
Importación de usuarios en grupos de usuarios con un disparador de Lambda para la migración de usuarios Este método permite una migración óptima de los usuarios desde el directorio de usuarios existente a los grupos de usuarios cuando estos utilizan por primera vez una nueva aplicación compatible con Amazon Cognito, ya sea durante su primer inicio de sesión o durante el proceso para recuperar una contraseña olvidada. Esta migración se realiza mediante una función de Lambda para la migración de usuarios que es necesario configurar en el grupo de usuarios. Para obtener más información sobre este disparador de Lambda, incluidos los parámetros de solicitud y respuesta y código de ejemplo, consulte Parámetros del disparador de Lambda para la migración de usuarios (p. 106). Antes de comenzar el proceso de migración de usuarios, cree una función Lambda para la migración de usuarios en su cuenta de AWS y configure el grupo de usuarios para que utilice el ARN de esta función Lambda como disparador para la migración de usuarios. Añada una política de autorización a la función Lambda para permitir su invocación únicamente al principal de la cuenta de servicio de Amazon Cognito ("cognito-idp.amazonaws.com") y al SourceARN del grupo de usuarios, con el fin de evitar que
142
Amazon Cognito Guía para desarrolladores Importación de usuarios en un grupo de usuarios
cualquier otro grupo de usuarios del cliente de AWS pueda invocar la función Lambda. Para obtener más información, consulte Uso de políticas basadas en recursos para AWS Lambda (políticas de funciones Lambda).
Pasos durante el inicio de sesión 1.
El usuario abre la aplicación e inicia sesión con las pantallas nativas de la interfaz de usuario de inicio de sesión de la aplicación mediante las API de proveedor de identidad de Cognito desde un AWS Mobile SDK o mediante la interfaz de usuario de inicio de sesión alojada proporcionada por Amazon Cognito que se incluye en el SDK de autorización de Amazon Cognito.
2.
La aplicación envía el nombre de usuario y la contraseña a Amazon Cognito. Si la aplicación tiene una interfaz de usuario de inicio de sesión nativa y utiliza el SDK del proveedor de Cognito Identity, la aplicación debe utilizar el flujo USER_PASSWORD_AUTH, en el que el SDK envía la contraseña al servidor (la aplicación no debe utilizar el flujo predeterminado USER_SRP_AUTH, ya que el SDK no envía la contraseña al servidor en el flujo de autenticación SRP). El flujo USER_PASSWORD_AUTH se habilita estableciendo AuthenticationDetails.authenticationType en "USER_PASSWORD".
3.
Amazon Cognito comprueba si el nombre del usuario existe en el grupo de usuarios, incluso como alias para el número de teléfono, el correo electrónico o el preferred_username del usuario. Si el usuario no existe, Amazon Cognito llama a la función Lambda para la migración de usuarios con parámetros que incluyen el nombre de usuario y la contraseña, tal como se detalla en Parámetros del disparador de Lambda para la migración de usuarios (p. 106).
4.
La función de Lambda para la migración de usuarios debe autenticar al usuario en el directorio o la base de datos de usuarios llamando al servicio de inicio de sesión existente, y debe devolver los atributos de usuario que se van a almacenar en el perfil del usuario en el grupo de usuarios. Si desea que los usuarios puedan seguir usando las contraseñas existentes, defina el atributo finalUserStatus = "CONFIRMED" en la respuesta de la función de Lambda. Para saber cuáles son los atributos necesarios para la respuesta, consulte Parámetros del disparador de Lambda para la migración de usuarios (p. 106).
Important No registre el objeto de evento de solicitud completo en el código de la función Lambda para la migración de usuarios (ya que esto incluiría la contraseña en el registro enviado a los registros de CloudWatch) y asegúrese de que limpia los registros para que las contraseñas no se registren. 5.
Amazon Cognito crea el perfil de usuario en el grupo de usuarios y devuelve los tokens al cliente de aplicación.
6.
El cliente de aplicación ya puede continuar con su funcionalidad normal después del inicio de sesión.
Una vez que se haya realizado la migración del usuario, le recomendamos que las aplicaciones móviles nativas utilicen el flujo de inicio de sesión USER_SRP_AUTH. Este autentica al usuario con el protocolo Secure Remote Password (SRP) sin enviar la contraseña a través de la red, y ofrece beneficios de seguridad con respecto al flujo USER_PASSWORD_AUTH utilizado durante la migración. Si se producen errores durante la migración, incluso en el dispositivo del cliente o en la red, la aplicación obtendrá las respuestas de error de la API de Grupos de usuarios de Amazon Cognito y es posible que la cuenta del usuario no se cree en el grupo de usuarios. El usuario deberá volver a intentar iniciar sesión y, en caso de que el error siga repitiéndose, debe intentar restablecer la contraseña utilizando el flujo de recuperación de contraseñas olvidadas de la aplicación. El flujo de recuperación de contraseñas olvidadas funciona de una manera similar, excepto en que no se proporciona ninguna contraseña a la función de Lambda para la migración de usuarios; esta solo busca el usuario en el directorio de usuarios existente y devuelve los atributos que se deben almacenar en el grupo de usuarios. A continuación, Amazon Cognito envía al usuario un código de restablecimiento de contraseña por correo electrónico o SMS, y el usuario puede definir una contraseña nueva en la aplicación. Si la aplicación tiene una interfaz de usuario nativa, debe proporcionar pantallas para el flujo 143
Amazon Cognito Guía para desarrolladores Importación de usuarios en un grupo de usuarios
de recuperación de contraseñas olvidadas. Si la aplicación utiliza la interfaz de usuario alojada de Amazon Cognito, esta proporciona las pantallas de la interfaz de usuario.
Importación de usuarios en grupos de usuarios desde un archivo CSV Puede importar usuarios a un grupo de usuarios de Amazon Cognito. La información de usuario se importa desde un archivo .csv de formato especial. El proceso de importación establece valores para todos los atributos de usuario excepto password (contraseña). No se admite la importación de contraseñas, ya que las prácticas recomendadas de seguridad requieren que las contraseñas no estén disponibles como texto sin formato, y no admitimos la importación de hash. Esto significa que sus usuarios deben cambiar de contraseña la primera vez que inicien sesión. Por lo tanto, los usuarios se encontrarán en el estado RESET_REQUIRED cuando se importen con este método.
Note La fecha de creación de cada usuario es la hora en la que se importó a dicho usuario al grupo de usuarios. La fecha de creación no es uno de los atributos importados. A continuación, indicamos los pasos básicos: 1. Cree un rol de Amazon CloudWatch Logs en la consola de AWS Identity and Access Management (IAM). 2. Cree el archivo .csv de importación de usuarios. 3. Cree y ejecute el trabajo de importación de usuarios. 4. Cargue el archivo .csv de importación de usuarios. 5. Inicie y ejecute el trabajo de importación de usuarios. 6. Utilice CloudWatch para comprobar el registro de eventos. 7. Pida a los usuarios importados que restablezcan sus contraseñas. Temas • Creando el CloudWatch Logs IAM Función (AWS CLI, API) (p. 144) • Creación del archivo .csv de importación de usuarios. (p. 146) • Creación y ejecución de el trabajo de importación del grupo de usuarios de Amazon Cognito (p. 148) • Visualización de los resultados de la importación del grupo de usuarios en la consola de CloudWatch (p. 152) • Obligación de que los usuarios importados restablezcan sus contraseñas (p. 153)
Creando el CloudWatch Logs IAM Función (AWS CLI, API) Si estás utilizando el Amazon Cognito CLI o API, entonces debe crear un CloudWatch IAM rol. En el procedimiento siguiente se describe cómo habilitar Amazon Cognito para registrar información en CloudWatch Logs sobre el trabajo de importación del grupo de usuarios.
Note No es necesario utilizar este procedimiento si utiliza la consola de Amazon Cognito, ya que la consola crea el rol en su lugar.
Para crear el CloudWatch Logs Función IAM para la importación de la mezcla de usuarios (AWS CLI, API) 1.
Inicie sesión en la Consola de administración de AWS y abra la consola de IAM en https:// console.aws.amazon.com/iam/.
144
Amazon Cognito Guía para desarrolladores Importación de usuarios en un grupo de usuarios
2.
En el panel de navegación de la consola de IAM, elija Roles (Funciones).
3.
Para un nuevo puesto, elija Crear función.
4.
Para Select type of trusted entity (Seleccionar tipo de entidad de confianza), elija AWS service (Servicio de AWS).
5.
En Casos de uso comunes, elegir EC2.
6.
Seleccione Next (Siguiente). Permissions (Permisos)
7.
En Adjuntar política de permisos, elegir Crear política para abrir una nueva pestaña de navegador y crear una nueva directiva desde cero.
8.
En la página Create Policy (Crear política), elija la pestaña JSON.
9.
En el JSON copia, copia y pega el siguiente texto como tu política de acceso a roles, reemplazando cualquier texto existente: {
}
"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:PutLogEvents" ], "Resource": [ "arn:aws:logs:REGION:ACCOUNT:log-group:/aws/cognito/*" ] } ]
10. Elija Review policy (Revisar la política). Añada un nombre y una descripción opcional y elija Crear política. Después de crear la política, cierre la pestaña del navegador y vuelva a la pestaña original. 11. En Adjuntar política, elegir Siguiente: Etiquetas 12. (Opcional) En Etiquetas, agregue metadatos al rol introduciendo etiquetas como pares de valor clave. 13. Seleccione Next (Siguiente). Review (Revisar) 14. En Revisión, introduzca un Nombre de función. 15. (Opcional) Introduzca un Descripción de la función. 16. Elija Create role. 17. En el panel de navegación de la consola de IAM, elija Roles (Funciones). 18. En Funciones, seleccione el rol que creó. 19. En Resumen, elegir el Relaciones de confianza. 20. En el Relaciones de confianza pestaña, elegir Editar relación de confianza. 21. Copie y pegue el siguiente texto de relación de confianza en el Documento de política cuadro de texto, reemplazar cualquier texto existente: {
"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "cognito-idp.amazonaws.com"
145
Amazon Cognito Guía para desarrolladores Importación de usuarios en un grupo de usuarios
}
]
}
}, "Action": "sts:AssumeRole"
22. Elija Update Trust Policy. Acaba de crear el rol. 23. Apunte el ARN del rol. Lo necesitará más tarde, cuando cree una tarea de importación.
Creación del archivo .csv de importación de usuarios. Para poder importar sus usuarios existentes a su grupo de usuarios, debe crear un archivo .csv que sirva de información de entrada. Para ello, descargue la información de encabezado del archivo .csv de importación de usuarios y, a continuación, edite el archivo para satisfacer los requisitos de formato indicados en Formato del archivo .csv (p. 147).
Descargar el encabezado de archivo.csv (Consola) 1.
Vaya a la consola de Amazon Cognito, elija Manage User Pools (Administrar grupos de usuarios) y, a continuación, elija el grupo de usuarios al que va a importar los usuarios.
2.
Elija la pestaña Users.
3.
Elija Import users (Importar usuarios).
4.
Elija Download CSV header (Descargar encabezado de CSV) para obtener un archivo .csv que contenga la fila de encabezado que debe incluir en su archivo .csv.
Descargar el encabezado de archivo.csv (AWS CLI) Para obtener una lista de los encabezados correctos, ejecute el siguiente comando CLI, donde USER_POOL_ID es el identificador de la mezcla de usuarios del grupo de usuarios que importará a los usuarios en:
aws cognito-idp get-csv-header --user-pool-id "USER_POOL_ID"
Respuesta de ejemplo {
"CSVHeader": [ "name", "given_name", "family_name", "middle_name", "nickname", "preferred_username", "profile", "picture", "website", "email", "email_verified", "gender", "birthdate", "zoneinfo", "locale", "phone_number", "phone_number_verified",
146
Amazon Cognito Guía para desarrolladores Importación de usuarios en un grupo de usuarios "address", "updated_at", "cognito:mfa_enabled", "cognito:username"
}
], "UserPoolId": "USER_POOL_ID"
Formato del archivo .csv El archivo de encabezado .csv de importación de usuarios descargado tiene este aspecto:
cognito:username,name,given_name,family_name,middle_name,nickname,preferred_username,profile,picture,we
Tendrá que editar el archivo .csv para que incluya este encabezado y los valores de atributo de sus usuarios y que tenga un formado que siga las reglas siguientes.
Note Para obtener más información acerca de los valores de atributos, como el formato adecuado para números de teléfono, consulte Configuración de atributos de grupo de usuarios (p. 171). • La primera línea del archivo es la fila de encabezado descargada que contiene los nombres de los atributos de usuario. • El orden de las columnas del archivo .csv no importa. • Cada línea tras la primera línea contiene los valores de atributo de un usuario. • Todas las columnas del encabezado tienen que estar presentes, pero no es necesario proporcionar valores para cada columna. • Los atributos siguientes son obligatorios. • cognito:username • cognito:mfa_enabled • email_verified o phone_number_verified • email (si email_verified es true) • phone_number (si phone_number_verified es true) • Todos los atributos que ha marcado como obligatorios al crear el grupo de usuarios • El grupo de usuarios debe tener al menos un atributo verificado automáticamente, ya sea email_verified o phone_number_verified. Al menos uno de los atributos verificados automáticamente debe ser true para cada usuario. Si el grupo de usuarios no tiene atributos verificados automáticamente, el trabajo de importación no empezará. Si el grupo de usuarios solo tiene un atributo verificado automáticamente, dicho atributo tiene que verificarse para cada usuario. Por ejemplo, si el grupo de usuarios solo tiene phone_number como un atributo verificado automáticamente, el valor phone_number_verified debe ser true para cada usuario.
Note Para que los usuarios restablezcan sus contraseñas, deben tener un correo electrónico o un número de teléfono verificado. Amazon Cognito envía un mensaje que contiene el código de restablecimiento de la contraseña al correo electrónico o al número de teléfono especificado en el archivo .csv. Si el mensaje se envía al número de teléfono, se envía mediante SMS. • Los valores de atributo que son cadenas no deben estar entre comillas. • Si un valor de atributo contiene una coma, debe poner delante de la coma una barra oblicua inversa (\). Esto se debe a que los campos de un archivo .csv están separadas por comas. • El contenido del archivo .csv debe estar en formato UTF-8 sin marca de orden de bytes. 147
Amazon Cognito Guía para desarrolladores Importación de usuarios en un grupo de usuarios
• El campo cognito:username es obligatorio y debe ser único dentro del grupo de usuarios. Puede ser cualquier cadena Unicode. Sin embargo, no puede contener espacios ni pestañas. • Los valores birthdate, si los hay, deben tener el formato mm/dd/aaaa. Esto significa, por ejemplo, que la fecha de nacimiento 1 de febrero de 1985 debe codificarse como 02/01/1985. • El campo cognito:mfa_enabled es obligatorio. Si ha establecido que la autenticación multifactor (MFA) es obligatoria en su grupo de usuarios, este campo debe ser true para todos los usuarios. Si ha desactivado la autenticación MFA, este campo debe ser false para todos los usuarios. Si ha definido la autenticación MFA como opcional, este campo puede ser true o false, pero no puede estar vacío. • La longitud de línea máxima es de 16.000 caracteres. • El tamaño de archivo .csv máximo es de 100MB. • El número máximo de líneas (usuarios) del archivo es de 500,000, sin incluir el encabezado. • El actualizado_en El valor de campo se espera que sea hora de época en segundos, por ejemplo: 1471453471. • Los espacios en blanco del principio y del final de un valor de atributo se eliminan. Un archivo .csv de importación de usuarios completo de ejemplo tiene el aspecto siguiente:
cognito:username,name,given_name,family_name,middle_name,nickname,preferred_username,profile,picture,we John,,John,Doe,,,,,,,[emailprotected],TRUE,,02/01/1985,,,+12345550100,TRUE,123 Any Street,,FALSE Jane,,Jane,Roe,,,,,,,[emailprotected],TRUE,,01/01/1985,,,+12345550199,TRUE,100 Main Street,,FALSE
Creación y ejecución de el trabajo de importación del grupo de usuarios de Amazon Cognito En esta sección se describe cómo crear y ejecutar el trabajo de importación del grupo de usuarios mediante la consola de Amazon Cognito y la AWS Command Line Interface. Temas • Importación de usuarios desde un archivo.csv (Consola) (p. 148) • Importar usuarios (AWS CLI) (p. 149)
Importación de usuarios desde un archivo.csv (Consola) En el procedimiento siguiente se describe cómo importar a los usuarios desde el archivo .csv.
Para importar usuarios desde el archivo.csv (consola) 1.
Elija Create import job (Crear trabajo de importación).
2.
Escriba un valor para Job name (Nombre de trabajo). Los nombres de trabajos pueden tener letras mayúsculas y minúsculas (a-z, A-Z), números (0-9) y los siguientes caracteres especiales: + = , . @ y -.
3.
Si es la primera vez que crea una tarea de importación de usuarios, la Consola de administración de AWS creará automáticamente un rol de IAM en su nombre. O bien, puede elegir un rol ya existente en la lista IAM Role (Rol de) o dejar que la Consola de administración de AWS cree un rol nuevo para usted.
4.
Elija Upload CSV (Cargar CSV) y seleccione el archivo .csv desde el que va a importar usuarios.
5.
Seleccione Create job (Crear trabajo).
6.
Para iniciar el trabajo, seleccione Start (Iniciar).
148
Amazon Cognito Guía para desarrolladores Importación de usuarios en un grupo de usuarios
Importar usuarios (AWS CLI) Dispone de los comandos de la CLI siguientes para importar usuarios a un grupo de usuarios: • create-user-import-job • get-csv-header • describe-user-import-job • list-user-import-jobs • start-user-import-job • stop-user-import-job Para obtener la lista de opciones de línea de comandos de estos comandos, utilice la opción de línea de comandos help. Por ejemplo: aws cognito-idp get-csv-header help
Creación de una tarea de importación de usuarios Después de crear su archivo.csv, cree un trabajo de importación de usuario ejecutando el siguiente comando CLI, donde JOB_NAME es el nombre que está eligiendo para el trabajo, USER_POOL_ID es el mismo ID de grupo de usuarios que antes, y ROLE_ARN es el papel que ha recibido ARN en Creando el CloudWatch Logs IAM Función (AWS CLI, API) (p. 144): aws cognito-idp create-user-import-job --job-name "JOB_NAME" --user-pool-id "USER_POOL_ID" --cloud-watch-logs-role-arn "ROLE_ARN"
La PRE_SIGNED_URL devuelto en la respuesta es válido durante 15 minutos. Transcurrido ese tiempo, la URL caducará y será preciso crear otra tarea de importación de usuarios para obtener una URL nueva. Respuesta de ejemplo {
}
"UserImportJob": { "Status": "Created", "SkippedUsers": 0, "UserPoolId": "USER_POOL_ID", "ImportedUsers": 0, "JobName": "JOB_NAME", "JobId": "JOB_ID", "PreSignedUrl": "PRE_SIGNED_URL", "CloudWatchLogsRoleArn": "ROLE_ARN", "FailedUsers": 0, "CreationDate": 1470957431.965 }
Valores de estado para una tarea de importación de usuarios En las respuestas a los comandos de importación de usuarios, verá uno de los valores Status siguientes: • "Created" - Se ha creado el trabajo, pero no se ha iniciado. • "Pending" - Estado de transición. El trabajo se ha iniciado, pero todavía no se ha empezado a importar los usuarios. • "InProgress" - El trabajo se ha iniciado y se están importando usuarios.
149
Amazon Cognito Guía para desarrolladores Importación de usuarios en un grupo de usuarios
• "Stopping" - Ha detenido el trabajo, pero el trabajo aún no ha dejado de importar usuarios. • "Stopped" - Ha detenido el trabajo y esta ha dejado de importar usuarios. • "Succeeded" - El trabajo se ha completado correctamente. • "Failed" - El trabajo se ha detenido debido a un error. • "Expired" - Ha creado una tarea, pero no la ha iniciado en un plazo de 24-48 horas. Todos los datos asociados a el trabajo se han eliminado y el trabajo no puede iniciarse.
Carga del archivo .csv Utilice lo siguiente curl para cargar el archivo.csv que contiene los datos de usuario a la URL prefirmada que obtuvo de la respuesta del create-user-import-job comando. curl -v -T "PATH_TO_CSV_FILE" -H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL"
En la salida de este comando, busque la frase "We are completely uploaded and fine". Esta frase indica que el archivo se ha cargado correctamente.
Descripción de una tarea de importación de usuarios Para obtener una descripción del trabajo de importación de usuario, utilice el comando siguiente, donde USER_POOL_ID es su ID de grupo de usuarios, y JOB_ID es el ID de trabajo que se devolvió cuando creó el trabajo de importación del usuario. aws cognito-idp describe-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"
Respuesta de ejemplo {
}
"UserImportJob": { "Status": "Created", "SkippedUsers": 0, "UserPoolId": "USER_POOL_ID", "ImportedUsers": 0, "JobName": "JOB_NAME", "JobId": "JOB_ID", "PreSignedUrl": "PRE_SIGNED_URL", "CloudWatchLogsRoleArn":"ROLE_ARN", "FailedUsers": 0, "CreationDate": 1470957431.965 }
En la salida de muestras anterior, la PRE_SIGNED_URL es la URL que ha cargado el archivo.csv en. La ROLE_ARN es el CloudWatch Logs función ARN que recibió cuando creó el rol.
Visualización de la lista de tareas de importación de usuarios Para visualizar una lista de las tareas de importación de usuarios, ejecute el comando siguiente: aws cognito-idp list-user-import-jobs --user-pool-id "USER_POOL_ID" --max-results 2
Respuesta de ejemplo {
150
Amazon Cognito Guía para desarrolladores Importación de usuarios en un grupo de usuarios "UserImportJobs": [ { "Status": "Created", "SkippedUsers": 0, "UserPoolId": "USER_POOL_ID", "ImportedUsers": 0, "JobName": "JOB_NAME", "JobId": "JOB_ID", "PreSignedUrl":"PRE_SIGNED_URL", "CloudWatchLogsRoleArn":"ROLE_ARN", "FailedUsers": 0, "CreationDate": 1470957431.965 }, { "CompletionDate": 1470954227.701, "StartDate": 1470954226.086, "Status": "Failed", "UserPoolId": "USER_POOL_ID", "ImportedUsers": 0, "SkippedUsers": 0, "JobName": "JOB_NAME", "CompletionMessage": "Too many users have failed or been skipped during the import.", "JobId": "JOB_ID", "PreSignedUrl":"PRE_SIGNED_URL", "CloudWatchLogsRoleArn":"ROLE_ARN", "FailedUsers": 5, "CreationDate": 1470953929.313 } ], "PaginationToken": "PAGINATION_TOKEN"
}
Las tareas se enumeran en orden cronológico desde la última tarea creada hasta la primera. La PAGINATION_TOKEN cadena después del segundo trabajo indica que hay resultados adicionales para este comando de lista. Para publicar la lista de resultados adicionales, utilice la opción --pagination-token de la siguiente manera: aws cognito-idp list-user-import-jobs --user-pool-id "USER_POOL_ID" --max-results 10 -pagination-token "PAGINATION_TOKEN"
Inicio de una tarea de importación de usuarios Para iniciar una tarea de importación de usuarios, ejecute el comando siguiente: aws cognito-idp start-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"
Solo un trabajo de importación puede estar activo a la vez por cuenta. Respuesta de ejemplo {
"UserImportJob": { "Status": "Pending", "StartDate": 1470957851.483, "UserPoolId": "USER_POOL_ID", "ImportedUsers": 0, "SkippedUsers": 0, "JobName": "JOB_NAME", "JobId": "JOB_ID", "PreSignedUrl":"PRE_SIGNED_URL",
151
Amazon Cognito Guía para desarrolladores Importación de usuarios en un grupo de usuarios
}
}
"CloudWatchLogsRoleArn": "ROLE_ARN", "FailedUsers": 0, "CreationDate": 1470957431.965
Detención de una tarea de importación de usuarios Para detener una tarea de importación de usuarios mientras está en curso, ejecute el comando siguiente. Después de detener el trabajo, esta no se puede reiniciar. aws cognito-idp stop-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"
Respuesta de ejemplo {
"UserImportJob": { "CompletionDate": 1470958050.571, "StartDate": 1470958047.797, "Status": "Stopped", "UserPoolId": "USER_POOL_ID", "ImportedUsers": 0, "SkippedUsers": 0, "JobName": "JOB_NAME", "CompletionMessage": "The Import Job was stopped by the developer.", "JobId": "JOB_ID", "PreSignedUrl":"PRE_SIGNED_URL", "CloudWatchLogsRoleArn": "ROLE_ARN", "FailedUsers": 0, "CreationDate": 1470957972.387 }
}
Visualización de los resultados de la importación del grupo de usuarios en la consola de CloudWatch Puede ver los resultados de su tarea de importación en la consola de Amazon CloudWatch. Temas • Visualización de los resultados (p. 152) • Interpretación de los resultados (p. 153)
Visualización de los resultados En los pasos siguientes se describe cómo ver los resultados de la importación del grupo de usuarios.
Para ver los resultados de la importación del grupo de usuarios 1.
Inicie sesión en la Consola de administración de AWS y abra la consola de CloudWatch en https:// console.aws.amazon.com/cloudwatch/.
2.
Seleccione Logs.
3.
Elija el grupo de log de las tareas de importación del grupo de usuarios. El nombre del grupo de log tiene el formato /aws/cognito/userpools/USER_POOL_ID/USER_POOL_NAME.
4.
Elija el log de el trabajo de importación de usuarios que acaba de ejecutar. El nombre de log tiene el formato JOB_ID/JOB_NAME. Los resultados del log remiten a los usuarios por número de línea. No se escriben datos de usuarios en el log. Por cada usuario, se muestra una línea similar a la siguiente:
152
Amazon Cognito Guía para desarrolladores Importación de usuarios en un grupo de usuarios
• [SUCCEEDED] Line Number 5956 - The import succeeded. • [SKIPPED] Line Number 5956 - The user already exists. • [FAILED] Line Number 5956 - The User Record does not set any of the auto verified attributes to true. (Example: email_verified to true).
Interpretación de los resultados Los usuarios que se han importado correctamente tiene el estado establecido en "PasswordReset". En los casos siguientes, el usuario no se importa, pero el trabajo de importación continuará: • Ningún atributo verificado automáticamente se establece en true. • Los datos de usuario no coinciden con el esquema. • El usuario no se ha podido importar debido a un error interno. En los casos siguientes, el trabajo de importación fallará: • El rol de Amazon CloudWatch Logs no se puede asumir, no tiene la política de acceso correcta o se ha eliminado. • El grupo de usuarios se ha eliminado. • Amazon Cognito no puede analizar el archivo .csv.
Obligación de que los usuarios importados restablezcan sus contraseñas La primera vez que un usuario importado inicie sesión, es necesario que dicho usuario introduzca una nueva contraseña de la siguiente manera:
Obligación de que los usuarios importados restablezcan sus contraseñas 1. 2. 3.
El usuario intenta iniciar sesión, proporcionando el nombre de usuario y la contraseña (mediante InitiateAuth). Amazon Cognito devoluciones NotAuthorizedException cuando PreventUserExistenceErrors está habilitado. De lo contrario, devuelve PasswordResetRequiredException. La aplicación debe dirigir al usuario al flujo ForgotPassword, tal como se indica en el procedimiento siguiente: a. b.
La aplicación llama a ForgotPassword(user name). Amazon Cognito envía un código al correo electrónico o al número de teléfono verificado (en función de lo que haya indicado en el archivo .csv de ese usuario) e indica a la aplicación dónde se ha enviado el código en respuesta a la solicitud ForgotPassword.
Note
c. d. e. f.
Para enviar códigos de restablecimiento de la contraseña, es importante que el grupo de usuarios tenga activada la verificación de correo electrónico o de número de teléfono. La aplicación indica al usuario que se ha enviado un código y dónde se ha enviado dicho código, y la aplicación proporciona una interfaz de usuario para introducir el código y una nueva contraseña. El usuario introduce el código y una nueva contraseña en la aplicación. La aplicación llama a ConfirmForgotPassword(code, password) que, si realiza correctamente la operación, establece la nueva contraseña. La aplicación debe dirigir al usuario a una página de inicio de sesión.
153
Amazon Cognito Guía para desarrolladores Configuración de correo electrónico
Configuración de correo electrónico para grupos de usuarios de Amazon Cognito Algunos eventos en la aplicación cliente de su grupo de usuarios pueden provocar que Amazon Cognito envíe un correo electrónico a sus usuarios. Por ejemplo, si configura su grupo de usuarios para que requiera verificación de correo electrónico, Amazon Cognito envía un correo electrónico cuando un usuario se registra en una nueva cuenta en su aplicación o restablece su contraseña. En función de la acción que inicie el correo electrónico, el correo electrónico contendrá un código de verificación o una contraseña temporal. Para administrar la entrega de correo electrónico, puede utilizar cualquiera de las siguientes opciones: • La funcionalidad de correo electrónico predeterminada (p. 154) que está integrada en el servicio de Amazon Cognito. • Su configuración de Amazon SES (p. 154). Esta configuración es reversible. Cuando sea necesario, puede actualizar su grupo de usuarios para cambiar entre ellos.
Funcionalidad de correo electrónico predeterminada Puede permitir que Amazon Cognito administre las entregas de correo electrónico automáticamente utilizando la funcionalidad de correo electrónico predeterminada que incluye el servicio. Cuando utiliza la opción predeterminada, Amazon Cognito solo permite un número limitado de mensajes de correo electrónico al día para su grupo de usuarios. Para obtener información sobre límites específicos, consulte Cuotas en Amazon Cognito (p. 353). En el caso de entornos de producción típicos, el límite de correo electrónico predeterminado está por debajo del volumen de entrega requerido. Para habilitar un mayor volumen de entregas, debe utilizar la configuración de correo electrónico de Amazon SES. Con la opción predeterminada, puede utilizar cualquiera de las siguientes direcciones de correo electrónico como dirección del remitente: • La dirección de correo electrónico predeterminada, que es [emailprotected]. • Una dirección de correo electrónico personalizada de su propiedad. Para poder utilizar su propia dirección de correo electrónico, debe verificarla con Amazon SES y debe conceder permiso a Amazon Cognito para utilizarla.
Amazon SESConfiguración de correo electrónico de Es posible que su aplicación requiera un volumen de entregas superior al disponible con la opción predeterminada. Para habilitar un mayor volumen de entregas, configure su grupo de usuarios para que envíe un correo electrónico a sus usuarios utilizando su configuración de Amazon SES. El uso de su configuración de Amazon SES también proporciona más capacidad para supervisar su actividad de envío de correos electrónicos. Para poder usar su configuración de Amazon SES, debe verificar una o más direcciones de correo electrónico con Amazon SES. Las direcciones de correo electrónico verificadas se utilizan como la dirección de correo electrónico de remitente que se asigna a su grupo de usuarios. A continuación, cuando Amazon Cognito envía un correo electrónico, utiliza su dirección de correo electrónico llamando a Amazon SES en su nombre. Al utilizar su configuración Amazon SES, los límites de entrega de correo electrónico para su grupo de usuarios son los mismos que se aplican a su dirección de correo electrónico verificada de Amazon SES en su cuenta de AWS.
154
Amazon Cognito Guía para desarrolladores Configuración de la cuenta de correo electrónico
Note Las regiones disponibles para Amazon Cognito son us-east-1, us-east-2, us-west-2, eu-west-1, eu-west-2, eu-central-1, ap-northeast-1, ap-northeast-2, ap-south-1, ap-southeast-1, apsoutheast-2 y ca-central-1. Las Amazon SES regiones disponibles son: us-east-1, us-west-2, euwest-1.
Configuración de correo electrónico para el grupo de usuarios Siga los pasos que se indican a continuación para configurar las opciones de correo electrónico para el grupo de usuarios. Según la configuración que desee utilizar, es posible que deba completar los pasos con Amazon SES, AWS Identity and Access Management (IAM) y Amazon Cognito.
Note Los recursos que cree en estos pasos no se pueden compartir entre cuentas de AWS. Por ejemplo, no puede configurar un grupo de usuarios en una cuenta con una dirección de correo electrónico de Amazon SES que esté en otra cuenta. Por lo tanto, si utiliza Amazon Cognito en varias cuentas, recuerde repetir estos pasos en cada una de ellas.
Paso 1: Verificar su dirección de correo electrónico con Amazon SES Antes de configurar su grupo de usuarios, debe verificar una o más direcciones de correo electrónico con Amazon SES si desea realizar cualquiera de las siguientes acciones: • Usar su propia dirección de correo electrónico como dirección de remitente • Usar la configuración de Amazon SES para administrar la entrega de correo electrónico Al verificar su dirección de correo electrónico, confirma que es la suya, lo que ayuda a evitar el uso no autorizado. Para conocer los pasos de este procedimiento, consulte Verificación de una dirección de correo electrónico en la Guía para desarrolladores de Amazon Simple Email Service.
Paso 2: Trasladar la cuenta fuera del entorno de pruebas de Amazon SES Cuando empiece a utilizar por primera vez Amazon SES, su cuenta de AWS se colocará en el entorno de pruebas de Amazon SES. Amazon SES utiliza este entorno para evitar el fraude y el abuso. Si utiliza su configuración de Amazon SES para administrar la entrega de correo electrónico, debe trasladar su cuenta de AWS fuera del entorno de pruebas para que Amazon Cognito pueda enviar un correo electrónico a sus usuarios. Puede omitir este paso si utiliza la funcionalidad de correo electrónico de Amazon Cognito predeterminada. En el entorno de pruebas, Amazon SES impone restricciones sobre cuántos correos electrónicos puede enviar y a dónde puede enviarlos. Puede enviar correos electrónicos solo a direcciones y dominios que haya verificado con Amazon SES, o puede enviarlos a direcciones del simulador de bandeja de correo de Amazon SES. Mientras su cuenta de AWS permanezca en el entorno de pruebas, no utilice su configuración de Amazon SES para aplicaciones que estén en producción. En esta situación, Amazon Cognito no podrá enviar mensajes a las direcciones de correo electrónico de sus usuarios. Consulte en Salir del entorno de pruebas de Amazon SES en la Guía para desarrolladores de Amazon Simple Email Service los pasos para salir del entorno de pruebas.
155
Amazon Cognito Guía para desarrolladores Configuración de la cuenta de correo electrónico
Paso 3: Conceder permisos de correo electrónico a Amazon Cognito Es posible que tenga que conceder permisos específicos a Amazon Cognito para que pueda enviar un correo electrónico a sus usuarios. Los permisos que conceda y el proceso que utilice para concederlos dependerán de si utiliza la funcionalidad de correo electrónico predeterminada o su configuración de Amazon SES.
Para conceder permisos para usar la funcionalidad de correo electrónico predeterminada Si configura su grupo de usuarios para utilizar la funcionalidad de correo electrónico predeterminada, utilice cualquiera de las siguientes direcciones como la dirección de remitente desde la que Amazon Cognito envían los correos electrónicos a sus usuarios: • La dirección predeterminada • Una dirección personalizada, que debe ser una dirección verificada en Amazon SES Si utiliza la dirección de correo electrónico predeterminada, Amazon Cognito no necesita permisos adicionales y puede omitir este paso. Si utiliza una dirección personalizada, Amazon Cognito necesita permisos adicionales para que pueda usar esta dirección con el fin de enviar un correo electrónico a sus usuarios. Estos permisos se conceden mediante una política de autorización de envío, que se asocia a la dirección en Amazon SES. Si utiliza la consola de Amazon Cognito para agregar su dirección personalizada al grupo de usuarios, asocia la política automáticamente. Pero, si configura su grupo de usuarios fuera de la consola, por ejemplo, utilizando la AWS CLI o la API de Amazon Cognito, deberá asociar la política. Para obtener más información, consulte Uso de autorización de envío con Amazon SES en la Guía para desarrolladores de Amazon Simple Email Service.
Example Política de autorización de envío El ejemplo siguiente es una política de autorización de envío que permite a Amazon Cognito enviar correo electrónico utilizando una dirección de correo electrónico verificada de Amazon SES. {
}
"Version": "2008-10-17", "Statement": [ { "Sid": "stmnt1234567891234", "Effect": "Allow", "Principal": { "Service": "cognito-idp.amazonaws.com" }, "Action": [ "ses:SendEmail", "ses:SendRawEmail" ], "Resource": "" } ]
En este ejemplo, el valor "Sid" es una cadena arbitraria que identifica de forma única la declaración. Para obtener más información acerca de la sintaxis de la política, consulte Políticas de autorización de envío de Amazon SES en la Guía para desarrolladores de Amazon Simple Email Service.
156
Amazon Cognito Guía para desarrolladores Configuración de la cuenta de correo electrónico
Para ver más ejemplos, consulte Ejemplos de políticas de autorización de envío de Amazon SES en la Guía para desarrolladores de Amazon Simple Email Service.
Para conceder permiso para usar la configuración de Amazon SES Si configura su grupo de usuarios para utilizar su configuración de Amazon SES, Amazon Cognito necesita permisos adicionales para llamar a Amazon SES en su nombre cuando envía un correo electrónico a sus usuarios. Esta autorización se concede con el servicio de IAM. Al configurar su grupo de usuarios con esta opción, Amazon Cognito crea un rol vinculado al servicio, que es un tipo de rol de IAM, en su cuenta de AWS. Este rol contiene los permisos que permiten a Amazon Cognito obtener acceso a Amazon SES y enviar correo electrónico con su dirección. Para que Amazon Cognito pueda crear este rol, los permisos de IAM que utilice para configurar su grupo de usuarios deben incluir la acción iam:CreateServiceLinkedRole. Para obtener más información acerca de la actualización de permisos en IAM, consulte Cambio de los permisos de un usuario de IAM en la Guía del usuario de IAM. Para obtener más información acerca del rol vinculado al servicio que crea Amazon Cognito, consulte Uso de roles vinculados a servicios en Amazon Cognito (p. 309).
Paso 4: Configurar el nodo grupo de usuarios Realice los siguientes pasos si desea configurar el grupo de usuarios con cualquiera de los siguientes elementos: • Una dirección de remitente personalizada que aparece como el remitente del correo electrónico • Una dirección de destinatario personalizada que recibe los mensajes que sus usuarios envían a su dirección de remitente. • Su configuración de Amazon SES No es necesario que complete este procedimiento si desea utilizar la funcionalidad y la dirección de correo electrónico de Amazon Cognito predeterminadas.
Para configurar su dirección de correo electrónico 1.
Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon Cognito en https:// console.aws.amazon.com/cognito.
2. 3. 4.
Elija Manage User Pools (Administrar grupos de usuarios). En la página Sus grupos de usuarios, seleccione el grupo de usuarios que desee configurar. En el menú de navegación de la izquierda, elija Message customizations (Personalizaciones de mensajes). Si desea utilizar una dirección de remitente personalizada, seleccione Add custom FROM address (Agregar dirección personalizada del remitente) y haga lo siguiente:
5.
a.
6.
En SES region (Región de SES), elija la región que contiene la dirección de correo electrónico verificada. b. En Source ARN (ARN de origen), seleccione la dirección de correo electrónico. La consola de Amazon Cognito solo le permite elegir las direcciones de correo electrónico que ha verificado con Amazon SES en la región seleccionada. c. En FROM email address (Dirección de correo electrónico del remitente) elija su dirección de correo electrónico. Puede proporcionar la dirección de correo electrónico o la dirección de correo electrónico con su nombre. En Do you want to send emails through your Amazon SES Configuration? (¿Desea enviar correos electrónicos a través de su configuración de Amazon SES?), elija Yes - Use Amazon SES (Sí - Usar Amazon SES) o No - Use Cognito (Default) (No - Usar Cognito [Predeterminado]).
157
Amazon Cognito Guía para desarrolladores Uso de tokens
Si decide utilizar Amazon SES, Amazon Cognito creará un rol vinculado a servicio después de guardar los cambios. 7.
Si desea utilizar una dirección personalizada del destinatario, seleccione Add custom REPLY-TO address (Agregar dirección personalizada del destinatario). A continuación, especifique la dirección de correo electrónico en la que desea recibir los mensajes que sus usuarios envían a su dirección de remitente.
8.
Cuando termine de configurar las opciones de su cuenta de correo electrónico, seleccione Save changes (Guardar modificaciones).
La página Message customizations (Personalizaciones de mensaje) también proporciona las opciones para personalizar sus mensajes de verificación (p. 182) y de invitación (p. 183).
Uso de tokens con grupos de usuarios Después de una autenticación correcta, Amazon Cognito devuelve tokens de grupos de usuarios a la aplicación. Puede utilizar los tokens para conceder a los usuarios acceso a los recursos del lado del servidor que le pertenecen o a Amazon API Gateway. O puede cambiarlos por AWS para acceder a otras AWS servicios de. Consulte Situaciones de Amazon Cognito habituales (p. 6).
La gestión y administración de los tokens de grupos de usuarios para la aplicación web o móvil se realiza en el lado del cliente por medio de los SDK de Amazon Cognito. Para obtener información sobre los SDK y código de muestra para JavaScript, Android e iOS, consulte SDK de grupos de usuarios de Amazon Cognito. Muchas bibliotecas buenas están disponibles para descodificar y verificar un JSON Web Token (JWT). Estas bibliotecas pueden ayudar si necesita procesar manualmente tokens para el procesamiento de la API del lado del servidor o si utiliza otros lenguajes de programación. Consulte la lista de bibliotecas de OpenID Foundation para trabajar con tokens JWT. Los grupos de usuarios de Amazon Cognito implementan tokens de ID, acceso y actualización de acuerdo con el estándar abierto OpenID Connect (OIDC): • El El token de ID contiene reclamaciones sobre la identidad del usuario autenticado, como namede email, y phone_number. • El token de acceso contiene ámbitos y grupos y se utiliza para conceder acceso a los recursos autorizados. • El actualizar token contiene la información necesaria para obtener un nuevo ID o token de acceso.
Important Se recomienda encarecidamente que proteja todos los tokens en tránsito y almacenamiento en el contexto de la aplicación. Para obtener más información sobre OIDC consulte la especificación OpenID Connect (OIDC). Temas • Uso del token de ID (p. 159) • Uso del token de acceso (p. 160) • Uso del token de actualización (p. 162) • Revocación de todos los tokens de un usuario (p. 163)
158
Amazon Cognito Guía para desarrolladores Uso del token de ID
• Verificación de un JSON Web Token (p. 163)
Uso del token de ID El token de ID es un Clave web JSON (JWT) que contiene notificaciones sobre la identidad del usuario autenticado, como namede email, y phone_number. Puede utilizar esta información de identidad dentro de la aplicación. El token de ID también se puede utilizar para autenticar usuarios en sus servidores de recursos o aplicaciones de servidor. También puede utilizar un token de ID fuera de la aplicación con sus API web. En esos casos, debe verificar la firma del token de ID para poder confiar en cualquier notificación dentro del token de ID. [EMPTY] Verificación de un JSON Web Token (p. 163) Puede establecer el vencimiento del token de ID en cualquier valor entre 5 minutos y 1 día. Este valor se puede establecer por cliente de aplicación.
Important Si utiliza la interfaz de usuario alojada y los tokens de configuración de menos de una hora, el usuario final podrá obtener nuevos tokens en función de su cookie de sesión, que actualmente se ha corregido en una hora.
Encabezado del token de ID El encabezado contiene dos bloques de información: el ID de clave (kid) y el algoritmo (alg). { "kid" : "1234example=" "alg" : "RS256", }
ID de clave (kid) El kid El parámetro es una sugerencia que indica qué clave se utilizó para proteger la firma web JSON (JWS) del token. Para obtener más información sobre el parámetro kid, consulte Key Identifier (kid) Header Parameter. Algoritmo (alg) El alg El parámetro representa el algoritmo criptográfico que se utiliza para proteger el token de ID. Los grupos de usuarios usan un algoritmo criptográfico RS256, que es una firma RSA con SHA-256. Para obtener más información acerca de la alg parámetro, consulte Parámetro de encabezado de algoritmo (alg).
Carga del token de ID Esta es una carga de muestra de un token de ID. Contiene notificaciones sobre el usuario autenticado. Para obtener más información sobre las notificaciones estándar de OIDC, consulte las notificaciones estándar de OIDC. { "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "aud": "xxxxxxxxxxxxexample", "email_verified": true, "token_use": "id", "auth_time": 1500009400, "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example", "cognito:username": "janedoe", "exp": 1500013000,
159
Amazon Cognito Guía para desarrolladores Uso del token de acceso "given_name": "Jane", "iat": 1500009400, "email": "[emailprotected]" }
Asunto (sub) La notificación sub es un identificador único (UUID) para el usuario autenticado. No es el mismo que el nombre de usuario que puede no ser único. Emisor (iss) La notificación iss tiene el formato siguiente: https://cognito-idp.{region}.amazonaws.com/{userPoolId}. Por ejemplo, supongamos que ha creado un grupo de usuarios en la us-east-1 La región y su ID de grupo de usuarios es u123456. En ese caso, el token de ID que se emite para los usuarios de su grupo de usuarios tiene lo siguiente: iss valor de reclamación: https://cognito-idp.us-east-1.amazonaws.com/u123456. Público (aud) El aud la reclamación contiene el client_id que se utiliza en el usuario autenticado. Uso del token (token_use) La notificación The token_use: describe el objetivo para el que se creó el token. El valor es siempre id en el caso de un token de ID. Hora de autenticación (auth_time) La notificación auth_time contiene el momento en el que se produjo la autenticación. Su valor es un número JSON que representa el número de segundos desde 1970-01T0:0:0Z medido en formato UTC. Para las actualizaciones, representa el momento de la autenticación original, no el momento en que se emitió el token. El token de ID puede contener reclamaciones estándar de OpenID Connect (OIDC) que se definen en Reclamaciones estándar OIDC. También puede contener atributos personalizados que se definen en el grupo de usuarios.
Note Los atributos personalizados de grupos de usuarios siempre llevan el prefijo custom:.
Firma del token de ID La firma del token de ID se calcula en función del encabezado y la carga del token JWT. Cuando se utiliza fuera de una aplicación en las API web, se debe verificar siempre esta firma para poder aceptar el token. Consulte Verificación de un JSON Web Token (p. 163).
Uso del token de acceso El token de acceso de grupo de usuarios contiene notificaciones acerca del usuario autenticado, una lista de los grupos de usuarios y una lista de ámbitos. El objetivo del token de acceso es autorizar las operaciones de la API en el contexto del usuario en el grupo de usuarios. Por ejemplo, puede utilizar el token de acceso para conceder acceso a sus usuarios para añadir, cambiar o eliminar atributos de usuarios. También puede utilizar el token de acceso para tomar decisiones de control de acceso y autorizar operaciones para los usuarios en función de los ámbitos o grupos de.
160
Amazon Cognito Guía para desarrolladores Uso del token de acceso
El token de acceso se representa como un JSON Web Token (JWT). El encabezado del token de acceso tiene la misma estructura que el token de ID. Sin embargo, el ID de clave (kid) es diferente porque se utilizan diferentes claves para firmar tokens de ID y tokens de acceso. Al igual que ocurre con el token de ID, primero debe verificar la firma del token de acceso en las API web para poder confiar en sus notificaciones. [EMPTY] Verificación de un JSON Web Token (p. 163) Puede establecer el vencimiento del token de acceso en cualquier valor entre 5 minutos y 1 día. Este valor se puede establecer por cliente de aplicación.
Important Para los tokens de acceso e ID, no especifique un mínimo de menos de una hora. Amazon Cognito HostedUI utiliza cookies que son válidas durante una hora; si introduce un mínimo de menos de una hora, no obtendrá un menor tiempo de caducidad.
Encabezado del token de acceso El encabezado contiene dos bloques de información: el ID de clave (kid) y el algoritmo (alg). { "kid" : "1234example=" "alg" : "RS256", }
ID de clave (kid) El parámetro kid es una pista que indica la clave que se ha utilizado para proteger la firma web JSON (JWS) del token. Para obtener más información acerca de la kid , consulte el parámetro Parámetro de encabezado del identificador de clave (kid). Algoritmo (alg) El alg El parámetro representa el algoritmo criptográfico que se utilizó para proteger el token de acceso. Los grupos de usuarios usan un algoritmo criptográfico RS256, que es una firma RSA con SHA-256. Para obtener más información acerca de la alg parámetro, consulte Parámetro de encabezado de algoritmo (alg).
Carga del token de acceso Esta es una carga de muestra de un token de acceso. Para obtener más información, consulte JWT Claims. {
"sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "device_key": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "cognito:groups": [ "admin" ], "token_use": "access", "scope": "aws.cognito.signin.user.admin", "auth_time": 1562190524, "iss": "https://cognito-idp.us-west-2.amazonaws.com/us-west-2_example", "exp": 1562194124, "iat": 1562190524, "jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "client_id": "57cbishk4j24pabc1234567890", "username": "[emailprotected]"
161
Amazon Cognito Guía para desarrolladores Uso del token de actualización }
Asunto (sub) La notificación sub es un identificador único (UUID) para el usuario autenticado. No es el mismo que el nombre de usuario, que puede no ser único. Amazon Cognito grupos (cognito:groups) El cognito:groups La reclamación de es una lista de grupos a los que pertenece el usuario. Uso del token (token_use) La notificación token_use describe el objetivo para el que se creó el token. El valor es siempre access en el caso de un token de acceso. Ámbito (scope) El scope La reclamación de es una lista de ámbitos de Oauth 2.0 que definen el acceso que proporciona el token. Hora de autenticación (auth_time) La notificación auth_time contiene el momento en el que se produjo la autenticación. Su valor es un número JSON que representa el número de segundos desde 1970-01-01T0:0:0Z medido en formato UTC. Para las actualizaciones, representa el momento de la autenticación original, no el momento en que se emitió el token. Emisor (iss) La notificación iss tiene el formato siguiente: https://cognito-idp.{region}.amazonaws.com/{userPoolId}.
Firma del token de acceso La firma del token de acceso se calcula en función del encabezado y la carga del token JWT. Cuando se utiliza fuera de una aplicación en las API web, se debe verificar siempre esta firma para poder aceptar el token. Consulte Verificación de un JSON Web Token (p. 163).
Uso del token de actualización Puede utilizar el token de actualización para recuperar tokens de ID y de acceso nuevos. De forma predeterminada, el token de actualización caduca 30 días después de que el usuario de la aplicación inicie sesión en el grupo de usuarios. Al crear una aplicación para el grupo de usuarios, puede establecer el vencimiento del token de actualización de la aplicación en cualquier valor entre 60 minutos y 10 años. El Mobile SDK for iOS y SDK de Mobile para Android actualice automáticamente su ID y tokens de acceso si hay un token de actualización válido (no caducado) presente. El ID y los tokens de acceso tienen una validez restante mínima de 5 minutos. Si el token de actualización ha caducado, el usuario de la aplicación debe volver a autenticarse iniciando sesión de nuevo en el grupo de usuarios. Si el mínimo para el token de acceso y el token de ID se establece en 5 minutos y utiliza el SDK, el token de actualización actualizará continuamente. Para ver el comportamiento esperado, establezca un mínimo de 7 minutos en lugar de 5 minutos.
Note El SDK de Mobile para Android ofrece la opción de cambiar el periodo de validez mínimo de los tokens de ID y de acceso a un valor comprendido entre 0y 30minutos. Consulte la sección setRefreshThreshold() método de ConfigClienteProveedorIdentidadCognito en el SDK de AWS Mobile para Android Referencia de la API de.
162
Amazon Cognito Guía para desarrolladores Revocación de todos los tokens de un usuario
La propia cuenta de usuario nunca caduca, siempre que el usuario haya iniciado sesión al menos una vez antes de la UnusedAccountValidityDays límite de tiempo para nuevas cuentas. Si desea utilizar el token de actualización para obtener nuevos tokens de ID y de acceso con la API de grupos de usuarios, emplee los métodos AdminInitiateAuth o InitiateAuth. [EMPTY] REFRESH_TOKEN_AUTH para AuthFlow Parámetro. Los parámetros de autorización, AuthParametersson un mapa clave-valor donde la clave es "REFRESH_TOKEN" y el valor es el token de actualización real. Amazon Cognito responde con un nuevo ID y tokens de acceso.
Revocación de todos los tokens de un usuario Los usuarios pueden cerrar sesión en todos los dispositivos en los que están conectados actualmente cuando revoca todos los tokens del usuario mediante la GlobalSignOut y AdminUserGlobalSignOut Operaciones de la API de. Una vez que se ha cerrado la sesión del usuario, ocurre lo siguiente: • El token de actualización del usuario no se podrá utilizar para obtener nuevos tokens para el usuario. • El token de acceso del usuario no se puede utilizar para el servicio de grupos de usuarios. • El usuario deberá volver a autenticarse para obtener tokens nuevos. Una aplicación puede usar la API GlobalSignOut para que los usuarios individuales puedan cerrar sesión ellos mismos en todos los dispositivos. Por lo general, la aplicación muestra esta opción como una opción; por ejemplo, Sign out from all devices (Cerrar sesión en todos los dispositivos). La aplicación debe llamar a este método usando un token de acceso del usuario válido, que no haya caducado y que no se haya revocado. Este método no se puede usar para permitir que un usuario cierre la sesión de otro usuario. Una aplicación de administrador puede usar la API AdminUserGlobalSignOut para que los administradores puedan cerrar la sesión de un usuario en todos los dispositivos. La aplicación de administrador debe llamar a este método con AWS Las credenciales de desarrollador de y pasan el ID del grupo de usuarios y el nombre de usuario del usuario como parámetros. La API AdminUserGlobalSignOut puede cerrar la sesión de cualquier usuario del grupo de usuarios.
Verificación de un JSON Web Token Estos pasos describen cómo verificar un JSON Web Token (JWT) de grupo de usuarios. Temas • Prerequisites (p. 163) • Paso 1. Confirmar la estructura del JWT (p. 164) • Paso 2. Validar la firma JWT (p. 164) • Paso 3. Comprobar las notificaciones (p. 165)
Prerequisites Las tareas de esta sección pueden estar ya gestionadas por su biblioteca, SDK o marco de software. Por ejemplo, la gestión y gestión de tokens de grupos de usuarios se proporcionan en el lado del cliente a través de la Amazon Cognito Los SDK de. Del mismo modo, el Mobile SDK for iOS y SDK de Mobile para Android actualice automáticamente su ID y tokens de acceso si se cumplen dos condiciones: Debe presentar un token de actualización válido (no caducado) y los tokens de ID y acceso deben tener una validez restante mínima de 5 minutos. Para obtener información sobre los SDK y código de muestra para JavaScript, Android e iOS, consulte SDK de grupos de usuarios de Amazon Cognito. Muchas bibliotecas buenas están disponibles para descodificar y verificar un JSON Web Token (JWT). Estas bibliotecas pueden ayudar si necesita procesar manualmente tokens para el procesamiento de la
163
Amazon Cognito Guía para desarrolladores Verificación de un JSON Web Token
API del lado del servidor o si utiliza otros lenguajes de programación. Consulte la lista de bibliotecas de OpenID Foundation para trabajar con tokens JWT.
Paso 1. Confirmar la estructura del JWT Un JSON Web Token (JWT) incluye tres secciones: 1. Header 2. Carga 3. Signature
11111111111.22222222222.33333333333 Estas secciones están codificadas como cadenas base64url y están separadas por caracteres de punto (.). Si su JWT no se ajusta a esta estructura, considere que no es válida y no la acepte.
Paso 2. Validar la firma JWT La firma JWT es una combinación hash del encabezado y la carga. Amazon Cognito genera dos pares de claves criptográficas RSA para cada grupo de usuarios. Una de las claves privadas se utiliza para firmar el token.
Para verificar la firma de un token JWT 1.
Descodifique el token de ID. Puede utilizar AWS Lambda para descodificar los JWT de grupo de usuarios. Para obtener más información, consulte Descodificar y verificar Amazon Cognito Tokens de JWT que utilizan Lambda. OpenID Foundation también mantiene una lista de bibliotecas para trabajar con tokens JWT.
2.
Compare el ID de clave local (kid) al niño público. a.
Descargue y almacene la JSON Web Key (JWK) pública correspondiente del grupo de usuarios. Está disponible como parte de un JSON Web Key Set (JWKS). Puede localizarlo en https:// cognito-idp.{región}.amazonaws.com/{userPoolId}/.well-known/jwks.json. Para obtener más información sobre los conjuntos JWK y JWK, consulte JSON Web Key (JWK).
Note Este paso solo se ejecuta una vez para que las API web puedan procesar los tokens. Ahora puede ejecutar los siguientes pasos cada vez que el token de ID o el de acceso se usen con las API web. Esto es una muestra jwks.json archivo: {
"keys": [{ "kid": "1234example=", "alg": "RS256", "kty": "RSA", "e": "AQAB", "n": "1234567890", "use": "sig" }, {
164
Amazon Cognito Guía para desarrolladores Verificación de un JSON Web Token
}
"kid": "5678example=", "alg": "RS256", "kty": "RSA", "e": "AQAB", "n": "987654321", "use": "sig" }]
ID de clave (kid) El kid es una sugerencia que indica qué clave se utilizó para proteger la firma web JSON (JWS) del token. Algoritmo (alg) El parámetro de encabezado alg representa el algoritmo criptográfico que se utiliza para proteger el token de ID. Los grupos de usuarios usan un algoritmo criptográfico RS256, que es una firma RSA con SHA-256. Para obtener más información acerca de RSA, consulte RSA Cryptography. Tipo de clave (kty) El parámetro kty identifica la familia de algoritmos criptográficos que se utilizan con la clave, como "RSA" en este ejemplo. exponente de RSA (e) El parámetro e contiene el valor del exponente de la clave pública RSA. Se representa como un valor codificado en Base64urlUInt. del módulo RSA (n) El parámetro n contiene el valor del módulo de la clave pública RSA. Se representa como un valor codificado en Base64urlUInt. Usar (use)
b. 3.
El parámetro use describe el uso previsto de la clave pública. Para este ejemplo, el use valor sig representa la firma. Buscar la clave web JSON pública para un kid que coincida con el kid de su JWT.
Utilice la clave pública para verificar la firma por medio de la biblioteca JWT. Es posible que tenga que convertir primero la JWK al formato PEM. Este ejemplo emplea el JWT y la JWK, y utiliza la biblioteca Node.js jsonwebtoken para verificar la firma JWT: Node.js
var jwt = require('jsonwebtoken'); var jwkToPem = require('jwk-to-pem'); var pem = jwkToPem(jwk); jwt.verify(token, pem, { algorithms: ['RS256'] }, function(err, decodedToken) { });
Paso 3. Comprobar las notificaciones Para comprobar las notificaciones JWT 1. 2.
Verifique que el token no ha caducado. El público (aud) debe coincidir con el ID de cliente de aplicación que se creó en el Amazon Cognito del grupo de usuarios de.
165
Amazon Cognito Guía para desarrolladores Acceso a los recursos después del inicio de sesión
3.
La notificación de emisor (iss) debería coincidir con el grupo de usuarios. Por ejemplo, un grupo de usuarios creado en la us-east-1 La región tendrá lo siguiente: iss valor: https://cognito-idp.us-east-1.amazonaws.com/.
4.
Compruebe la notificación token_use. • Si solo acepta el token de acceso en la API web, su valor debe ser access. • Si solo usa el token de ID, su valor debe ser id. • Si utiliza tokens de ID y de acceso, la notificación token_use debe ser id o access.
Ahora puede confiar en las notificaciones del token.
Acceso a los recursos después de una autenticación correcta con el grupo de usuarios Los usuarios de la aplicación pueden iniciar sesión directamente a través de un grupo de usuarios o pueden federarse a través de un proveedor de identidades (IdP) externo. El grupo de usuarios administra la sobrecarga que conlleva el tratamiento de los tokens que se devuelven desde el inicio de sesión de redes sociales mediante Facebook, Google, Amazon y Apple, así como de los IdP de OpenID Connect (OIDC) y SAML. Para obtener más información, consulte Uso de tokens con grupos de usuarios (p. 158). Tras una autenticación correcta, la aplicación recibirá los tokens del grupo de usuarios desde Amazon Cognito. Puede utilizar estos tokens para recuperar las credenciales de AWS que permitan a la aplicación obtener acceso a otros servicios de AWS, o podría elegir utilizarlos para controlar el acceso a sus propios recursos del lado del servidor o a Amazon API Gateway. Para obtener más información, consulte Flujo de autenticación de los grupos de usuarios (p. 314) y Uso de tokens con grupos de usuarios (p. 158).
Temas • Acceso a los recursos del lado del servidor después del inicio de sesión (p. 7) • Acceso a los recursos con API Gateway y Lambda después del inicio de sesión (p. 167) • Acceso a los servicios de AWS utilizando un grupo de identidades después del inicio de sesión (p. 168)
Acceso a los recursos del lado del servidor después del inicio de sesión Tras una autenticación correcta, la aplicación web o móvil recibirá tokens de grupos de usuarios desde Amazon Cognito. Puede utilizar los tokens para controlar el acceso a los recursos del lado del servidor. También puede crear conjuntos de grupos de usuarios para administrar permisos y representar diferentes tipos de usuarios. Para obtener más información sobre el uso de grupos para controlar el acceso a los recursos;, consulte Agregar grupos a un grupo de usuarios (p. 136). 166
Amazon Cognito Guía para desarrolladores Acceso a recursos con API Gateway y Lambda
Una vez que haya configurado un dominio para el grupo de usuarios, Amazon Cognito aprovisiona una interfaz de usuario web alojada que le permite agregar páginas de inscripción e inicio de sesión a la aplicación. Con esta base de OAuth 2.0, puede crear su propio servidor de recursos y permitir que los usuarios obtengan acceso a los recursos protegidos. Para obtener más información, consulte Definir servidores de recursos para el grupo de usuarios (p. 45). Para obtener más información sobre la autenticación de grupos de usuarios, consulte Flujo de autenticación de los grupos de usuarios (p. 314) y Uso de tokens con grupos de usuarios (p. 158).
Acceso a los recursos con API Gateway y Lambda después del inicio de sesión Puede permitir que los usuarios obtengan acceso a la API a través de API Gateway. API Gateway valida los tokens a partir de una correcta autenticación de grupos de usuarios y los utiliza para conceder acceso a sus usuarios a los recursos incluidas las funciones Lambda o su propia API.
Puede utilizar grupos en un grupo de usuarios para controlar permisos con API Gateway mediante el mapeo de pertenencia a grupo a roles de IAM. Los grupos a los que pertenece un usuario están incluidos en el token de ID proporcionado por un grupo de usuarios cuando el usuario de aplicación web o móvil inicia sesión. Para obtener más información acerca de los conjuntos de grupos de usuarios, consulte Agregar grupos a un grupo de usuarios (p. 136). Puede enviar sus tokens de grupo de usuarios con una solicitud a API Gateway para la verificación por medio de una función Lambda de autorizador de Amazon Cognito. Para obtener más información acerca de API Gateway, consulte Uso de API Gateway con Grupos de usuarios de Amazon Cognito.
167
Amazon Cognito Guía para desarrolladores Acceso a los recursos de AWS utilizando un grupo de identidades
Acceso a los servicios de AWS utilizando un grupo de identidades después del inicio de sesión Puede permitir a los usuarios que inicien sesión con un grupo de usuarios y, a continuación, accedan a los servicios de AWS con un grupo de identidades. Tras una autenticación correcta, la aplicación web o móvil recibirá tokens de grupos de usuarios desde Amazon Cognito. Puede utilizar dichos tokens para recuperar las credenciales de AWS que permitan a la aplicación obtener acceso a otros servicios de AWS. Para obtener más información, consulte Introducción a grupos de identidades de Amazon Cognito (identidades federadas) (p. 199).
Para obtener más información sobre el uso de grupos de identidades junto con conjuntos de grupos de usuarios para controlar el acceso a los recursos de AWS, consulte Agregar grupos a un grupo de usuarios (p. 136) y Control de acceso basado en roles (p. 221). Consulte también Conceptos de grupos de identidades (identidades federadas) (p. 206) para obtener más información sobre los grupos de identidades y AWS Identity and Access Management.
Configuración de un grupo de usuarios con la Consola de administración de AWS Cree un grupo de usuarios de Amazon Cognito y anote los valores de User Pool ID (ID de grupo de usuarios) y App Client ID (ID de cliente de aplicación) de cada una de sus aplicaciones cliente. Para obtener más información acerca de la creación de grupos de usuarios, consulte Introducción a los grupos de usuarios (p. 18).
Configuración de un grupo de identidades con la Consola de administración de AWS En el procedimiento siguiente se describe cómo utilizar la Consola de administración de AWS para integrar un grupo de identidades con uno o varios grupos de usuarios y aplicaciones cliente.
Para configurar el grupo de identidades 1.
Abra la consola de Amazon Cognito.
168
Amazon Cognito Guía para desarrolladores Acceso a los recursos de AWS utilizando un grupo de identidades
2.
Seleccione Manage Identity Pools (Administrar grupos de identidades).
3.
Elija el nombre del grupo de identidades para el que desee habilitar grupos de usuarios de Amazon Cognito como proveedor.
4.
En la página Dashboard (Panel), elija Edit identity pool (Editar grupo de identidades).
5.
Expanda la sección Authentication providers.
6.
Elija Cognito.
7.
Escriba un valor para User Pool ID (ID de grupo de identidades).
8.
Escriba un valor para App Client ID (ID de cliente de aplicación). Tiene que ser el mismo ID de aplicación de cliente que recibió al crear la aplicación en la sección Your User Pools (Sus grupos de usuarios) de la Consola de administración de AWS para Amazon Cognito.
9.
Si tiene más aplicaciones o grupos de usuarios, seleccione Add Another Provider (Añadir otro proveedor) y escriba el User Pool ID (ID de grupo de usuarios) y App Client ID (ID de cliente de aplicación) para cada aplicación de cada grupo de usuarios.
10. Cuando no haya más aplicaciones o grupos de usuarios que desee añadir, elija Save Changes (Guardar cambios). Si todo funciona correctamente, verá Changes saved successfully (Cambios guardados correctamente) en la página Dashboard (Panel).
Integración de un grupo de usuarios con un grupo de identidades Una vez que el usuario de la aplicación esté autenticado, añada el token de identidad de dicho usuario en la asignación de inicios de sesión en el proveedor de credenciales. El nombre del proveedor dependerá del ID de grupo de usuarios de Amazon Cognito. Tendrá la estructura siguiente: cognito-idp..amazonaws.com/
El valor de será el mismo que el de la región que figura en User Pool ID (ID de grupo de usuarios). Por ejemplo, cognito-idp.us-east-1.amazonaws.com/us-east-1_123456789. JavaScript var cognitoUser = userPool.getCurrentUser(); if (cognitoUser != null) { cognitoUser.getSession(function(err, result) { if (result) { console.log('You are now logged in.'); // Add the User's Id Token to the Cognito credentials login map. AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'YOUR_IDENTITY_POOL_ID', Logins: { 'cognito-idp..amazonaws.com/': result.getIdToken().getJwtToken() } }); } });
}
Android cognitoUser.getSessionInBackground(new AuthenticationHandler() { @Override
169
Amazon Cognito Guía para desarrolladores Referencia de la consola de grupos de usuarios public void onSuccess(CognitoUserSession session) { String idToken = session.getIdToken().getJWTToken(); Map logins = new HashMap(); logins.put("cognito-idp..amazonaws.com/", session.getIdToken().getJWTToken()); credentialsProvider.setLogins(logins); } });
iOS - Objective-C AWSServiceConfiguration *serviceConfiguration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil]; AWSCognitoIdentityUserPoolConfiguration *userPoolConfiguration = [[AWSCognitoIdentityUserPoolConfiguration alloc] initWithClientId:@"YOUR_CLIENT_ID" clientSecret:@"YOUR_CLIENT_SECRET" poolId:@"YOUR_USER_POOL_ID"]; [AWSCognitoIdentityUserPool registerCognitoIdentityUserPoolWithConfiguration:serviceConfiguration userPoolConfiguration:userPoolConfiguration forKey:@"UserPool"]; AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"UserPool"]; AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@"YOUR_IDENTITY_POOL_ID" identityProviderManager:pool];
iOS - Swift let serviceConfiguration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: nil) let userPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId: "YOUR_CLIENT_ID", clientSecret: "YOUR_CLIENT_SECRET", poolId: "YOUR_USER_POOL_ID") AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithConfiguration(serviceConfiguration, userPoolConfiguration: userPoolConfiguration, forKey: "UserPool") let pool = AWSCognitoIdentityUserPool(forKey: "UserPool") let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "YOUR_IDENTITY_POOL_ID", identityProviderManager:pool)
Referencia de grupos de usuarios (Consola de administración de AWS) Puede personalizar la configuración del grupo de usuarios en función de las necesidades de su aplicación. En esta sección se describe cada una de las categorías de configuración y se le ofrece información detallada acerca de los atributos, las políticas, la verificación de teléfono y de correo electrónico, la autenticación multifactor, las aplicaciones, los disparadores y los dispositivos de confianza. Temas • Agregar un nombre de grupo de usuarios (p. 171) • Importación y creación de usuarios y grupos (p. 171) • Configuración de atributos de grupo de usuarios (p. 171) • Adición de requisitos de contraseña para los grupos de usuarios (p. 178) • Configuración de una política de creación de usuarios por parte del administrador (p. 178) • Configuración de la verificación del correo electrónico o del teléfono (p. 179)
170
Amazon Cognito Guía para desarrolladores Nombre de grupo de usuarios
• Configuración de los mensajes de verificación de correo electrónico y SMS, así como mensajes de invitación al usuario (p. 180) • Añadir etiquetas de asignación de costos a la característica Sus grupos de usuarios (p. 184) • Especificación de la configuración de seguimiento de dispositivos de grupos de usuarios (p. 184) • Configuración de un cliente de aplicación del grupo de usuarios (p. 185) • Configuración de disparadores de Lambda de grupo de usuarios (p. 187) • Revisión de la configuración de sus grupos de usuarios (p. 187) • Configuración de análisis de grupo de usuarios (p. 188) • Configuración del cliente de aplicación (p. 189) • Agregar un nombre de dominio para el grupo de usuarios (p. 190) • Personalización de la interfaz de usuario de la aplicación integrada para registrar y conectar usuarios (p. 190) • Agregar servidores de recursos al grupo de usuarios (p. 191) • Configuración de proveedores de identidad para su grupo de usuarios (p. 191) • Configuración de mapeo de atributos para el grupo de usuarios (p. 195)
Agregar un nombre de grupo de usuarios Debe especificar un Pool Name (Nombre de grupo) para el grupo de usuarios de Amazon Cognito en la Consola de administración de AWS. Dicho nombre ya no podrá modificarse una vez que el grupo de usuarios se haya creado. Los nombres del grupo deben tener entre 1 y 128 caracteres. Pueden contener letras mayúsculas y minúsculas (a-z, A-Z), números (0-9) y los siguientes caracteres especiales: + = , . @ y -.
Importación y creación de usuarios y grupos En la pestaña Users and groups (Usuarios y grupos), puede importar usuarios, crear usuarios, crear grupos y asignarles usuarios y buscar usuarios. Para obtener más información, consulte: • Importación de usuarios en grupos de usuarios desde un archivo CSV (p. 144) • Agregar grupos a un grupo de usuarios (p. 136) • Creación de cuentas de usuario como administrador (p. 132)
Configuración de atributos de grupo de usuarios Todos los grupos de usuarios tienen un conjunto de atributos predeterminados, denominados "atributos estándar". También se pueden añadir atributos personalizados a la definición del grupo de usuarios en la Consola de administración de AWS. En este tema se describen estos atributos en detalle y se le ofrecen consejos sobre cómo configurar el grupo de usuarios. Los atributos son fragmentos de información de usuarios individuales, como su nombre, el correo electrónico o su número de teléfono, que ayudan a identificarlos. No toda la información de los usuarios debe almacenarse en atributos. Por ejemplo, los datos de usuario que cambian con frecuencia, como las puntuaciones en los juegos o las estadísticas de uso, se deben guardar en un almacén de datos independiente, como Amazon Cognito Sync o Amazon DynamoDB.
171
Amazon Cognito Guía para desarrolladores Atributos
Atributos estándar A continuación indicamos los atributos estándar de todos los usuarios de un grupo de usuarios. Se implementan de acuerdo con la especificación OpenID Connect. • address • birthdate • email • family_name • gender • given_name • locale • middle_name • name • nickname • phone_number • picture • preferred_username • profile • updated_at • website • zoneinfo Estos atributos a la disposición como opcionales para todos los usuarios. Para que un atributo sea obligatorio, marque la casilla situada junto a este.
Note Cuando un atributo estándar está marcado como obligatorio, un usuario no puede registrarse a menos que dé un valor al atributo. Los administradores pueden crear usuarios sin dar valores a los atributos obligatorios usando la API AdminCreateUser. Un atributo no puede pasar de obligatorio a no obligatorio y viceversa, una vez que se haya creado el grupo de usuarios. De forma predeterminada, los valores de los atributos estándar y personalizados pueden tener un máximo de 2048 caracteres, aunque algunos valores de atributo como, por ejemplo, updated_at, tienen restricciones de formato. Solo se pueden verificar email (correo electrónico) y phone (teléfono).
Note En la especificación, los atributos se denominan miembros. A continuación, se incluyen notas adicionales sobre algunos de los campos anteriores. email Los valores de dirección de correo electrónico se pueden verificar. Un administrador con permisos de cuenta de AWS adecuados puede cambiar el correo electrónico del usuario y marcarlo como verificado. Esto se puede hacer usando la API AdminUpdateUserAttributes o el comando de la CLI admin-update-user-attributes para cambiar el atributo email_verified a true. 172
Amazon Cognito Guía para desarrolladores Atributos
phone Si la autenticación multifactor (MFA) por SMS está habilitada, se necesita un número de teléfono. Para obtener más información, consulte Adición de la autenticación multifactor (MFA) a un grupo de usuarios (p. 333). Los valores de número de teléfono se pueden verificar. Un administrador con permisos de cuenta de AWS adecuados puede cambiar el número de teléfono del usuario y marcarlo como verificado. Esto se puede hacer usando la API AdminUpdateUserAttributes o el comando de la CLI admin-update-user-attributes para cambiar el atributo phone_number_verified a true.
Important Los números de teléfono deben cumplir las reglas de formato siguientes: deben comenzar por un signo más (+), seguido inmediatamente por el código de país. Un número de teléfono solo puede contener el signo + y dígitos. Cualquier otro carácter contenido en el número de teléfono como, por ejemplo, paréntesis, espacios o guiones (-) se debe eliminar antes de enviar el valor al servicio. Por ejemplo, un número de teléfono de Estados Unidos debe tener este formato: +14325551212. preferred_username preferred_username no puede seleccionarse al mismo tiempo como obligatorio y como alias. Si preferred_username es un alias, el usuario puede añadir el valor de atributo una vez que esté confirmado mediante la API UpdateUserAttributes.
Para editar atributos estándar 1.
En la pestaña Attributes (Atributos), elija los atributos que exigirá para que los usuarios se registren. Si un atributo es obligatorio y el usuario no lo proporciona, dicho usuario no podrá registrarse.
Important Estos requisitos no pueden cambiarse después de haber creado el grupo de usuarios. 2.
Si desea crear un alias para correo electrónico, número de teléfono, dirección o nombre de usuario preferido, elija Alias. Para obtener más información acerca de los alias, consulte Información general de los alias (p. 174).
3.
Continúe y cree Atributos personalizados (p. 177).
Nombres de usuario y nombres de usuario preferidos El valor username es un atributo independiente y no es el mismo que el del atributo name. Un username es siempre obligatorio para registrar al usuario y no puede cambiarse una vez que se haya creado el usuario. Los desarrolladores pueden utilizar el atributo preferred_username para dar a los usuarios un nombre de usuario que estos puedan cambiar. Para obtener más información, consulte Información general de los alias (p. 174). Si su aplicación no requiere un nombre de usuario, no tiene que pedir al usuario que proporcione uno. La aplicación puede crear un nombre de usuario único para los usuarios en segundo plano. Esto resulta útil si, 173
Amazon Cognito Guía para desarrolladores Atributos
por ejemplo, desea que los usuarios se registren e inicien sesión con una dirección de correo electrónico y una contraseña. Para obtener más información, consulte Información general de los alias (p. 174). El username debe ser único en el grupo de usuarios. Un username puede volver a utilizarse, pero solo después de que se haya eliminado y ya no esté en uso.
Información general de los alias Puede permitir a los usuarios finales iniciar sesión con varios identificadores mediante el uso de alias. De forma predeterminada, los usuarios inician sesión con su nombre de usuario y una contraseña. El nombre de usuario es un valor fijo que los usuarios no pueden cambiar. Si marca un atributo como alias, los usuarios pueden iniciar sesión con dicho atributo en vez de usar el nombre de usuario. Los atributos de dirección de correo electrónico, número de teléfono y nombre de usuario preferido pueden marcarse como alias. Por ejemplo, si el correo electrónico y el teléfono se seleccionan como alias de un grupo de usuarios, los usuarios de dicho grupo de usuarios pueden iniciar sesión utilizando su nombre de usuario, la dirección de correo electrónico o el número de teléfono junto con su contraseña.
Note Puede optar por iniciar sesión o registrarse con minúsculas o mayúsculas en un alias cuando configure su grupo de usuarios para que el nombre de usuario no tenga en cuenta mayúsculas o minúsculas. Para obtener más información, consulte CreateUserPool en la Referencia de la API de Grupos de usuarios de Amazon Cognito. Si se selecciona como alias el correo electrónico, un nombre de usuario no puede coincidir con un formato de correo electrónico válido. Del mismo modo, si se selecciona el número de teléfono como alias, el servicio de dicho grupo de usuarios no acepta un nombre de usuario que coincida con un patrón de número de teléfono válido.
Note Los valores de alias tienen que ser únicos en un grupo de usuarios. Si se configura un alias para una dirección de correo electrónico o un número de teléfono, el valor proporcionado puede estar en un estado verificado solo en una cuenta. Durante la inscripción, si se proporciona como alias una dirección de correo electrónico o un número de teléfono de otra cuenta que ya haya sido utilizado, el registro se realizará satisfactoriamente. Sin embargo, cuando el usuario intente confirmar la cuenta con dicho correo electrónico (o dicho número de teléfono) y especifique el código válido, obtendrá un error AliasExistsException. El error indica al usuario que ya existe una cuenta con ese correo electrónico (o número de teléfono). En este punto, el usuario puede dejar de crear la cuenta e intentar restablecer la contraseña de la cuenta antigua. Si el usuario sigue creando la cuenta, su aplicación debe llamar a la API ConfirmSignUp con la opción forceAliasCreation. Esto transmite el alias desde la cuenta anterior hasta la cuenta recién creada y, en la cuenta anterior, marca el atributo como no verificado. Los números de teléfono y las direcciones de correo electrónico pasan a ser alias activos de un usuario únicamente cuando se verifican los números de teléfono y las direcciones de correo electrónico. Por lo tanto, recomendamos que elija la verificación automática de las direcciones de correo electrónico y los números de teléfono si los usa como alias. El atributo preferred_username proporciona a los usuarios la experiencia de cambiar el nombre de usuario, cuando, de hecho, el verdadero valor del nombre de usuario de un usuario no admite cambios. Si desea habilitar esta experiencia de usuario, envíe el nuevo valor de username como preferred_username y elija preferred_username como alias. Esto permitirá a los usuarios iniciar sesión con el valor nuevo que han especificado. Si se ha seleccionado preferred_username como alias, el valor solo se puede proporcionar cuando se confirma una cuenta. El valor no se puede proporcionar durante el registro.
174
Amazon Cognito Guía para desarrolladores Atributos
Uso de alias para simplificar la inscripción y el inicio de sesión del usuario En la pestaña de la consola Attributes (Atributos), puede elegir si desea permitir que el usuario se inscriba con una dirección de correo electrónico o un número de teléfono como nombre de usuario.
Note Este ajuste no podrá modificarse una vez que el grupo de usuarios se haya creado. Temas • Opción 1: el usuario se inscriba con un nombre de usuario e inicia sesión con un nombre de usuario o alias (p. 175) • Opción 2: el usuario se inscribe e inicia sesión con un correo electrónico o un número de teléfono en vez de un nombre de usuario (p. 175)
Opción 1: el usuario se inscriba con un nombre de usuario e inicia sesión con un nombre de usuario o alias En este caso, el usuario se inscribe con un nombre de usuario. Además, puede permitir a los usuarios iniciar sesión con uno o más de los alias siguientes: • una dirección de correo electrónico verificada • un número de teléfono verificado • un nombre de usuario preferido Estos alias se pueden cambiar después de que se inscriba el usuario. Siga estos pasos para configurar el grupo de usuarios en la consola para permitir el inicio de sesión con un alias.
Para configurar un grupo de usuarios para el inicio de sesión con un alias 1.
En la pestaña Attributes (Atributos), en How do you want your end users to sign-up and sign-in? (¿Cómo desea que los usuarios finales se inscriban e inicien sesión?), seleccione Username (Nombre de usuario)
2.
Elija una de las siguientes opciones: • Also allow sign in with verified email address (Permitir también iniciar sesión con dirección de correo electrónico verificada): esta opción permite a los usuarios iniciar sesión con su dirección de correo electrónico. • Also allow sign in with verified phone number (Permitir también iniciar sesión con número de teléfono verificado): esta opción permite a los usuarios iniciar sesión con su número de teléfono. • Also allow sign in with preferred username (Permitir también iniciar sesión con nombre de usuario preferido): esta opción permite a los usuarios iniciar sesión con un nombre de usuario preferido. Se trata de un nombre de usuario que el usuario puede cambiar.
Opción 2: el usuario se inscribe e inicia sesión con un correo electrónico o un número de teléfono en vez de un nombre de usuario En este caso, el usuario se inscribe con una dirección de correo electrónico o un número de teléfono como su nombre de usuario. Puede elegir si permitirá la inscripción solo con direcciones de correo electrónico, solo con números de teléfono o con cualquiera de las dos posibilidades anteriores.
175
Amazon Cognito Guía para desarrolladores Atributos
El correo electrónico o el número de teléfono deben ser únicos y no los debe estar utilizando otro usuario. No se tiene que verificar. Después de que el usuario se haya inscrito con un correo electrónico o un número de teléfono, no podrá crear una cuenta con el mismo correo electrónico o número de teléfono, solo podrá reutilizar la cuenta existente (y restablecer la contraseña si es necesario). Sin embargo, el usuario puede cambiar el correo electrónico o el número de teléfono por otro nuevo. Si no está en uso, se convierte en el nuevo nombre de usuario.
Note Si los usuarios se inscriben con una dirección de correo electrónico como su nombre de usuario, pueden cambiarlo por otra dirección de correo electrónico, pero no pueden cambiarlo por un número de teléfono. Si se inscriben con un número de teléfono, pueden cambiar el nombre de usuario por otro número de teléfono, pero no pueden cambiarlo por una dirección de correo electrónico. Siga estos pasos para configurar el grupo de usuarios en la consola para permitir la inscripción y el inicio de sesión con un correo electrónico o un número de teléfono.
Para configurar un grupo de usuarios para inscribirse e iniciar sesión con un correo electrónico o un número de teléfono 1.
En la pestaña Attributes (Atributos), en How do you want your end users to sign-up and sign-in? (¿Cómo desea que los usuarios finales se inscriban e inicien sesión?), seleccione Email address or phone number (Dirección de correo electrónico o número de teléfono)
2.
Elija una de las siguientes opciones: • Allow email addresses (Permitir direcciones de correo electrónico): esta opción permite al usuario inscribirse con un correo electrónico como nombre de usuario. • Allow phone numbers (Permitir números de teléfono): esta opción permite al usuario inscribirse con un número de teléfono como nombre de usuario. • Allow both email addresses and phone number (users can choose one) (Permitir tanto direcciones de correo electrónico como números de teléfono (los usuarios pueden elegir una opción)): esta opción permite al usuario utilizar una dirección de correo electrónico o un teléfono como nombre de usuario durante la inscripción.
Note No tiene que marcar el correo electrónico o el número de teléfono como atributos obligatorios para el grupo de usuarios.
Para implementar la opción 2 en la aplicación 1.
Llama a la API CreateUserPool para crear el grupo de usuarios. Establezca el parámetro UserNameAttributes en phone_number, email o phone_number | email.
2.
Llama a la API SignUp y pase una dirección de correo electrónico o un número de teléfono en el parámetro username de la API. Esta API admite lo siguiente: • Si la cadena username tiene un formato de correo electrónico válido, el grupo de usuarios rellena automáticamente el atributo email del usuario con el valor username. • Si la cadena username tiene un formato de número de teléfono válido, el grupo de usuarios rellena automáticamente el atributo phone_number del usuario con el valor username. • Si el formato de cadena username no es de correo electrónico o de número de teléfono, la API SignUp genera una excepción. • La API SignUp genera un UUID persistente para el usuario y la utiliza internamente como el atributo de nombre de usuario inmutable. Este UUID tiene el mismo valor que la notificación sub en el token de identidad de usuario. 176
Amazon Cognito Guía para desarrolladores Atributos
• Si la cadena username contiene una dirección de correo electrónico o un número de teléfono que ya están en uso, la API SignUp genera una excepción. Puede utilizar una dirección de correo electrónico o un número de teléfono como alias en lugar del nombre de usuario en todas las API, excepto la API ListUsers. Si llama a ListUsers, puede buscar por el atributo email o phone_number; si busca por username, debe proporcionar el nombre de usuario real, no un alias.
Atributos personalizados Puede añadir hasta 25 atributos personalizados a un grupo de usuarios. Puede especificar la longitud mínima o máxima de los atributos personalizados. Sin embargo, la longitud máxima de ningún atributo personalizado puede superar los 2048 caracteres.
Cada atributo personalizado: • Puede definirse como cadena o como número. • No puede ser obligatorio. • No se puede eliminar ni cambiar una vez añadido al grupo de usuarios. • Puede tener un nombre con una longitud de caracteres que esté dentro del límite que acepta Amazon Cognito. Para obtener más información, consulte Cuotas en Amazon Cognito (p. 353).
Note En el código y en la configuración de reglas para Control de acceso basado en roles (p. 221), los atributos personalizados han de llevar el prefijo custom: para diferenciarse de los atributos estándar.
Para añadir un atributo personalizado con la consola 1. 2.
En la barra de navegación de la izquierda, elija Attributes (Atributos). Para cada nuevo atributo: a. b. c.
Elija Add another attribute (Añadir otro atributo) en Do you want to add custom attributes? (¿Desea añadir atributos personalizados?). Elija las propiedades de cada atributo personalizado, como Type (Tipo) de datos (cadena o número), Name (Nombre), Min length (Longitud mínima) y Max length (Longitud máxima). Si desea permitir que el usuario cambie el valor de un atributo personalizado después de haber establecido un primer valor, seleccione Mutable.
Permisos y ámbitos de los atributos Puede establecer permisos de lectura y escritura por aplicación para cada atributo de usuario. Esto le da la capacidad de controlar qué aplicaciones pueden ver o modificar cada uno de los atributos que están almacenados para sus usuarios. Por ejemplo, puede tener un atributo personalizado que indique si un usuario es un cliente de pago o no. Las aplicaciones pueden ver dicho atributo, pero no pueden modificarlo directamente. Por lo tanto, puede actualizar el atributo mediante una herramienta administrativa o un proceso de fondo. Los permisos para atributos de usuario se pueden configurar en la consola de Amazon Cognito, la API o la CLI. De forma predeterminada, los nuevos atributos personalizados no estarán disponibles hasta que defina permisos de lectura y escritura para ellos.
Para definir o cambiar los permisos de los atributos con la consola 1.
En la barra de navegación de la izquierda, elija App clients (Clientes de aplicación).
177
Amazon Cognito Guía para desarrolladores Requisitos de contraseña
2.
Elija Show Detalles (Mostrar detalles) para el cliente de aplicación que desee actualizar.
3.
Elija Set the attribute read and write permissions for each attribute (Establecer los permisos de lectura y escritura de cada atributo).
4.
Elija Save app client changes (Guardar los cambios del cliente de aplicación).
Repita estos pasos para cada cliente de aplicación que utilice el atributo personalizado. Por cada aplicación, se pueden marcar los atributos como de lectura o escritura. Esto es cierto para los atributos estándar y los atributos personalizados. Una aplicación puede leer un atributo que esté marcado como de lectura y puede escribir un atributo que esté marcado como de escritura. Si una aplicación intenta actualizar un atributo que no es de escritura, obtendrá una excepción NotAuthorizedException. Una aplicación que llame a GetUser solo recibe los atributos que dicha aplicación puede leer. El token de ID emitido después de la autenticación solo contiene notificaciones correspondientes a los atributos que se pueden leer. Los atributos obligatorios de un grupo de usuarios siempre se pueden escribir. Si, mediante la CLI o la API de administrador, define un atributo que se puede escribir y no proporciona los atributos obligatorios, obtendrá una excepción InvalidParameterException. Puede cambiar los permisos y los alcances de los atributos después de crear el grupo de usuarios.
Adición de requisitos de contraseña para los grupos de usuarios Si se especifica una contraseña de 8 caracteres como mínimo y se exige la introducción de caracteres en mayúscula, numéricos y especiales, se obtendrán contraseñas seguras para los usuarios de la aplicación. Las contraseñas complejas son más difíciles de adivinar y las recomendamos como una práctica recomendada de seguridad. Estos caracteres están permitidos en las contraseñas: • letras en mayúsculas y minúsculas • números • Caracteres especiales enumerados en la siguiente sección.
Creación de una política de contraseñas Puede especificar los siguientes requisitos de contraseña en la Consola de administración de AWS: • Minimum length (Longitud mínima), que debe tener un mínimo de 6 caracteres y menos de 99 caracteres • Require numbers (Números obligatorios) • Require a special character (Un carácter especial obligatorio) de este conjunto: = + - ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~ ` • Require uppercase letters (Letras mayúsculas obligatorias) • Require lowercase letters (Letras minúsculas obligatorias)
Configuración de una política de creación de usuarios por parte del administrador Puede especificar las siguientes políticas para la creación de usuarios por parte del administrador: 178
Amazon Cognito Guía para desarrolladores Verificación del correo electrónico o del teléfono
• Especifique si se permitirá a los usuarios inscribirse a sí mismos. Esta opción está establecida de forma predeterminada. Si no es así, solo los administradores pueden crear los usuarios de este grupo y las llamadas a la API SignUp generarán el error NotAuthorizedException. • Especifique el plazo de vencimiento de la cuenta de usuario (en días) para las cuentas nuevas. El valor predeterminado es de 7 días, medido a partir del momento en el que se crea la cuenta de usuario. El valor máximo es de 90 días. Cuando la cuenta caduque, el usuario no podrá iniciar sesión en ella hasta que el administrador actualice el perfil de usuario actualizando un atributo o reenviando la contraseña al usuario.
Note Una vez que el usuario haya iniciado sesión, la cuenta nunca caducará.
Configuración de la verificación del correo electrónico o del teléfono Puede elegir la configuración de verificación del correo electrónico o de teléfono en la pestaña MFA and verifications (MFA y verificaciones). Para obtener más información sobre MFA, consulte MFA por mensaje de texto SMS (p. 335) Amazon Cognito puede verificar automáticamente direcciones de correo electrónico o números de teléfono enviando un código de verificación —o bien, en el caso de los correos electrónicos, un enlace de verificación. En el caso de las direcciones de correo electrónico, el código o enlace se envía por correo electrónico. En el caso de los números de teléfono, el código se envía por SMS. La verificación de un teléfono o un correo electrónico es necesaria para confirmar automáticamente a los usuarios y permitir la recuperación de contraseñas olvidadas. También puede confirmar automáticamente a los usuarios mediante el disparador de Lambda de preinscripción o utilizando la API AdminConfirmSignUp. Para obtener más información, consulte Inscripción y confirmación de cuentas de usuario (p. 124). El código o enlace de verificación es válido durante 24 horas. Si se selecciona que es obligatorio realizar una verificación del correo electrónico o el teléfono, el código de verificación o enlace se envían automáticamente cuando el usuario inicia sesión.
Notes • El uso de mensajes de texto SMS para verificar números de teléfono se cobra por separado en Amazon SNS. (No se aplica ningún cargo por enviar códigos de verificación a las direcciones de correo electrónico). Para obtener información sobre los precios de Amazon SNS, consulte Precios de SMS en todo el mundo. Para ver la lista actual de los países en los que los mensajes SMS están disponibles, consulte Regiones y países admitidos. • Cuando realice operaciones de prueba en la aplicación que creen correos electrónicos en Amazon Cognito, utilice una dirección de correo electrónico real para que Amazon Cognito pueda enviar estos mensajes sin generar rebotes permanentes. Para obtener más información, consulte the section called “Envío de mensajes de correo electrónico para probar la aplicación” (p. 131). • El proceso de contraseña olvidada requiere que el usuario verifique su correo electrónico o número de teléfono.
Important Si un usuario inicia sesión con un número de teléfono y una dirección de correo electrónico, y la configuración del grupo de usuarios exige la verificación de ambos atributos, se envía 179
Amazon Cognito Guía para desarrolladores Personalizaciones de mensaje
un código de verificación por SMS al teléfono. La dirección de correo electrónico no se verifica, por lo que la aplicación tiene que llamar a GetUser para ver si hay alguna dirección de correo electrónico a la espera de verificación. En caso afirmativo, la aplicación debe llamar a GetUserAttributeVerificationCode para iniciar el flujo de verificación de correo electrónico y, a continuación, enviar el código de verificación llamando a VerifyUserAttribute. Se pueden especificar límites de gasto para una cuenta de AWS y para mensajes individuales, y los límites se aplican únicamente al costo de envío de los mensajes SMS. Para obtener más información, consulte Amazon SNS FAQs. Los mensajes SMS de los grupos de usuarios de Amazon Cognito se enrutan a través de Amazon SNS en la misma región a menos que se indique en la siguiente tabla. Región Amazon Cognito
Regiones de SNS admitidas
EE.UU. Este (Ohio), us-east-2
us-east-1
Asia-Pacífico (Mumbai) ap-south-1
ap-southeast-1
Asia-Pacífico (Seúl) ap-northeast-2
ap-notheast-1 (ap-notheast-1)
Canadá(Central) ca-central-1
us-east-1
Europa (Fráncfort) eu-central-1
eu-west-1
Europa (Londres) eu-west-2
eu-west-1
Ejemplo: Si el grupo de usuarios de Cognito se encuentra en la región us-east-1, puede actualizar el límite de Amazon SNS en la región us-east-1. Ejemplo: Si el grupo de usuarios de Cognito se encuentra en la región ap-south-1, puede actualizar el límite de Amazon SNS en la región ap-southeast-1.
Autorización a Amazon Cognito para enviar SMS en su nombre Para enviar mensajes SMS a los usuarios en su nombre, Amazon Cognito necesita su permiso. Para conceder el permiso, puede crear un rol de AWS Identity and Access Management (IAM) en la pestaña MFA and verifications (MFA y verificaciones) de la consola de Amazon Cognito eligiendo Create role (Crear rol).
Configuración de los mensajes de verificación de correo electrónico y SMS, así como mensajes de invitación al usuario En la pestaña Message customizations (Personalizaciones de mensajes), puede personalizar: • El mensaje de MFA por mensaje de texto SMS • Los mensajes de verificación de SMS y correo electrónico • El tipo de verificación por correo electrónico: código o enlace • Los mensajes de invitación al usuario • Las direcciones de correo electrónico del remitente y del receptor de los correos electrónicos del grupo de usuarios
180
Amazon Cognito Guía para desarrolladores Personalizaciones de mensaje
Note Las plantillas de mensajes de verificación por SMS y correo electrónico solo aparecerán si ha elegido exigir la verificación de número de teléfono y de correo electrónico en la pestaña Verifications (Verificaciones). Del mismo modo, la plantilla de mensajes de MFA por SMS solo aparece si el valor de MFA es REQUIRED u OPTIONAL. Temas • Plantillas de mensajes (p. 181) • Personalización del mensaje SMS (p. 182) • Personalización de los mensajes de verificación de correo electrónico (p. 182) • Personalización de los mensajes de invitación a usuarios (p. 183) • Personalización de la dirección de correo electrónico (p. 183) • Autorización a Amazon Cognito para enviar correos electrónicos de Amazon SES en su nombre (desde una dirección de correo electrónico de remitente personalizada) (p. 183)
Plantillas de mensajes Las plantillas de mensajes le permiten insertar un campo en un mensaje utilizando un marcador de posición que se sustituirá por el valor correspondiente.
Marcadores de posición de las plantillas Descripción
Token
Código de verificación
{####}
Contraseña temporal
{####}
Nombre de usuario
{nombre de usuario}
Note {nombre de usuario} no se puede utilizar en los correos electrónicos de verificación, sino únicamente en los correos electrónicos de invitación que se envían después de llamar a adminCreateUser. En estos correos electrónicos de invitación hay dos marcadores de posición: nombre de usuario {nombre de usuario} y contraseña temporal {####} Puede utilizar los marcadores de posición de las plantillas de seguridad avanzadas para: • Incluir detalles específicos sobre un evento, como la dirección IP, la ciudad, el país, la hora de inicio de sesión y el nombre del dispositivo, para su análisis mediante las características de seguridad avanzadas de Amazon Cognito. • Verificar si un enlace de un clic es válido. • Crear su propio enlace de un clic con el ID del evento, el token de comentarios y el nombre de usuario.
Marcadores de posición de las plantillas de seguridad avanzadas Descripción
Token
dirección IP
{ip-address}
Ciudad
{city}
181
Amazon Cognito Guía para desarrolladores Personalizaciones de mensaje
Descripción
Token
País
{country}
Hora de inicio de sesión
{login-time}
Nombre del dispositivo
{device-name}
El enlace de un clic es válido
{one-click-link-valid}
El enlace de un clic no es válido
{one-click-link-invalid}
ID de evento
{event-id}
Token de comentarios
{feedback-token}
Personalización del mensaje SMS Puede personalizar el mensaje SMS para la autenticación MFA editando la plantilla incluida en el encabezado Do you want to customize your SMS messages? (¿Desea personalizar los mensajes SMS?).
Important El mensaje personalizado debe contener el marcador de posición {####}, que se sustituye por el código de autenticación antes de enviar el mensaje. La longitud máxima del mensaje es de 140 caracteres UTF-8, incluido el código de autenticación.
Personalización de los mensajes de verificación por SMS Puede personalizar el mensaje SMS para las verificaciones de número de teléfono editando la plantilla incluida en el encabezado Do you want to customize your SMS verification messages? (¿Desea personalizar sus mensajes de verificación de SMS?).
Important El mensaje personalizado debe contener el marcador de posición {####}, que se sustituye por el código de verificación antes de enviar el mensaje. La longitud máxima del mensaje es de 140 caracteres UTF-8, incluido el código de verificación.
Personalización de los mensajes de verificación de correo electrónico Puede elegir el tipo de verificación por correo electrónico: código o enlace. Puede personalizar el asunto y el mensaje de correo electrónico para las verificaciones de dirección de correo electrónico editando la plantilla incluida en el encabezado Do you want to customize your email verification messages? (¿Desea personalizar los mensajes de verificación de correo electrónico?).
Important Si ha seleccionado el tipo de verificación de código, el mensaje personalizado deberá contener el marcador de posición {####}, que se sustituye por el código de verificación antes de enviar el mensaje. La longitud máxima del mensaje es de 20000 caracteres UTF-8, incluido el código de verificación (de haberlo). Se pueden usar etiquetas HTML en estos correos electrónicos.
182
Amazon Cognito Guía para desarrolladores Personalizaciones de mensaje
Personalización de los mensajes de invitación a usuarios Puede personalizar el mensaje de invitación del usuario que Amazon Cognito envía a los nuevos usuarios a través de SMS o por correo electrónico editando las plantillas incluidas en el encabezado Do you want to customize your user invitation messages? (¿Desea personalizar los mensajes de invitación para los usuarios?).
Important El mensaje personalizado debe contener los marcadores de posición {username} y {####}, que se sustituirán por el nombre de usuario y la contraseña antes de enviar el mensaje. En el caso de los SMS, la longitud máxima permitida es de 140 caracteres UTF-8, incluido el código de verificación. En el caso de los correos electrónicos, la longitud máxima del mensaje es de 20.000 caracteres UTF-8, incluido el código de verificación. Se pueden usar etiquetas HTML en estos correos electrónicos.
Personalización de la dirección de correo electrónico De forma predeterminada, los mensajes de correo electrónico que Amazon Cognito envía a los usuarios de los grupos de usuarios proceden de [emailprotected]. Puede especificar las direcciones de correo electrónico personalizadas del remitente (FROM) y de respuesta (REPLY-TO) que reemplazarán a [emailprotected]. Para personalizar la dirección de correo electrónico FROM, en la consola, elija un grupo de usuarios. A continuación, seleccione Personalizaciones de mensajes. En Personalizaciones de mensajes, seleccione una Región SES . En el campo ARN de la dirección de correo electrónico FROM, introduzca su dirección de correo electrónico. Verifique la identidad de Amazon Simple Email Service haciendo clic en el enlace que hay después del campo ARN de dirección de correo electrónico FROM. Para obtener más información, consulte la sección relativa a la verificación de direcciones de correo electrónico y dominios en Amazon SES de la Guía para desarrolladores de Amazon Simple Email Service. Para personalizar la dirección de correo electrónico REPLY-TO, introduzca una dirección de correo electrónico válida en el campo Dirección de correo electrónico REPLY-TO.
Autorización a Amazon Cognito para enviar correos electrónicos de Amazon SES en su nombre (desde una dirección de correo electrónico de remitente personalizada) Si desea enviar correos electrónicos desde una dirección de correo electrónico de remitente personalizada, en lugar de enviarlos desde la dirección de correo electrónico predeterminada, Amazon Cognito necesita su permiso para enviar mensajes de correo electrónico a los usuarios en nombre de su identidad verificada por Amazon SES. Para conceder el permiso, cree una política de autorización de envíos. Para obtener más información, consulte Uso de autorización de envío con Amazon SES en la Guía para desarrolladores de Amazon Simple Email Service. A continuación se muestra un ejemplo de una política de autorización de envíos de Amazon SES para Grupos de usuarios de Amazon Cognito. Para ver más ejemplos, consulte Ejemplos de políticas de autorización de envío de Amazon SES en la Guía para desarrolladores de Amazon Simple Email Service.
Note En este ejemplo, el valor "Sid" es una cadena arbitraria que identifica de forma única la declaración. Para obtener más información acerca de la sintaxis de la política, consulte Políticas de autorización de envío de Amazon SES en la Guía para desarrolladores de Amazon Simple Email Service.
183
Amazon Cognito Guía para desarrolladores Etiquetas
{
}
"Version": "2008-10-17", "Statement": [ { "Sid": "stmnt1234567891234", "Effect": "Allow", "Principal": { "Service": "cognito-idp.amazonaws.com" }, "Action": [ "ses:SendEmail", "ses:SendRawEmail" ], "Resource": "" } ]
La consola de Amazon Cognito añade esta política en su nombre cuando selecciona una identidad de Amazon SES en el menú desplegable. Si utiliza la CLI o la API para configurar el grupo de usuarios, debe adjuntar esta política a su identidad de Amazon SES.
Añadir etiquetas de asignación de costos a la característica Sus grupos de usuarios En la pestaña Tags (Etiquetas), puede añadir etiquetas de asignación de costos para clasificar en categorías los costos de AWS y hacer su seguimiento. Cuando se aplican etiquetas a los recursos de AWS, (como Grupos de usuarios de Amazon Cognito), el informe de asignación de costos de AWS incluye el uso y los costos agregados por etiquetas. Puede aplicar etiquetas que representen categorías de negocio (por ejemplo, centros de costos, nombres de aplicación o propietarios) para estructurar los costos entre diferentes servicios. Para obtener más información, consulte Uso de etiquetas de asignación de costos en la Guía del usuario de AWS Billing and Cost Management. Para agregar una etiqueta, elija Add tag (Añadir etiqueta). Especifique un valor para Tag key (Clave de etiqueta) y Tag value (Valor de etiqueta) siguiendo las restricciones que se indican en Tag Restrictions (Restricciones de etiquetas). Elija Save changes (Guardar cambios) para guardar su etiqueta.
Important Para que las etiquetas aparezcan en los informes de facturación, debe activar las etiquetas aplicadas en la consola de facturación. Para obtener más información, consulte Activación de etiquetas de asignación de costos definidas por el usuario en la Guía del usuario de AWS Billing and Cost Management.
Especificación de la configuración de seguimiento de dispositivos de grupos de usuarios Para dar más seguridad, puede realizar el seguimiento de los dispositivos en los que los usuarios han iniciado sesión. En este tema se describe cómo añadir la capacidad de seguimiento de dispositivos a Grupos de usuarios de Amazon Cognito en la Consola de administración de AWS.
Configuración de dispositivos recordados Con Grupos de usuarios de Amazon Cognito, puede elegir que Amazon Cognito recuerde los dispositivos utilizados para tener acceso a una aplicación y asociar esos dispositivos recordados a los usuarios de la
184
Amazon Cognito Guía para desarrolladores Clientes de aplicaciones
aplicación de un grupo de usuarios. También puede optar por usar los dispositivos recordados para dejar de enviar códigos a los usuarios cuando tenga configurada la autenticación multifactor (MFA). Cuando configura la funcionalidad de recordar los dispositivos a través de la consola de Amazon Cognito, dispone de tres opciones: Always (Siempre), User Opt-In (Inclusión del usuario) y No. • No (valor predeterminado): los dispositivos no se recuerdan. • Always (Siempre): se recuerdan todos los dispositivos que usan los usuarios de su aplicación. • User Opt-In (Elección del usuario): el dispositivo del usuario se recuerda solo si ese usuario opta por recordar el dispositivo. Si se selecciona Always (Siempre) o User Opt-In (Elección del usuario), se asignará un identificador de dispositivo (clave y secreto) a cada dispositivo la primera vez que un usuario inicie sesión en dicho dispositivo. Esta clave solo se usará para identificar el dispositivo, pero el servicio no realizará su seguimiento. Si selecciona Always (Siempre), Amazon Cognito utilizará el identificador de dispositivos (clave y secreto) para autenticar el dispositivo en todos los inicios de sesión de usuario que se realicen en él como parte del flujo de autenticación de usuario. Si selecciona User Opt-In (Elección del usuario), podrá recordar los dispositivos solo cuando los usuarios de la aplicación opten por dicha opción. Cuando un usuario inicia sesión en un dispositivo nuevo, la respuesta de la solicitud para iniciar el seguimiento indica si se debe preguntar al usuario si quiere que se recuerde su dispositivo. Debe crear la interfaz de usuario para realizar la solicitud a los usuarios. Si el usuario opta por que se recuerde el dispositivo, el estado del dispositivo se actualiza con un estado "recordado". El SDK para móviles de AWS dispone de API adicionales para ver los dispositivos recordados (ListDevices, GetDevice), marcar un dispositivo como recordado o no recordado (UpdateDeviceStatus) y dejar de realizar el seguimiento de un dispositivo (ForgetDevice). En la API REST, existen versiones de administrador adicionales de estas API que tienen privilegios elevados y trabajan con cualquier usuario. Tienen nombres de API como AdminListDevices, AdminGetDevice, etc. No se exponen por medio de SDK.
Uso de dispositivos recordados para suprimir la autenticación multifactor (MFA) Si ha seleccionado Always (Siempre) o User Opt-In (Elección del usuario), también puede suprimir los desafíos de MFA en los dispositivos recordados para los usuarios de su aplicación. Para utilizar esta característica, debe habilitar MFA para el grupo de usuarios. Para obtener más información, consulte Adición de la autenticación multifactor (MFA) a un grupo de usuarios (p. 333).
Note Si la característica de recuerdo de dispositivos se ha establecido en Always (Siempre) y Do you want to use a remembered device to suppress the second factor during multi-factor authentication (MFA)? (¿Desea usar un dispositivo recordado para suprimir el segundo factor de Multi-Factor Authentication (MFA)?) se ha establecido en Yes (Sí), se omite la configuración de MFA para los riesgos medios/altos en la autenticación MFA basada en riesgo.
Configuración de un cliente de aplicación del grupo de usuarios Una aplicación es una entidad dentro de un grupo de usuarios que tiene permiso para llamar a operaciones de API sin autenticar (operaciones que no tienen un usuario autenticado). Los ejemplos incluyen operaciones para registrar, iniciar sesión y administrar contraseñas olvidadas. Para llamar a estas
185
Amazon Cognito Guía para desarrolladores Clientes de aplicaciones
operaciones de la API de , necesita un ID de cliente de aplicación y un secreto de cliente opcional. Es su responsabilidad proteger cualquier ID o secreto de cliente de aplicación para que solo las aplicaciones cliente autorizadas puedan llamar a estas operaciones sin autenticar. Puede crear varias aplicaciones para un grupo de usuarios. Generalmente, una aplicación corresponde a la plataforma de una aplicación. Por ejemplo, puede crear una aplicación para una aplicación del lado del servidor y una aplicación de Android diferente. Cada aplicación tiene su propio ID de cliente de aplicación. Cuando crea una aplicación, tiene la opción de elegir crear un secreto para dicha aplicación. Si se crea uno, debe proporcionarse para usar la aplicación. Las aplicaciones basadas en navegador escritas en JavaScript podrían no necesitar una aplicación con un secreto. Los secretos no se pueden cambiar después de crear una aplicación. Puede crear una nueva aplicación con un nuevo secreto si quiere rotar el secreto que está utilizando. También puede eliminar una aplicación para bloquear el acceso de aplicaciones que utilizan el ID de cliente de dicha aplicación.
Para crear un cliente de aplicación (consola) 1.
En el panel del grupo de usuarios, seleccione Creación de un grupo de usuarios.
2.
Introduzca un Nombre del fondo.
3.
Elija Review defaults.
4.
Elegir Añadir cliente de aplicación.
5.
Elija Add an app client.
6.
Introduzca un Nombre del cliente de la aplicación.
7.
Especifique el valor de Actualizar vencimiento de token. El valor predeterminado es 30. Puede cambiarlo a cualquier valor entre 1 hora y 10 años.
8.
Especifique el valor de Caducidad del token de acceso. El valor predeterminado es 1 hora. Puede cambiarlo a cualquier valor entre 5 minutos y 24 horas.
9.
Especifique el valor de Vencimiento del token de ID. El valor predeterminado es 1 hora. Puede cambiarlo a cualquier valor entre 5 minutos y 24 horas.
Important Si utiliza la interfaz de usuario alojada y los tokens de configuración de menos de una hora, el usuario final podrá obtener nuevos tokens en función de su cookie de sesión, que actualmente se ha corregido en una hora. 10. De forma predeterminada, los grupos de usuarios generan una clave secreta de cliente para su aplicación. Si no desea que esto ocurra, desactive Generate client secret (Generar secreto de cliente). 11. Si su aplicación de servidor requiere credenciales de desarrollador (utilizando Versión de la firma 4) y no utiliza Autenticación de contraseña remota segura (SRP) seleccionar Habilitar autenticación de contraseña de nombre de usuario para API de administrador para autenticación (ALLOW_ADMIN_USER_PASSWORD_AUTH) para habilitar la autenticación del lado del servidor. Para obtener más información, consulte Flujo de autenticación de administrador (p. 318). 12. Por debajo de Evitar errores de existencia del usuario, elige Antiguo o bien Activado. Para obtener más información, consulte Gestión de la respuesta de error. 13. De forma predeterminada, los grupos de usuario permiten a su aplicación leer y escribir todos los atributos. Si desea establecer diferentes permisos para la aplicación, siga los pasos que se indican a continuación o elija Crear cliente de aplicación para terminar. a.
Elija Set attribute read and write permissions (Establecer permisos de lectura y escritura del atributo).
b.
Realice una de las siguientes acciones para establecer los permisos de lectura y escritura: • Elija uno o varios ámbitos. Cada alcance es un conjunto de atributos estándar. Para obtener más información, consulte la lista de ámbitos de OIDC estándar. 186
Amazon Cognito Guía para desarrolladores Disparadores
• Elija atributos individuales estándar o personalizados.
Note No puede eliminar los atributos obligatorios de los permisos de escritura de cualquier aplicación. 14. Elija Create app client. 15. Si desea crear otra aplicación, seleccione Add an app (Añadir una aplicación). 16. Cuando hayas creado todas las aplicaciones que quieras, selecciona Volver a los detalles del fondo, actualiza cualquier otro campo y, a continuación, elige Crear grupo. Para crear y actualizar clientes de aplicaciones en un grupo de usuarios (API, AWS CLI) Aplique alguna de las siguientes acciones • API de – Utiliza el botón Cliente de grupo de usuarios de creación y Cliente de grupo de usuarios de actualización de las operaciones de. • AWS CLI – En la línea de comandos, ejecute el comando create-user-pool-client y updateuser-pool-client de los comandos de la.
Configuración de disparadores de Lambda de grupo de usuarios Puede utilizar los disparadores de AWS Lambda para personalizar los flujos de trabajo y la experiencia de usuario con Amazon Cognito. Puede crear los siguientes disparadores de Lambda: Pre sign-up (Anterior a la inscripción), Pre authentication (Anterior a la autenticación), Custom message (Mensaje personalizado), Post authentication (Posterior a la autenticación), Post confirmation (Posterior a la confirmación), Define Auth Challenge (Definición de desafíos de autenticación), Create Auth Challenge (Creación de desafíos de autenticación), Verify Auth Challenge Response (Verificación de la respuesta a los desafíos de autenticación) y User Migration (Migración de usuarios). Un disparador de Lambda para la migración de usuarios facilita la migración de usuarios desde un sistema de administración de usuarios existente a un grupo de usuarios. Para ver ejemplos de cada disparador de Lambda, consulte Personalizar flujos de trabajo de grupos de usuarios con disparadores de Lambda (p. 72).
Note El disparador de AWS Lambda Custom message (Mensaje personalizado) es una forma avanzada de personalizar los mensajes de correo electrónico y SMS. Para obtener más información, consulte Personalizar flujos de trabajo de grupos de usuarios con disparadores de Lambda (p. 72).
Revisión de la configuración de sus grupos de usuarios Para poder crear el grupo de usuarios, puede revisar las diferentes configuraciones y editarlas en la Consola de administración de AWS. Amazon Cognito valida la configuración del grupo de usuarios y le avisa si debe cambiar algo. Por ejemplo: 187
Amazon Cognito Guía para desarrolladores Análisis
Warning Este grupo de usuarios no tiene un rol de IAM definido para permitir que Amazon Cognito envíe mensajes SMS, por lo que no podrá confirmar números de teléfono o ni servirá para MFA a partir del 31 de agosto de 2016. Puede definir el rol de IAM seleccionando un rol en el panel Verifications (Verificaciones). Si ve un mensaje, siga las instrucciones para corregirlo antes de elegir Create pool (Crear grupo).
Configuración de análisis de grupo de usuarios Note La pestaña Analytics (Análisis) solo aparece si está editando un grupo de usuarios existente. El análisis de Amazon Pinpoint le permite realizar un seguimiento de las inscripciones, los inicios de sesión, los errores de autenticación, los usuarios activos diarios (DAU) y los usuarios activos mensuales (MAU) de Grupos de usuarios de Amazon Cognito. También puede utilizar SDK de AWS Mobile para Android o AWS Mobile SDK for iOS para configurar atributos de usuario que sean específicos de su aplicación. Estos atributos pueden usarse posteriormente para segmentar los usuarios en Amazon Pinpoint y enviarles notificaciones de inserción específicas. En la pestaña Analytics (Análisis), puede especificar un proyecto de Amazon Pinpoint para su cliente de la aplicación de Amazon Cognito. Para obtener más información, consulte Usar análisis de Amazon Pinpoint con Grupos de usuarios de Amazon Cognito (p. 121).
Note Amazon Pinpoint está disponible en varias regiones de AWS en América del Norte, Europa, Asia y Oceanía. Las regiones de Amazon Pinpoint incluyen la API Amazon Pinpoint. Si Amazon Pinpoint admite una región de Amazon Cognito, Amazon Cognito enviará eventos a proyectos de Amazon Pinpoint dentro de la misma región de Amazon Pinpoint. A continuación, si una región no es compatible con Amazon Pinpoint, Amazon Cognito solo admitirá el envío de eventos en useast-1. Para obtener información detallada sobre la región de Amazon Pinpoint, consulte Puntos de enlace y cuotas de Amazon Pinpoint y Uso de análisis de Amazon Pinpoint con grupos de usuarios de Amazon Cognito.
Para añadir análisis y campañas 1.
Elija Add analytics and campaigns (Añadir análisis y campañas).
2.
Elija un valor de Cognito app client (Cliente de aplicación de Cognito) en la lista.
3.
Para mapear la aplicación de Amazon Cognito a un proyecto de Amazon Pinpoint, seleccione el proyecto de Amazon Pinpoint en la lista.
Note El ID de proyecto de Amazon Pinpoint es una cadena de 32 caracteres única por cada proyecto de Amazon Pinpoint. Aparece en la consola de Amazon Pinpoint. Puede asignar varias aplicaciones de Amazon Cognito a un único proyecto de Amazon Pinpoint. Sin embargo, no puede asignar una aplicación de Amazon Cognito a más de un proyecto de Amazon Pinpoint. En Amazon Pinpoint, cada proyecto debe ser una sola aplicación. Por ejemplo, si un desarrollador tiene dos juegos, cada uno debe ser un proyecto de Amazon Pinpoint independiente, incluso si ambos juegos utilizan el mismo Grupos de usuarios de Amazon Cognito. 4.
Seleccione Share user attribute data with Amazon Pinpoint (Compartir datos de atributos de usuario con) si desea que Amazon Cognito envíe las direcciones de correo electrónico y los números de 188
Amazon Cognito Guía para desarrolladores Configuración del cliente de aplicación
teléfono de los usuarios a Amazon Pinpoint, de modo que se creen puntos de enlace adicionales para dichos usuarios.
Note Un punto de enlace identifica de forma exclusiva el dispositivo de un usuario al que puede enviar notificaciones de inserción con Amazon Pinpoint. Para obtener más información acerca de los puntos de enlace, consulteAdición de puntos de enlace en la Guía para desarrolladores de Amazon Pinpoint. 5. 6.
Escriba un IAM role (Rol de IAM) previamente creado en o elija Create new role (Crear nuevo rol) para crear un nuevo rol en la consola de IAM. Elija Save changes.
7.
Para definir asignaciones de aplicación adicionales, elija Add app mapping (Añadir asignación de aplicación).
8.
Elija Save changes.
Configuración del cliente de aplicación Note La pestaña General settings (Configuración general) solo aparece cuando se edita un grupo de usuarios. En la pestaña General settings (Configuración general), debe configurar al menos un proveedor de identidad (IdP) para sus aplicaciones si desea usar las páginas alojadas integradas para realizar el registro y el inicio de sesión de los usuarios o si desea usar flujos de OAuth2.0. Para obtener más información, consulte Configuración de un cliente de aplicación del grupo de usuarios (p. 32).
Para especificar la configuración del cliente de aplicación para su grupo de usuarios 1. 2.
En Enabled Identity Providers (Habilitar proveedores de identidad), seleccione los proveedores de identidad que desee para las aplicaciones que ha configurado en la pestaña App Clients (Clientes de aplicaciones). Introduzca los valores de Callback URLs (Direcciones URL de devolución de llamada) que desee separados con comas. Estas direcciones URL se aplican a todos los proveedores de identidad seleccionados.
Note
3.
Debe registrar las direcciones URL en la consola o mediante la CLI o la API para poder usarlas en su aplicación. Introduzca los valores de Sign out URLs (Direcciones URL de cierre de sesión) que desee separados con comas.
Note
4.
Debe registrar las direcciones URL en la consola o mediante la CLI o la API para poder usarlas en su aplicación. En OAuth 2.0, seleccione alguna de las siguientes opciones. Para obtener más información, consulte Terminología de configuración del cliente de aplicación (p. 34) y la especificación de OAuth 2.0. • En Allowed OAuth Flows (Flujos de OAuth permitidos), seleccione Authorized code grant (Concesión de código de autorización) e Implicit grant (Concesión implícita). Seleccione Client credentials (Credenciales del cliente) solo si la aplicación debe solicitar tokens de acceso en su propio nombre y no en nombre de un usuario. • En Allowed OAuth Scopes (Ámbitos de OAuth permitidos), seleccione los ámbitos de su preferencia. Cada ámbito es un conjunto de uno o varios atributos estándar.
189
Amazon Cognito Guía para desarrolladores Nombre de dominio
• En Allowed Custom Scopes (Ámbitos personalizados permitidos), seleccione los ámbitos de aplicación de entre los ámbitos personalizados que había definido previamente. Los ámbitos personalizados se definen en la pestaña Resource Servers (Servidores de recursos). Para obtener más información, consulte Definir servidores de recursos para el grupo de usuarios (p. 45).
Agregar un nombre de dominio para el grupo de usuarios Note La pestaña Domain name (Nombre de dominio) solo aparece cuando se edita un grupo de usuarios. En la pestaña Domain name (Nombre de dominio), puede introducir su propio nombre de dominio con prefijo. El dominio de su aplicación es https://.auth..amazoncognito.com. La URL completa de su aplicación será similar a la de este ejemplo: https:// example.auth.us-east-1.amazoncognito.com/login?redirect_uri=https:// www.google.com&response_type=code&client_id= Para obtener más información, consulte Configuración de un dominio del grupo de usuarios (p. 35).
Important Para poder tener acceso a la URL de su aplicación, debe especificar la configuración del cliente de aplicación, como las direcciones URL de devolución de llamada y redirección. Para obtener más información, consulte Configuración del cliente de aplicación (p. 189).
Para especificar un nombre de dominio para su grupo de usuarios 1.
Escriba el nombre de dominio que desee en el cuadro Prefix domain name (Nombre de dominio con prefijo).
2. 3.
Elija Check availability (Comprobar disponibilidad) si es necesario. Elija Save changes.
Personalización de la interfaz de usuario de la aplicación integrada para registrar y conectar usuarios Note La pestaña UI customization (Personalización de la interfaz de usuario) solo aparece cuando se edita un grupo de usuarios. En la pestaña UI customization (Personalización de la interfaz de usuario), puede agregar sus propias personalizaciones para la interfaz de usuario de la aplicación predeterminada. Para obtener información detallada acerca de cada uno de los campos de personalización, consulte Personalizar las páginas web integradas de inscripción e inicio de sesión (p. 41).
Note Para ver la interfaz de usuario alojada y sus personalizaciones, escriba en un navegador la siguiente URL con los datos específicos de su grupo de usuarios: https:///login?
190
Amazon Cognito Guía para desarrolladores Servidores de recursos
response_type=code&client_id=&redirect_uri= Posiblemente deba esperar hasta un minuto para actualizar la ventana del navegador y que aparezcan los cambios realizados en la consola. Su dominio aparece en la pestaña Domain Name (Nombre de dominio). Su ID de cliente de aplicación y URL de devolución de llamada aparecen en la pestaña General settings (Configuración general).
Para personalizar la interfaz de usuario de la aplicación integrada 1.
En App client to customize (Cliente de aplicación que se va a personalizar), seleccione la aplicación que desea personalizar en el menú desplegable de los clientes de aplicación que creó previamente en la pestaña App clients (Clientes de aplicaciones).
2.
Para añadir un logotipo a la interfaz de usuario de la aplicación predeterminada, seleccione Choose a file (Elija un archivo) o arrastre un archivo hasta el cuadro Logo (Logotipo).
3.
En CSS customizations (optional) (Personalizaciones de CSS (opcional)), puede cambiar los valores predeterminados de diversas propiedades para personalizar el aspecto de la aplicación.
4.
Elija Save changes.
Agregar servidores de recursos al grupo de usuarios Note La pestaña Resource Servers (Servidores de recursos) solo aparece cuando se edita un grupo de usuarios. Un servidor de recursos es un servidor para recursos de acceso protegido. Gestiona solicitudes autenticadas de aplicaciones que tengan un token de acceso. Un ámbito es un nivel de acceso que una aplicación puede solicitar a un recurso. En la pestaña Resource Servers (Servidores de recursos), puede definir los servidores de recursos y los ámbitos personalizados para el grupo de usuarios. Para obtener más información, consulte Definir servidores de recursos para el grupo de usuarios (p. 45).
Para definir un servidor de recursos personalizados 1.
Seleccione Add a resource server (Añadir un servidor de recursos).
2.
Escriba el nombre de su servidor de recursos, por ejemplo, Photo Server.
3.
Escriba el identificador de su servidor de recursos, por ejemplo, com.example.photos.
4.
Escriba los nombres de los ámbitos personalizados de sus recurso, por ejemplo, read y write.
5.
Escriba una descripción para cada nombre de ámbito, por ejemplo, view your photos y update your photos.
Cada uno de los ámbitos personalizados que defina aparecerá en la pestaña App client settings (Configuración del cliente de aplicación), en OAuth2.0 Allowed Custom Scopes (Ámbitos personalizados permitidos de OAuth2.0), por ejemplo, com.example.photos/read.
Configuración de proveedores de identidad para su grupo de usuarios Note La pestaña Identity providers (Proveedores de identidad) solo aparece cuando se edita un grupo de usuarios.
191
Amazon Cognito Guía para desarrolladores Proveedores de identidad
En la pestaña Identity providers (Proveedores de identidad), puede especificar proveedores de identidad (IdP) para su grupo de usuarios. Para obtener más información, consulte Agregar inicio de sesión de grupo de usuarios a través de un tercero (p. 48). Temas • Permitir a los usuarios iniciar sesión con un proveedor de identidad social (p. 192) • Permitir a los usuarios iniciar sesión con un proveedor de identidad OpenID Connect (OIDC) (p. 193) • Permitir a los usuarios iniciar sesión mediante SAML (p. 194)
Permitir a los usuarios iniciar sesión con un proveedor de identidad social Puede utilizar la federación en Grupos de usuarios de Amazon Cognito para realizar la integración con proveedores de identidad de redes sociales como Facebook, Google y Login with Amazon. Para añadir un proveedor de identidad social, primero debe crear una cuenta de desarrollador con el proveedor de identidad. Una vez creada la cuenta de desarrollador, registre la aplicación con el proveedor de identidad. El proveedor de identidad crea un ID y una clave secreta para la aplicación; puede configurar estos valores en Grupos de usuarios de Amazon Cognito. Los enlaces a continuación proporcionan más información acerca de los proveedores de identidad social: • Google Identity Platform • Facebook for Developers • Login with Amazon • Inicio de sesión con Apple>
Para permitir a los usuarios iniciar sesión con un proveedor de identidad social 1.
Elija un proveedor de identidad social, como Facebook, Google, Login with Amazon o SignInWithApple.
2.
En el caso del ID de aplicación y el secreto de la aplicación de Facebook, Google o Amazon, escriba los que recibió cuando creó su aplicación cliente Facebook, Google o Login with Amazon. En el caso de la clave privada, el ID de clave, el ID de equipo y el ID de servicios de Inicio de sesión con Apple, introduzca el ID de servicio que proporcionó a Apple y el ID de equipo, el ID de clave y la clave privada que recibió cuando creó su aplicación cliente Inicio de sesión con Apple.
3.
En App secret (Secreto de aplicación), escriba la clave secreta de aplicación que recibió cuando creó su aplicación cliente.
4.
En Authorize scopes (Autorizar ámbitos), escriba los nombres de los ámbitos de los proveedores de identidad social que desea asignar a los atributos del grupo de usuarios. Los ámbitos definen a qué atributos de usuario (como name y email) desea acceder con su aplicación. En el caso de Facebook, deben separarse con comas (por ejemplo, public_profile, email). Para Google, Login with Amazon e Sign in with Apple (CLI), deben estar separados por espacios (ejemplo de Google: profile email openid. Ejemplo de inicio de sesión con Amazon: profile postal_code. Ejemplo de inicio de sesión con Apple: name email). En el caso de Inicio de sesión con Apple (consola), utilice las casillas de verificación para seleccionarlas. Al usuario final se le pedirá que esté de acuerdo con proporcionar estos atributos a su aplicación. Para obtener más información acerca de sus ámbitos, consulte la documentación de Google, Facebook, Login with Amazon o Inicio de sesión con Apple.
5.
Elija Enable Facebook (Habilitar Facebook), Enable Google (Habilitar Google), Enable Login with Amazon (Habilitar Login with Amazon) o Enable Sign in with Apple (Inicio de sesión con Apple). 192
Amazon Cognito Guía para desarrolladores Proveedores de identidad
Para obtener más información acerca de los proveedores de identidad de las redes sociales, consulte Agregar proveedores de identidad sociales a un grupo de usuarios (p. 48).
Permitir a los usuarios iniciar sesión con un proveedor de identidad OpenID Connect (OIDC) Puede permitir a los usuarios a iniciar sesión a través de un proveedor de identidad OIDC, como Salesforce o Ping Identity. 1.
Vaya a la consola de Amazon Cognito. Es posible que se le soliciten sus credenciales de AWS.
2.
Manage User Pools (Administrar grupos de usuarios).
3.
Elija un grupo de usuarios existente en la lista o cree un grupo de usuarios.
4.
En la barra de navegación de la izquierda, elija Identity providers (Proveedores de identidad).
5.
Elija OpenId Connect.
6.
Escriba un nombre único en Provider name (Nombre de proveedor).
7.
Escriba el ID de cliente del proveedor de identidad OIDC en Client ID (ID de cliente).
8.
Escriba el secreto de cliente del proveedor de identidad OIDC en Client secret (Secreto de cliente).
9.
En la lista desplegable, elija el método de HTTP (GET o POST) empleado para obtener los detalles de usuario del punto de enlace userinfo para incluirlo en Attributes request method (Método de solicitud de atributos).
10. Escriba los nombres de los ámbitos que desea autorizar. Los ámbitos definen a qué atributos de usuario (como name y email) desea tener acceso con la aplicación. Los ámbitos se separan con espacios, conforme a la especificación OAuth 2.0. Al usuario de la aplicación se le pedirá su consentimiento para proporcionar estos atributos a la aplicación. 11. Escriba la URL del proveedor de identidad y elija Run discovery (Ejecutar detección). Por ejemplo, Salesforce usa esta URL: https://login.salesforce.com
Note La URL debe comenzar por https:// y no debe terminar con una barra /. •
Si Run discovery (Ejecutar detección) no tiene éxito, deberá especificar Authorization endpoint (Punto de enlace de autorización), Token endpoint (Punto de enlace de token), Userinfo endpoint (Punto de enlace userinfo) y Jwks uri (URI de Jwks) (la ubicación de la clave de web JSON).
12. Elija Create provider (Crear proveedor). 13. En la barra de navegación de la izquierda, elija General settings (Configuración general). 14. Seleccione el proveedor OIDC como uno de los valores de Enabled Identity Providers (Proveedores de identidad habilitados). 15. Escriba una URL de devolución de llamada para el servidor de autorización de Amazon Cognito que se llama una vez autenticados los usuarios. Esta es la URL de la página a la que se redirigirá al usuario después de iniciar sesión correctamente.
https://www.example.com
16. En Allowed OAuth Flows (Flujos OAuth permitidos), habilite Authorization code grant (Concesión de código de autorización) y también Implicit code grant (Concesión de código implícita). 193
Amazon Cognito Guía para desarrolladores Proveedores de identidad
A menos que desee excluir específicamente alguno, seleccione las casillas de verificación de todos los Allowed OAuth scopes (Ámbitos de OAuth permitidos). 17. Elija Save changes. 18. En la pestaña Attribute mapping (Mapeo de atributos) de la barra de navegación izquierda, añada mapeos de notificaciones OIDC a atributos de grupos de usuarios. a.
De forma predeterminada, a la reclamación OIDC sub se le asigna el atributo de grupo de usuarios Username (Nombre de usuario). Puede asignar a las notificaciones OIDC otros atributos de grupo de usuarios. Escriba la reclamación OIDC y elija el atributo de grupo de usuarios correspondiente en la lista desplegable. Por ejemplo, a la reclamación email (correo electrónico) se le suele asignar el atributo de grupo de usuarios Email (Correo electrónico).
b.
En la lista desplegable, elija el atributo de grupo de usuarios que desea asignar.
c.
Elija Save changes.
d.
Seleccione Go to summary (Ir al resumen).
Para obtener más información acerca los proveedores de identidad OIDC, consulte Agregar proveedores de identidad OIDC a un grupo de usuarios (p. 62).
Permitir a los usuarios iniciar sesión mediante SAML Puede utilizar la federación para que Grupos de usuarios de Amazon Cognito realice la integración con un proveedor de identidad (IdP) SAML. Proporcione un documento de metadatos, ya sea cargando el archivo o escribiendo una URL de punto de enlace del documento de metadatos. Para obtener información sobre cómo obtener documentos de metadatos para proveedores de identidad SAML de terceros, consulte Integración de proveedores de identidad SAML de terceros con Grupos de usuarios de Amazon Cognito (p. 61).
Para permitir a los usuarios iniciar sesión mediante SAML 1.
Elija SAML para mostrar las opciones del proveedor de identidad SAML.
2.
Para cargar un documento de metadatos, seleccione Select file (Seleccionar archivo) o escriba una URL de punto de enlace del documento de metadatos. El documento de metadatos debe ser un archivo XML válido.
3.
Escriba el nombre de proveedor SAML en Provider name (Nombre del proveedor) (por ejemplo, "SAML_provider_1") y todos los valores de Identifiers (Identificadores) que desee. El nombre del proveedor es obligatorio, pero los identificadores son opcionales. Para obtener más información, consulte Agregar proveedores de identidad SAML a un grupo de usuarios (p. 54).
4.
Seleccione Enable IdP sign out flow (Habilitar el flujo de cierre de sesión en el proveedor de identidad) cuando desee que el usuario cierre la sesión en un proveedor de identidad SAML al cerrar la sesión en Amazon Cognito. Al activar este flujo, se envía una solicitud de cierre de sesión firmada al proveedor de identidad SAML cuando se llama al Punto de enlace LOGOUT (p. 376).
Note Si esta opción está seleccionada y el proveedor de identidad SAML espera una solicitud de cierre de sesión firmada, también se deberá configurar el certificado de firma proporcionado por Amazon Cognito en el proveedor de identidad SAML. El proveedor de identidad SAML procesará la solicitud de cierre de sesión firmada y cerrará la sesión de Amazon Cognito del usuario. 5.
Elija Create provider (Crear proveedor).
6.
Para crear proveedores adicionales, repita los pasos anteriores. 194
Amazon Cognito Guía para desarrolladores Mapeo de atributos
Note Si ve InvalidParameterException al crear un proveedor de identidad SAML con una URL de punto de enlace de metadatos HTTPS, por ejemplo, "Error al recuperar metadatos de ," asegúrese de que el punto de enlace de metadatos tiene SSL configurado correctamente y que hay un certificado SSL válido asociado.
Para configurar el proveedor de identidad SAML para añadir un certificado de firma • Para obtener el certificado que contiene la clave pública que utilizará el proveedor de identidad para comprobar la solicitud de cierre de sesión firmada, elija Show signing certificate (Mostrar certificado de firma) en Active SAML Providers (Proveedores SAML activos) en el cuadro de diálogo SAML de la sección Identity providers (Proveedores de identidad) de la página Federation (Federación) de la consola. Para obtener más información acerca los proveedores de identidad SAML, consulte Agregar proveedores de identidad SAML a un grupo de usuarios (p. 54).
Configuración de mapeo de atributos para el grupo de usuarios Note La pestaña Attribute mapping (Mapeo de atributos) solo aparece cuando se edita un grupo de usuarios. En la pestaña Attribute mapping (Mapeo de atributos), puede asignar los atributos o aserciones de los proveedores de identidad (IdP) a los atributos del grupo de usuarios. Para obtener más información, consulte Especificación de asignaciones de atributos del proveedor de identidad para su grupo de usuarios (p. 68).
Note Actualmente, solo pueden asignarse los atributos id de Facebook, sub de Google, user_id de Login with Amazon y sub de Inicio de sesión con Apple al atributo username de los grupos de usuarios de Amazon Cognito.
Note El atributo del grupo de usuarios debe ser lo suficientemente grande como para adaptarse a los valores de los atributos de proveedor de identidad mapeados. En caso contrario, se producirá un error cuando los usuarios inicien sesión. Los atributos personalizados deben configurarse de modo que su tamaño máximo sea de 2048 caracteres si se van a mapear a tokens de proveedor de identidad. Debe crear mapeos para los atributos obligatorios en el grupo de usuarios.
Para especificar un mapeo de atributo de proveedor de identidad social para su grupo de usuarios 1. 2.
Seleccione la pestaña Facebook, Google, Amazon o Apple. Para cada atributo que necesite asignar, realice los pasos siguientes: a. b. c.
Marque la casilla Capture (Capturar). En el campo User pool attribute (Atributo de grupo de usuarios), elija el atributo del grupo de usuarios al que va a asignar el atributo de proveedor de identidad social en la lista desplegable. Para Facebook, Google y Login with Amazon, si necesita más atributos, seleccione Add Facebook attribute (Añadir atributo de Facebook), Add Google attribute (Añadir atributo de Google) o Add Amazon attribute (Añadir atributo de Amazon) y, a continuación, siga los pasos que se describen a continuación:
195
Amazon Cognito Guía para desarrolladores Gestión de respuestas de error
Note Inicio de sesión con Apple no ofrece atributos adicionales en este momento.
d.
i.
En el campo Facebook attribute (Atributo de Facebook), Google attribute (Atributo de Google) o Amazon attribute (Atributo de Amazon), escriba el nombre del atributo que desea asignar.
ii.
En el campo User pool attribute (Atributo de grupo de usuarios), elija el atributo del grupo de usuarios al que desea asignar el atributo de proveedor de identidad social en la lista desplegable.
Elija Save changes.
Para especificar un mapeo de atributo de proveedor de SAML para su grupo de usuarios 1.
Seleccione la pestaña SAML.
2.
Para cada atributo que necesite asignar, realice los pasos siguientes: a.
Elija Add SAML attribute (Añadir atributo SAML).
b.
En el campo SAML attribute (Atributo SAML), introduzca el nombre del atributo SAML que va a asignar.
c.
En el campo User pool attribute (Atributo de grupo de usuarios), elija el atributo del grupo de usuarios al que desea asignar el atributo SAML en la lista desplegable.
d.
Elija Save changes.
Gestión de respuestas de error Amazon Cognito admite la personalización de respuestas de error devueltas por grupos de usuarios de. Las respuestas de error personalizadas están disponibles para operaciones relacionadas con la autenticación, la confirmación y la recuperación de contraseñas. Utiliza el botón PreventUserExistenceErrors : configuración de un cliente de aplicación de grupo de usuarios para habilitar o deshabilitar errores relacionados con la existencia del usuario. Cuando habilita respuestas de error personalizadas, Amazon Cognito autenticación APIs devuelve una respuesta de error de autenticación genérica. La respuesta de error indica que el nombre de usuario o la contraseña son incorrectos. Amazon Cognito confirmación de cuenta y recuperación de contraseña APIs devuelve una respuesta que indica que se ha enviado un código a un medio de entrega simulado. La respuesta de error funciona cuando el estado es ENABLED y el usuario no existe. A continuación se muestran los comportamientos detallados para el Amazon Cognito las operaciones cuando PreventUserExistenceErrors está establecido en ENABLED. Operaciones de autenticación de usuarios Puede utilizar cualquier método de flujo de autenticación con las siguientes operaciones de. • AdminInitiateAuth • AdminRespondToAuthChallenge • InitiateAuth • RespondToAuthChallenge Nombre de usuario y autenticación basada en contraseña En los flujos de autenticación para ADMIN_USER_PASSWORD_AUTH y USER_PASSWORD_AUTH el nombre de usuario y la contraseña se devuelven con una única llamada de InitiateAuth. Amazon 196
Amazon Cognito Guía para desarrolladores Gestión de respuestas de error
Cognito devuelve un genérico NotAuthorizedException error que indica que el nombre de usuario o la contraseña son incorrectos. Autenticación basada en Secure Remote Password (SRP) En el flujo de autenticación USER_SRP_AUTH Amazon Cognito recibe un nombre de usuario y el parámetro SRP ‘A’ en el primer paso. En respuesta, Amazon Cognito devuelve el parámetro SRP ‘B’ y ‘sal’ para el usuario según el protocolo SRP. Cuando no se encuentra un usuario, Amazon Cognito devuelve una respuesta simulada en el primer paso como se describe en Código RFC 5054. Amazon Cognito devuelve la misma “sal” y el mismo ID de usuario interno en Único universal IDentifier (UUID [número de identificación global]) para la misma combinación de nombre de usuario y grupo de usuarios. Cuando la siguiente operación de RespondToAuthChallenge la prueba de contraseña se ejecuta, Amazon Cognito devuelve un genérico NotAuthorizedException error que indica que el nombre de usuario o la contraseña son incorrectos.
Note Puedes usar UsernamePassword para simular una respuesta genérica si utiliza alias basados en verificación y el formato del nombre de usuario inmutable no es un UUID. ForgotPassword Cuando un usuario no se encuentra, está deshabilitado o no tiene un mecanismo para recuperar su contraseña, Amazon Cognito devoluciones CodeDeliveryDetails con un medio de entrega simulado para un usuario. El medio de entrega simulado viene determinado por el formato del nombre de usuario de entrada y la configuración de verificación del grupo de usuarios. ConfirmForgotPassword Amazon Cognito devuelve el CodeMismatchException para los usuarios que no existen o están deshabilitados. Si no se solicita un código al utilizar ForgotPasswordde Amazon Cognito devuelve el ExpiredCodeException error. ResendConfirmationCode Amazon Cognito devoluciones CodeDeliveryDetails para un usuario deshabilitado o un usuario que no existe. Amazon Cognito envía un código de confirmación al correo electrónico o número de teléfono del usuario existente. ConfirmSignUp ExpiredCodeException devuelve si un código ha caducado. Amazon Cognito devoluciones NotAuthorizedException cuando un usuario no tiene autorización para. Si el código no coincide con lo que el servidor espera Amazon Cognito devoluciones CodeMismatchException. SignUp El SignUp la operación devuelve UsernameExistsException cuando un nombre de usuario ya está en uso. Para evitar el error UsernameExistsException con el correo electrónico o el número de teléfono durante SignUp, puede usar alias basados en verificación. Para obtener más información, consulte AliasAttributes Amazon Cognito Guía de referencia de la API de. Para obtener más información acerca de los alias, consulte Descripción general de los alias. Usuarios importados Si PreventUserExistenceErrors está habilitado, durante la autenticación de los usuarios importados un genérico NotAuthorizedException se devuelve un error indicando que el nombre de usuario o la contraseña era incorrecto en lugar de devolver PasswordResetRequiredException. [EMPTY] Requerir que los usuarios importados restablezcan sus contraseñas para obtener más información. Migrar usuario Lambda activador Amazon Cognito devuelve una respuesta simulada para los usuarios que no existen cuando se estableció una respuesta vacía en el contexto del evento original por parte de Lambda
197
Amazon Cognito Guía para desarrolladores Gestión de respuestas de error
desencadenador. Para obtener más información, consulte Migración del disparador de Lambda del usuario. Desafío de autenticación personalizada Lambda activador Si utilizas Desafío de autenticación personalizada Lambda Disparador y habilite las respuestas de error, LambdaChallenge devuelve un parámetro booleano denominado UserNotFound. Luego se pasa en la solicitud de DefineAuthChallengede VerifyAuthChallenge, y CreateAuthChallenge Lambda desencadena. Puede utilizar este disparador para simular desafíos de autorización personalizados para un usuario que no existe. Si llama a la preautenticación Lambda para un usuario que no existe, entonces Amazon Cognito devoluciones UserNotFound.
198
Amazon Cognito Guía para desarrolladores Introducción a grupos de identidades
Amazon CognitoGrupos de identidades de (identidades federadas) Amazon CognitoLos grupos de identidades de (identidades federadas) le permiten crear identidades únicas para sus usuarios y federarlas con proveedores de identidad. Con un grupo de identidades, puede obtener credenciales de AWS temporales con privilegios limitados para obtener acceso a otros servicios de AWS. Los grupos de identidades de Amazon Cognito admiten los siguientes proveedores de identidad: • Proveedores públicos: Login with Amazon (Grupos de identidades) (p. 239), Facebook (Grupos de identidades) (p. 234), Google (Grupos de identidades) (p. 242), Sign in with Apple (Grupos de identidades) (p. 249). • Grupos de usuarios de Amazon Cognito (p. 17) • Proveedores de OpenID Connect (Grupos de identidades) (p. 254) • Proveedores de identidad SAML (grupos de identidades) (p. 256) • Identidades autenticadas por el desarrollador (grupos de identidades) (p. 258) Para obtener información acerca de la disponibilidad regional de grupos de identidades de Amazon Cognito, consulte la disponibilidad regional de los servicios de AWS. Para obtener más información acerca de grupos de identidades de Amazon Cognito, consulte los siguientes temas. Temas • Introducción a grupos de identidades de Amazon Cognito (identidades federadas) (p. 199) • Uso de grupos de identidades (identidades federadas) (p. 201) • Conceptos de grupos de identidades (identidades federadas) (p. 206) • Uso de atributos para el control de acceso como una forma de control de acceso basado en atributos (p. 217) • Control de acceso basado en roles (p. 221) • Obtención de credenciales (p. 225) • Acceso a los servicios de AWS (p. 232) • Proveedores de identidad externos de grupos de identidades (identidades federadas) (p. 233) • Identidades autenticadas por el desarrollador (grupos de identidades) (p. 258) • Cambio de los usuarios sin autenticar a los usuarios autenticados (Grupos de identidades) (p. 269)
Introducción a grupos de identidades de Amazon Cognito (identidades federadas) Amazon CognitoLos grupos de identidades de le permiten crear identidades únicas y asignar permisos a los usuarios. El grupo de identidades puede incluir:
199
Amazon Cognito Guía para desarrolladores Inscripción en una cuenta de AWS
• Usuarios de un grupo de usuarios de Amazon Cognito • Usuarios que se autentican con proveedores de identidad externos como Facebook, Google, Apple o un proveedor de identidad basado en SAML. • Usuarios que se autentican de acuerdo con el proceso de autenticación existente. Con un grupo de identidades, puede obtener credenciales de AWS temporales con permisos que puede definir para tener acceso directo a otros servicios de AWS o para tener acceso a recursos mediante Amazon API Gateway. Temas • Inscripción en una cuenta de AWS (p. 200) • Creación de un grupo de identidades en Amazon Cognito (p. 200) • Instalación del Mobile o JavaScript SDK (p. 201) • Integración de los proveedores de identidad (p. 201) • Obtención de credenciales (p. 201)
Inscripción en una cuenta de AWS Para usar los grupos de identidades de Amazon Cognito, necesita disponer de una cuenta de AWS. Si todavía no tiene una, ejecute el procedimiento siguiente para inscribirse:
Para inscribirse en una cuenta de AWS 1.
Abra https://portal.aws.amazon.com/billing/signup.
2.
Siga las instrucciones en línea. Parte del procedimiento de inscripción consiste en recibir una llamada telefónica e indicar un código de verificación en el teclado del teléfono.
Creación de un grupo de identidades en Amazon Cognito Puede crear un grupo de identidades a través de la Amazon Cognito consola de o puede utilizar la interfaz de línea de comandos (CLI) de AWS o la Amazon Cognito APIs.
Para crear un grupo de identidades nuevo en la consola 1.
Inicie sesión en la consola de Amazon Cognito, elija Manage Identity Pools (Administrar grupos de identidades) y, a continuación, elija Create new identity pool (Crear nuevo grupo de identidades).
2.
Especifique un nombre para el grupo de identidades.
3.
Para habilitar las identidades sin autenticar, seleccione Enable access to unauthenticated identities (Habilitar acceso a identidades sin autenticar) en la sección Unauthenticated identities contraíble (Indice identidades sin autenticar).
4.
Si lo desea, configure un proveedor de autenticación en la sección Authentication providers (Proveedores de autenticación).
5.
Elija Create Pool.
Note Se requiere al menos una identidad para un grupo de identidades válido. 200
Amazon Cognito Guía para desarrolladores Instalación del Mobile o JavaScript SDK
6.
Se le solicitará acceso a sus recursos de AWS. Elija Allow (Permitir) para crear los dos roles predeterminados asociados a su grupo de identidades: uno para los usuarios sin autenticar y otro para los usuarios autenticados. Estos roles predeterminados proporcionan al grupo de identidades acceso a Amazon Cognito Sync. Puede modificar los roles asociados a su grupo de identidades en la consola de IAM.
Instalación del Mobile o JavaScript SDK Para utilizar grupos de Amazon Cognito identidades de , debe instalar y configurar AWS Mobile o JavaScript el SDK. Para obtener más información, consulte los siguientes temas: • Configurar el SDK de AWS Mobile para Android • Configurar el SDK de AWS Mobile para iOS • Configuración de AWS SDK para JavaScript • Configurar el SDK de AWS Mobile para Unity • Configurar el SDK de AWS Mobile para .NET y Xamarin
Integración de los proveedores de identidad Amazon Cognito Los grupos de identidades de (identidades federadas) admiten la autenticación de usuarios a través de grupos de Amazon Cognito usuarios de , proveedores —de identidad federadas incluidos Amazon, Facebook, Google, Apple y proveedores —de identidad SAML, así como identidades sin autenticar. Esta característica también admite Identidades autenticadas por el desarrollador (grupos de identidades) (p. 258), lo que le permite registrar y autenticar usuarios siguiendo su propio proceso de autenticación de backend. Para obtener más información acerca del uso de un grupo de usuarios de Amazon Cognito para crear su propio directorio de usuarios, consulte Grupos de usuarios de Amazon Cognito (p. 17) y Acceso a los servicios de AWS utilizando un grupo de identidades después del inicio de sesión (p. 168). Para obtener más información acerca del uso de proveedores de identidad externos, consulte Proveedores de identidad externos de grupos de identidades (identidades federadas) (p. 233). Para obtener más información acerca de la integración de su propio proceso de autenticación de backend, consulte Identidades autenticadas por el desarrollador (grupos de identidades) (p. 258).
Obtención de credenciales Amazon CognitoLos grupos de identidades de proporcionan credenciales AWS temporales a los usuarios invitados (sin autenticar) y a los usuarios que se han autenticado y han recibido un token. Con estas credenciales de AWS la aplicación puede obtener un acceso seguro a un backend en AWS o fuera de AWS mediante Amazon API Gateway. Consulte Obtención de credenciales (p. 225).
Uso de grupos de identidades (identidades federadas) Amazon CognitoLos grupos de identidades de proporcionan credenciales AWS temporales para los usuarios invitados (sin autenticar) y para los usuarios que se han autenticado y han recibido un token. Un grupo de identidades es un almacén de datos de identidades de usuarios específicos de su cuenta.
201
Amazon Cognito Guía para desarrolladores Roles de IAM de usuario
Para crear un grupo de identidades nuevo en la consola 1. 2. 3. 4. 5.
Inicie sesión en la consola de Amazon Cognito, elija Manage Identity Pools (Administrar grupos de identidades) y, a continuación, elija Create new identity pool (Crear nuevo grupo de identidades). Especifique un nombre para el grupo de identidades. Para habilitar las identidades sin autenticar, seleccione Enable access to unauthenticated identities (Habilitar acceso a identidades sin autenticar) en la sección Unauthenticated identities contraíble (Indice identidades sin autenticar). Si lo desea, configure un proveedor de autenticación en la sección Authentication providers (Proveedores de autenticación). Elija Create Pool.
Note Se requiere al menos una identidad para un grupo de identidades válido. 6.
Se le solicitará acceso a sus recursos de AWS. Elija Allow (Permitir) para crear los dos roles predeterminados asociados a su grupo de identidades: uno para los usuarios sin autenticar y otro para los usuarios autenticados. Estos roles predeterminados proporcionan al grupo de identidades acceso a Amazon Cognito Sync. Puede modificar los roles asociados a su grupo de identidades en la consola de IAM. Para obtener instrucciones adicionales acerca de cómo trabajar con la consola de Amazon Cognito, consulte Uso de la consola de Amazon Cognito (p. 3).
Roles de IAM de usuario Un rol de IAM define los permisos que permiten a sus usuarios obtener acceso a los recursos de AWS como, por ejemplo, Amazon Cognito Sync (p. 272). Los usuarios de su aplicación asumirán los roles que cree. Puede especificar otros roles para usuarios autenticados y sin autenticar. Para obtener más información acerca de los roles de IAM, consulte Roles de IAM (p. 211).
Identidades autenticadas y sin autenticar Amazon CognitoLos grupos de identidades de admiten tanto las identidades autenticadas como las identidades sin autenticar. Las identidades autenticadas pertenecen a los usuarios que se han autenticado mediante un proveedor de identidad compatible. En cuanto a las identidades sin autenticar normalmente corresponden a usuarios invitados. • Para configurar identidades autenticadas en un proveedor de inicio de sesión público, consulte Proveedores de identidad externos de grupos de identidades (identidades federadas) (p. 233). • Para configurar su propio proceso de autenticación de backend, consulte Identidades autenticadas por el desarrollador (grupos de identidades) (p. 258).
Activación o desactivación de identidades sin autenticar Amazon CognitoLos grupos de identidades de pueden admitir las identidades sin autenticar proporcionando un identificador único y credenciales de AWS a los usuarios que no se autentiquen con un proveedor de identidad. Si su aplicación permite usuarios que no inician sesión, puede activar el acceso de identidades sin autenticar. Para obtener más información, consulte Introducción a grupos de identidades de Amazon Cognito (identidades federadas) (p. 199). Elija Manage Identity Pools (Administrar grupos de identidades) en la consola de Amazon Cognito:
202
Amazon Cognito Guía para desarrolladores Cambio del rol asociado a un tipo de identidad
1. Haga clic en el nombre del grupo de identidades para el que desee activar o desactivar las identidades sin autenticar. Aparecerá la página Dashboard (Panel) del grupo de identidades. 2. En la esquina superior derecha de la página Dashboard (Panel), haga clic en Edit identity pool (Editar grupo de identidades). Aparece la página Edit identity pool (Editar grupo de identidades). 3. Desplácese hacia abajo y haga clic en Unauthenticated identities (Identidades sin autenticar) para ampliarla. 4. Seleccione la casilla para activar o desactivar el acceso de las identidades sin autenticar. 5. Haga clic en Save Changes (Guardar cambios).
Cambio del rol asociado a un tipo de identidad Los grupos de identidades definen dos tipos de identidades: autenticadas y sin autenticar. Cada identidad del grupo de identidades es autenticada o sin autenticar. Las identidades autenticadas pertenecen a usuarios que se autentican mediante un proveedor de inicio de sesión público (Amazon Cognitogrupos de usuarios de , Login with Amazon, Sign in with Apple, Facebook, Google, SAML o cualquier proveedor de OpenID conexión) o un proveedor de desarrollador (su propio proceso de autenticación backend). En cuanto a las identidades sin autenticar normalmente corresponden a usuarios invitados. Cada tipo de identidad tiene un rol asignado. Este rol tiene una política adjunta que dicta a qué servicios de AWS puede tener acceso dicho rol. Cuando Amazon Cognito reciba una solicitud, el servicio determinará el tipo de identidad y el rol asignado a dicho tipo de identidad, y utilizará la política adjunta a ese rol para responder. Si modifica una política o asigna un rol diferente a un tipo de identidad, puede controlar a qué servicios de AWS puede tener acceso un tipo de identidad. Para ver o modificar las políticas asociadas a los roles en su grupo de identidades, consulte la consola de AWS IAM. Puede cambiar fácilmente la función que está asociada a un tipo de identidad utilizando la consola de grupo de identidades de Amazon Cognito (identidades federadas). Elija Manage Identity Pools (Administrar grupos de identidades) en la consola de Amazon Cognito: 1. Haga clic en el nombre del grupo de identidades cuyos roles desee modificar. Aparecerá la página Dashboard (Panel) del grupo de identidades. 2. En la esquina superior derecha de la página Dashboard (Panel), haga clic en Edit identity pool (Editar grupo de identidades). Aparecerá la página Edit identity pool (Editar grupo de identidades). 3. Utilice los menús desplegables situados junto a Unauthenticated role (Rol sin autenticar) y Authenticated role (Rol autenticado) para cambiar los roles. Haga clic en Create new role (Crear nuevo rol) para crear o modificar los roles asociados a cada tipo de identidad en la consola de AWS IAM. Para obtener más información, consulte Roles de IAM.
Activación o edición de proveedores de autenticación Si permite a los usuarios que se autentiquen mediante proveedores de identidad públicos (por ejemplo, grupos de usuarios de Amazon Cognito, Login with Amazon, Sign in with Apple, Facebook, Google), puede indicar los identificadores de su aplicación en la consola de grupos de identidades de Amazon Cognito (identidades federadas). De esta forma, asociará el ID de la aplicación (proporcionado por el proveedor de inicio de sesión público) a su grupo de identidades. También puede configurar en esta página reglas de autenticación para cada proveedor. Cada proveedor permite un máximo de 25 reglas. Las reglas se aplican en el orden que ha seguido para guardarlas para cada proveedor. Para obtener más información, consulte Control de acceso basado en roles (p. 221).
Warning Si cambia el ID de la aplicación a la que está vinculado un grupo de identidades, los usuarios existentes dejarán de poder autenticarse con dicho grupo de identidades. Más información sobre Proveedores de identidad externos de grupos de identidades (identidades federadas) (p. 233).
203
Amazon Cognito Guía para desarrolladores Eliminación de un grupo de identidades
Elija Manage Identity Pools (Administrar grupos de identidades) en la consola de Amazon Cognito: 1. Haga clic en el nombre del grupo de identidades para el que desee habilitar el proveedor externo. Aparecerá la página Dashboard (Panel) del grupo de identidades. 2. En la esquina superior derecha de la página Dashboard (Panel), haga clic en Edit identity pool (Editar grupo de identidades). Aparecerá la página Edit identity pool (Editar grupo de identidades). 3. Desplácese hacia abajo y haga clic en Authentication providers (Proveedores de autenticación) para ampliarlo. 4. Haga clic en la pestaña del proveedor pertinente e introduzca la información requerida asociada a dicho proveedor de autenticación.
Eliminación de un grupo de identidades Elija Manage Identity Pools (Administrar grupos de identidades) en la consola de Amazon Cognito: 1. Haga clic en el nombre del grupo de identidades que desee eliminar. Aparecerá la página Dashboard (Panel) del grupo de identidades. 2. En la esquina superior derecha de la página Dashboard (Panel), haga clic en Edit identity pool (Editar grupo de identidades). Aparece la página Edit identity pool (Editar grupo de identidades). 3. Desplácese hacia abajo y haga clic en Delete identity pool (Eliminar grupo de identidades) para ampliarlo. 4. Haga clic en Delete identity pool (Eliminar grupo de identidades). 5. Haga clic en Delete pool (Eliminar grupo).
Warning Si hace clic en el botón Delete, eliminará permanentemente el grupo de identidades y todos los datos de usuarios que dicho grupo contiene. La eliminación de un grupo de identidades hace que las aplicaciones y los demás servicios que usan el grupo dejen de funcionar.
Eliminación de una identidad de un grupo de identidades Elija Manage Identity Pools (Administrar grupos de identidades) en la consola de Amazon Cognito: 1. Haga clic en el nombre del grupo de identidades que contiene la identidad que desea eliminar. Aparecerá la página Dashboard (Panel) del grupo de identidades. 2. En el panel de navegación de la izquierda de la página Dashboard (Panel), haga clic en Identity browser (Explorador de identidades). Aparece la página Identities (Identidades). 3. En la página Identities (Identidades), especifique el ID de las identidades que desee eliminar y, a continuación, haga clic en Search (Buscar). 4. En la página Identity details (Detalles de la identidad), haga clic en el botón Delete identity (Eliminar identidad) y, a continuación, haga clic en Delete (Eliminar).
Administración de conjuntos de datos Si ha implementado la funcionalidad Amazon Cognito Sync en la aplicación, la consola de grupos de identidades de Amazon Cognito le permite crear y eliminar manualmente conjuntos de datos y registros de identidades individuales. Cualquier cambio que realice en el conjunto de datos o en los registros de una identidad en la consola de grupos de identidades de Amazon Cognito no se guardará hasta que no haya hecho clic en Synchronize en la consola y el usuario final no lo verá hasta que las llamadas de identidad se
204
Amazon Cognito Guía para desarrolladores Publicación en masa de datos
sincronicen. Los datos que se estén sincronizando desde otros dispositivos para identidades individuales se verán cuando actualice la página de conjuntos de datos de lista de una identidad determinada.
Creación de un conjunto de datos para una identidad Elija Manage Identity Pools (Administrar grupos de identidades) en la Amazon Cognito consola de grupos de Amazon Cognito identidades de : 1. Haga clic en el nombre del grupo de identidades que contiene la identidad para la que desea crear un conjunto de datos. Aparecerá la página Dashboard (Panel) del grupo de identidades. 2. En el panel de navegación de la izquierda de la página Dashboard (Panel), haga clic en Identity browser (Explorador de identidades). Aparece la página Identities (Identidades). 3. En la página Identities (Identidades), introduzca el ID de la identidad para la que desee crear un conjunto de datos y, a continuación, haga clic en Search (Buscar). 4. En la página Identity details (Detalles de la identidad) de dicha identidad, haga clic en el botón Create dataset (Crear conjunto de datos), especifique un nombre de conjunto de datos y, a continuación, haga clic en Create and edit dataset (Crear y editar conjunto de datos). 5. En la página Current dataset (Conjunto de datos actual), haga clic en Create record (Crear registro) para crear un registro para almacenarlo en ese conjunto de datos. 6. Introduzca una clave para ese conjunto de datos, el valor o valores JSON válidos para almacenar y, a continuación, haga clic en Format as JSON (Formatear como JSON) para autenticar el valor que ha introducido y confirmar que es JSON con el formato correcto. Cuando haya acabado, haga clic en Save Changes (Guardar cambios). 7. Haga clic en Synchronize (Sincronizar) para sincronizar el conjunto de datos. Los cambios no se guardarán hasta que haga clic en Synchronize y el usuario no los verá hasta que la identidad llame a sincronizar. Para desechar los cambios no sincronizados, seleccione el cambio que desee descartar y, a continuación, haga clic en Discard changes (Descartar cambios).
Eliminación de un conjunto de datos asociado a una identidad Elija Manage Identity Pools (Administrar grupos de identidades) en la consola de Amazon Cognito: 1. Haga clic en el nombre del grupo de identidades que contiene la identidad para la que desea eliminar un conjunto de datos. Aparecerá la página Dashboard (Panel) del grupo de identidades. 2. En el panel de navegación de la izquierda de la página Dashboard (Panel), haga clic en Identity browser (Explorador de identidades). Aparece la página Identities (Identidades). 3. En la página Identities (Identidades), introduzca el ID de la identidad que contiene el conjunto de datos que desea eliminar y, a continuación, haga clic en Search (Buscar). 4. En la página Identity details (Detalles de la identidad), seleccione la casilla situada junto al conjunto o los conjuntos de datos que desee eliminar, haga clic en Delete selected (Eliminar seleccionados) y, a continuación, haga clic en Delete (Eliminar).
Publicación en masa de datos La publicación por lotes se puede utilizar para exportar datos que ya están almacenados en un almacén de Amazon Cognito Sync a un flujo de Kinesis Para obtener instrucciones sobre cómo publicar en masa todos los flujos, consulte Flujos de Amazon Cognito (p. 299).
Activación de la sincronización mediante inserción Amazon Cognito hace automáticamente un seguimiento de la asociación entre identidad y dispositivos. El uso de la característica de sincronización por inserción puede garantizar que todas las instancias de una
205
Amazon Cognito Guía para desarrolladores Configuración de transmisiones de Amazon Cognito
determinada identidad reciban una notificación cuando cambien los datos de identidad. La sincronización por inserción garantiza que, siempre que los datos del almacén de sincronización cambien para una identidad determinada, todos los dispositivos asociados recibirán una notificación de inserción silenciosa que informe del cambio. Puede habilitar la sincronización mediante inserción usando la consola de Amazon Cognito Elija Manage Identity Pools (Administrar grupos de identidades) en la consola de Amazon Cognito: 1. Haga clic en el nombre del grupo de identidades para el que desea habilitar la sincronización por inserción. Aparecerá la página Dashboard (Panel) del grupo de identidades. 2. En la esquina superior derecha de la página Dashboard (Panel), haga clic en Edit identity pool (Editar grupo de identidades). Aparecerá la página Edit identity pool (Editar grupo de identidades). 3. Desplácese hacia abajo y haga clic en Push synchronization (Insertar sincronización) para ampliarlo. 4. En el menú desplegable Service role (Rol de servicio), seleccione el rol de IAM que concede Amazon Cognito permiso para enviar una notificación de SNS. Haga clic en Create role (Crear rol) para crear o modificar los roles asociados a su grupo de identidades en la consola de AWS IAM. 5. Seleccione una aplicación de plataforma y, a continuación, haga clic en Save Changes (Guardar cambios).
Configuración de transmisiones de Amazon Cognito Amazon CognitoLa característica de secuencias de proporciona a los desarrolladores control y una vista de los datos que tienen almacenados en Amazon Cognito Sync. Ahora, los desarrolladores pueden configurar una secuencia de Kinesis para recibir eventos como datos. Amazon Cognito puede insertar cada cambio del conjunto de datos en tiempo real en una secuencia de Kinesis que le pertenezca. Para obtener instrucciones acerca de cómo configurar las secuencias de Amazon Cognito en la consola de Amazon Cognito, consulte Flujos de Amazon Cognito (p. 299).
Configuración de eventos de Amazon Cognito Los eventos de Amazon Cognito le permiten ejecutar una función AWS Lambda en respuesta a eventos importantes de Amazon Cognito Sync. Amazon Cognito Sync lanza el evento disparador de sincronización cuando se sincroniza un conjunto de datos. Puede utilizar el evento disparador de la sincronización para actuar cuando un usuario actualiza los datos. Para obtener instrucciones acerca de cómo configurar eventos de Amazon Cognito desde la consola, consulte Eventos de Amazon Cognito (p. 301). Para obtener más información acerca de AWS Lambda, consulte AWS Lambda.
Conceptos de grupos de identidades (identidades federadas) Los grupos de identidades de Amazon Cognito le permiten crear identidades exclusivas para los usuarios y autenticarlas con proveedores de identidad. Con una identidad, puede obtener credenciales de AWS temporales con privilegios limitados para acceder a otros servicios de AWS. Los grupos de identidades de Amazon Cognito admiten proveedores de identidades públicos (Amazon, Apple, Facebook y Google) así como identidades sin autenticar. También es compatible con las identidades autenticadas de desarrollador, que permiten registrar y autenticar a los usuarios mediante su propio proceso de autenticación de backend. Para obtener información acerca de la disponibilidad regional de grupos de identidades de Amazon Cognito, consulte la disponibilidad regional de los servicios de AWS. Para obtener más información acerca de los conceptos de grupos de identidades de Amazon Cognito, consulte los siguientes temas.
206
Amazon Cognito Guía para desarrolladores Flujo de autenticación de grupos de identidades
Temas • Flujo de autenticación de grupos de identidades (identidades federadas) (p. 207) • Roles de IAM (p. 211) • Confianza y permisos de rol (p. 216)
Flujo de autenticación de grupos de identidades (identidades federadas) Amazon Cognito le ayuda a crear identificadores únicos para los usuarios finales, que son homogéneos en los distintos dispositivos y plataformas. Amazon Cognito también suministra credenciales temporales con privilegios limitados a su aplicación para obtener acceso a los recursos de AWS. En esta página se describen los aspectos básicos de cómo funciona la autenticación en Amazon Cognito y se explica el ciclo de vida de una identidad dentro de su grupo de identidades. Flujo de autenticación con proveedores externos Un usuario que se autentique con Amazon Cognito seguirá un proceso de varias etapas para realizar el arranque de las credenciales. Amazon Cognito cuenta con dos flujos diferentes para la autenticación con proveedores públicos: el flujo básico y el mejorado. Una vez que haya completado uno de estos flujos, podrá obtener acceso a otros servicios de AWS, de conformidad con lo definido en las políticas de acceso de sus roles. De forma predeterminada, la consola de Amazon Cognito creará roles con acceso al almacén de Amazon Cognito Sync y a Amazon Mobile Analytics. Para obtener más información sobre cómo conceder acceso adicional, consulte Roles de IAM (p. 211). Flujo de autenticación mejorado (simplificado) 1. GetId 2. GetCredentialsForIdentity
Flujo de autenticación básico (clásico) 1. GetId 2. GetOpenIdToken 3. AssumeRoleWithWebIdentity 207
Amazon Cognito Guía para desarrolladores Flujo de autenticación de grupos de identidades
Flujo de autenticación de identidades autenticadas por el desarrollador Cuando se utiliza Identidades autenticadas por el desarrollador (grupos de identidades) (p. 258), el cliente usa otro flujo de autenticación que incluye código fuera de Amazon Cognito para validar al usuario en el propio sistema de autenticación del desarrollador. El código de fuera de Amazon Cognito está indicado como tal. Flujo de autenticación mejorado 1. Inicio de sesión a mediante un proveedor de desarrollador (código fuera de Amazon Cognito) 2. Validación del inicio de sesión del usuario (código fuera de Amazon Cognito) 3. GetOpenIdTokenForDeveloperIdentity 4. GetCredentialsForIdentity
Flujo de autenticación básico 1. Inicio de sesión a mediante un proveedor de desarrollador (código fuera de Amazon Cognito) 2. Validación del inicio de sesión del usuario (código fuera de Amazon Cognito) 3. GetOpenIdTokenForDeveloperIdentity 4. AssumeRoleWithWebIdentity
208
Amazon Cognito Guía para desarrolladores Flujo de autenticación de grupos de identidades
¿Qué flujo de autenticación debo usar? Para la mayoría de los clientes, el flujo mejorado es la opción adecuada, ya que ofrece muchos beneficios en comparación con el flujo básico: • Una llamada de red menos para obtener credenciales en el dispositivo. • Todas las llamadas se realizan a Amazon Cognito, lo que significa que también hay una conexión de red menos. • Los roles ya no tienen que estar integrados en la aplicación, solo se necesita un ID de grupo de identidades y una región para iniciar el proceso de arranque de las credenciales. Desde febrero de 2015, la consola de Amazon Cognito muestra código de ejemplo que utiliza el flujo mejorado. Además, la consola mostrará una notificación si su grupo de identidades no tiene la asociación de rol necesaria para utilizar el flujo mejorado. A continuación se muestra una lista de las versiones de SDK mínimas compatibles con el flujo mejorado: SDK (versión mínima) • AWS SDK para iOS (2.0.14) • AWS SDK para Android (2.1.8) • AWS SDK para JavaScript (2.1.7) • AWS SDK para Unity (1.0.3) • AWS SDK para Xamarin (3.0.0.5) Siempre puede optar por utilizar el flujo básico si desea utilizar más de los dos roles configurados de forma predeterminada al crear un grupo de identidades nuevo en la consola. Resumen de las API GetId La llamada al API GetId es la primera llamada necesaria para establecer una nueva identidad en Amazon Cognito. Acceso sin autenticar Amazon Cognito tiene la capacidad de permitir el acceso de invitado sin autenticar a sus aplicaciones. Si esta característica está habilitada en el grupo de identidades, los usuarios pueden solicitar un ID de identidad nuevo en cualquier momento mediante la API GetId. Se espera que la aplicación almacene en caché este ID de identidad para realizar llamadas posteriores a Amazon Cognito. Los SDK para móviles
209
Amazon Cognito Guía para desarrolladores Flujo de autenticación de grupos de identidades
de AWS y el AWS SDK para JavaScript del navegador tienen proveedores de credenciales que gestionan este almacenamiento en caché en su lugar. Acceso autenticado Si configura su aplicación para que sea compatible con un proveedor de inicio de sesión público (Facebook, Google+, Login with Amazon o Sign in with Apple), los usuarios también podrán suministrar tokens (OAuth u OpenID Connect) que los identifiquen en dichos proveedores. Cuando se utiliza en una llamada a GetId, Amazon Cognito crea una identidad autenticada o devuelve la identidad ya asociada a dicho inicio de sesión. Para ello, Amazon Cognito valida el token con el proveedor y comprueba que se cumplen las condiciones siguientes: • El token es válido y del proveedor configurado • El token no está caducado • El token coincide con el identificador de aplicaciones creado en dicho proveedor (por ejemplo, el ID de aplicación de Facebook) • El token coincide con el identificador de usuario GetCredentialsForIdentity Se puede llamar al API GetCredentialsForIdentity y, a continuación, de establecer un ID de identidad. Desde un punto de vista funcional, esta API equivale a llamar a GetOpenIdToken seguido por AssumeRoleWithWebIdentity. Para que Amazon Cognito llame a AssumeRoleWithWebIdentity en su nombre, su grupo de identidades debe tener roles de IAM asociados. Puede hacerlo a través de la consola de Amazon Cognito o bien manualmente, ejecutando la operación SetIdentityPoolRoles (consulte la referencia de la API) GetOpenIdToken La llamada al API GetOpenIdToken se realiza después de establecer un ID de identidad. Si tiene un ID de identidad en la memoria caché, esta puede ser la primera llamada que realice durante una sesión de la aplicación. Acceso sin autenticar Para obtener un token para una identidad sin autenticar, solo necesita el ID de identidad. No es posible obtener un token sin autenticar para identidades autenticadas o deshabilitadas. Acceso autenticado Si tiene una identidad autenticada, debe transmitir al menos un token válido para un inicio de sesión que ya esté asociado a dicha identidad. Todos los tokens que se transmitan durante la llamada GetOpenIdToken deben pasar la misma validación mencionada anteriormente; si alguno de los tokens falla, toda la llamada fallará. La respuesta de la llamada GetOpenIdToken también incluye el ID de identidad, ya que es posible que el ID de identidad que pasa no sea el que se devuelva. Vinculación de inicios de sesión Si pasa un token para un inicio de sesión que todavía no tiene ninguna identidad asociada, se considerará que el inicio de sesión está "vinculado" a la identidad asociada. Solo puede vincular un inicio de sesión por proveedor público. Los intentos de vincular más de un inicio de sesión a un proveedor público generarán una ResourceConflictException. Si un inicio de sesión solo está vinculado a una identidad existente, el ID de identidad que GetOpenIdToken devuelva será el mismo que el que se pasó. Combinación de identidades Si pasa un token para un inicio de sesión que no está vinculado a la identidad determinada, pero está vinculado a otra identidad, las dos identidades se combinan. Una vez combinadas, una identidad se
210
Amazon Cognito Guía para desarrolladores Roles de IAM
convertirá en la identidad principal/propietaria de todos los inicios de sesión asociados mientras que la otra se deshabilitará. En este caso, se devuelve el ID de identidad principal/propietario. Deberá actualizar la memoria caché local si este valor es diferente (el procedimiento es automático si utiliza los proveedores de AWS SDK para móviles o de AWS SDK para JavaScript en el navegador). GetOpenIdTokenForDeveloperIdentity La API GetOpenIdTokenForDeveloperIdentity sustituye el uso de GetId y GetOpenIdToken desde el dispositivo cuando se utilizan las identidades autenticadas por el desarrollador. Dado que esta llamada al API tiene la firma de sus credenciales de AWS, Amazon Cognito puede confiar en que el identificador de usuario suministrado en la llamada al API es válido. Este enfoque sustituye al de validación de token que Amazon Cognito realiza con los proveedores externos. La carga de esta API incluye una asignación de inicios de sesión que debe contener la clave de su proveedor de desarrollador y un valor como identificador del usuario en su sistema. Si el identificador de usuario todavía no está vinculado a una identidad, Amazon Cognito creará una identidad nueva y devolverá el ID de la identidad nueva y un token de OpenId Connect para dicha identidad. Si el identificador del usuario ya está vinculado, Amazon Cognito devolverá el ID de identidad preexistente y un token de OpenId Connect. Vinculación de inicios de sesión Al igual que ocurre con los proveedores externos, si se suministran inicios de sesión que todavía no están asociados a una identidad, los inicios de sesión se vincularán implícitamente a dicha identidad. Es importante tener en cuenta que si vincula un inicio de sesión de proveedor externo a una identidad, el usuario puede utilizar el flujo de autenticación del proveedor externo con ese proveedor, pero no puede utilizar su nombre de proveedor de desarrollador en la asignación de inicios de sesión al llamar a GetId GetOpenIdToken. Combinación de identidades En cuanto a las identidades autenticadas por el desarrollador, Amazon Cognito es compatible con la combinación implícita y la explícita mediante la API MergeDeveloperIdentities. Esta combinación explícita le permite marcar dos identidades con los identificadores de usuario de su sistema como una identidad única. Solo tiene que proporcionar los identificadores de usuario de origen y de destino y Amazon Cognito los combinará. La siguiente vez que solicite un token de OpenId Connect para cada una de las identidades de usuario, se devolverá el mismo ID de identidad. AssumeRoleWithWebIdentity Una vez que tenga un token de OpenID Connect, lo puede intercambiar por las credenciales temporales de AWS mediante la llamada al API AssumeRoleWithWebIdentity de AWS Security Token Service (STS). Esta llamada equivale a utilizar Facebook, Google+, Login with Amazon o Sign in with Apple directamente, salvo que esté pasando un token de Amazon Cognito en lugar de pasar un token de uno de los otros proveedores públicos. Dado que no hay restricciones sobre el número de identidades que se pueden crear, es importante comprender los permisos que se conceden a los usuarios. Recomendamos tener dos roles diferentes para su aplicación: uno para los de usuarios sin autenticar y otro para los usuarios autenticados. La consola de Amazon Cognito creará de forma predeterminada estos roles la primera vez que configure su grupo de identidades. La política de acceso para estos dos roles será exactamente la misma: conceder a los usuarios acceso a Amazon Cognito Sync y enviar eventos a Amazon Mobile Analytics. Puede modificar estos roles (y le animamos a ello) para satisfacer sus necesidades. Encontrará más información en Confianza y permisos de rol (p. 216).
Roles de IAM En el proceso de creación de un grupo de identidades, se le solicita que actualice los roles de IAM que sus usuarios asumen. Los roles de IAM funcionan de la forma siguiente: cuando un usuario inicia sesión en su
211
Amazon Cognito Guía para desarrolladores Roles de IAM
aplicación, Amazon Cognito genera credenciales temporales de AWS para el usuario. Estas credenciales temporales se asocian a un rol de IAM específico. El rol de IAM le permite definir un conjunto de permisos para tener acceso a sus recursos de AWS. Puede especificar los roles de IAM predeterminados para usuarios autenticados y sin autenticar. Asimismo, puede definir reglas para elegir el rol de cada usuario en función de las notificaciones contenidas en el token de ID. Para obtener más información, consulte Control de acceso basado en roles (p. 221). De forma predeterminada, la consola de Amazon Cognito crea roles de IAM que proporcionan acceso a Amazon Mobile Analytics y a Amazon Cognito Sync. O bien, puede optar por utilizar los de IAM existentes. Para modificar los roles de IAM con el fin de permitir o restringir el acceso a otros servicios, inicie sesión en la consola de IAM. A continuación, haga clic en Roles y seleccione un rol. Las políticas adjuntas al rol seleccionado se indican en la pestaña Permissions. Puede personalizar una política de acceso haciendo clic en el enlace Manage Policy correspondiente. Para obtener más información sobre el uso y la definición de políticas, consulte lainformación general sobre las políticas de IAM.
Note Como práctica recomendada, defina políticas que sigan el principio de concesión de privilegios mínimos. En otras palabras, las políticas incluyen solo los permisos que los usuarios necesitan para llevar a cabo sus tareas. Para obtener más información, consulte la sección de concesión de privilegios mínimos en la Guía del usuario de IAM. Recuerde que las identidades sin autenticar las asumen los usuarios que no inician sesión en su aplicación. Normalmente, los permisos que asigna para las identidades sin autenticar deben ser más restrictivas que los de las identidades autenticadas. Temas • Configuración de una política de confianza (p. 212) • Políticas de acceso (p. 213)
Configuración de una política de confianza Amazon Cognito aprovecha los roles de IAM para generar credenciales temporales para los usuarios de su aplicación. El acceso a los permisos se controla mediante las relaciones de confianza de un rol. Encontrará más información en Confianza y permisos de rol (p. 216). Reutilización de roles en los grupos de identidades Para reutilizar un rol en varios grupos de identidades que comparten un conjunto de permisos comunes, puede incluir varios grupos de identidades, como se indica a continuación: "StringEquals": { "cognito-identity.amazonaws.com:aud": [ "us-east-1:12345678-abcd-abcd-abcd-123456790ab", "us-east-1:98765432-dcba-dcba-dcba-123456790ab" ] }
Restricción del acceso a identidades concretas Para crear una política limitada a un conjunto específico de usuarios de la aplicación, compruebe el valor de cognito-identity.amazonaws.com:sub: "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-abcd-abcd-abcd-123456790ab", "cognito-identity.amazonaws.com:sub": [ "us-east-1:12345678-1234-1234-1234-123456790ab",
212
Amazon Cognito Guía para desarrolladores Roles de IAM
}
]
"us-east-1:98765432-1234-1234-1243-123456790ab"
Restricción del acceso a proveedores concretos Para crear una política limitada a los usuarios que han iniciado sesión con un proveedor específico (quizás su propio proveedor de inicios de sesión), compruebe el valor de cognitoidentity.amazonaws.com:amr: "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "login.myprovider.myapp" }
Por ejemplo, una aplicación que solo confía en Facebook tendría la siguiente cláusula amr: "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "graph.facebook.com" }
Políticas de acceso Los permisos adjuntos a un rol son eficaces en todos los usuarios que asumen dicho rol. Si desea dividir el acceso de sus usuarios, puede hacerlo mediante una política de variables. Sea prudente cuando incluya los ID de identidad de los usuarios en sus políticas de acceso, en especial en el caso de identidades sin autenticar, ya que esta información puede cambiar si el usuario decide iniciar sesión. Para añadir más seguridad, Amazon Cognito aplica una política específica a las credenciales proporcionadas por GetCredentialForIdentity para impedir que los usuarios sin autenticar tengan acceso a servicios que no sean los siguientes. En otras palabras, esta política permite que una identidad de utilice estas credenciales con acceso únicamente a los siguientes servicios: AWS AppSync
Amazon Comprehend
GameLift
Amazon Lex
Amazon Polly
Amazon SimpleDB
Amazon Transcribe
CloudWatch
DynamoDB
AWS IoT
Amazon Machine Learning
Amazon Rekognition
Amazon SES
Amazon Translate
Identidad de Amazon Cognito
Amazon Kinesis Data Firehose
AWS KMS
Amazon Mobile Analytics
Amazon Sumerian
Amazon SNS
Amazon Cognito Sync
Amazon Kinesis Data Streams
AWS Lambda
Amazon Pinpoint
Amazon S3
Amazon SQS
Si necesita que sus usuarios sin autenticar tengan acceso a otros elementos, deberá utilizar el flujo de autenticación básico. Si obtiene una NotAuthorizedException y ha activado el acceso al servicio en su política de roles sin autenticar, este es probablemente el motivo.
Ejemplos de políticas de acceso En esta sección, encontrará ejemplos de políticas de acceso de Amazon Cognito que conceden únicamente los permisos que sus identidades necesitan para completar una operación específica. Puede limitar aún más los permisos de un determinado ID de identidad utilizando variables de política siempre
213
Amazon Cognito Guía para desarrolladores Roles de IAM
que sea posible. Por ejemplo, utilizando ${cognito-identity.amazonaws.com:sub}. Para obtener más información, consulte Understanding Amazon Cognito Authentication Part 3: Roles and Policies en el blog de AWS Mobile.
Note Como práctica recomendada de seguridad, las políticas deben incluir únicamente los permisos que los usuarios necesitan para realizar sus tareas. Esto significa que debe intentar siempre el acceso a una identidad individual para objetos cuando sea posible. Ejemplo 1: Permitir que una identidad tenga acceso de lectura a un único objeto en S3 La siguiente política de acceso concede permisos de lectura a una identidad para recuperar un único objeto de un determinado bucket de S3. {
}
"Version": "2012-10-17", "Statement": [ { "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket/assets/my_picture.jpg"] } ]
Ejemplo 2: Permitir que una identidad tenga acceso de lectura y escritura a rutas específicas de identidad en S3 La siguiente política de acceso concede permisos de lectura y escritura para obtener acceso a una "carpeta" de prefijo específico en un bucket de S3 mapeando el prefijo a la variable ${cognitoidentity.amazonaws.com:sub}. Con esta política, una identidad como us-east-1:12345678-1234-1234-1234-123456790ab insertada a través de ${cognito-identity.amazonaws.com:sub} podrá obtener, colocar y enumerar objetos en arn:aws:s3:::mybucket/us-east-1:12345678-1234-1234-1234-123456790ab. Sin embargo, la identidad no concedería acceso a otros objetos en arn:aws:s3:::mybucket. {
"Version": "2012-10-17", "Statement": [ { "Action": ["s3:ListBucket"], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket"], "Condition": {"StringLike": {"s3:prefix": ["${cognito-identity.amazonaws.com:sub}/ *"]}} }, { "Action": [ "s3:GetObject", "s3:PutObject" ], "Effect": "Allow", "Resource": ["arn:aws:s3:::mybucket/${cognito-identity.amazonaws.com:sub}/*"] } ] }
Ejemplo 3: Asignación de identidades de acceso detallado a Amazon DynamoDB
214
Amazon Cognito Guía para desarrolladores Roles de IAM
La siguiente política de acceso proporciona un control de acceso minucioso a los recursos de Amazon DynamoDB mediante variables de Amazon Cognito que conceden acceso a elementos de DynamoDB por ID de identidad. Para obtener más información, consulte Uso de condiciones de políticas de IAM para control de acceso preciso en la Guía para desarrolladores de Amazon DynamoDB. {
"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dynamodb:GetItem", "dynamodb:BatchGetItem", "dynamodb:Query", "dynamodb:PutItem", "dynamodb:UpdateItem", "dynamodb:DeleteItem", "dynamodb:BatchWriteItem" ], "Resource": [ "arn:aws:dynamodb:us-west-2:123456789012:table/MyTable" ], "Condition": { "ForAllValues:StringEquals": { "dynamodb:LeadingKeys": ["${cognito-identity.amazonaws.com:sub}"] } } } ]
}
Ejemplo 4: Permitir que una identidad ejecute una invocación de función de AWS Lambda La siguiente política de acceso concede permisos de identidad para ejecutar una función de AWS Lambda. {
}
"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": [ "arn:aws:lambda:us-west-2:123456789012:function:MyFunction" ] } ]
Ejemplo 5: Permitir que una identidad publique registros en un flujo de datos de Amazon Kinesis La siguiente política de acceso permite a una identidad utilizar la operación PutRecord con cualquiera de los flujos de datos de Kinesis. Se puede aplicar a los usuarios que necesitan añadir registros de datos a todos los flujos de una cuenta. Para obtener más información, consulte Control del acceso a los recursos de Amazon Kinesis Data Streams por medio de IAM en la Guía para desarrolladores de Amazon Kinesis Data Streams. {
"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kinesis:PutRecord",
215
Amazon Cognito Guía para desarrolladores Confianza y permisos de rol
}
]
}
"Resource": [ "arn:aws:kinesis:us-east-1:111122223333:stream/stream1" ]
Ejemplo 6: Permitir a una identidad obtener acceso a sus datos en el almacén de sincronización de Amazon Cognito La siguiente política de acceso concede permisos de identidad únicamente a sus datos en el almacén de Amazon Cognito Sync. {
"Version": "2012-10-17", "Statement":[{ "Effect":"Allow", "Action":"cognito-sync:*", "Resource":["arn:aws:cognito-sync:us-east-1:123456789012:identitypool/${cognitoidentity.amazonaws.com:aud}/identity/${cognito-identity.amazonaws.com:sub}/*"] }] }
Confianza y permisos de rol Estos roles se diferencian en sus relaciones de confianza. Echemos un vistazo a un ejemplo de política de confianza para un rol sin autenticar: {
"Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-cornercafe-123456790ab" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "unauthenticated" } } } ] }
Esta política indica que queremos autorizar a los usuarios federados de cognitoidentity.amazonaws.com (el emisor del token de OpenID Connect) asumir este rol. Además, añadimos una restricción que el aud del token, en nuestro caso el ID del grupo de identidades, coincida con nuestro grupo de identidades. Por último, especificamos que el amr del token contiene el valor sin autenticar. Cuando Amazon Cognito crea un token, define el amr del token como "sin autenticar" o "autenticado" y, en el caso autenticado, se incluyen todos los proveedores utilizados durante la autenticación. Esto significa que puede crear un rol que confía solo en los usuarios que han iniciado sesión a través de Facebook, con tan solo cambiar la cláusula amr para que se presente como en el ejemplo siguiente:
216
Amazon Cognito Guía para desarrolladores Uso de atributos para el control de acceso
"ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "graph.facebook.com" }
Sea prudente cuando cambie las relaciones de confianza de sus roles o cuando intente utilizar roles en todos los grupos de identidades. Si el rol no está configurado para confiar correctamente en su grupo de identidades, se visualizará una excepción de STS como la siguiente: AccessDenied -- Not authorized to perform sts:AssumeRoleWithWebIdentity
En este caso, compruebe que está utilizando un rol adecuado para el grupo de identidades y el tipo de autenticación.
Uso de atributos para el control de acceso como una forma de control de acceso basado en atributos Puede utilizar IAM políticas de para controlar el acceso a AWS los recursos de a través de grupos de Amazon Cognito identidades de en función de los atributos de usuario. Estos atributos se pueden extraer de proveedores de identidad social y corporativa. Puede asignar atributos dentro de tokens de acceso e ID de proveedores o aserciones SAML a etiquetas a las que se puede hacer referencia en las políticas de IAM permisos. Puede elegir mapeos predeterminados o crear sus propios mapeos personalizados en grupos de Amazon Cognito identidades de . Los mapeos predeterminados le permiten escribir IAM políticas basadas en un conjunto fijo de atributos de usuario. Las asignaciones personalizadas le permiten seleccionar un conjunto personalizado de atributos de usuario a los que se hace referencia en las políticas de IAM permisos. Los Attribute names (Nombres de atributo) de la consola de Amazon Cognito se asignan a Tag key for principal (Clave de etiqueta para principal), que son las etiquetas a las que se hace referencia en la política de IAM permisos. Por ejemplo, supongamos que posee un servicio de streaming de contenido multimedia con una suscripción gratuita y de pago. Puede almacenar los archivos multimedia en Amazon S3 y etiquetarlos con etiquetas gratuitas o premium. Puede utilizar atributos para el control de acceso para permitir el acceso a contenido gratuito y de pago en función del nivel de pertenencia de usuario, que forma parte del perfil del usuario. Puede asignar el atributo de pertenencia a una clave de etiqueta para que la entidad principal se pase a la política de IAM permisos. De esta forma, puede crear una única política de permisos y permitir condicionalmente el acceso a contenido premium en función del valor de nivel de pertenencia y etiqueta de los archivos de contenido. Temas • Uso de atributos para el control de acceso con grupos Amazon Cognito de identidades (p. 218) • Ejemplo de uso de atributos para política de control de acceso (p. 219) • Deshabilitar atributos para el control de acceso (consola) (p. 220) • Mapeos de proveedores predeterminados (p. 221) El uso de atributos para controlar el acceso tiene varios beneficios: • La administración de permisos es más fácil cuando se utilizan atributos para el control de acceso. Puede crear una política de permisos básica que utilice atributos de usuario en lugar de crear varias políticas para diferentes funciones de trabajo. • No es necesario actualizar las políticas cada vez que añada o elimine recursos o usuarios de para su aplicación. La política de permisos solo concederá el acceso a los usuarios con los atributos de usuario
217
Amazon Cognito Guía para desarrolladores Uso de atributos para el control de acceso con grupos Amazon Cognito de identidades
coincidentes. Por ejemplo, es posible que necesite controlar el acceso a determinados buckets de S3 en función del título de trabajo de los usuarios. En ese caso, puede crear una política de permisos para permitir el acceso a estos archivos únicamente a los usuarios en el título de trabajo definido. Para obtener más información, consulte Tutorial de IAM: Usar etiquetas de sesión SAML para ABAC. • Los atributos se pueden pasar como etiquetas principales a una política que permita o deniegue permisos en función de los valores de dichos atributos.
Uso de atributos para el control de acceso con grupos Amazon Cognito de identidades Antes de poder utilizar atributos para el control de acceso, asegúrese de que cumple los siguientes requisitos previos: • Una cuenta de AWS • Grupo de usuarios • Grupo de identidades • El móvil o JavaScript SDK • Proveedores de identidad integrados • Credenciales Para utilizar atributos para el control de acceso, debe configurar Tag Key para Principal y Attribute name. En Tag Key (Clave de etiqueta) para Principal, el valor se utiliza para que coincida con la PrincipalTag condición en las políticas de permisos. El valor de Attribute name (Nombre de atributo) es el nombre del atributo cuyo valor se evaluará en la política.
Para utilizar atributos para el control de acceso con grupos de identidades 1.
Abra la consola de Amazon Cognito
2.
Seleccione Manage Identity Pools (Administrar grupos de identidades).
3.
En el panel de , elija el nombre del grupo de identidades en el que desea utilizar atributos para el control de acceso.
4.
Elija Edit identity pool (Editar grupo de identidades).
5.
Expanda la sección Authentication providers (Proveedores de autenticación).
6.
En la sección Authentication providers (Proveedores de autenticación), elija la pestaña del proveedor que desea utilizar.
7.
En Attributes for access control (Atributos para control de acceso), elija Default attribute mappings (Mapeos de atributos predeterminados) o Custom attribute mappings (Mapeos de atributos personalizados). Los mapeos predeterminados son diferentes para cada proveedor. Para obtener más información, consulte Mapeos de proveedores predeterminados (p. 221) para atributos de control de acceso.
8.
Si elige Custom attribute mappings (Mapeos de atributos personalizados), siga los pasos que se describen a continuación. 1. En Tag Key for Principal (Clave de etiqueta para principal), escriba el texto personalizado. Hay una longitud máxima de 128 caracteres. 2. En Attribute name (Nombre de atributo), escriba los nombres de atributo de los tokens de proveedores o aserciones SAML. Puede obtener los nombres de atributo para su IdPs en la guía para desarrolladores de sus proveedores. Los nombres de atributo tienen un máximo de 256 caracteres. Además, el límite de caracteres agregados para todos los atributos es de 460 bytes. 3. (Opcional) Añada otro proveedor. Puede añadir varios proveedores para Grupos de usuarios de Amazon Cognito, OIDC y SAML en la consola de . Por ejemplo, puede añadir dos Grupos de
218
Amazon Cognito Guía para desarrolladores Ejemplo de uso de atributos para política de control de acceso
usuarios de Amazon Cognito como dos proveedores de identidad independientes. Amazon Cognito trata cada pestaña como IdPsdiferente. Puede configurar atributos para el control de acceso por separado para cada IdP. 4. Para terminar, utilice la IAM consola de para crear una política de permisos que incluya los mapeos predeterminados o los mapeos de texto personalizados que proporcionó en Tag Key for Principal (Clave de etiqueta para principal). Para ver un tutorial sobre la creación de una política de permisos en IAM, consulte Tutorial de IAM: Definir permisos para acceder a recursos de AWS basados en etiquetas en la Guía del usuario de IAM .
Ejemplo de uso de atributos para política de control de acceso Imagine una situación en la que un empleado del departamento de derecho de una empresa debe enumerar todos los archivos de buckets de que pertenecen a su departamento y se clasifican con su nivel de seguridad. Supongamos que el token que este empleado obtiene del proveedor de identidades contiene las siguientes notificaciones. Notificaciones
{ . . "sub" : "57e7b692-4f66-480d-98b8-45a6729b4c88", "department" : "legal", "clearance" : "confidential", . . }
Estos atributos se pueden asignar a etiquetas y se hace referencia a ellos en las políticas de IAM permisos como etiquetas principales. Ahora puede administrar el acceso cambiando el perfil de usuario en el final del proveedor de identidad. También puede cambiar los atributos en el lado del recurso mediante nombres o etiquetas sin cambiar la política en sí. La siguiente política de permisos hace dos cosas: • Permite el acceso de lista a todos los buckets de s3 que terminan con un prefijo que coincide con el nombre del departamento del usuario. • Permite el acceso de lectura a los archivos de estos buckets siempre y cuando la etiqueta de ajuste del archivo coincida con el atributo de ajuste del usuario. Política de permisos
{
"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:List*", "Resource": "arn:aws:s3:::*-${aws:PrincipalTag/department}" }, { "Effect": "Allow", "Action": "s3:GetObject*",
219
Amazon Cognito Guía para desarrolladores Deshabilitar atributos para el control de acceso
}
]
}
"Resource": "arn:aws:s3:::*-${aws:PrincipalTag/department}/*", "Condition": { "StringEquals": { "s3:ExistingObjectTag/clearance": "${aws:PrincipalTag/clearance}" } }
La política de confianza determina quién puede asumir este rol. La política de relación de confianza permite el uso de sts:AssumeRoleWithWebIdentity y sts:TagSession para permitir el acceso. Agrega condiciones para restringir la política al grupo de identidades de que ha creado y garantiza que sea para un rol autenticado. Política de confianza
{
}
"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": [ "sts:AssumeRoleWithWebIdentity", "sts:TagSession" ], "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "IDENTITY-POOL-ID" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" } } } ]
Deshabilitar atributos para el control de acceso (consola) Siga este procedimiento para deshabilitar atributos para el control de acceso.
Para deshabilitar atributos para el control de acceso 1. 2.
Abra la consola de Amazon Cognito Seleccione Manage Identity Pools (Administrar grupos de identidades).
3.
En el panel de , elija el nombre del grupo de identidades cuyos atributos de control de acceso desea deshabilitar. Elija Edit identity pool (Editar grupo de identidades). Expanda la sección Authentication providers (Proveedores de autenticación). En Authenticated role selection (Selección de rol autenticado), elija Disable (Deshabilitar).
4. 5. 6.
220
Amazon Cognito Guía para desarrolladores Mapeos de proveedores predeterminados
7.
Para terminar, desplácese hasta la parte inferior de la página y elija Save Changes (Guardar cambios).
Mapeos de proveedores predeterminados La siguiente tabla tiene la información de mapeo predeterminada para los proveedores de autenticación que Amazon Cognito admite . Proveedor
Tipo de token
Valores de etiqueta principal
Ejemplo
Amazon CognitoGrupo de usuarios de
Token de ID
aud(ID de cliente) y sub(ID de usuario)
"6jk8ltokc7ac9es6jrtg9q572f" , "57e7b692-4f66-480d-98b8-45a6729b4
Token de acceso
aud(app_id), sub(user_id)
"492844718097981 "112177216992379"
Token de ID
aud(ID de cliente) y sub(ID de usuario)
"620493171733 "109220063452404746097"
SAML
Aserciones
"http:// schemas.xmlsoap.org/ ws/2005/05/ identity/claims/ nameidentifier", "http:// schemas.xmlsoap.org/ ws/2005/05/identity/ claims/name"
"auth0| 5e28d196f8f55a0eaaa95de3" , "[emailprotected]"
Apple
Token de ID
aud(ID de cliente) y sub (ID de usuario)
"com.amazonaws.ec2-54-80-172-243.c "8005854"
Amazon
Token de acceso
aud (ID de cliente en Ac de desarrollo de Amzn), user_id (ID de usuario)
"3446108 "amzn1.account.AGHQMFSBG3G6XCP
Proveedores OIDC estándar
Tokens de ID y acceso
aud (como client_id), sub (como ID de usuario)
"620493171733 "109220063452404746097"
Token de acceso
aud (ID de aplicación; aplicación secreta), sub (ID de usuario)
"DfwifTtKEX1FiIBRnOTlR0CFK;Xgj5xb8 "1269003884292222976"
DevAuth
Map
No aplicable
"etiqueta1", "etiqueta2"
Note La opción predeterminada de mapeos de atributos se rellena automáticamente para la clave de etiqueta para los nombres de entidad principal y atributo. Los mapeos predeterminados no se pueden cambiar.
Control de acceso basado en roles Los grupos de identidades de Amazon Cognito asignan a los usuarios autenticados un conjunto de credenciales temporales con privilegios limitados para obtener acceso a los recursos de AWS Los
221
Amazon Cognito Guía para desarrolladores Creación de roles para el mapeo de roles
permisos para cada usuario se controlan a través de IAM los roles que crea. Puede definir reglas para elegir el rol de cada usuario en función de las notificaciones contenidas en el token de ID. Puede definir un rol predeterminado para los usuarios autenticados. También puede definir un rol de IAM independiente con permisos limitados para los usuarios invitados que no estén autenticados.
Creación de roles para el mapeo de roles Es importante agregar la política de confianza adecuada para cada función de forma que Amazon Cognito solo la pueda asumir para los usuarios autenticados del grupo de identidades. A continuación se muestra un ejemplo de política de confianza: {
"Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Federated": "cognito-identity.amazonaws.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-cornercafe-123456790ab" }, "ForAnyValue:StringLike": { "cognito-identity.amazonaws.com:amr": "authenticated" } } } ] }
Esta política permite a los usuarios federados de cognito-identity.amazonaws.com (el emisor del token OpenID Connect) asumir este rol. Además, la política restringe el aud del token, en este caso el ID de grupo de identidades, para adaptarse al grupo de identidades. Por último, la política especifica que el amr del token contiene el valor authenticated.
Concesión del permiso para transmitir roles Para permitir que un usuario de IAM defina roles con permisos superiores a los que ese usuario ya tiene en un grupo de identidades, debe conceder a ese usuario el permiso iam:PassRole para transmitir el rol a la API de set-identity-pool-roles Por ejemplo, si el usuario no puede escribir en Amazon S3, pero el rol de IAM que el usuario establece en el grupo de identidades concede permiso de escritura en Amazon S3, el usuario solo podrá definir ese rol si el rol tiene concedido el permiso iam:PassRole En el ejemplo de política siguiente se muestra cómo conceder el permiso iam:PassRole {
"Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": [ "arn:aws:iam::123456789012:role/myS3WriteAccessRole" ]
222
Amazon Cognito Guía para desarrolladores Uso de tokens para asignar roles a usuarios
}
]
}
En este ejemplo de política, se concede el permiso iam:PassRole para el rol myS3WriteAccessRole El rol se especifica mediante el ARN del rol. También debe adjuntar esta política al usuario o al rol de IAM al que pertenezca el usuario. Para obtener más información, consulte Uso de políticas administradas.
Note Las funciones de Lambda utilizan una política basada en recursos. Dicha política está directamente asociada a la función de Lambda en sí. Cuando crea una regla que invoca una función Lambda, no transmite un rol, por lo que el usuario que crea la regla no necesita el permiso iam:PassRole Para obtener más información acerca de las autorizaciones de funciones Lambda, consulte Administración de permisos mediante una política de función de Lambda.
Uso de tokens para asignar roles a usuarios En el caso de los usuarios que inicien sesión mediante los grupos de usuarios de Amazon Cognito, los roles se pueden pasar en el token de ID asignado por el grupo de usuarios. Los roles aparecen en las siguientes notificaciones del token de ID: • La notificación cognito:preferred_role es el ARN del rol. • La cognito:roles notificación es una cadena separada por comas que contiene un conjunto de roles permitidos ARNs. Las notificaciones se establecen como sigue: • La notificación cognito:preferred_role se establece en el rol del grupo con el mejor valor Precedence (menor). Si solo se permite un rol, cognito:preferred_role se establece en dicho rol. Si hay varios roles y ninguno tiene la mejor prioridad, esta notificación no se establece. • La notificación cognito:roles se establece si hay al menos un rol. Cuando se usan tokens para asignar funciones, si se pueden asignar varias funciones al usuario, grupos de identidades de Amazon Cognito (identidades federadas) elige la función de la siguiente manera: • Utilice el GetCredentialsForIdentity CustomRoleArn parámetro si está establecido y coincide con un rol de la cognito:roles notificación . Si este parámetro no coincide con un rol de cognito:roles, deniegue el acceso. • Si la notificación cognito:preferred_role está establecida, utilícela. • Si la cognito:preferred_role notificación no está establecida, la cognito:roles notificación sí lo está y no CustomRoleArn se especifica en la llamada a GetCredentialsForIdentity, se utilizará la configuración de Role resolution (Resolución de rol) de la consola de o el AmbiguousRoleResolution campo (en el RoleMappings parámetro de la SetIdentityPoolRoles API) para determinar el rol que se va a asignar.
Uso del mapeo basado en reglas para el mapeo de roles a los usuarios Las reglas permiten mapear notificaciones de un token de proveedor de identidad a roles de IAM Cada regla especifica una notificación de token (como un atributo de usuario en el token de ID de un grupo de usuarios de Amazon Cognito), el tipo de coincidencia, un valor y un rol de IAM El tipo de coincidencia puede ser Equals, NotEqual StartsWith, o Contains. Si un usuario tiene un valor coincidente para 223
Amazon Cognito Guía para desarrolladores Notificaciones de token para usarlas en un mapeo basado en reglas
la notificación, el usuario puede asumir ese rol cuando obtenga las credenciales. Por ejemplo, puede crear una regla que asigne un rol de IAM específico a usuarios que tengan un valor de atributo personalizado custom:dept de Sales.
Note En la configuración de una regla, los atributos personalizados deben tener el prefijo custom: para diferenciarse de los atributos estándar. Las reglas se evalúan en orden y se usa el rol de IAM de la primera regla coincidente, a menos que se haya especificado CustomRoleArn para anular el orden. Para obtener más información acerca de los atributos de usuario en los grupos de usuarios de Amazon Cognito, consulte Configuración de atributos de grupo de usuarios (p. 171). Puede configurar varias reglas para un proveedor de autenticación en la consola del grupo de identidades (identidades federadas). Las reglas se aplican en orden. Si quiere cambiar el orden, puede arrastrar las reglas. La primera regla coincidente tiene prioridad. Si el tipo de asociación es NotEqual y la notificación no existe, no se evaluará la regla. Si no hay reglas que coincidan, el ajuste de Role resolution (Resolución de rol) se aplica a Use default Authenticated role (Usar rol autenticado predeterminado) o DENY (DENEGAR). En la API y la CLI, puede especificar el rol que se va a asignar cuando ninguna regla coincida en el AmbiguousRoleResolution campo del RoleMapping tipo , que se especifica en el RoleMappings parámetro de la SetIdentityPoolRoles API . Por cada grupo de usuarios u otro proveedor de autenticación configurado para un grupo de identidades, se pueden crear hasta 25 reglas. Si necesita más de 25 reglas para un proveedor, abra un caso de soporte técnico de aumento del límite del servicio.
Notificaciones de token para usarlas en un mapeo basado en reglas Amazon Cognito Un token de ID de Amazon Cognito se representa como un JSON Web Token (JWT). El token contiene notificaciones sobre la identidad del usuario autenticado, como name family_name, y phone_number. Para obtener más información acerca de las notificaciones estándar, consulte la especificación OpenID Connect. Aparte de las notificaciones estándar, a continuación indicamos unas notificaciones adicionales específicas de Amazon Cognito: • cognito:groups • cognito:roles • cognito:preferred_role Amazon Las notificaciones siguientes, junto con los valores posibles de dichas notificaciones, se pueden utilizar con el inicio de sesión en Amazon: • iss: www.amazon.com • aud: ID de aplicación • sub: sub desde el inicio de sesión con el token de Amazon Facebook Las notificaciones siguientes, junto con los valores posibles de dichas notificaciones, se pueden utilizar con Facebook:
224
Amazon Cognito Guía para desarrolladores Prácticas recomendadas para el control de acceso basado en roles
• iss: graph.facebook.com • aud: ID de aplicación • sub: sub del token de Facebook Google Un token de Google contiene notificaciones estándar de la especificación OpenID Connect. Todas las notificaciones del OpenID token están disponibles para el mapeo basado en reglas. Consulte el sitio de OpenID Connect de Google para obtener información sobre las notificaciones disponibles en el token de Google. Apple Un token de Apple contiene notificaciones estándar de la especificación OpenID Connect. Consulte Autenticación de usuarios con Sign in with Apple en la documentación de Apple para obtener más información sobre la notificación disponible del token de Apple. El token de Apple no contiene siempre email. OpenID Todas las notificaciones del token de Open ID están disponibles para el mapeo basado en reglas. Para obtener más información acerca de las notificaciones estándar, consulte la especificación OpenID Connect. Consulte la documentación de su OpenID proveedor para obtener más información sobre las notificaciones adicionales que están disponibles. SAML Las notificaciones se analizan en la aserción de SAML recibida. Todas las notificaciones que están disponibles en la aserción de SAML se pueden utilizar en el mapeo basado en reglas.
Prácticas recomendadas para el control de acceso basado en roles Important Si la notificación que está mapeando a un rol la puede modificar el usuario final, cualquier usuario final puede asumir su rol y definir la política en consecuencia. Asigne únicamente las notificaciones que el usuario final no puede establecer directamente a los roles con permisos elevados. En un grupo de usuarios de Amazon Cognito, puede establecer permisos de lectura y escritura por cada atributo de usuario.
Important Si establece roles para grupos en un grupo de usuarios de Amazon Cognito, dichos roles se transfieren por medio del token de ID de usuario. Para utilizar estos roles, también debe establecer Choose role from token (Elegir rol a partir de token) para la selección de rol autenticado para el grupo de identidades. Puede utilizar la configuración de Role resolution (Resolución de roles) en la consola de y el RoleMappings parámetro de la SetIdentityPoolRoles API para especificar cuál es el comportamiento predeterminado cuando no se puede determinar el rol correcto a partir del token.
Obtención de credenciales Puede utilizar Amazon Cognito para proporcionar credenciales temporales con privilegios limitados a la aplicación, a fin de que los usuarios puedan tener acceso a los recursos de AWS. En esta sección, se describe cómo obtener credenciales y cómo recuperar una identidad de Amazon Cognito de un grupo de identidades.
225
Amazon Cognito Guía para desarrolladores Android
Amazon Cognito es compatible con las identidades autenticadas y sin autenticar. La identidad de los usuarios sin autenticar no se verifica, lo que hace que este rol sea adecuado para los usuarios invitados de la aplicación o para cuando no importa si se verifica la identidad de los usuarios. Los usuarios autenticados inician sesión en la aplicación a través de un proveedor de identidad externo, o un grupo de usuarios, que verifica su identidad. Asegúrese de asignar los permisos de los recursos de forma adecuada, para no conceder acceso a ellos a los usuarios no autenticados. Amazon CognitoLas identidades de no son credenciales. Se intercambian por credenciales utilizando la compatibilidad con las identidades web federadas de AWS Security Token Service (AWS STS). La forma recomendada de obtener las credenciales de AWS para los usuarios de la aplicación es utilizar AWS.CognitoIdentityCredentials. La identidad del objeto de credenciales se intercambia por credenciales mediante AWS STS.
Note Si creó el grupo de identidades antes de febrero de 2015, tendrá que volver a asociar los roles a su grupo de identidades a fin de utilizar el constructor AWS.CognitoIdentityCredentials sin los roles como parámetros. Para ello, abra la Amazon Cognito consola de , elija Manage Identity Pools (Administrar grupos de identidades), seleccione su grupo de identidades, elija Edit Identity Pool (Editar grupo de identidades), especifique los roles autenticados y sin autenticar y guarde los cambios.
Android Puede utilizar Amazon Cognito para proporcionar credenciales temporales con privilegios limitados a la aplicación, a fin de que los usuarios puedan tener acceso a los recursos de AWS. Amazon Cognito es compatible con las identidades autenticadas y sin autenticar. Para proporcionar credenciales de AWS a su aplicación, siga los pasos que se indican a continuación. 1. Elija Manage Identity Pools (Administrar grupos de identidades) en la Amazon Cognito consola de , cree un grupo de identidades y copie los fragmentos de código de inicio. 2. Si aún no lo ha hecho, añada el SDK de AWS Mobile para Android a su proyecto. Para obtener instrucciones, consulte la sección relativa a la configuración del SDK de Mobile para Android. 3. Incluya las siguientes instrucciones de importación: import com.amazonaws.auth.CognitoCachingCredentialsProvider; import com.amazonaws.regions.Regions;
4. Inicialice el proveedor de credenciales de Amazon Cognito utilizando el fragmento de código generado por la consola de Amazon Cognito El valor de IDENTITY_POOL_ID será específico de su cuenta: CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider( getApplicationContext(), // Context "IDENTITY_POOL_ID", // Identity Pool ID Regions.US_EAST_1 // Region );
5. Pase el proveedor de credenciales de Amazon Cognito inicializado al constructor del cliente de AWS que se va a utilizar. El código requerido depende del servicio que se vaya a inicializar. El cliente utilizará este proveedor para obtener las credenciales con las que obtendrá acceso a los recursos de AWS.
Note Si creó el grupo de identidades antes de febrero de 2015, tendrá que volver a asociar los roles a su grupo de identidades a fin de utilizar este constructor sin los roles como parámetros. Para ello, abra la Amazon Cognito consola de , elija Manage Federated Identies (Administrar 226
Amazon Cognito Guía para desarrolladores iOS - Objective-C
identidades federadas), seleccione su grupo de identidades, elija Edit Identity Pool (Editar grupo de identidades), especifique los roles autenticados y sin autenticar y guarde los cambios. Recuperación de una Amazon Cognito identidad Si permite usuarios sin autenticar, puede recuperar un identificador único de Amazon Cognito (ID de identidad) para el usuario final de forma inmediata. Si está autenticando usuarios, puede recuperar el ID de identidad después de definir los tokens de inicio de sesión en el proveedor de credenciales: String identityId = credentialsProvider.getIdentityId(); Log.d("LogTag", "my ID is " + identityId);
Note No llame a getIdentityId(), refresh()o getCredentials() en el subproceso principal de la aplicación. A partir de Android 3.0 (nivel de API 11), la aplicación producirá automáticamente un error y lanzará una excepción NetworkOnMainThreadException si realiza E/S de red en el subproceso de la aplicación principal. Tendrá que mover el código a un subproceso en segundo plano utilizando AsyncTask. Para obtener más información, consulte la documentación de Android. También puede llamar a getCachedIdentityId() para recuperar un ID, pero solo si ya hay uno almacenado localmente en la caché. De lo contrario, el método devolverá un valor nulo.
iOS - Objective-C Puede utilizar Amazon Cognito para proporcionar credenciales temporales con privilegios limitados a la aplicación, a fin de que los usuarios puedan tener acceso a los recursos de AWS. Los grupos de identidades de Amazon Cognito son compatibles con las identidades autenticadas y sin autenticar. Para proporcionar credenciales de AWS a su aplicación, siga los pasos que se indican a continuación. 1.
Elija Manage Identity Pools (Administrar grupos de identidades) en la Amazon Cognito consola de , cree un grupo de identidades y copie los fragmentos de código de inicio.
2.
Si aún no lo ha hecho, añada el AWS Mobile SDK for iOS a su proyecto. Para obtener instrucciones, consulte la sección relativa a la configuración del Mobile SDK for iOS.
3.
En su código fuente, incluya el encabezado AWSCore #import
4.
Inicialice el proveedor de credenciales de Amazon Cognito utilizando el fragmento de código generado por la consola de Amazon Cognito El valor de IDENTITY_POOL_ID será específico de su cuenta: AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@"IDENTITY_POOL_ID"]; AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider]; AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;
Note Si creó el grupo de identidades antes de febrero de 2015, tendrá que volver a asociar los roles a su grupo de identidades a fin de utilizar este constructor sin los roles como parámetros. Para ello, abra la Amazon Cognito consola de , elija Manage Identity Pools (Administrar grupos de identidades), seleccione su grupo de identidades, elija Edit Identity 227
Amazon Cognito Guía para desarrolladores iOS - Swift
Pool (Editar grupo de identidades), especifique los roles autenticados y sin autenticar y guarde los cambios. Recuperación de una Amazon Cognito identidad Puede recuperar un identificador de Amazon Cognito único (ID de identidad) para el usuario final inmediatamente si permite usuarios sin autenticar o después de que haya establecido los tokens de inicio de sesión en el proveedor de credenciales si está autenticando a usuarios: // Retrieve your Amazon Cognito ID [[credentialsProvider getIdentityId] continueWithBlock:^id(AWSTask *task) { if (task.error) { NSLog(@"Error: %@", task.error); } else { // the task result will contain the identity id NSString *cognitoId = task.result; } return nil; }];
Note getIdentityId es una llamada asíncrona. Si ya hay un ID de identidad definido en el proveedor, puede llamar a credentialsProvider.identityId para recuperar la identidad, que está almacenada localmente en la caché. Sin embargo, si no se establece un ID de identidad en su proveedor, la llamada a credentialsProvider.identityId devolverá nil. Para obtener más información, consulte la Referencia de la Mobile SDK for iOS API de .
iOS - Swift Puede utilizar Amazon Cognito para proporcionar credenciales temporales con privilegios limitados a la aplicación, a fin de que los usuarios puedan tener acceso a los recursos de AWS. Amazon Cognito es compatible con las identidades autenticadas y sin autenticar. Para proporcionar credenciales de AWS a su aplicación, siga los pasos que se indican a continuación. 1.
Elija Manage Identity Pools (Administrar grupos de identidades) en la Amazon Cognito consola de , cree un grupo de identidades y copie los fragmentos de código de inicio.
2.
Si aún no lo ha hecho, añada el Mobile SDK for iOS a su proyecto. Para leer las instrucciones, consulte la sección relativa a la configuración del SDK para iOS.
3.
En su código fuente, incluya el encabezado AWSCore import AWSCore
4.
Inicialice el proveedor de credenciales de Amazon Cognito utilizando el fragmento de código generado por la consola de Amazon Cognito El valor de IDENTITY_POOL_ID será específico de su cuenta: let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "IDENTITY_POOL_ID") let configuration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: credentialsProvider) AWSServiceManager.default().defaultServiceConfiguration = configuration
Note Si creó el grupo de identidades antes de febrero de 2015, tendrá que volver a asociar los roles a su grupo de identidades a fin de utilizar este constructor sin los roles como
228
Amazon Cognito Guía para desarrolladores JavaScript
parámetros. Para ello, abra la Amazon Cognito consola de , elija Manage Identity Pools (Administrar grupos de identidades), seleccione su grupo de identidades, elija Edit Identity Pool (Editar grupo de identidades), especifique los roles autenticados y sin autenticar y guarde los cambios. Recuperación de una Amazon Cognito identidad Puede recuperar un identificador de Amazon Cognito único (ID de identidad) para el usuario final inmediatamente si permite usuarios sin autenticar o después de que haya establecido los tokens de inicio de sesión en el proveedor de credenciales si está autenticando a usuarios: // Retrieve your Amazon Cognito ID credentialsProvider.getIdentityId().continueWith(block: { (task) -> AnyObject? in if (task.error != nil) { print("Error: " + task.error!.localizedDescription) } else { // the task result will contain the identity id let cognitoId = task.result! print("Cognito id: \(cognitoId)") } return task; })
Note getIdentityId es una llamada asíncrona. Si ya hay un ID de identidad definido en el proveedor, puede llamar a credentialsProvider.identityId para recuperar la identidad, que está almacenada localmente en la caché. Sin embargo, si no se establece un ID de identidad en su proveedor, la llamada a credentialsProvider.identityId devolverá nil. Para obtener más información, consulte la Referencia de la Mobile SDK for iOS API de .
JavaScript Si todavía no lo ha creado, cree un grupo de identidades en la consola de Amazon Cognito antes de usar AWS.CognitoIdentityCredentials. Después de configurar un grupo de identidades con sus proveedores de identidad, puede utilizar AWS.CognitoIdentityCredentials para autenticar a los usuarios. Para configurar las credenciales de la aplicación para utilizar AWS.CognitoIdentityCredentials, establezca la propiedad credentials de AWS.Config o una configuración específica para cada servicio. El siguiente ejemplo utiliza AWS.Config: // Set the region where your identity pool exists (us-east-1, eu-west-1) AWS.config.region = 'us-east-1'; // Configure the credentials provider to use your identity pool AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID', Logins: { // optional tokens, used for authenticated login 'graph.facebook.com': 'FBTOKEN', 'www.amazon.com': 'AMAZONTOKEN', 'accounts.google.com': 'GOOGLETOKEN', 'appleid.apple.com': 'APPLETOKEN' } }); // Make the call to obtain credentials AWS.config.credentials.get(function(){
229
Amazon Cognito Guía para desarrolladores Unity // Credentials will be available when this function is called. var accessKeyId = AWS.config.credentials.accessKeyId; var secretAccessKey = AWS.config.credentials.secretAccessKey; var sessionToken = AWS.config.credentials.sessionToken; });
La propiedad opcional Logins es un mapeo entre los nombres de los proveedores de identidad y los tokens de identidad de los proveedores. La forma de obtener el token del proveedor de identidad depende del proveedor que se utilice. Por ejemplo, si Facebook es uno de sus proveedores de identidad, puede utilizar la FB.login función del SDK de Facebook para obtener un token de proveedor de identidad: FB.login(function (response) { if (response.authResponse) { // logged in AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030', Logins: { 'graph.facebook.com': response.authResponse.accessToken } });
});
console.log('You are now logged in.'); } else { console.log('There was a problem logging you in.'); }
Recuperación de una Amazon Cognito identidad Puede recuperar un identificador de Amazon Cognito único (ID de identidad) para el usuario final inmediatamente si permite usuarios sin autenticar o después de que haya establecido los tokens de inicio de sesión en el proveedor de credenciales si está autenticando a usuarios: var identityId = AWS.config.credentials.identityId;
Unity Puede utilizar Amazon Cognito para proporcionar credenciales temporales con privilegios limitados a la aplicación, a fin de que los usuarios puedan tener acceso a los recursos de AWS. Amazon Cognito es compatible con las identidades autenticadas y sin autenticar. Para proporcionar credenciales de AWS a su aplicación, siga los pasos que se indican a continuación. 1. Elija Manage Identity Pools (Administrar grupos de identidades) en la Amazon Cognito consola de , cree un grupo de identidades y copie los fragmentos de código de inicio. 2. Si aún no lo ha hecho, descargue e importe el paquete AWS Mobile SDK para Unity en su proyecto. Puede hacerlo en el menú Assets > Import Package > Custom Package. 3. Pegue el fragmento de código de inicio de la consola en el script desde el que desea llamar a Amazon Cognito El valor de IDENTITY_POOL_ID será específico de su cuenta: CognitoAWSCredentials credentials = new CognitoAWSCredentials ( "IDENTITY_POOL_ID", // Cognito Identity Pool ID RegionEndpoint.USEast1 // Region );
4. Pase las credenciales de Amazon Cognito inicializadas al constructor del cliente de AWS que se va a utilizar. El código requerido depende del servicio que se vaya a inicializar. El cliente utilizará este proveedor para obtener las credenciales con las que obtendrá acceso a los recursos de AWS.
230
Amazon Cognito Guía para desarrolladores Xamarin
Note Si creó el grupo de identidades antes de febrero de 2015, tendrá que volver a asociar los roles a su grupo de identidades a fin de utilizar este constructor sin los roles como parámetros. Para ello, abra la Amazon Cognito consola de , elija Manage Identity Pools (Administrar grupos de identidades), seleccione su grupo de identidades, elija Edit Identity Pool (Editar grupo de identidades), especifique los roles autenticados y sin autenticar y guarde los cambios. Recuperación de una Amazon Cognito identidad Puede recuperar un identificador de Amazon Cognito único (ID de identidad) para el usuario final inmediatamente si permite usuarios sin autenticar o después de que haya establecido los tokens de inicio de sesión en el proveedor de credenciales si está autenticando a usuarios: credentials.GetIdentityIdAsync(delegate(AmazonCognitoIdentityResult result) { if (result.Exception != null) { //Exception! } string identityId = result.Response; });
Xamarin Puede utilizar Amazon Cognito para proporcionar credenciales temporales con privilegios limitados a la aplicación, a fin de que los usuarios puedan tener acceso a los recursos de AWS. Amazon Cognito es compatible con las identidades autenticadas y sin autenticar. Para proporcionar credenciales de AWS a su aplicación, siga los pasos que se indican a continuación. 1. Elija Manage Identity Pools (Administrar grupos de identidades) en la Amazon Cognito consola de , cree un grupo de identidades y copie los fragmentos de código de inicio. 2. Si aún no lo ha hecho, añada el SDK para móviles de AWS para Xamarin a su proyecto. Para leer las instrucciones, consulte la sección relativa a laconfiguración del SDK para Xamarin. 3. Incluya las instrucciones siguientes: using Amazon.CognitoIdentity;
4. Pegue el fragmento de código de inicio de la consola en el script desde el que desea llamar a Amazon Cognito El valor de IDENTITY_POOL_ID será específico de su cuenta: CognitoAWSCredentials credentials = new CognitoAWSCredentials ( "IDENTITY_POOL_ID", // Cognito Identity Pool ID RegionEndpoint.USEast1 // Region );
5. Pase las credenciales de Amazon Cognito inicializadas al constructor del cliente de AWS que se va a utilizar. El código requerido depende del servicio que se vaya a inicializar. El cliente utilizará este proveedor para obtener las credenciales con las que obtendrá acceso a los recursos de AWS.
Note Nota: si creó el grupo de identidades antes de febrero de 2015, tendrá que volver a asociar los roles a su grupo de identidades a fin de utilizar este constructor sin los roles como parámetros. Para ello, abra la Amazon Cognito consola de , elija Manage Identity Pools (Administrar grupos 231
Amazon Cognito Guía para desarrolladores Acceso a los servicios de AWS
de identidades), seleccione su grupo de identidades, elija Edit Identity Pool (Editar grupo de identidades), especifique los roles autenticados y sin autenticar y guarde los cambios. Recuperación de una Amazon Cognito identidad Puede recuperar un identificador de Amazon Cognito único (ID de identidad) para el usuario final inmediatamente si permite usuarios sin autenticar o después de que haya establecido los tokens de inicio de sesión en el proveedor de credenciales si está autenticando a usuarios: var identityId = await credentials.GetIdentityIdAsync();
Acceso a los servicios de AWS Una vez que el proveedor de credenciales de Amazon Cognito esté inicializado y actualizado, puede pasarlo directamente al inicializador de un cliente de AWS. Por ejemplo, el siguiente fragmento de código inicializa un cliente de Amazon DynamoDB
Android // Create a service client with the provider AmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider);
El proveedor de credenciales se comunica con Amazon Cognito para recuperar el identificador único de los usuarios autenticados y sin autenticar, así como las credenciales de AWS temporales, con privilegios limitados, del SDK para móviles de AWS. Las credenciales recuperadas son válidas durante una hora y el proveedor las actualiza cuando caducan.
iOS - Objective-C // create a configuration that uses the provider AWSServiceConfiguration *configuration = [AWSServiceConfiguration configurationWithRegion:AWSRegionUSEast1 provider:credentialsProvider]; // get a client with the default service configuration AWSDynamoDB *dynamoDB = [AWSDynamoDB defaultDynamoDB];
El proveedor de credenciales se comunica con Amazon Cognito para recuperar el identificador único de los usuarios autenticados y sin autenticar, así como las credenciales de AWS temporales, con privilegios limitados, del SDK para móviles de AWS. Las credenciales recuperadas son válidas durante una hora y el proveedor las actualiza cuando caducan.
iOS - Swift // get a client with the default service configuration let dynamoDB = AWSDynamoDB.default() // get a client with a custom configuration AWSDynamoDB.register(with: configuration!, forKey: "USWest2DynamoDB"); let dynamoDBCustom = AWSDynamoDB(forKey: "USWest2DynamoDB")
El proveedor de credenciales se comunica con Amazon Cognito para recuperar el identificador único de los usuarios autenticados y sin autenticar, así como las credenciales de AWS temporales, con privilegios
232
Amazon Cognito Guía para desarrolladores JavaScript
limitados, del SDK para móviles de AWS. Las credenciales recuperadas son válidas durante una hora y el proveedor las actualiza cuando caducan.
JavaScript // Create a service client with the provider var dynamodb = new AWS.DynamoDB({region: 'us-west-2'});
El proveedor de credenciales se comunica con Amazon Cognito para recuperar el identificador único de los usuarios autenticados y sin autenticar, así como las credenciales de AWS temporales, con privilegios limitados, del SDK para móviles de AWS. Las credenciales recuperadas son válidas durante una hora y el proveedor las actualiza cuando caducan.
Unity // create a service client that uses credentials provided by Cognito AmazonDynamoDBClient client = new AmazonDynamoDBClient(credentials, REGION);
El proveedor de credenciales se comunica con Amazon Cognito para recuperar el identificador único de los usuarios autenticados y sin autenticar, así como las credenciales de AWS temporales, con privilegios limitados, del SDK para móviles de AWS. Las credenciales recuperadas son válidas durante una hora y el proveedor las actualiza cuando caducan.
Xamarin // create a service client that uses credentials provided by Cognito var client = new AmazonDynamoDBClient(credentials, REGION)
El proveedor de credenciales se comunica con Amazon Cognito para recuperar el identificador único de los usuarios autenticados y sin autenticar, así como las credenciales de AWS temporales, con privilegios limitados, del SDK para móviles de AWS. Las credenciales recuperadas son válidas durante una hora y el proveedor las actualiza cuando caducan.
Proveedores de identidad externos de grupos de identidades (identidades federadas) Con la propiedad logins, puede configurar las credenciales recibidas de un proveedor de identidades. Además, puede asociar un grupo de identidades a varios proveedores de identidad. Por ejemplo, puede definir tokens de Facebook y Google en la propiedad logins para que la identidad de Amazon Cognito única se asocie a los inicios de sesión de ambos proveedores de identidad. Sea cual sea la cuenta el usuario final utilice para la autenticación, Amazon Cognito devuelve el mismo identificador de usuario. Las instrucciones que aparecen a continuación le guiarán por el proceso de autenticación con proveedores de identidad compatibles con grupos de identidades de Amazon Cognito. Temas • Facebook (Grupos de identidades) (p. 234) • Login with Amazon (Grupos de identidades) (p. 239)
233
Amazon Cognito Guía para desarrolladores Facebook
• Google (Grupos de identidades) (p. 242) • Sign in with Apple (Grupos de identidades) (p. 249) • Proveedores de OpenID Connect (Grupos de identidades) (p. 254) • Proveedores de identidad SAML (grupos de identidades) (p. 256)
Facebook (Grupos de identidades) Amazon CognitoLos grupos de identidades de se integran con Facebook para ofrecer una autenticación federada a los usuarios de aplicaciones móviles. En esta sección se explica cómo registrar y configurar su aplicación con Facebook como proveedor de identidad.
Configuración de Facebook Debe registrar su aplicación en Facebook para poder empezar a autenticar usuarios de Facebook e interactuar con las API de Facebook. El portal de desarrolladores de Facebook le guía por el proceso de configuración de su aplicación. Si todavía no ha ejecutado este proceso, debe hacerlo para poder integrar Facebook en su grupo de identidades de Amazon Cognito:
Para configurar Facebook 1.
En el portal de desarrolladores de Facebook, inicie sesión con sus credenciales de Facebook.
2. 3.
En el menú Apps (Aplicaciones), seleccione Add a New App (Añadir una nueva aplicación). Seleccione una plataforma y complete el proceso de inicio rápido.
Android La guía de introducción a Facebook proporciona información adicional acerca de la integración con el inicio de sesión de Facebook.
iOS - Objective-C La guía de introducción a Facebook proporciona información adicional acerca de la integración con el inicio de sesión de Facebook.
iOS - Swift La guía de introducción a Facebook proporciona información adicional acerca de la integración con el inicio de sesión de Facebook.
JavaScript La guía de introducción a Facebook proporciona información adicional acerca de la integración con el inicio de sesión de Facebook.
Unity La guía de introducción a Facebook proporciona información adicional acerca de la integración con el inicio de sesión de Facebook.
Xamarin Para proporcionar la autenticación de Facebook, siga primero el flujo adecuado de los que se describen a continuación para incluir y configurar el SDK de Facebook en su aplicación. Los grupos de identidades de
234
Amazon Cognito Guía para desarrolladores Facebook
Amazon Cognito utilizan el token de acceso de Facebook para generar un identificador de usuario único asociado a una identidad de Amazon Cognito. • SDK de Facebook iOS por Xamarin • SDK de Facebook Android por Xamarin
Configuración del proveedor externo en la consola de identidades federadas de Amazon Cognito Utilice el siguiente procedimiento para configurar su proveedor externo. 1.
Elija Manage Identity Pools (Administrar grupos de identidades) en la página de inicio de la consola de Amazon Cognito.
2.
Elija el nombre del grupo de identidades para el que desee habilitar Facebook como proveedor externo. Se mostrará la página Dashboard (Panel) de su grupo de identidades.
3.
En la esquina superior derecha de la página Dashboard (Panel), elija Edit identity pool (Editar grupo de identidades). Se visualizará la página Edit identity pool (Editar grupo de identidades).
4.
Desplácese hacia abajo y elija Authentication providers (Proveedores de autenticación) para expandirlo.
5.
Seleccione la pestaña Facebook.
6.
Elija Unlock (Desbloquear).
7.
Especifique el ID de aplicación de Facebook que ha obtenido en Facebook y, a continuación, seleccione Save Changes (Guardar cambios).
Uso de Facebook Android Para proporcionar una autenticación de Facebook, empiece por seguir la guía de Facebook para incluir el SDK en su aplicación. A continuación, añada un botón "Iniciar sesión con Facebook" a la interfaz de usuario de Android. El SDK de Facebook utiliza un objeto de sesión para realizar un seguimiento de su estado. Amazon Cognito usa el token de acceso de ese objeto de sesión para autenticar al usuario, generar el identificador único y, si es necesario, conceder al usuario acceso a otros recursos de AWS. Una vez que haya autenticado a su usuario en el SDK de Facebook, añada el token de sesión al proveedor de credenciales de Amazon Cognito. SDK de Facebook 4.0 o posterior: Map logins = new HashMap(); logins.put("graph.facebook.com", AccessToken.getCurrentAccessToken().getToken()); credentialsProvider.setLogins(logins);
SDK de Facebook antes de la versión 4.0: Map logins = new HashMap(); logins.put("graph.facebook.com", Session.getActiveSession().getAccessToken()); credentialsProvider.setLogins(logins);
El proceso de inicio de sesión de Facebook inicializa una sesión singleton en su SDK. El objeto de sesión de Facebook contiene un token de OAuth que Amazon Cognito utiliza para generar credenciales de AWS para su usuario final autenticado. Amazon Cognito también utiliza el token para buscar en su base de
235
Amazon Cognito Guía para desarrolladores Facebook
datos un usuario que corresponda a esa identidad de Facebook. Si el usuario ya existe, la API devuelve el identificador existente. De lo contrario, devuelve un identificador nuevo. El SDK cliente guarda los identificadores automáticamente en caché los en el dispositivo local.
Note Después de configurar el mapa de inicios de sesión, deberá realizar una llamada a refresh o a get para obtener las credenciales de AWS.
iOS - Objective-C Para añadir la autenticación de Facebook, empiece por seguir la guía de Facebook para integrar el SDK de Facebook en su aplicación. A continuación, añada un botón "Iniciar sesión con Facebook" a la interfaz de usuario. El SDK de Facebook utiliza un objeto de sesión para realizar un seguimiento de su estado. Amazon Cognito utiliza el token de acceso de ese objeto de sesión para autenticar al usuario y vincularlo a grupos de identidades de Amazon Cognito únicos (identidades federadas). Para proporcionar el token de acceso de Facebook a Amazon Cognito, implemente el protocolo AWSIdentityProviderManager. En la implementación del método logins, devuelve un diccionario que contiene AWSIdentityProviderFacebook. Este diccionario actúa como la clave y el token de acceso actual del usuario autenticado de Facebook como valor, tal y como se muestra en el siguiente ejemplo de código. - (AWSTask *)logins { FBSDKAccessToken* fbToken = [FBSDKAccessToken currentAccessToken]; if(fbToken){ NSString *token = fbToken.tokenString; return [AWSTask taskWithResult: @{ AWSIdentityProviderFacebook : token }]; }else{ return [AWSTask taskWithError:[NSError errorWithDomain:@"Facebook Login" code:-1 userInfo:@{@"error":@"No current Facebook access token"}]]; } }
Cuando cree instancias de AWSCognitoCredentialsProvider, transmita la clase que implementa AWSIdentityProviderManager como valor de identityProviderManager en el constructor. Para obtener más información, consulte la página de referencia de AWSCognitoCredentialsProvider y elija initWithRegionType:identityPoolId:identityProviderManager.
iOS - Swift Para añadir la autenticación de Facebook, empiece por seguir la guía de Facebook para integrar el SDK de Facebook en su aplicación. A continuación, añada un botón "Iniciar sesión con Facebook" a la interfaz de usuario. El SDK de Facebook utiliza un objeto de sesión para realizar un seguimiento de su estado. Amazon Cognito utiliza el token de acceso de ese objeto de sesión para autenticar al usuario y vincularlo a grupos de identidades de Amazon Cognito únicos (identidades federadas). Para proporcionar el token de acceso de Facebook a Amazon Cognito, implemente el protocolo AWSIdentityProviderManager. En la implementación del método logins, devuelve un diccionario que contiene AWSIdentityProviderFacebook. Este diccionario actúa como la clave y el token de acceso actual del usuario autenticado de Facebook como valor, como se muestra en el ejemplo de código siguiente. class FacebookProvider: NSObject, AWSIdentityProviderManager { func logins() -> AWSTask {
236
Amazon Cognito Guía para desarrolladores Facebook if let token = AccessToken.current?.authenticationToken { return AWSTask(result: [AWSIdentityProviderFacebook:token]) } return AWSTask(error:NSError(domain: "Facebook Login", code: -1 , userInfo: ["Facebook" : "No current Facebook access token"])) }
}
Cuando cree instancias de AWSCognitoCredentialsProvider, transmita la clase que implementa AWSIdentityProviderManager como valor de identityProviderManager en el constructor. Para obtener más información, consulte la página de referencia de AWSCognitoCredentialsProvider y elija initWithRegionType:identityPoolId:identityProviderManager.
JavaScript Para proporcionar autenticación de Facebook, siga el Inicio de sesión con Facebook para web para añadir el botón "Iniciar sesión con Facebook" en su sitio web. El SDK de Facebook utiliza un objeto de sesión para realizar un seguimiento de su estado. Amazon Cognito usa el token de acceso de ese objeto de sesión para autenticar al usuario, generar el identificador único y, si es necesario, conceder al usuario acceso a otros recursos de AWS. Una vez que haya autenticado a su usuario en el SDK de Facebook, añada el token de sesión al proveedor de credenciales de Amazon Cognito. FB.login(function (response) { // Check if the user logged in successfully. if (response.authResponse) { console.log('You are now logged in.'); // Add the Facebook access token to the Amazon Cognito credentials login map. AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID', Logins: { 'graph.facebook.com': response.authResponse.accessToken } }); // Obtain AWS credentials AWS.config.credentials.get(function(){ // Access AWS resources here. }); } else { console.log('There was a problem logging you in.'); } });
El SDK de Facebook obtiene un token de OAuth que Amazon Cognito utiliza para generar credenciales de AWS para el usuario final autenticado. Amazon Cognito también usa el token para buscar en su base de datos un usuario que corresponda a esa identidad de Facebook. Si el usuario ya existe, la API devuelve el identificador existente. De lo contrario, devuelve un identificador nuevo. El SDK cliente guarda los identificadores automáticamente en caché los en el dispositivo local.
Note Después de configurar la asignación de inicios de sesión, deberá realizar una llamada a refresh o get para obtener las credenciales. Para ver código de ejemplo, consulte "Use Case 17, Integrating User Pools with Cognito Identity", en el archivo README de JavaScript.
237
Amazon Cognito Guía para desarrolladores Facebook
Unity Para proporcionar la autenticación de Facebook, siga primero la Guía de Facebook para incluir y configurar el SDK de Facebook en su aplicación. Amazon Cognito usa el token de acceso de Facebook del objeto "FB" para generar un identificador de usuario único asociado a una identidad de Amazon Cognito. Una vez que haya autenticado a su usuario en el SDK de Facebook, añada el token de sesión al proveedor de credenciales de Amazon Cognito: void Start() { FB.Init(delegate() { if (FB.IsLoggedIn) { //User already logged in from a previous session AddFacebookTokenToCognito(); } else { FB.Login ("email", FacebookLoginCallback); } }); } void FacebookLoginCallback(FBResult result) { if (FB.IsLoggedIn) { AddFacebookTokenToCognito(); } else { Debug.Log("FB Login error"); } } void AddFacebookTokenToCognito() { credentials.AddLogin ("graph.facebook.com", AccessToken.CurrentAccessToken.TokenString); }
Asegúrese de llamar a FB.Login() y de que FB.IsLoggedIn sea True antes de usar FB.AccessToken.
Xamarin Xamarin para Android: public void InitializeFacebook() { FacebookSdk.SdkInitialize(this.ApplicationContext); callbackManager = CallbackManagerFactory.Create(); LoginManager.Instance.RegisterCallback(callbackManager, new FacebookCallback < LoginResult > () { HandleSuccess = loginResult = > { var accessToken = loginResult.AccessToken; credentials.AddLogin("graph.facebook.com", accessToken.Token); //open new activity }, HandleCancel = () = > { //throw error message }, HandleError = loginError = > { //throw error message } });
238
Amazon Cognito Guía para desarrolladores Login with Amazon
}
LoginManager.Instance.LogInWithReadPermissions(this, new List < string > { "public_profile" });
Xamarin para iOS: public void InitializeFacebook() { LoginManager login = new LoginManager(); login.LogInWithReadPermissions(readPermissions.ToArray(), delegate(LoginManagerLoginResult result, NSError error) { if (error != null) { //throw error message } else if (result.IsCancelled) { //throw error message } else { var accessToken = loginResult.AccessToken; credentials.AddLogin("graph.facebook.com", accessToken.Token); //open new view controller } }); }
Login with Amazon (Grupos de identidades) Amazon Cognito se integra con Login with Amazon para ofrecer autenticación federada para sus usuarios de la aplicación móvil y la aplicación web. En esta sección se explica cómo registrar y configurar su aplicación con Login with Amazon como proveedor de identidad. Hay dos formas de configurar Login with Amazon para que funcione con Amazon Cognito. Si no está seguro de cuál utilizar o si necesita usar los dos, consulte la sección sobre la "configuración de Login with Amazon" en las preguntas frecuentes de Login with Amazon. • A través del portal de desarrolladores de Amazon. Adopte este método si quiere dejar a sus usuarios finales autenticarse con Login with Amazon, pero no dispone de una cuenta Seller Central. • A través de Seller Central usando http://login.amazon.com/. Adopte este método si es un comerciante minorista que usa Seller Central.
Note Para Xamarin, siga la guía Introducción a Xamarin para integrar Login with Amazon en su aplicación Xamarin.
Note La integración de Login with Amazon no se admite de forma nativa en la plataforma Unity. Actualmente, necesita el uso de una vista de web para seguir el flujo de inicio de sesión del navegador.
Configuración de Login with Amazon Para implementar Login with Amazon, lleve a cabo alguna de las siguientes operaciones: • Cree un ID de perfil de seguridad para su aplicación a través del portal de desarrolladores de Amazon. Adopte este método si quiere dejar a sus usuarios finales autenticarse con Amazon, pero no dispone de cuenta Seller Central. La documentación de Login with Amazon del portal para desarrolladores explica cómo configurar Login with Amazon en su aplicación, descargar el SDK de cliente y declarar la
239
Amazon Cognito Guía para desarrolladores Login with Amazon
aplicación en la plataforma para desarrolladores de Amazon. Tome nota del ID de perfil de seguridad, ya que tendrá que introducirlo como ID de aplicación de Amazon cuando cree un grupo de identidades de Amazon Cognito, tal como se describe en Obtención de credenciales (p. 225). • Cree un ID de aplicación para su aplicación mediante Seller Central utilizando http://login.amazon.com/. Adopte este método si es un comerciante minorista que usa Seller Central. La documentación de Login with Amazon de Seller Central explica cómo configurar Login with Amazon en su aplicación, descargar el SDK de cliente y declarar la aplicación en la plataforma para desarrolladores de Amazon. Tome nota del ID de aplicación, ya que tendrá que introducirlo como ID de aplicación de Amazon cuando cree un grupo de identidades de Amazon Cognito, tal como se describe en Obtención de credenciales.
Configuración del proveedor externo en la consola de Amazon Cognito Elija Manage Identity Pools (Administrar grupos de identidades) en la página de inicio de la consola de Amazon Cognito: 1.
Haga clic en el nombre del grupo de identidades para el que desee habilitar Login with Amazon como proveedor externo. Se mostrará la página Dashboard (Panel) de su grupo de identidades.
2.
En la esquina superior derecha de la página Dashboard (Panel), elija Edit identity pool (Editar grupo de identidades). Se visualizará la página Edit identity pool.
3.
Desplácese hacia abajo y elija Authentication providers (Proveedores de autenticación) para expandirlo.
4.
Elija la pestaña Amazon.
5.
Elija Unlock (Desbloquear).
6.
Especifique el ID de aplicación de Amazon que ha obtenido en Amazon y, a continuación, seleccione Save Changes (Guardar cambios).
Utilización de Login with Amazon: Android Una vez que haya implementado el inicio de sesión con Amazon, puede transmitir el token al proveedor de credenciales de Amazon Cognito en el método onSuccess de la interfaz TokenListener. El código tiene este aspecto: @Override public void onSuccess(Bundle response) { String token = response.getString(AuthzConstants.BUNDLE_KEY.TOKEN.val); Map logins = new HashMap(); logins.put("www.amazon.com", token); credentialsProvider.setLogins(logins); }
Utilización de Login with Amazon: iOS - Objective-C Una vez que haya implementado el inicio de sesión con Amazon, puede transmitir el token al proveedor de credenciales de Amazon Cognito en el método requestDidSucceed de la interfaz AMZNAccessTokenDelegate: - (void)requestDidSucceed:(APIResult \*)apiResult { if (apiResult.api == kAPIAuthorizeUser) { [AIMobileLib getAccessTokenForScopes:[NSArray arrayWithObject:@"profile"] withOverrideParams:nil delegate:self]; }
240
Amazon Cognito Guía para desarrolladores Login with Amazon else if (apiResult.api == kAPIGetAccessToken) { credentialsProvider.logins = @{ @(AWSCognitoLoginProviderKeyLoginWithAmazon): apiResult.result }; } }}
Utilización de Login with Amazon: iOS - Swift Una vez que haya implementado el inicio de sesión con Amazon, puede transmitir el token al proveedor de credenciales de Amazon Cognito en el método requestDidSucceed de la interfaz AMZNAccessTokenDelegate: func requestDidSucceed(apiResult: APIResult!) { if apiResult.api == API.AuthorizeUser { AIMobileLib.getAccessTokenForScopes(["profile"], withOverrideParams: nil, delegate: self) } else if apiResult.api == API.GetAccessToken { credentialsProvider.logins = [AWSCognitoLoginProviderKey.LoginWithAmazon.rawValue: apiResult.result] } }
Utilización de Login with Amazon: JavaScript Una vez que el usuario se haya autenticado con Login with Amazon y vuelva a su sitio web, se proporciona el token de acceso de Login with Amazon en la cadena de consulta. Pase este token a la asignación de inicios de sesión de credenciales. AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID', Logins: { 'www.amazon.com': 'Amazon Access Token' } });
Utilización de Login with Amazon: Xamarin Xamarin para Android AmazonAuthorizationManager manager = new AmazonAuthorizationManager(this, Bundle.Empty); var tokenListener = new APIListener { Success = response => { // Get the auth token var token = response.GetString(AuthzConstants.BUNDLE_KEY.Token.Val); credentials.AddLogin("www.amazon.com", token); } }; // Try and get existing login manager.GetToken(new[] { "profile" }, tokenListener);
Xamarin para iOS En AppDelegate.cs, inserte lo siguiente: 241
Amazon Cognito Guía para desarrolladores Google
public override bool OpenUrl (UIApplication application, NSUrl url, string sourceApplication, NSObject annotation) { // Pass on the url to the SDK to parse authorization code from the url bool isValidRedirectSignInURL = AIMobileLib.HandleOpenUrl (url, sourceApplication); if(!isValidRedirectSignInURL) return false;
}
// App may also want to handle url return true;
Luego, haga lo siguiente en ViewController.cs: public override void ViewDidLoad () { base.LoadView ();
}
// Here we create the Amazon Login Button btnLogin = UIButton.FromType (UIButtonType.RoundedRect); btnLogin.Frame = new RectangleF (55, 206, 209, 48); btnLogin.SetTitle ("Login using Amazon", UIControlState.Normal); btnLogin.TouchUpInside += (sender, e) => { AIMobileLib.AuthorizeUser (new [] { "profile"}, new AMZNAuthorizationDelegate ()); }; View.AddSubview (btnLogin);
// Class that handles Authentication Success/Failure public class AMZNAuthorizationDelegate : AIAuthenticationDelegate { public override void RequestDidSucceed(ApiResult apiResult) { // Your code after the user authorizes application for requested scopes var token = apiResult["access_token"]; credentials.AddLogin("www.amazon.com",token); } public override void RequestDidFail(ApiError errorResponse) { // Your code when the authorization fails InvokeOnMainThread(() => new UIAlertView("User Authorization Failed", errorResponse.Error.Message, null, "Ok", null).Show()); }
}
Google (Grupos de identidades) Amazon Cognito se integra con Google para proporcionar autenticación federada a los usuarios de su aplicación móvil. En esta sección se explica cómo registrar y configurar su aplicación con Google como proveedor de identidad.
Android Note Si su aplicación utiliza Google y estará disponible en varias plataformas móviles, debe configurarla como proveedor de OpenID Connect (p. 254). Agregar todos los ID de cliente creados como valores de audiencia adicionales permite una mejor integración. Para obtener más información sobre el modelo de identidad de varios clientes de Google, consulte Cross-client Identity.
242
Amazon Cognito Guía para desarrolladores Google
Configuración de Google Para habilitar el inicio de sesión de Google para Android, debe crear un proyecto de consola de Google Developers para su aplicación. 1. Vaya a la consola de Google Developers y cree un proyecto. 2. En APIs and auth > APIs > Social APIs (API y autenticación > API > API sociales), active la API de Google. 3. En APIs and auth > Credentials > OAuth consent screen (API y autenticación > Credenciales > Pantalla de consentimiento de OAuth), cree el cuadro de diálogo que se mostrará a los usuarios cuando su aplicación les pida acceso a sus datos privados. 4. En Credentials > Add Credentials (Credenciales > Añadir credenciales), cree un ID de cliente OAuth 2.0 para Android. Necesitará un ID de cliente para todas las plataformas para las que quiera desarrollar la aplicación (por ejemplo, la web, iOS, Android). 5. En Credentials > Add Credentials (Credenciales > Añadir credenciales), cree una cuenta de servicio. la consola le alertará de que se ha creado una clave pública/privada nueva. Para obtener instrucciones adicionales acerca de cómo usar la consola de Google Developers, consulte la página de gestión de proyectos en la consola de Developers. Para obtener más información acerca de la integración de Google en una aplicación Android, consulte la documentación de Google para Android. Configuración del proveedor externo en la consola de Amazon Cognito Elija Manage Identity Pools (Administrar grupos de identidades) en la página de inicio de la consola de Amazon Cognito: 1. Haga clic en el nombre del grupo de identidades para el que desee habilitar Google como proveedor externo. Se mostrará la página Dashboard (Panel) de su grupo de identidades. 2. En la esquina superior derecha de la página Dashboard (Panel), elija Edit identity pool (Editar grupo de identidades). Se visualizará la página Edit identity pool. 3. Desplácese hacia abajo y elija Authentication providers (Proveedores de autenticación) para expandirlo. 4. Elija la pestaña Google . 5. Elija Unlock (Desbloquear). 6. Introduzca el ID de cliente de Google que Google le ha entregado y, a continuación, haga clic en Save Changes (Guardar cambios). Uso de Google Para habilitar el inicio de sesión con Google en su aplicación, siga la documentación de Google para Android. Si la autenticación es correcta, se genera un token de autenticación de OpenID Connect, que Amazon Cognito utiliza para autenticar al usuario y generar un identificador único. En el siguiente código de muestra se muestra cómo recuperar el token de autenticación de Google Play Service: GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext()); AccountManager am = AccountManager.get(this); Account[] accounts = am.getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE); String token = GoogleAuthUtil.getToken(getApplicationContext(), accounts[0].name, "audience:server:client_id:YOUR_GOOGLE_CLIENT_ID"); Map logins = new HashMap(); logins.put("accounts.google.com", token);
243
Amazon Cognito Guía para desarrolladores Google credentialsProvider.setLogins(logins);
iOS - Objective-C Note Si su aplicación utiliza Google y estará disponible en varias plataformas móviles, debe configurarla como proveedor de OpenID Connect (p. 254). Agregue todos los ID de cliente creados como valores de audiencia adicionales para permitir una mejor integración. Para obtener más información sobre el modelo de identidad de varios clientes de Google, consulte Cross-client Identity. Para habilitar el inicio de sesión de Google para iOS, tendrá que crear un proyecto de consola de Google Developers para su aplicación.
Configuración de Google 1.
Vaya a la consola de Google Developers y cree un proyecto.
2.
En APIs and auth > APIs > Social APIs (API y autenticación > API > API sociales), active la API de Google.
3.
En APIs and auth > Credentials > OAuth consent screen (API y autenticación > Credenciales > Pantalla de consentimiento de OAuth), cree el cuadro de diálogo que se mostrará a los usuarios cuando su aplicación les pida acceso a sus datos privados.
4.
En Credentials > Add Credentials (Credenciales > Añadir credenciales) cree un ID de cliente OAuth 2.0 para iOS. Necesitará un ID de cliente para todas las plataformas para las que quiera desarrollar la aplicación (por ejemplo, la web, iOS, Android).
5.
En Credentials > Add Credentials (Credenciales > Añadir credenciales), cree una cuenta de servicio. la consola le alertará de que se ha creado una clave pública/privada nueva.
Para obtener instrucciones adicionales acerca de cómo usar la consola de Google Developers, consulte la página de gestión de proyectos en la consola de Developers. Para obtener más información acerca de la integración de Google en una aplicación iOS, consulte la documentación de Google para iOS. Elija Manage Identity Pools (Administrar grupos de identidades) en la página de inicio de la consola de Amazon Cognito:
Configuración del proveedor externo en la consola de Amazon Cognito 1.
Haga clic en el nombre del grupo de identidades para el que desee habilitar Google como proveedor externo. Se mostrará la página Dashboard (Panel) de su grupo de identidades.
2.
En la esquina superior derecha de la página Dashboard (Panel), elija Edit identity pool (Editar grupo de identidades). Se visualizará la página Edit identity pool.
3.
Desplácese hacia abajo y elija Authentication providers (Proveedores de autenticación) para expandirlo.
4.
Elija la pestaña Google .
5.
Elija Unlock (Desbloquear).
6.
Introduzca el ID de cliente de Google que Google le ha entregado y, a continuación, haga clic en Save Changes (Guardar cambios).
Uso de Google
244
Amazon Cognito Guía para desarrolladores Google
Para habilitar el inicio de sesión con Google en su aplicación, siga la documentación de Google para iOS. Si la autenticación es correcta, se genera un token de autenticación de OpenID Connect, que Amazon Cognito utiliza para autenticar al usuario y generar un identificador único. Si la autenticación es correcta, se genera un objeto GTMOAuth2Authentication que contiene un id_token que Amazon Cognito utiliza para autenticar al usuario y generar un identificador único: - (void)finishedWithAuth: (GTMOAuth2Authentication *)auth error: (NSError *) error { NSString *idToken = [auth.parameters objectForKey:@"id_token"]; credentialsProvider.logins = @{ @(AWSCognitoLoginProviderKeyGoogle): idToken }; }
iOS - Swift Note Si su aplicación utiliza Google y estará disponible en varias plataformas móviles, debe configurarla como proveedor de OpenID Connect (p. 254). Agregue todos los ID de cliente creados como valores de audiencia adicionales para permitir una mejor integración. Para obtener más información sobre el modelo de identidad de varios clientes de Google, consulte Cross-client Identity. Para habilitar el inicio de sesión de Google para iOS, tendrá que crear un proyecto de consola de Google Developers para su aplicación.
Configuración de Google 1. 2. 3. 4. 5.
Vaya a la consola de Google Developers y cree un proyecto. En APIs and auth > APIs > Social APIs (API y autenticación > API > API sociales), active la API de Google. En APIs and auth > Credentials > OAuth consent screen (API y autenticación > Credenciales > Pantalla de consentimiento de OAuth), cree el cuadro de diálogo que se mostrará a los usuarios cuando su aplicación les pida acceso a sus datos privados. En Credentials > Add Credentials (Credenciales > Añadir credenciales) cree un ID de cliente OAuth 2.0 para iOS. Necesitará un ID de cliente para todas las plataformas para las que quiera desarrollar la aplicación (por ejemplo, la web, iOS, Android). En Credentials > Add Credentials (Credenciales > Añadir credenciales), cree una cuenta de servicio. la consola le alertará de que se ha creado una clave pública/privada nueva.
Para obtener instrucciones adicionales acerca de cómo usar la consola de Google Developers, consulte la página de gestión de proyectos en la consola de Developers. Para obtener más información acerca de la integración de Google en una aplicación iOS, consulte la documentación de Google para iOS. Elija Manage Identity Pools (Administrar grupos de identidades) en la página de inicio de la consola de Amazon Cognito:
Configuración del proveedor externo en la consola de Amazon Cognito 1. 2. 3.
Haga clic en el nombre del grupo de identidades para el que desee habilitar Google como proveedor externo. Se mostrará la página Dashboard (Panel) de su grupo de identidades. En la esquina superior derecha de la página Dashboard (Panel), elija Edit identity pool (Editar grupo de identidades). Se visualizará la página Edit identity pool. Desplácese hacia abajo y elija Authentication providers (Proveedores de autenticación) para expandirlo.
245
Amazon Cognito Guía para desarrolladores Google
4.
Elija la pestaña Google .
5.
Elija Unlock (Desbloquear).
6.
Introduzca el ID de cliente de Google que Google le ha entregado y, a continuación, haga clic en Save Changes (Guardar cambios).
Uso de Google Para habilitar el inicio de sesión con Google en su aplicación, siga la documentación de Google para iOS. Si la autenticación es correcta, se genera un token de autenticación de OpenID Connect, que Amazon Cognito utiliza para autenticar al usuario y generar un identificador único. Si la autenticación es correcta, se genera un objeto GTMOAuth2Authentication que contiene un id_token que Amazon Cognito utiliza para autenticar al usuario y generar un identificador único: func finishedWithAuth(auth: GTMOAuth2Authentication!, error: NSError!) { if error != nil { print(error.localizedDescription) } else { let idToken = auth.parameters.objectForKey("id_token") credentialsProvider.logins = [AWSCognitoLoginProviderKey.Google.rawValue: idToken!] } }
JavaScript Note Si su aplicación utiliza Google y estará disponible en varias plataformas móviles, debe configurarla como proveedor de OpenID Connect (p. 254). Agregue todos los ID de cliente creados como valores de audiencia adicionales para permitir una mejor integración. Para obtener más información sobre el modelo de identidad de varios clientes de Google, consulte Cross-client Identity. Configuración de Google Para habilitar el inicio de sesión de Google para su aplicación web, tendrá que crear un proyecto de consola de Google Developer para su aplicación. 1. Vaya a la consola de Google Developers y cree un proyecto. 2. En APIs and auth > APIs > Social APIs (API y autenticación > API > API sociales), active la API de Google. 3. En APIs and auth > Credentials > OAuth consent screen (API y autenticación > Credenciales > Pantalla de consentimiento de OAuth), cree el cuadro de diálogo que se mostrará a los usuarios cuando su aplicación les pida acceso a sus datos privados. 4. En Credentials > Add Credentials (Credenciales > Añadir credenciales) cree un ID de cliente de OAuth 2.0 para su aplicación web. Necesitará un ID de cliente para todas las plataformas para las que quiera desarrollar la aplicación (como la web, iOS, Android). 5. En Credentials > Add Credentials (Credenciales > Añadir credenciales), cree una cuenta de servicio. La consola le alerta de que se ha creado una clave pública/privada nueva. Para obtener instrucciones adicionales acerca de cómo usar la consola de Google Developers, consulte la página de gestión de proyectos en la consola de Developers. Configuración del proveedor externo en la consola de Amazon Cognito
246
Amazon Cognito Guía para desarrolladores Google
Elija Manage Identity Pools (Administrar grupos de identidades) en la página de inicio de la consola de Amazon Cognito: 1. Haga clic en el nombre del grupo de identidades para el que desee habilitar Google como proveedor externo. Se mostrará la página Dashboard (Panel) de su grupo de identidades. 2. En la esquina superior derecha de la página Dashboard (Panel), elija Edit identity pool (Editar grupo de identidades). Se visualizará la página Edit identity pool. 3. Desplácese hacia abajo y elija Authentication providers (Proveedores de autenticación) para expandirlo. 4. Elija la pestaña Google . 5. Elija Unlock (Desbloquear). 6. Introduzca el ID de cliente de Google que Google le ha entregado y, a continuación, haga clic en Save Changes (Guardar cambios). Uso de Google Para habilitar el inicio de sesión con Google en su aplicación, siga la documentación de Google para la web. Si la autenticación es correcta, se genera un objeto de respuesta que contiene un id_token que Amazon Cognito utiliza para autenticar al usuario y generar un identificador único: function signinCallback(authResult) { if (authResult['status']['signed_in']) { // Add the Google access token to the Amazon Cognito credentials login map. AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID', Logins: { 'accounts.google.com': authResult['id_token'] } });
}
}
// Obtain AWS credentials AWS.config.credentials.get(function(){ // Access AWS resources here. });
Unity Configuración de Google Para habilitar el inicio de sesión de Google para su aplicación web, tendrá que crear un proyecto de consola de Google Developer para su aplicación. 1. Vaya a la consola de Google Developers y cree un proyecto. 2. En APIs and auth > APIs > Social APIs (API y autenticación > API > API sociales), active la API de Google. 3. En APIs and auth > Credentials > OAuth consent screen (API y autenticación > Credenciales > Pantalla de consentimiento de OAuth), cree el cuadro de diálogo que se mostrará a los usuarios cuando su aplicación les pida acceso a sus datos privados. 4. Para Unity, debe crear un total de tres ID: dos para Android y uno para iOS. En Credentials > Add Credentials (Credenciales > Añadir credenciales): • Android: cree un ID de cliente OAuth 2.0 para Android y un ID de cliente OAuth 2.0 para una aplicación web.
247
Amazon Cognito Guía para desarrolladores Google
• iOS: cree un ID de cliente OAuth 2.0 para iOS. 5. En Credentials > Add Credentials (Credenciales > Añadir credenciales), cree una cuenta de servicio. la consola le alertará de que se ha creado una clave pública/privada nueva. Creación de un proveedor de OpenID en la consola de IAM 1. A continuación, tendrá que crear un proveedor de OpenID en la consola de IAM. Para obtener instrucciones sobre cómo configurar un proveedor de OpenID, consulte la página de uso de proveedores de identidades OpenID Connect (p. 254). 2. Cuando se le solicite la URL de su proveedor, especifique "https://accounts.google.com". 3. Cuando se le pida que introduzca un valor en el campo Audience (Público), introduzca uno de los tres ID de cliente que ha creado en los pasos anteriores. 4. Después de crear al proveedor, elija el nombre del proveedor y añada dos públicos más, proporcionando los ID de cliente restantes. Configuración del proveedor externo en la consola de Amazon Cognito Elija Manage Identity Pools (Administrar grupos de identidades) en la página de inicio de la consola de Amazon Cognito: 1. Haga clic en el nombre del grupo de identidades para el que desee habilitar Google como proveedor externo. Se mostrará la página Dashboard (Panel) de su grupo de identidades. 2. En la esquina superior derecha de la página Dashboard (Panel), elija Edit identity pool (Editar grupo de identidades). Se visualizará la página Edit identity pool. 3. Desplácese hacia abajo y elija Authentication providers (Proveedores de autenticación) para expandirlo. 4. Elija la pestaña Google . 5. Elija Unlock (Desbloquear). 6. Introduzca el ID de cliente de Google que Google le ha entregado y, a continuación, haga clic en Save Changes (Guardar cambios). Instalación del complemento Unity Google 1. Añada el complemento Google Play Games para Unity al proyecto de Unity. 2. En Unity, en el menú de Windows, configure el complemento utilizando los tres ID para las plataformas Android e iOS. Uso de Google En el siguiente código de muestra se muestra cómo recuperar el token de autenticación de Google Play Service: void Start() { PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder().Build(); PlayGamesPlatform.InitializeInstance(config); PlayGamesPlatform.DebugLogEnabled = true; PlayGamesPlatform.Activate(); Social.localUser.Authenticate(GoogleLoginCallback); } void GoogleLoginCallback(bool success) { if (success) {
248
Amazon Cognito Guía para desarrolladores Inicio de sesión con Apple string token = PlayGamesPlatform.Instance.GetIdToken(); credentials.AddLogin("accounts.google.com", token);
} else { Debug.LogError("Google login failed. If you are not running in an actual Android/iOS device, this is expected."); }
}
Xamarin Note La plataforma Xamarin no admite la integración de Google en modo nativo. Actualmente, necesita el uso de una vista de web para seguir el flujo de inicio de sesión del navegador. Para obtener información acerca de cómo la integración de Google funciona con otros SDK, seleccione otra plataforma. Para habilitar el inicio de sesión con Google en su aplicación, deberá autenticar a sus usuarios y obtener un token de OpenID Connect para ellos. Amazon Cognito utiliza este token para generar un identificador de usuario único asociado a una identidad de Amazon Cognito. Desgraciadamente, el SDK de Google para Xamarin no le permite recuperar el token de OpenID Connect, por lo que debe utilizar un cliente alternativo o el flujo web en una vista web. Una vez que tenga el token, puede definirlo en CognitoAWSCredentials: credentials.AddLogin("accounts.google.com", token);
Note Si su aplicación utiliza Google y estará disponible en varias plataformas móviles, debe configurarla como proveedor de OpenID Connect (p. 254). Agregue todos los ID de cliente creados como valores de audiencia adicionales para permitir una mejor integración. Para obtener más información sobre el modelo de identidad de varios clientes de Google, consulte Cross-client Identity.
Sign in with Apple (Grupos de identidades) Amazon Cognito se integra con Sign in with Apple para ofrecer autenticación federada para sus usuarios de la aplicación móvil y de la aplicación web. En esta sección se explica cómo registrar y configurar su aplicación con Sign in with Apple como proveedor de identidad. Agregar Iniciar sesión con Apple como proveedor de autenticación a un grupo de identidades es un proceso de dos pasos. En primer lugar, se integra Inicio de sesión con Apple en una aplicación y, a continuación, se configura Inicio de sesión con Apple en grupos de identidades.
Configurar Sign in with Apple Para configurar Inicio de sesión con Apple como proveedor de identidades, debe registrar su aplicación en Apple para recibir el ID de cliente. 1.
Cree una cuenta de desarrollador en Apple.
2.
Inicie sesión con las credenciales de Apple.
3.
En el panel de navegación de la izquierda, elija Certificates, IDs & Profiles (Certificados, identificadores y perfiles).
249
Amazon Cognito Guía para desarrolladores Inicio de sesión con Apple
4.
En el panel de navegación izquierdo, elija Identifiers (Identificadores).
5.
En la página Identifiers (Identificadores), elija el icono +.
6.
En la página Register a New Identifier (Registrar un nuevo identificador), elija App IDs (ID de aplicaciones) y luego Continue (Continuar).
7.
En la página Register an App ID (Registrar un ID de aplicación), haga lo siguiente: a.
En Description (Descripción), escriba una descripción.
b.
En Bundle ID (Identificador de paquete), escriba un identificador. Anote este ID de paquete, ya que necesitará este valor para configurar Apple como proveedor en el grupo de identidades.
c.
En Capabilities (Capacidades), elija Sign In with Apple (Inicio de sesión con Apple) y luego Edit (Editar).
d.
En la página Sign in with Apple: App ID Configuration (Inicio de sesión con Apple: configuración de ID de Apple), seleccione la configuración adecuada para su aplicación y luego elija Save (Guardar).
e.
Elija Continue.
8.
En la página Confirm your App ID (Confirmar ID de Apple), elija Register (Registrarse).
9.
Continúe con el paso 10 si desea integrar Inicio de sesión con Apple con una aplicación iOS nativa. El paso 11 es para aplicaciones que desea integrar con Inicio de sesión con Apple JS.
10. En la página Identifiers (Identificadores), deténgase en App IDs (ID de aplicación) en la parte derecha de la página. Elija Services IDs (ID de servicios) y, a continuación, elija el icono más +. 11. En la página Register a New Identifier (Registrar un nuevo identificador), elija Services IDs (ID de servicios) y luego Continue (Continuar). 12. En la página Register a Services ID (Registrar un ID de servicio), haga lo siguiente: a.
En Description (Descripción), escriba una descripción.
b.
En Identifier (Identificador), escriba un identificador. Anote el ID de servicios ya que necesitará este valor para configurar Apple como proveedor en su grupo de identidades.
c.
Seleccione Sign In with Apple (Inicio de sesión con Apple) y luego elija Configure (Configurar).
d.
En la página Web Authentication Configuration (Configuración de autenticación web), elija Primary App ID (ID de aplicación principal). En Website URL's (URL del sitio web), elija el icono +. En Domains and Subdomains (Dominios y subdominios), introduzca el nombre de dominio de su aplicación. En Return URLs (URL de devolución), introduzca la URL de devolución de llamada a la que redirige la autorización después de iniciar sesión con la autenticación de Apple.
e.
Seleccione Next (Siguiente).
f.
Seleccione Continue (Continuar) y, a continuación, Register (Registrarse).
13. En el panel de navegación izquierdo, elija Keys (Claves). 14. En la página Keys (Claves), elija el icono +. 15. En la página Register a New Key (Registrar una nueva clave), haga lo siguiente: a.
En Key Name (Nombre de clave), escriba un nombre de clave.
b.
Elija Sign In with Apple (Inicio de sesión con Apple) y luego elija Configure (Configurar).
c.
En la página Configure Key (Configurar clave), elija un Primary App ID (ID de aplicación principal) y luego elija Save (Guardar).
d.
Seleccione Continue (Continuar) y, a continuación, Register (Registrarse).
Note Para integrar Inicio de sesión con Apple con una aplicación iOS nativa, consulte Implementación de la autenticación de usuario con Inicio de sesión con Apple. Para integrar Inicio de sesión con Apple en una plataforma que no sea nativa de iOS, consulte Inicio de sesión con Apple JS. 250
Amazon Cognito Guía para desarrolladores Inicio de sesión con Apple
Configuración del proveedor externo en la consola de identidades Amazon Cognito federadas de Utilice el siguiente procedimiento para configurar su proveedor externo. 1.
Elija Manage Identity Pools (Administrar grupos de identidades) en la página de inicio de la consola de Amazon Cognito.
2.
Elija el nombre del grupo de identidades para el que desee habilitar Apple como proveedor externo.
3.
En la esquina superior derecha del panel, elija Edit identity pool (Editar grupo de identidades).
4.
Desplácese hacia abajo y elija Authentication providers (Proveedores de autenticación) para expandirlo.
5.
Elija la pestaña Apple.
6.
Escriba el Bundle ID (ID de paquete) que obtuvo de https://developer.apple.com. A continuación, elija Save changes (Guardar cambios).
7.
Si utiliza Sign in with Apple con aplicaciones iOS nativas, escriba el BundleID que obtuvo de developer.apple.com. O si utiliza Inicio de sesión con Apple con aplicaciones web u otras aplicaciones, introduzca el ID de servicio. A continuación, elija Save changes (Guardar cambios).
Inicio de sesión con Apple como proveedor en los ejemplos de CLI de identidades federadas de Amazon Cognito En este ejemplo se crea un grupo de identidades denominado MyIdentityPool con Inicio de sesión con Apple como proveedor de identidades. aws cognito-identity create-identity-pool --identity-pool-name MyIdentityPool --supported-login-providers appleid.apple.com="sameple.apple.clientid" Para obtener más información, vea Crear grupo de identidades Generar un ID Amazon Cognito de identidad Este ejemplo genera (o recupera) un ID de Amazon Cognito. Esta API es pública, por lo que no se necesita ninguna credencial para llamar a esta API. aws cognito-identity get-id --identity-pool-id SampleIdentityPoolId --logins appleid.apple.com="SignInWithAppleIdToken" Para obtener más información, consulte get-id. Obtener credenciales para un ID de identidad de Amazon Cognito En este ejemplo se devuelven las credenciales del ID de identidad proporcionado e Inicio de sesión con inicio de sesión de Apple. Esta API es pública, por lo que no se necesita ninguna credencial para llamar a esta API. aws cognito-identity get-credentials-for-identity --identity-id SampleIdentityId --logins appleid.apple.com="SignInWithAppleIdToken" Para obtener más información, vea get-credentials-for-identity
Usar Sign in with Apple: Android Apple no proporciona un SDK que admita Inicio de sesión con Apple para Android. Puede utilizar el flujo web en una vista web en su lugar.
251
Amazon Cognito Guía para desarrolladores Inicio de sesión con Apple
• Para configurar Inicio de sesión con Apple en su aplicación, consulte el tema Configurar su página web para Inicio de sesión con Apple en la documentación de Apple. • Para agregar un botón Sign in with Apple (Iniciar sesión con Apple) a la interfaz de usuario de Android, consulte el tema Displaying and Configuring Sign In with Apple Buttons en la documentación de Apple. • Para autenticar de forma segura a los usuarios mediante Inicio de sesión con Apple, consulte el tema Configurar su página web para Inicio de sesión con Apple en la documentación de Apple. Inicio de sesión con Apple utiliza un objeto de sesión para realizar un seguimiento de su estado. Amazon Cognito usa el token de ID de este objeto de sesión para autenticar al usuario, generar el identificador único y, si es necesario, conceder al usuario acceso a otros recursos de AWS. @Override public void onSuccess(Bundle response) { String token = response.getString("id_token"); Map logins = new HashMap(); logins.put("appleid.apple.com", token); credentialsProvider.setLogins(logins); }
Usar Sign in with Apple: iOS - Objective-C Apple proporcionó compatibilidad de SDK para Sign in with Apple en aplicaciones iOS nativas. Para implementar la autenticación de usuario con Inicio de sesión con Apple en dispositivos iOS nativos, consulte el tema Implementar la autenticación de usuarios con Inicio de sesión con Apple en la documentación de Apple. Amazon Cognito utiliza el token de ID para autenticar al usuario, generar el identificador único y, si es necesario, conceder al usuario acceso a otros recursos de AWS. (void)finishedWithAuth: (ASAuthorizationAppleIDCredential *)auth error: (NSError *) error { NSString *idToken = [ASAuthorizationAppleIDCredential objectForKey:@"identityToken"]; credentialsProvider.logins = @{ "appleid.apple.com": idToken }; }
Usar Sign in with Apple: iOS - Swift Apple proporcionó compatibilidad de SDK para Sign in with Apple en aplicaciones iOS nativas. Para implementar la autenticación de usuario con Inicio de sesión con Apple en dispositivos iOS nativos, consulte el tema Implementar la autenticación de usuarios con Inicio de sesión con Apple en la documentación de Apple. Amazon Cognito utiliza el token de ID para autenticar al usuario, generar el identificador único y, si es necesario, conceder al usuario acceso a otros recursos de AWS. Para obtener más información sobre cómo configurar Inicio de sesión con Apple en iOS, consulte Configurar Inicio de sesión con Apple func finishedWithAuth(auth: ASAuthorizationAppleIDCredential!, error: NSError!) { if error != nil { print(error.localizedDescription) } else { let idToken = auth.identityToken, credentialsProvider.logins = ["appleid.apple.com": idToken!]
252
Amazon Cognito Guía para desarrolladores Inicio de sesión con Apple
}
}
Usar Sign in with Apple: JavaScript Apple no proporciona un SDK que permita Inicio de sesión con Apple para JavaScript. Puede utilizar el flujo web en una vista web en su lugar. • Para configurar Inicio de sesión con Apple en su aplicación, consulte el tema Configurar su página web para Inicio de sesión con Apple en la documentación de Apple. • Para agregar un botón Sign in with Apple (Iniciar sesión con Apple) a la interfaz de usuario de JavaScript, consulte el tema Displaying and Configuring Sign In with Apple Buttons en la documentación de Apple. • Para autenticar de forma segura a los usuarios mediante Inicio de sesión con Apple, consulte el tema Configurar su página web para Inicio de sesión con Apple en la documentación de Apple. Inicio de sesión con Apple utiliza un objeto de sesión para realizar un seguimiento de su estado. Amazon Cognito usa el token de ID de este objeto de sesión para autenticar al usuario, generar el identificador único y, si es necesario, conceder al usuario acceso a otros recursos de AWS. function signinCallback(authResult) { // Add the apple's id token to the Amazon Cognito credentials login map. AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID', Logins: { 'appleid.apple.com': authResult['id_token'] } });
}
// Obtain AWS credentials AWS.config.credentials.get(function(){ // Access AWS resources here. });
Usar Sign in with Apple: Xamarin No tenemos un SDK que admita Inicio de sesión con Apple para Xamarin. Puede utilizar el flujo web en una vista web en su lugar. • Para configurar Inicio de sesión con Apple en su aplicación, consulte el tema Configurar su página web para Inicio de sesión con Apple en la documentación de Apple. • Para agregar un botón Sign in with Apple (Iniciar sesión con Apple) a la interfaz de usuario de Xamarin, consulte el tema Displaying and Configuring Sign In with Apple Buttons en la documentación de Apple. • Para autenticar de forma segura a los usuarios mediante Inicio de sesión con Apple, consulte el tema Configurar su página web para Inicio de sesión con Apple en la documentación de Apple. Inicio de sesión con Apple utiliza un objeto de sesión para realizar un seguimiento de su estado. Amazon Cognito usa el token de ID de este objeto de sesión para autenticar al usuario, generar el identificador único y, si es necesario, conceder al usuario acceso a otros recursos de AWS. Una vez que tenga el token, puede definirlo en CognitoAWSCredentials: credentials.AddLogin("appleid.apple.com", token);
253
Amazon Cognito Guía para desarrolladores Proveedores de Open ID Connect
Proveedores de OpenID Connect (Grupos de identidades) OpenID Connect es un estándar abierto de autenticación que es compatible con varios proveedores de inicio de sesión. Amazon Cognito admite la vinculación de identidades con los proveedores de OpenID Connect que se configuran mediante AWS Identity and Access Management. Adición de un proveedor OpenID Connect Para obtener más información acerca de cómo crear un proveedor OpenID Connect, consulte la documentación de IAM. Asociación de un proveedor con Amazon Cognito Una vez que haya creado un proveedor de OpenID Connect en la consola de IAM, podrá asociarlo con un grupo de identidades. Todos los proveedores configurados estarán visibles en la pantalla Edit Identity Pool en la consola de Amazon Cognito bajo el encabezado OpenID Connect Providers.
Puede asociar varios proveedores OpenID Connect a un único grupo de identidades. Uso de OpenID Connect Consulte la documentación de su proveedor para informarse de cómo iniciar sesión y recibir un token de ID. Una vez que tenga el token, añádalo a la asignación de inicios de sesión utilizando el URI de su proveedor como clave. Validación de un token de OpenID Connect En la primera integración con Amazon Cognito, puede que reciba una excepción InvalidToken. Es importante entender cómo Amazon Cognito valida los tokens de OpenID Connect.
Note Como se especifica aquí (https://tools.ietf.org/html/rfc7523), Amazon Cognito permite un periodo de gracia de 5minutos para gestionar cualquier sesgo del reloj entre sistemas. 1. El parámetro iss debe coincidir con la clave utilizada en la asignación de inicios de sesión (por ejemplo, login.provider.com). 2. La firma debe ser válida. Debe poder verificarse mediante una clave pública RSA. 3. La huella digital del certificado que alberga la clave pública coincide con lo que está configurado en el proveedor OpenId Connect. 4. Si el parámetro azp está presente, compruebe este valor comparándolo con la lista de los ID de cliente del proveedor OpenId Connect. 5. Si el parámetro azp no está presente, compruebe el parámetro aud comparándolo con la lista de los ID de cliente del proveedor OpenId Connect.
254
Amazon Cognito Guía para desarrolladores Proveedores de Open ID Connect
El sitio web jwt.io es un recurso valioso para descodificar tokens para verificar estos valores.
Android Map logins = new HashMap(); logins.put("login.provider.com", token); credentialsProvider.setLogins(logins);
iOS - Objective-C credentialsProvider.logins = @{ "login.provider.com": token }
iOS - Swift Para proporcionar el token de ID de OIDC a Amazon Cognito, implemente el protocolo AWSIdentityProviderManager. En la implementación del método de inicio de sesión, devuelva un diccionario que contenga el nombre del proveedor OIDC configurado. Este diccionario actúa como la clave y el token de ID actual del usuario autenticado como valor, tal como se muestra en el siguiente ejemplo de código. class OIDCProvider: NSObject, AWSIdentityProviderManager { func logins() -> AWSTask { let completion = AWSTaskCompletionSource() getToken(tokenCompletion: completion) return completion.task.continueOnSuccessWith { (task) -> AWSTask? in //login.provider.name is the name of the OIDC provider as setup in the Amazon Cognito console return AWSTask(result:["login.provider.name":task.result!]) } as! AWSTask } func getToken(tokenCompletion: AWSTaskCompletionSource) -> Void { //get a valid oidc token from your server, or if you have one that hasn't expired cached, return it //TODO code to get token from your server //... //if error getting token, set error appropriately tokenCompletion.set(error:NSError(domain: "OIDC Login", code: -1 , userInfo: ["Unable to get OIDC token" : "Details about your error"])) //else tokenCompletion.set(result:"result from server id token") }
}
Cuando cree instancias de AWSCognitoCredentialsProvider, transmita la clase que implementa AWSIdentityProviderManager como valor de identityProviderManager en el constructor. Para obtener más información, consulte la página de referencia de AWSCognitoCredentialsProvider y elija initWithRegionType:identityPoolId:identityProviderManager.
JavaScript AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID',
255
Amazon Cognito Guía para desarrolladores Proveedores de identidad SAML Logins: { 'login.provider.com': token } });
Unity credentials.AddLogin("login.provider.com", token);
Xamarin credentials.AddLogin("login.provider.com", token);
Proveedores de identidad SAML (grupos de identidades) Amazon Cognito admite la autenticación con proveedores de identidad mediante el lenguaje SAML 2.0 (Security Assertion Markup Language 2.0). Puede utilizar un proveedor de identidad que admita el lenguaje SAML con Amazon Cognito para proporcionar un flujo de incorporación sencillo a sus usuarios. El proveedor de identidad compatible con SAML especifica los roles de IAM que los usuarios pueden asumir para que se puedan conceder conjuntos de permisos diferentes a usuarios diferentes.
Configuración de un grupo de identidades para un proveedor SAML En los pasos siguientes se describe cómo configurar su grupo de identidades para utilizar un proveedor SAML.
Note Para poder configurar un grupo de identidades para que admita un proveedor SAML, primero tiene que configurar el proveedor de identidades SAML en la consola de IAM. Para obtener más información, consulte Integración de proveedores de soluciones SAML externos con AWS en la Guía del usuario de IAM.
Para configurar el grupo de identidades para que sea compatible con un proveedor SAML 1. 2. 3.
Inicie sesión en la consola de Amazon Cognito, seleccione Manage Identity Pools (Administrar grupos de identidades) y elija Create new identity pool (Crear nuevo grupo de identidades). En la sección Authentication providers (Proveedores de autenticación), elija la pestaña SAML. Elija el ARN del proveedor SAML y, a continuación, elija Create Pool (Crear grupo).
Configuración del proveedor de identidad SAML Después de crear el proveedor SAML, configure su proveedor de identidad SAML para añadir una relación de confianza entre el proveedor de identidad y AWS. Muchos proveedores de identidad le permiten especificar una URL desde la que pueden leer un documento XML que contiene información sobre la relación de confianza y los certificados. Para AWS, puede utilizar https://signin.aws.amazon.com/static/ saml-metadata.xml. El siguiente paso consiste en configurar la respuesta de afirmación de SAML del proveedor de identidad para rellenar las notificaciones que AWS. Para obtener más información sobre la configuración de notificaciones, consulte Configuración de aserciones SAML para la respuesta de autenticación.
256
Amazon Cognito Guía para desarrolladores Proveedores de identidad SAML
Personalización de un rol de usuario con SAML El uso de SAML con Identidad de Amazon Cognito permite personalizar el rol para el usuario final. Solo se admite el flujo mejorado (p. 207) con el proveedor de identidades basado en SAML. Para que el grupo de identidades utilice un proveedor de identidad SAML, no es necesario especificar un rol autenticado o sin autenticar. El atributo https://aws.amazon.com/SAML/Attributes/Role de la notificación especifica uno o varios pares compuestos por un ARN de proveedor y un ARN de rol, y delimitado con comas. Estos son los roles que el usuario tiene permiso para asumir. El proveedor de identidad SAML se puede configurar para rellenar los atributos de rol en función de la información de atributo de usuario que el proveedor de identidad tiene disponible. Si la aserción SAML recibe varios roles, el parámetro customRoleArn opcional debe rellenarse al llamar a getCredentialsForIdentity. El usuario asumirá el rol de entrada que se recibe en el parámetro si corresponde a un rol de la notificación de la aserción de SAML.
Autenticación de usuarios con un proveedor de identidad SAML Para federarse con el proveedor de identidad SAML, debe determinar la dirección URL que se utiliza para iniciar la sesión. La federación de AWS usa el inicio de sesión iniciado por el proveedor de identidad. En AD FS 2.0, la URL adopta la forma https:///adfs/ls/IdpInitiatedSignOn.aspx? loginToRp=urn:amazon:webservices. Para añadir compatibilidad con el proveedor de identidad SAML en Amazon Cognito, primero debe autenticar a los usuarios con el proveedor de identidad SAML a partir de su aplicación de iOS o Android. El código de integración y autenticación en el proveedor de identidad SAML es específico para los proveedores SAML. Una vez que el usuario esté autenticado, puede proporcionar la aserción SAML obtenida a Identidad de Amazon Cognito mediante las API de Amazon Cognito.
Android Si utiliza el SDK para Android, puede rellenar la asignación de inicios de sesión con la aserción SAML como se indica a continuación. Map logins = new HashMap(); logins.put("arn:aws:iam::aws account id:saml-provider/name", "base64 encoded assertion response"); // Now this should be set to CognitoCachingCredentialsProvider object. CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(context, identity pool id, region); credentialsProvider.setLogins(logins); // If SAML assertion contains multiple roles, resolve the role by setting the custom role credentialsProvider.setCustomRoleArn("arn:aws:iam::aws account id:role/customRoleName"); // This should trigger a call to the Amazon Cognito service to get the credentials. credentialsProvider.getCredentials();
iOS Si utiliza el SDK de iOS puede proporcionar la aserción SAML en AWSIdentityProviderManager como se indica a continuación. - (AWSTask *) logins { //this is hardcoded for simplicity, normally you would asynchronously go to your SAML provider //get the assertion and return the logins map using a AWSTaskCompletionSource return [AWSTask taskWithResult:@{@"arn:aws:iam::aws account id:saml-provider/ name":@"base64 encoded assertion response"}]; } // If SAML assertion contains multiple roles, resolve the role by setting the custom role.
257
Amazon Cognito Guía para desarrolladores Identidades autenticadas por el desarrollador // Implementing this is optional if there is only one role. - (NSString *)customRoleArn { return @"arn:aws:iam::accountId:role/customRoleName"; }
Identidades autenticadas por el desarrollador (grupos de identidades) Amazon Cognito es compatible con las identidades autenticadas por el desarrollador, además de ser compatible con la identidad federada web mediante Facebook (Grupos de identidades) (p. 234), Google (Grupos de identidades) (p. 242), Login with Amazon (Grupos de identidades) (p. 239) y Sign in with Apple (Grupos de identidades) (p. 249). Con las identidades autenticadas por el desarrollador, sigue pudiendo registrar y autenticar usuarios mediante su propio proceso de autenticación, sin dejar de usar Amazon Cognito para sincronizar los datos de los usuarios y obtener acceso a los recursos de AWS. El uso de las identidades autenticadas por el desarrollador implica una interacción entre el dispositivo del usuario final, el backend para la autenticación y Amazon Cognito. Para obtener más información, lea nuestro blog.
Descripción del flujo de autenticación Para obtener información acerca del flujo de autenticación de las identidades autenticadas por el desarrollador y en qué se diferencia del flujo de autenticación del proveedor externo, consulte Flujo de autenticación de grupos de identidades (identidades federadas) (p. 207).
Definición de un nombre de proveedor de desarrollador y asociación de dicho nombre a un grupo de identidades Para utilizar las identidades autenticadas por el desarrollador, es preciso que el proveedor de desarrollador tenga un grupo de identidades asociado. Para ello, siga estos pasos: 1. Inicie sesión en la consola de Amazon Cognito. 2. Cree un grupo de identidades nuevo y, como parte del proceso, defina un nombre de proveedor de desarrollador en la pestaña Custom (Personalizado) en Authentication Providers (Proveedores de autenticación). 3. O bien edite un grupo de identidades ya existente y defina un nombre de proveedor de desarrollador en la pestaña Custom (Personalizado) en Authentication Providers (Proveedores de autenticación). Nota: una vez que se haya definido el nombre del proveedor, este no podrá modificarse. Para obtener instrucciones adicionales acerca de cómo trabajar con la consola de Amazon Cognito, consulte Uso de la consola de Amazon Cognito (p. 3).
Implementación de un proveedor de identidad Android Para usar las identidades autenticadas por el desarrollador, implemente su propia clase de proveedor de identidad que amplía AWSAbstractCognitoIdentityProvider. La clase de proveedor de identidad debe devolver un objeto de respuesta que contenga el token como un atributo.
258
Amazon Cognito Guía para desarrolladores Implementación de un proveedor de identidad
A continuación se muestra un ejemplo sencillo de un proveedor de identidad. public class DeveloperAuthenticationProvider extends AWSAbstractCognitoDeveloperIdentityProvider { private static final String developerProvider = ""; public DeveloperAuthenticationProvider(String accountId, String identityPoolId, Regions region) { super(accountId, identityPoolId, region); // Initialize any other objects needed here. } // Return the developer provider name which you choose while setting up the // identity pool in the &COG; Console @Override public String getProviderName() { return developerProvider; } // Use the refresh method to communicate with your backend to get an // identityId and token. @Override public String refresh() { // Override the existing token setToken(null); // Get the identityId and token by making a call to your backend // (Call to your backend) // Call the update method with updated identityId and token to make sure // these are ready to be used from Credentials Provider. update(identityId, token); return token; } // If the app has a valid identityId return it, otherwise get a valid // identityId from your backend. @Override public String getIdentityId() { // Load the identityId from the cache identityId = cachedIdentityId; if (identityId == null) { // Call to your backend } else { return identityId; } }
}
Para utilizar este proveedor de identidad, tiene que pasarlo en CognitoCachingCredentialsProvider. A continuación se muestra un ejemplo: DeveloperAuthenticationProvider developerProvider = new DeveloperAuthenticationProvider( null, "IDENTITYPOOLID", context, Regions.USEAST1);
259
Amazon Cognito Guía para desarrolladores Implementación de un proveedor de identidad CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider( context, developerProvider, Regions.USEAST1);
iOS - Objective-C Para usar las identidades autenticadas por el desarrollador, implemente su propia clase de proveedor de identidad que amplía AWSCognitoCredentialsProviderHelper. La clase de proveedor de identidad debe devolver un objeto de respuesta que contenga el token como un atributo. @implementation DeveloperAuthenticatedIdentityProvider /* * Use the token method to communicate with your backend to get an * identityId and token. */ - (AWSTask *) token { //Write code to call your backend: //Pass username/password to backend or some sort of token to authenticate user //If successful, from backend call getOpenIdTokenForDeveloperIdentity with logins map //containing "your.provider.name":"enduser.username" //Return the identity id and token to client //You can use AWSTaskCompletionSource to do this asynchronously // Set the identity id and return the token self.identityId = response.identityId; return [AWSTask taskWithResult:response.token];
} @end
Para utilizar este proveedor de identidad, tiene que pasarlo en AWSCognitoCredentialsProvider, como se muestra en el ejemplo siguiente: DeveloperAuthenticatedIdentityProvider * devAuth = [[DeveloperAuthenticatedIdentityProvider alloc] initWithRegionType:AWSRegionYOUR_IDENTITY_POOL_REGION identityPoolId:@"YOUR_IDENTITY_POOL_ID" useEnhancedFlow:YES identityProviderManager:nil]; AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionYOUR_IDENTITY_POOL_REGION
identityProvider:devAuth];
Si quiere dar soporte tanto a las identidades sin autenticar como a las identidades autenticadas por el desarrollador, anule el método logins en su implementación de AWSCognitoCredentialsProviderHelper. - (AWSTask *)logins { if(/*logic to determine if user is unauthenticated*/) { return [AWSTask taskWithResult:nil]; }else{ return [super logins]; } }
Si quiere dar soporte a las identidades autenticadas por el desarrollador y a los proveedores sociales, debe administrar quién es el proveedor actual en su implementación logins de AWSCognitoCredentialsProviderHelper. - (AWSTask *)logins {
260
Amazon Cognito Guía para desarrolladores Implementación de un proveedor de identidad if(/*logic to determine if user is unauthenticated*/) { return [AWSTask taskWithResult:nil]; }else if (/*logic to determine if user is Facebook*/){ return [AWSTask taskWithResult: @{ AWSIdentityProviderFacebook : [FBSDKAccessToken currentAccessToken] }]; }else { return [super logins]; }
}
iOS - Swift Para usar las identidades autenticadas por el desarrollador, implemente su propia clase de proveedor de identidad que amplía AWSCognitoCredentialsProviderHelper. La clase de proveedor de identidad debe devolver un objeto de respuesta que contenga el token como un atributo. import AWSCore /* * Use the token method to communicate with your backend to get an * identityId and token. */ class DeveloperAuthenticatedIdentityProvider : AWSCognitoCredentialsProviderHelper { override func token() -> AWSTask { //Write code to call your backend: //pass username/password to backend or some sort of token to authenticate user, if successful, //from backend call getOpenIdTokenForDeveloperIdentity with logins map containing "your.provider.name":"enduser.username" //return the identity id and token to client //You can use AWSTaskCompletionSource to do this asynchronously
}
// Set the identity id and return the token self.identityId = resultFromAbove.identityId return AWSTask(result: resultFromAbove.token)
Para utilizar este proveedor de identidad, tiene que pasarlo en AWSCognitoCredentialsProvider, como se muestra en el ejemplo siguiente: let devAuth = DeveloperAuthenticatedIdentityProvider(regionType: .YOUR_IDENTITY_POOL_REGION, identityPoolId: "YOUR_IDENTITY_POOL_ID", useEnhancedFlow: true, identityProviderManager:nil) let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .YOUR_IDENTITY_POOL_REGION, identityProvider:devAuth) let configuration = AWSServiceConfiguration(region: .YOUR_IDENTITY_POOL_REGION, credentialsProvider:credentialsProvider) AWSServiceManager.default().defaultServiceConfiguration = configuration
Si quiere dar soporte tanto a las identidades sin autenticar como a las identidades autenticadas por el desarrollador, anule el método logins en su implementación de AWSCognitoCredentialsProviderHelper. override func logins () -> AWSTask { if(/*logic to determine if user is unauthenticated*/) { return AWSTask(result:nil) }else { return super.logins() } }
261
Amazon Cognito Guía para desarrolladores Implementación de un proveedor de identidad
Si quiere dar soporte a las identidades autenticadas por el desarrollador y a los proveedores sociales, debe administrar quién es el proveedor actual en su implementación logins de AWSCognitoCredentialsProviderHelper. override func logins () -> AWSTask { if(/*logic to determine if user is unauthenticated*/) { return AWSTask(result:nil) }else if (/*logic to determine if user is Facebook*/){ if let token = AccessToken.current?.authenticationToken { return AWSTask(result: [AWSIdentityProviderFacebook:token]) } return AWSTask(error:NSError(domain: "Facebook Login", code: -1 , userInfo: ["Facebook" : "No current Facebook access token"])) }else { return super.logins() } }
JavaScript Una vez que obtenga un ID de identidad y un token de sesión del backend, deberá pasarlos al proveedor de AWS.CognitoIdentityCredentials. A continuación se muestra un ejemplo: AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'IDENTITY_POOL_ID', IdentityId: 'IDENTITY_ID_RETURNED_FROM_YOUR_PROVIDER', Logins: { 'cognito-identity.amazonaws.com': 'TOKEN_RETURNED_FROM_YOUR_PROVIDER' } });
Unity Para usar las identidades autenticadas por el desarrollador debe ampliar CognitoAWSCredentials y anular el método RefreshIdentity para recuperar el ID y el token de identidad del usuario del backend y devolverlos. A continuación se muestra un ejemplo sencillo de un proveedor de identidad que se pone en contacto con un hipotético backend en "example.com": using using using using using using using
UnityEngine; System.Collections; Amazon.CognitoIdentity; System.Collections.Generic; ThirdParty.Json.LitJson; System; System.Threading;
public class DeveloperAuthenticatedCredentials : CognitoAWSCredentials { const string PROVIDER_NAME = "example.com"; const string IDENTITY_POOL = "IDENTITY_POOL_ID"; static readonly RegionEndpoint REGION = RegionEndpoint.USEast1; private string login = null; public DeveloperAuthenticatedCredentials(string loginAlias) : base(IDENTITY_POOL, REGION) { login = loginAlias; }
262
Amazon Cognito Guía para desarrolladores Implementación de un proveedor de identidad protected override IdentityState RefreshIdentity() { IdentityState state = null; ManualResetEvent waitLock = new ManualResetEvent(false); MainThreadDispatcher.ExecuteCoroutineOnMainThread(ContactProvider((s) => { state = s; waitLock.Set(); })); waitLock.WaitOne(); return state; } IEnumerator ContactProvider(Action callback) { WWW www = new WWW("http://example.com/?username="+login); yield return www; string response = www.text; JsonData json = JsonMapper.ToObject(response); //The backend has to send us back an Identity and a OpenID token string identityId = json["IdentityId"].ToString(); string token = json["Token"].ToString();
}
}
IdentityState state = new IdentityState(identityId, PROVIDER_NAME, token, false); callback(state);
El código anterior utiliza un objeto distribuidor de subprocesos para llamar a una corutina. Si no dispone de una forma de hacerlo en su proyecto, puede utilizar el script siguiente en sus escenas: using using using using
System; UnityEngine; System.Collections; System.Collections.Generic;
public class MainThreadDispatcher : MonoBehaviour { static Queue _coroutineQueue = new Queue(); static object _lock = new object(); public void Update() { while (_coroutineQueue.Count > 0) { StartCoroutine(_coroutineQueue.Dequeue()); } }
}
public static void ExecuteCoroutineOnMainThread(IEnumerator coroutine) { lock (_lock) { _coroutineQueue.Enqueue(coroutine); } }
Xamarin Para usar las identidades autenticadas por el desarrollador debe ampliar CognitoAWSCredentials y anular el método RefreshIdentity para recuperar el ID y el token de identidad del usuario del backend 263
Amazon Cognito Guía para desarrolladores Actualización de la asignación de inicios de sesión (solo Android e iOS)
y devolverlos. A continuación se muestra un ejemplo sencillo de un proveedor de identidad que se pone en contacto con un hipotético backend en "example.com": public class DeveloperAuthenticatedCredentials : CognitoAWSCredentials { const string PROVIDER_NAME = "example.com"; const string IDENTITY_POOL = "IDENTITY_POOL_ID"; static readonly RegionEndpoint REGION = RegionEndpoint.USEast1; private string login = null; public DeveloperAuthenticatedCredentials(string loginAlias) : base(IDENTITY_POOL, REGION) { login = loginAlias; }
}
protected override async Task RefreshIdentityAsync() { IdentityState state = null; //get your identity and set the state return state; }
Actualización de la asignación de inicios de sesión (solo Android e iOS) Android Después de autenticar correctamente al usuario con su propio sistema de autenticación, actualice la asignación de inicios de sesión con el nombre del proveedor de desarrollador y un identificador de usuario de desarrollador, que es una cadena alfanumérica que identifica a un usuario de forma exclusiva en el sistema de autenticación. Asegúrese de llamar al método refresh después de actualizar la asignación de inicios de sesión, ya que identityId podría haber cambiado: HashMap loginsMap = new HashMap(); loginsMap.put(developerAuthenticationProvider.getProviderName(), developerUserIdentifier); credentialsProvider.setLogins(loginsMap); credentialsProvider.refresh();
iOS - Objective-C El SDK para iOS solo llama al método logins para obtener la última asignación de inicios de sesión si no hay credenciales o estas han caducado. Si quiere obligar al SDK a obtener nuevas credenciales (por ejemplo, el usuario final ha pasado de no estar autenticado a estar autenticado y usted quiere credenciales sobre el usuario autenticado), llame a clearCredentials en su credentialsProvider. [credentialsProvider clearCredentials];
iOS - Swift El SDK para iOS solo llama al método logins para obtener la última asignación de inicios de sesión si no hay credenciales o estas han caducado. Si quiere obligar al SDK a obtener nuevas credenciales (por ejemplo, el usuario final ha pasado de no estar autenticado a estar autenticado y usted quiere credenciales sobre el usuario autenticado), llame a clearCredentials en su credentialsProvider. 264
Amazon Cognito Guía para desarrolladores Obtención de un token (lado del servidor)
credentialsProvider.clearCredentials()
Obtención de un token (lado del servidor) Un token se obtiene llamando a GetOpenIdTokenForDeveloperIdentity. Esta API debe invocarse desde el backend con las credenciales de desarrollador de AWS. No debe invocarse desde el SDK de cliente. La API recibe el ID del grupo de identidades de Cognito, una asignación de inicios de sesión que contiene el nombre del proveedor de identidad como la clave y el identificador como el valor y, opcionalmente, un ID de identidad de Cognito (es decir, está convirtiendo a un usuario sin autenticar en autenticado). El identificador puede ser el nombre de usuario del usuario, una dirección de correo electrónico o un valor numérico. La API responde a la llamada con un ID de Cognito único para el usuario y un token de OpenID Connect para el usuario final. Tenga en cuenta los siguientes puntos sobre el token devuelto por GetOpenIdTokenForDeveloperIdentity: • Puede especificar una duración de vencimiento personalizada para el token para poder almacenarlo en la caché. Si no la proporciona, el token será válido durante 15 minutos. • La duración máxima del token que puede definir es de 24 horas. • Piense en las implicaciones para la seguridad que supone aumentar el token de duración. Si un atacante obtiene este token, puede cambiarlo por las credenciales de AWS para el usuario final mientras dure el token. El siguiente fragmento Java muestra cómo inicializar un cliente de Amazon Cognito y recuperar un token para una identidad autenticada por el desarrollador. // authenticate your end user as appropriate // .... // if authenticated, initialize a cognito client with your AWS developer credentials AmazonCognitoIdentity identityClient = new AmazonCognitoIdentityClient( new BasicAWSCredentials("access_key_id", "secret_access_key") ); // create a new request to retrieve the token for your end user GetOpenIdTokenForDeveloperIdentityRequest request = new GetOpenIdTokenForDeveloperIdentityRequest(); request.setIdentityPoolId("YOUR_COGNITO_IDENTITY_POOL_ID"); request.setIdentityId("YOUR_COGNITO_IDENTITY_ID"); //optional, set this if your client has an //identity ID that you want to link to this //developer account // set up your logins map with the username of your end user HashMap logins = new HashMap(); logins.put("YOUR_IDENTITY_PROVIDER_NAME","YOUR_END_USER_IDENTIFIER"); request.setLogins(logins); // optionally set token duration (in seconds) request.setTokenDuration(60 * 15l); GetOpenIdTokenForDeveloperIdentityResult response = identityClient.getOpenIdTokenForDeveloperIdentity(request); // obtain identity id and token to return to your client String identityId = response.getIdentityId(); String token = response.getToken();
265
Amazon Cognito Guía para desarrolladores Conexión con una identidad social existente //code to return identity id and token to client //...
Si sigue los pasos anteriores, debe poder integrar las identidades autenticadas por el desarrollador en la aplicación. Si tiene algún problema o alguna pregunta, no dude en publicar en nuestros foros.
Conexión con una identidad social existente Toda vinculación de proveedores efectuada durante el uso de identidades autenticadas por el desarrollador debe realizarse desde el backend. Para conectar una identidad personalizada a la identidad social de un usuario (Login with Amazon, Sign in with Apple, Facebook o Google), agregue el token de proveedor de identidades a la asignación de inicios de sesión al llamar a GetOpenIdTokenForDeveloperIdentity. Para ello, cuando llame al backend desde el SDK de cliente para autenticar al usuario final, pase además el token de proveedor social del usuario final. Por ejemplo, si está intentando vincular una identidad personalizada a Facebook, añada el token de Facebook, además del identificador del proveedor de identidad, a la asignación de inicios de sesión cuando llame a GetOpenIdTokenForDeveloperIdentity. logins.put("YOUR_IDENTITY_PROVIDER_NAME","YOUR_END_USER_IDENTIFIER"); logins.put("graph.facebook.com","END_USERS_FACEBOOK_ACCESSTOKEN");
Compatibilidad con la transición entre proveedores Android Es posible que su aplicación requiera admitir identidades sin autenticar o autenticadas mediante proveedores públicos (Login with Amazon, Sign in with Apple, Facebook o Google) junto con identidades autenticadas por el desarrollador. La diferencia fundamental entre las identidades autenticadas por el desarrollador y otras identidades (identidades sin autenticar e identidades autenticadas mediante un proveedor público) radica en la forma de obtener identityId y el token. En el caso de las demás identidades, la aplicación móvil interactuará directamente con Amazon Cognito en lugar de ponerse en contacto con su sistema de autenticación. Por lo tanto, la aplicación móvil debería poder admitir dos flujos diferentes en función de la elección realizada por el usuario de la aplicación. Para ello, tendrá que realizar algunos cambios en el proveedor de identidad personalizado. El método refresh debe comprobar la asignación de inicios de sesión, si la asignación no está vacía y tiene una clave con el nombre del proveedor de desarrollador. En dicho caso, debe llamar al backend; de lo contrario, llame al método getIdentityId y obtenga una devolución nula. public String refresh() { setToken(null); // If the logins map is not empty make a call to your backend // to get the token and identityId if (getProviderName() != null && !this.loginsMap.isEmpty() && this.loginsMap.containsKey(getProviderName())) { /** * This is where you would call your backend **/ // now set the returned identity id and token in the provider update(identityId, token); return token;
266
Amazon Cognito Guía para desarrolladores Compatibilidad con la transición entre proveedores
}
} else { // Call getIdentityId method and return null this.getIdentityId(); return null; }
Igualmente, el método getIdentityId tendrá dos flujos, en función del contenido de la asignación de inicios de sesión: public String getIdentityId() { // Load the identityId from the cache identityId = cachedIdentityId; if (identityId == null) { // If the logins map is not empty make a call to your backend // to get the token and identityId if (getProviderName() != null && !this.loginsMap.isEmpty() && this.loginsMap.containsKey(getProviderName())) { /** * This is where you would call your backend **/ // now set the returned identity id and token in the provider update(identityId, token); return token; } else { // Otherwise call &COG; using getIdentityId of super class return super.getIdentityId(); } } else { return identityId; } }
iOS - Objective-C Es posible que su aplicación requiera admitir identidades sin autenticar o autenticadas mediante proveedores públicos (Login with Amazon, Sign in with Apple, Facebook o Google) junto con identidades autenticadas por el desarrollador. Para ello, anule el método de logins de AWSCognitoCredentialsProviderHelper para poder devolver la asignación de inicios de sesión correcta basándose en el proveedor de identidad actual. En este ejemplo se muestra cómo puede moverse entre identidades sin autenticar e identidades autenticadas mediante Facebook o por el desarrollador. - (AWSTask *)logins { if(/*logic to determine if user is unauthenticated*/) { return [AWSTask taskWithResult:nil]; }else if (/*logic to determine if user is Facebook*/){ return [AWSTask taskWithResult: @{ AWSIdentityProviderFacebook : [FBSDKAccessToken currentAccessToken] }]; }else { return [super logins]; } }
267
Amazon Cognito Guía para desarrolladores Compatibilidad con la transición entre proveedores
Cuando pase de identidades sin autenticar a identidades autenticadas, llame a [credentialsProvider clearCredentials]; para obligar al SDK a obtener credenciales autenticadas nuevas. Cuando cambie entre dos proveedores autenticados y no esté intentando vincularlos (por ejemplo, no proporciona tokens para varios proveedores en el diccionario de inicios de sesión), llame a [credentialsProvider clearKeychain];. Esto borrará las credenciales y la identidad y obligará al SDK a obtener otras nuevas.
iOS - Swift Es posible que su aplicación requiera admitir identidades sin autenticar o autenticadas mediante proveedores públicos (Login with Amazon, Sign in with Apple, Facebook o Google) junto con identidades autenticadas por el desarrollador. Para ello, anule el método de logins de AWSCognitoCredentialsProviderHelper para poder devolver la asignación de inicios de sesión correcta basándose en el proveedor de identidad actual. En este ejemplo se muestra cómo puede moverse entre identidades sin autenticar e identidades autenticadas mediante Facebook o por el desarrollador. override func logins () -> AWSTask { if(/*logic to determine if user is unauthenticated*/) { return AWSTask(result:nil) }else if (/*logic to determine if user is Facebook*/){ if let token = AccessToken.current?.authenticationToken { return AWSTask(result: [AWSIdentityProviderFacebook:token]) } return AWSTask(error:NSError(domain: "Facebook Login", code: -1 , userInfo: ["Facebook" : "No current Facebook access token"])) }else { return super.logins() } }
Cuando pase de identidades sin autenticar a identidades autenticadas, llame a credentialsProvider.clearCredentials() para obligar al SDK a obtener credenciales autenticadas nuevas. Cuando cambie entre dos proveedores autenticados y no esté intentando vincularlos (por ejemplo, no proporciona tokens para varios proveedores en el diccionario de inicios de sesión), llame a credentialsProvider.clearKeychain(). Esto borrará las credenciales y la identidad y obligará al SDK a obtener otras nuevas.
Unity Es posible que su aplicación requiera admitir identidades sin autenticar o autenticadas mediante proveedores públicos (Login with Amazon, Sign in with Apple, Facebook o Google) junto con identidades autenticadas por el desarrollador. La diferencia fundamental entre las identidades autenticadas por el desarrollador y otras identidades (identidades sin autenticar e identidades autenticadas mediante un proveedor público) radica en la forma de obtener identityId y el token. En el caso de las demás identidades, la aplicación móvil interactuará directamente con Amazon Cognito en lugar de ponerse en contacto con su sistema de autenticación. Por lo tanto, la aplicación móvil debería poder admitir dos flujos diferentes en función de la elección realizada por el usuario de la aplicación. Para ello, tendrá que realizar algunos cambios en el proveedor de identidad personalizado. La manera recomendada de hacerlo en Unity consiste en ampliar su proveedor de identidad desde AmazonCognitoEnhancedIdentityProvide y no desde AbstractCognitoIdentityProvider, y llamar al método RefreshAsync principal y no al método propio, en caso de que el usuario no esté autenticado en su backend. Si el usuario está autenticado, puede utilizar el mismo flujo explicado anteriormente.
Xamarin Es posible que su aplicación requiera admitir identidades sin autenticar o autenticadas mediante proveedores públicos (Login with Amazon, Sign in with Apple, Facebook o Google) junto con identidades autenticadas por el desarrollador. La diferencia fundamental entre las identidades autenticadas por el
268
Amazon Cognito Guía para desarrolladores Cambio de identidades
desarrollador y otras identidades (identidades sin autenticar e identidades autenticadas mediante un proveedor público) radica en la forma de obtener identityId y el token. En el caso de las demás identidades, la aplicación móvil interactuará directamente con Amazon Cognito en lugar de ponerse en contacto con su sistema de autenticación. Por lo tanto, la aplicación móvil debería poder admitir dos flujos diferentes en función de la elección realizada por el usuario de la aplicación. Para ello, tendrá que realizar algunos cambios en el proveedor de identidad personalizado.
Cambio de los usuarios sin autenticar a los usuarios autenticados (Grupos de identidades) Los grupos de identidades de Amazon Cognito admiten tanto usuarios sin autenticar como usuarios autenticados. Los usuarios sin autenticar reciben acceso a sus recursos de AWS incluso si no han iniciado sesión con cualquiera de sus proveedores de identidad (IdP). Este grado de acceso es útil para mostrar contenido a los usuarios antes de que inicien sesión. Cada usuario sin autenticar tiene una identidad única en el grupo de identidades, aunque no hayan iniciado sesión y se hayan autenticado individualmente. En esta sección se describe el caso en el que su usuario decide cambiar y en lugar de iniciar sesión con una identidad sin autenticar usa una identidad autenticada.
Android Los usuarios pueden iniciar sesión en su aplicación como invitados sin autenticar. En algún momento, pueden decidir iniciar sesión con uno de los proveedores de identidad compatibles. Amazon Cognito se asegura de que la identidad antigua conserve el mismo identificador único que la nueva y de que los datos del perfil se fusionen automáticamente. Se informará a la aplicación de una fusión de perfil a través de la interfaz IdentityChangedListener. Implemente el método identityChanged en la interfaz para recibir estos mensajes: @override public void identityChanged(String oldIdentityId, String newIdentityId) { // handle the change }
iOS - Objective-C Los usuarios pueden iniciar sesión en su aplicación como invitados sin autenticar. En algún momento, pueden decidir iniciar sesión con uno de los proveedores de identidad compatibles. Amazon Cognito se asegura de que la identidad antigua conserve el mismo identificador único que la nueva y de que los datos del perfil se fusionen automáticamente. NSNotificationCenter informa a la aplicación de que se ha producido una fusión de perfil: [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(identityIdDidChange:) name:AWSCognitoIdentityIdChangedNotification object:nil]; -(void)identityDidChange:(NSNotification*)notification { NSDictionary *userInfo = notification.userInfo; NSLog(@"identity changed from %@ to %@", [userInfo objectForKey:AWSCognitoNotificationPreviousId], [userInfo objectForKey:AWSCognitoNotificationNewId]); }
269
Amazon Cognito Guía para desarrolladores iOS - Swift
iOS - Swift Los usuarios pueden iniciar sesión en su aplicación como invitados sin autenticar. En algún momento, pueden decidir iniciar sesión con uno de los proveedores de identidad compatibles. Amazon Cognito se asegura de que la identidad antigua conserve el mismo identificador único que la nueva y de que los datos del perfil se fusionen automáticamente. NSNotificationCenter informa a la aplicación de que se ha producido una fusión de perfil: [NSNotificationCenter.defaultCenter().addObserver(observer: self selector:"identityDidChange" name:AWSCognitoIdentityIdChangedNotification object:nil) func identityDidChange(notification: NSNotification!) { if let userInfo = notification.userInfo as? [String: AnyObject] { print("identity changed from: \(userInfo[AWSCognitoNotificationPreviousId]) to: \(userInfo[AWSCognitoNotificationNewId])") } }
JavaScript Usuario sin autenticar inicialmente Los usuarios suelen comenzar con el rol sin autenticar. Para este rol, usted establece la propiedad de las credenciales del objeto de configuración sin una propiedad de inicio de sesión. En este caso, la configuración predeterminada podría tener el siguiente aspecto:
// set the default config object var creds = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030' }); AWS.config.credentials = creds;
Cambie a usuario autenticado Cuando un usuario sin autenticar inicia sesión en un proveedor de identidad y tiene un token, puede cambiar el usuario de no estar autenticado a estar autenticado llamando a una función personalizada que actualiza el objeto de las credenciales y añade el token de inicio de sesión:
// Called when an identity provider has a token for a logged in user function userLoggedIn(providerName, token) { creds.params.Logins = creds.params.Logins || {}; creds.params.Logins[providerName] = token;
}
// Expire credentials to refresh them on the next request creds.expired = true;
También puede crear un objeto de CognitoIdentityCredentials. Si lo hace, debe restablecer las propiedades de las credenciales de cualquier objeto de servicio existente para reflejar la información de configuración de las credenciales actualizadas. Consulte la sección relativa al uso del objeto de configuración global.
270
Amazon Cognito Guía para desarrolladores Unity
Para obtener más información acerca del objeto CognitoIdentityCredentials, consulte AWS.CognitoIdentityCredentials en la referencia de la API de AWS SDK for JavaScript.
Unity Los usuarios pueden iniciar sesión en su aplicación como invitados sin autenticar. En algún momento, pueden decidir iniciar sesión con uno de los proveedores de identidad compatibles. Amazon Cognito se asegura de que la identidad antigua conserve el mismo identificador único que la nueva y de que los datos del perfil se fusionen automáticamente. Puede suscribirse a IdentityChangedEvent para que se le notifiquen las fusiones de perfil: credentialsProvider.IdentityChangedEvent += delegate(object sender, CognitoAWSCredentials.IdentityChangedArgs e) { // handle the change Debug.log("Identity changed from " + e.OldIdentityId + " to " + e.NewIdentityId); };
Xamarin Los usuarios pueden iniciar sesión en su aplicación como invitados sin autenticar. En algún momento, pueden decidir iniciar sesión con uno de los proveedores de identidad compatibles. Amazon Cognito se asegura de que la identidad antigua conserve el mismo identificador único que la nueva y de que los datos del perfil se fusionen automáticamente. credentialsProvider.IdentityChangedEvent += delegate(object sender, CognitoAWSCredentials.IdentityChangedArgs e){ // handle the change Console.WriteLine("Identity changed from " + e.OldIdentityId + " to " + e.NewIdentityId); };
271
Amazon Cognito Guía para desarrolladores Introducción a Amazon Cognito Sync
Amazon Cognito Sync Si es la primera vez que usa Amazon Cognito Sync, utilice AWS AppSync. Al igual que Amazon Cognito Sync, AWS AppSync es un servicio diseñado para sincronizar los datos de las aplicaciones entre dispositivos. Permite sincronizar los datos de los usuarios, como las preferencias de la aplicación o el estado del juego. También amplía estas funcionalidades, ya que permite que diferentes usuarios se sincronicen y colaboren en tiempo real sobre los datos compartidos. Amazon Cognito Sync es un servicio de AWS y una biblioteca de cliente que permite la sincronización entre dispositivos de los datos de usuarios relacionados con la aplicación. Puede utilizarlo para sincronizar los datos de perfil de usuario entre los dispositivos móviles y la web sin necesidad de utilizar su propio backend. Las bibliotecas de cliente almacenan los datos localmente en la caché para que su aplicación pueda leer y escribir datos, sea cual sea el estado de conexión del dispositivo. Cuando el dispositivo está online, puede sincronizar los datos y, si configura una sincronización por inserción, notifique inmediatamente a los demás dispositivos que hay una actualización disponible. Para obtener información acerca de la disponibilidad regional de Identidad de Amazon Cognito, consulte la disponibilidad regional de los servicios de AWS. Para obtener más información acerca de Amazon Cognito Sync, consulte los temas siguientes. Temas • Introducción a Amazon Cognito Sync (p. 272) • Sincronización de datos (p. 273) • Gestión de la devolución de llamadas (p. 281) • Sincronización mediante inserción (p. 293) • Flujos de Amazon Cognito (p. 299) • Eventos de Amazon Cognito (p. 301)
Introducción a Amazon Cognito Sync Si es la primera vez que usa Amazon Cognito Sync, utilice AWS AppSync. Al igual que Amazon Cognito Sync, AWS AppSync es un servicio diseñado para sincronizar los datos de las aplicaciones entre dispositivos. Permite sincronizar los datos de los usuarios, como las preferencias de la aplicación o el estado del juego. También amplía estas funcionalidades, ya que permite que diferentes usuarios se sincronicen y colaboren en tiempo real sobre los datos compartidos. Amazon Cognito Sync es un servicio de AWS y biblioteca de cliente que permite la sincronización entre dispositivos de los datos de usuarios relacionados con la aplicación. Puede usarlo para sincronizar los datos de perfiles de usuario en los dispositivos móviles y aplicaciones web. Las bibliotecas de cliente almacenan los datos localmente en la caché para que su aplicación pueda leer y escribir datos, sea cual sea el estado de conexión del dispositivo. Cuando el dispositivo está online, puede sincronizar los datos y,
272
Amazon Cognito Guía para desarrolladores Inscripción en una cuenta de AWS
si configura una sincronización por inserción, notifique inmediatamente a los demás dispositivos que hay una actualización disponible.
Inscripción en una cuenta de AWS Para usar Amazon Cognito Sync, necesita disponer de una cuenta de AWS. Si todavía no tiene una, ejecute el procedimiento siguiente para inscribirse:
Para inscribirse en una cuenta de AWS 1. 2.
Abra https://portal.aws.amazon.com/billing/signup. Siga las instrucciones en línea. Parte del procedimiento de inscripción consiste en recibir una llamada telefónica e indicar un código de verificación en el teclado del teléfono.
Configuración de un grupo de identidades en Amazon Cognito Amazon Cognito Sync necesita un grupo de identidades de Amazon Cognito para proporcionar las identidades de los usuarios. Por lo tanto, primero debe configurar un grupo de identidades para usar Amazon Cognito Sync. Consulte las instrucciones en la guía Introducción a grupos de identidades de Amazon Cognito (identidades federadas) (p. 199) para crear un grupo de identidades e instalar el SDK.
Almacenamiento y sincronización de datos Una vez que haya configurado el grupo de identidades y haya instalado el SDK, puede comenzar a almacenar y sincronizar datos entre dispositivos. Para obtener más información, consulte Sincronización de datos (p. 273).
Sincronización de datos Si es la primera vez que usa Amazon Cognito Sync, utilice AWS AppSync. Al igual que Amazon Cognito Sync, AWS AppSync es un servicio diseñado para sincronizar los datos de las aplicaciones entre dispositivos. Permite sincronizar los datos de los usuarios, como las preferencias de la aplicación o el estado del juego. También amplía estas funcionalidades, ya que permite que diferentes usuarios se sincronicen y colaboren en tiempo real sobre los datos compartidos. Amazon Cognito le permite guardar los datos de usuario final en conjuntos de datos que contienen pares de clave-valor. Estos datos se asocian a una identidad de Amazon Cognito, de forma que sea posible tener acceso a ellos sean cuales sean el inicio de sesión y los dispositivos. Para sincronizar estos datos entre el servicio Amazon Cognito y los dispositivos de un usuario final, invoque el método de sincronización. Cada conjunto de datos puede tener un tamaño máximo de 1 MB. Puede asociar hasta 20 conjuntos de datos a una identidad. El cliente de Amazon Cognito Sync crea una memoria caché local para los datos de identidad. Su aplicación habla con esta memoria caché local cuando lee y escribe claves. De esta forma, se garantiza la disponibilidad inmediata de todos los cambios realizados en el dispositivo, aunque esté sin conexión. Cuando se llama al método de sincronización, los cambios que provienen del servicio se envían al
273
Amazon Cognito Guía para desarrolladores Inicialización del cliente de Amazon Cognito Sync
dispositivo, mientras que todos los cambios locales se transmiten al servicio. En este punto, los cambios están disponibles para sincronizarlos con los demás dispositivos.
Inicialización del cliente de Amazon Cognito Sync Para inicializar el cliente de Amazon Cognito Sync, primero debe crear un proveedor de credenciales. El proveedor de credenciales recibe credenciales temporales de AWS para permitir a la aplicación tener acceso a sus recursos de AWS. También necesitará importar los archivos de encabezado necesarios. Ejecute los pasos siguientes para inicializar el cliente de Amazon Cognito Sync.
Android 1. Cree un proveedor de credenciales siguiendo las instrucciones descritas en Obtención de credenciales (p. 225). 2. Importe el paquete de Amazon Cognito: import com.amazonaws.mobileconnectors.cognito.*; 3. Inicialice Amazon Cognito Sync, pasando el contexto de la aplicación Android, el ID del grupo de identidades, una región de AWS y un proveedor de credenciales de Amazon Cognito inicializado: CognitoSyncManager client = new CognitoSyncManager( getApplicationContext(), Regions.YOUR_REGION, credentialsProvider);
iOS - Objective-C 1.
Cree un proveedor de credenciales siguiendo las instrucciones descritas en Obtención de credenciales (p. 225).
2.
Importe AWSCore y Cognito, e inicialice AWSCognito: #import #import AWSCognito *syncClient = [AWSCognito defaultCognito];
3.
Si utiliza CocoaPods, sustituya por AWSCore.h y aplique la misma sintaxis para la importación de Amazon Cognito.
iOS - Swift 1.
Cree un proveedor de credenciales siguiendo las instrucciones descritas en Obtención de credenciales (p. 225).
2.
Importe e inicialice AWSCognito: import AWSCognito let syncClient = AWSCognito.default()!
JavaScript 1. Descargue el administrador de Amazon Cognito Sync para JavaScript. 274
Amazon Cognito Guía para desarrolladores Descripción de los conjuntos de datos
2. Incluya la biblioteca del administrador de sincronización en el proyecto. 3. Cree un proveedor de credenciales siguiendo las instrucciones descritas en Obtención de credenciales (p. 225). 4. Inicialice el administrador de sincronizaciones: var syncManager = new AWS.CognitoSyncManager();
Unity 1. Primero debe crear una instancia de CognitoAWSCredentials, siguiendo las instrucciones descritas en Obtención de credenciales (p. 225). 2. Cree una instancia de CognitoSyncManager, pasando un objeto CognitoAwsCredentials y una configuración AmazonCognitoSyncConfig que tenga, al menos, una región definida: AmazonCognitoSyncConfig clientConfig = new AmazonCognitoSyncConfig { RegionEndpoint = REGION }; CognitoSyncManager syncManager = new CognitoSyncManager(credentials, clientConfig);
Xamarin 1. Primero debe crear una instancia de CognitoAWSCredentials, siguiendo las instrucciones descritas en Obtención de credenciales (p. 225). 2. Cree una instancia de CognitoSyncManager, pasando un objeto CognitoAwsCredentials y una configuración AmazonCognitoSyncConfig que tenga, al menos, una región definida: AmazonCognitoSyncConfig clientConfig = new AmazonCognitoSyncConfig { RegionEndpoint = REGION }; CognitoSyncManager syncManager = new CognitoSyncManager(credentials, clientConfig);
Descripción de los conjuntos de datos Con Amazon Cognito los datos de los perfiles de usuario final se organizan en conjuntos de datos. Cada conjunto de datos puede contener hasta 1 MB de datos en forma de pares de clave-valor. Un conjunto de datos es la entidad más precisa en la que puede realizar una operación de sincronización. Las operaciones de lectura y escritura realizadas en un conjunto de datos solo afectan al almacén local mientras no se invoque el método de sincronización. Un conjunto de datos se identifica mediante una cadena única. Puede crear un conjunto de datos nuevo o abrir uno ya existente, tal como se muestra a continuación.
Android Dataset dataset = client.openOrCreateDataset("datasetname");
Para eliminar un conjunto de datos, primero tiene que llamar al método que lo eliminará del almacenamiento local y, a continuación, tiene que llamar al método synchronize para eliminar el conjunto de datos de Amazon Cognito: dataset.delete(); dataset.synchronize(syncCallback);
275
Amazon Cognito Guía para desarrolladores Descripción de los conjuntos de datos
iOS - Objective-C AWSCognitoDataset *dataset = [syncClient openOrCreateDataset:@"myDataSet"];
Para eliminar un conjunto de datos, primero tiene que llamar al método que lo eliminará del almacenamiento local y, a continuación, tiene que llamar al método synchronize para eliminar el conjunto de datos de Amazon Cognito: [dataset clear]; [dataset synchronize];
iOS - Swift let dataset = syncClient.openOrCreateDataset("myDataSet")!
Para eliminar un conjunto de datos, primero tiene que llamar al método que lo eliminará del almacenamiento local y, a continuación, tiene que llamar al método synchronize para eliminar el conjunto de datos de Amazon Cognito: dataset.clear() dataset.synchronize()
JavaScript syncManager.openOrCreateDataset('myDatasetName', function(err, dataset) { // ... });
Unity string myValue = dataset.Get("myKey"); dataset.Put("myKey", "newValue");
Puede utilizar Remove para eliminar una clave de un conjunto de datos: dataset.Remove("myKey");
Xamarin Dataset dataset = syncManager.OpenOrCreateDataset("myDatasetName");
Para eliminar un conjunto de datos, primero tiene que llamar al método que lo eliminará del almacenamiento local y, a continuación, tiene que llamar al método synchronize para eliminar el conjunto de datos de Amazon Cognito: dataset.Delete(); dataset.SynchronizeAsync();
276
Amazon Cognito Guía para desarrolladores Lectura y escritura de datos en conjuntos de datos
Lectura y escritura de datos en conjuntos de datos Los conjuntos de datos de Amazon Cognito funcionan como diccionarios, con valores accesibles por clave. Las claves y los valores de un conjunto de datos se pueden leer, añadir o modificar como si el conjunto de datos fuese un diccionario. A continuación se muestra un ejemplo. Tenga en cuenta que los valores escritos en un conjunto de datos almacenados en la memoria caché local solo afectan a la copia de los datos almacenada en dicha caché mientras no llame al método de sincronización.
Android String value = dataset.get("myKey"); dataset.put("myKey", "my value");
iOS - Objective-C [dataset setString:@"my value" forKey:@"myKey"]; NSString *value = [dataset stringForKey:@"myKey"];
iOS - Swift dataset.setString("my value", forKey:"myKey") let value = dataset.stringForKey("myKey")
JavaScript dataset.get('myKey', function(err, value) { console.log('myRecord: ' + value); }); dataset.put('newKey', 'newValue', function(err, record) { console.log(record); }); dataset.remove('oldKey', function(err, record) { console.log(success); });
Unity string myValue = dataset.Get("myKey"); dataset.Put("myKey", "newValue");
Xamarin //obtain a value string myValue = dataset.Get("myKey"); // Create a record in a dataset and synchronize with the server dataset.OnSyncSuccess += SyncSuccessCallback; dataset.Put("myKey", "myValue");
277
Amazon Cognito Guía para desarrolladores Sincronización de datos locales con el almacén de sincronización dataset.SynchronizeAsync(); void SyncSuccessCallback(object sender, SyncSuccessEventArgs e) { // Your handler code here }
Android Puede utilizar el método remove para eliminar claves de un conjunto de datos: dataset.remove("myKey");
iOS - Objective-C Puede utilizar removeObjectForKey para eliminar una clave de un conjunto de datos: [dataset removeObjectForKey:@"myKey"];
iOS - Swift Puede utilizar removeObjectForKey para eliminar una clave de un conjunto de datos: dataset.removeObjectForKey("myKey")
Unity Puede utilizar Remove para eliminar una clave de un conjunto de datos: dataset.Remove("myKey");
Xamarin Puede utilizar Remove para eliminar una clave de un conjunto de datos: dataset.Remove("myKey");
Sincronización de datos locales con el almacén de sincronización Android El método synchronize compara los datos locales almacenados en caché con los datos guardados en el almacén de Amazon Cognito Sync. Los cambios remotos se extraen del almacén de Amazon Cognito Sync. Si se produce algún conflicto, se invoca la resolución de conflictos y los valores actualizados en el dispositivo se envían al servicio. Para sincronizar un conjunto de datos, llame a su método synchronize: dataset.synchronize(syncCallback);
El método synchronize recibe una implementación de la interfaz SyncCallback, tratada a continuación.
278
Amazon Cognito Guía para desarrolladores Sincronización de datos locales con el almacén de sincronización
El método synchronizeOnConnectivity() intenta realizar la sincronización cuando la conectividad está disponible. Si la conectividad está disponible inmediatamente, synchronizeOnConnectivity() se comporta como synchronize(). De lo contrario, supervisará los cambios de conectividad y realizará la sincronización cuando la conectividad esté disponible. Si se llama varias veces a synchronizeOnConnectivity(), solo se mantendrá la última solicitud de sincronización y solo se desencadenará la última devolución de llamada. Si el conjunto de datos o la devolución de llamada se limpia de la memoria, este método no realizará una sincronización, y la devolución de llamada no se iniciará. Para obtener más información acerca de la sincronización de datos y las diversas devoluciones de llamada, consulte Gestión de la devolución de llamadas (p. 281).
iOS - Objective-C El método synchronize compara los datos locales almacenados en caché con los datos guardados en el almacén de Amazon Cognito Sync. Los cambios remotos se extraen del almacén de Amazon Cognito Sync. Si se produce algún conflicto, se invoca la resolución de conflictos y los valores actualizados en el dispositivo se envían al servicio. Para sincronizar un conjunto de datos, llame a su método synchronize: El método synchronize es asíncrono y devuelve un objeto AWSTask para tratar la respuesta: [[dataset synchronize] continueWithBlock:^id(AWSTask *task) { if (task.isCancelled) { // Task cancelled. } else if (task.error) { // Error while executing task. } else { // Task succeeded. The data was saved in the sync store. } return nil; }];
El método synchronizeOnConnectivity intenta realizar la sincronización cuando el dispositivo dispone de conectividad. En primer lugar, synchronizeOnConnectivity comprueba la conectividad y, si el dispositivo está online, invoca inmediatamente a synchronize y devuelve el objeto AWSTask asociado al intento. Si el dispositivo está sin conexión, synchronizeOnConnectivity 1) programa una sincronización para la siguiente vez que el dispositivo esté online y 2) devuelve un AWSTask con un resultado nulo. La sincronización programada solo es válida durante el ciclo de vida del objeto del conjunto de datos. Los datos no se sincronizan si se cierra la aplicación antes de recuperar la conectividad. Si quiere recibir una notificación cuando se producen eventos en la sincronización programada, debe añadir observadores de notificaciones encontradas en AWSCognito. Para obtener más información acerca de la sincronización de datos y las diversas devoluciones de llamada, consulte Gestión de la devolución de llamadas (p. 281).
iOS - Swift El método synchronize compara los datos locales almacenados en caché con los datos guardados en el almacén de Amazon Cognito Sync. Los cambios remotos se extraen del almacén de Amazon Cognito Sync. Si se produce algún conflicto, se invoca la resolución de conflictos y los valores actualizados en el dispositivo se envían al servicio. Para sincronizar un conjunto de datos, llame a su método synchronize: El método synchronize es asíncrono y devuelve un objeto AWSTask para tratar la respuesta: dataset.synchronize().continueWith(block: { (task) -> AnyObject? in if task.isCancelled {
279
Amazon Cognito Guía para desarrolladores Sincronización de datos locales con el almacén de sincronización
})
// } else // } else // } return
Task cancelled. if task.error != nil { Error while executing task { Task succeeded. The data was saved in the sync store. task
El método synchronizeOnConnectivity intenta realizar la sincronización cuando el dispositivo dispone de conectividad. En primer lugar, synchronizeOnConnectivity comprueba la conectividad y, si el dispositivo está online, invoca inmediatamente a synchronize y devuelve el objeto AWSTask asociado al intento. Si el dispositivo está sin conexión, synchronizeOnConnectivity 1) programa una sincronización para la siguiente vez que el dispositivo esté online y 2) devuelve un objeto AWSTask con un resultado nulo. La sincronización programada solo es válida durante el ciclo de vida del objeto del conjunto de datos. Los datos no se sincronizan si se cierra la aplicación antes de recuperar la conectividad. Si quiere recibir una notificación cuando se producen eventos en la sincronización programada, debe añadir observadores de notificaciones encontradas en AWSCognito. Para obtener más información acerca de la sincronización de datos y las diversas devoluciones de llamada, consulte Gestión de la devolución de llamadas (p. 281).
JavaScript El método synchronize compara los datos locales almacenados en caché con los datos guardados en el almacén de Amazon Cognito Sync. Los cambios remotos se extraen del almacén de Amazon Cognito Sync. Si se produce algún conflicto, se invoca la resolución de conflictos y los valores actualizados en el dispositivo se envían al servicio. Para sincronizar un conjunto de datos, llame a su método synchronize: dataset.synchronize();
Para obtener más información acerca de la sincronización de datos y las diversas devoluciones de llamada, consulte Gestión de la devolución de llamadas (p. 281).
Unity El método synchronize compara los datos locales almacenados en caché con los datos guardados en el almacén de Amazon Cognito Sync. Los cambios remotos se extraen del almacén de Amazon Cognito Sync. Si se produce algún conflicto, se invoca la resolución de conflictos y los valores actualizados en el dispositivo se envían al servicio. Para sincronizar un conjunto de datos, llame a su método synchronize: dataset.Synchronize();
La sincronización se ejecutará de forma asíncrona y acabará llamando a una de las diversas devoluciones de llamadas que puede especificar en el conjunto de datos. Para obtener más información acerca de la sincronización de datos y las diversas devoluciones de llamada, consulte Gestión de la devolución de llamadas (p. 281).
Xamarin El método synchronize compara los datos locales almacenados en caché con los datos guardados en el almacén de Amazon Cognito Sync. Los cambios remotos se extraen del almacén de Amazon Cognito Sync. Si se produce algún conflicto, se invoca la resolución de conflictos y los valores actualizados en el dispositivo se envían al servicio. Para sincronizar un conjunto de datos, llame a su método synchronize: 280
Amazon Cognito Guía para desarrolladores Gestión de la devolución de llamadas
dataset.SynchronizeAsync();
Para obtener más información acerca de la sincronización de datos y las diversas devoluciones de llamada, consulte Gestión de la devolución de llamadas (p. 281).
Gestión de la devolución de llamadas Si es la primera vez que usa Amazon Cognito Sync, utilice AWS AppSync. Al igual que Amazon Cognito Sync, AWS AppSync es un servicio diseñado para sincronizar los datos de las aplicaciones entre dispositivos. Permite sincronizar los datos de los usuarios, como las preferencias de la aplicación o el estado del juego. También amplía estas funcionalidades, ya que permite que diferentes usuarios se sincronicen y colaboren en tiempo real sobre los datos compartidos. En esta sección se describe cómo tratar las devoluciones de llamadas.
Android Interfaz SyncCallback Si implementa la interfaz SyncCallback, puede recibir en la aplicación notificaciones acerca de la sincronización del conjunto de datos. De esta manera, la aplicación puede tomar decisiones activas acerca de la eliminación de datos locales, la combinación o no de perfiles autenticados y la solución de los conflictos de sincronización. Debe aplicar los métodos siguientes, obligatorios en la interfaz: • onSuccess() • onFailure() • onConflict() • onDatasetDeleted() • onDatasetsMerged() Tenga en cuenta que, si no quiere especificar todas las devoluciones de llamadas, también puede utilizar la clase DefaultSyncCallback, que proporciona implementaciones vacías de forma predeterminada para todos ellas. onSuccess La devolución de llamada onSuccess() se activa cuando se descarga correctamente un conjunto de datos desde el almacén de sincronización. @Override public void onSuccess(Dataset dataset, List newRecords) { }
onFailure Se llama a onFailure() si se produce una excepción durante la sincronización. @Override public void onFailure(DataStorageException dse) { }
281
Amazon Cognito Guía para desarrolladores iOS - Objective-C
onConflict Pueden producirse conflictos si la misma clave se ha modificado en el almacén local y en el almacén de sincronización. El método onConflict() se encarga de la resolución de conflictos. Si no implementa este método, el cliente de Amazon Cognito Sync utiliza de forma predeterminada el cambio más reciente. @Override public boolean onConflict(Dataset dataset, final List conflicts) { List resolvedRecords = new ArrayList(); for (SyncConflict conflict : conflicts) { /* resolved by taking remote records */ resolvedRecords.add(conflict.resolveWithRemoteRecord()); /* alternately take the local records */ // resolvedRecords.add(conflict.resolveWithLocalRecord()); /* or customer logic, say concatenate strings */ // String newValue = conflict.getRemoteRecord().getValue() // + conflict.getLocalRecord().getValue(); // resolvedRecords.add(conflict.resolveWithValue(newValue);
} dataset.resolve(resolvedRecords);
}
// return true so that synchronize() is retried after conflicts are resolved return true;
onDatasetDeleted Cuando se elimina un conjunto de datos, el cliente de Amazon Cognito utiliza la interfaz SyncCallback para confirmar si la copia del conjunto de datos que está almacenada en la memoria caché local se tiene que eliminar también. Implemente el método onDatasetDeleted() para decirle al SDK de cliente qué debe hacer con los datos locales. @Override public boolean onDatasetDeleted(Dataset dataset, String datasetName) { // return true to delete the local copy of the dataset return true; }
onDatasetMerged Cuando se vinculan dos identidades que anteriormente no estaban conectadas, todos sus conjuntos de datos se combinan. Las aplicaciones reciben una notificación de la combinación a través del método onDatasetsMerged(): @Override public boolean onDatasetsMerged(Dataset dataset, List datasetNames) { // return false to handle Dataset merge outside the synchronization callback return false; }
iOS - Objective-C Notificaciones de sincronización El cliente de Amazon Cognito generará una serie de eventos NSNotification durante una llamada de sincronización. Puede registrar la supervisión de dichas notificaciones mediante el NSNotificationCenter estándar: 282
Amazon Cognito Guía para desarrolladores iOS - Objective-C
[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(myNotificationHandler:) name:NOTIFICATION_TYPE object:nil];
Amazon Cognito admite cinco tipos de notificaciones, que indicamos a continuación. AWSCognitoDidStartSynchronizeNotification Se llamada cuando se inicia una operación se sincronización. El objeto userInfo contendrá el conjunto de datos de la clave, que corresponde al nombre del conjunto de datos sincronizado. AWSCognitoDidEndSynchronizeNotification Se llama cuando finaliza una operación de sincronización (correctamente o no). El objeto userInfo contendrá el conjunto de datos de la clave, que corresponde al nombre del conjunto de datos sincronizado. AWSCognitoDidFailToSynchronizeNotification Se llama cuando una operación de sincronización falla. El objeto userInfo contendrá el conjunto de datos de la clave, que corresponde al nombre del conjunto de datos sincronizado, y el error de clave que contiene el error que ha provocado el error. AWSCognitoDidChangeRemoteValueNotification Se llama cuando los cambios locales se transmiten correctamente a Amazon Cognito. El objeto userInfo contiene el conjunto de datos de la clave, que corresponde al nombre del conjunto de datos sincronizado, y las claves que contienen un NSArray de las claves de registro que se han transmitido. AWSCognitoDidChangeLocalValueFromRemoteNotification Se llama cuando un valor local cambia debido a una operación de sincronización. El objeto userInfo contiene el conjunto de datos de la clave, que corresponde al nombre del conjunto de datos sincronizado, y las claves que contienen un NSArray de las claves de registro que han cambiado. Gestor de resolución de conflictos Durante una operación de sincronización, pueden producirse conflictos si se ha modificado la misma clave en el almacén local y en el almacén de sincronización. Si no ha definido un gestor de resolución de conflictos, Amazon Cognito toma la última actualización como valor predeterminado. La implementación y la asignación de un gestor AWSCognitoRecordConflictHandler le permite modificar la resolución de conflictos predeterminada. El conflicto del parámetro de entrada AWSCognitoConflict contiene un objeto AWSCognitoRecord para los datos almacenados en la memoria caché local y para el registro de conflicto en el almacén de sincronización. Con AWSCognitoConflict puede solucionar el conflicto con el registro local: [conflict resolveWithLocalRecord], el registro remoto: [conflict resolveWithRemoteRecord] o un valor nuevo: [conflict resolveWithValue: value]. La devolución de un valor nulo a partir de este método, impide que prosiga la sincronización y los conflictos volverán a producirse la siguiente vez que se inicie el proceso de sincronización. Puede configurar el gestor de resolución de conflictos en el nivel de cliente: client.conflictHandler = ^AWSCognitoResolvedConflict* (NSString *datasetName, AWSCognitoConflict *conflict) { // always choose local changes return [conflict resolveWithLocalRecord]; };
O en el nivel de conjunto de datos:
283
Amazon Cognito Guía para desarrolladores iOS - Objective-C
dataset.conflictHandler = ^AWSCognitoResolvedConflict* (NSString *datasetName, AWSCognitoConflict *conflict) { // override and always choose remote changes return [conflict resolveWithRemoteRecord]; };
Gestor de supresión de conjuntos de datos Cuando se elimina un conjunto de datos, el cliente de Amazon Cognito utiliza AWSCognitoDatasetDeletedHandler para confirmar si la copia del conjunto de datos que está almacenada en la memoria caché local se tiene que eliminar también. Si no hay un AWSCognitoDatasetDeletedHandler implementado, los datos locales se purgarán automáticamente. Implemente un AWSCognitoDatasetDeletedHandler si desea conservar una copia de los datos locales antes de borrar o si desea conservar los datos locales. Puede configurar el gestor de supresión del conjunto de datos en el nivel de cliente: client.datasetDeletedHandler = ^BOOL (NSString *datasetName) { // make a backup of the data if you choose ... // delete the local data (default behavior) return YES; };
O en el nivel de conjunto de datos: dataset.datasetDeletedHandler = ^BOOL (NSString *datasetName) { // override default and keep the local data return NO; };
Gestor de combinación del conjuntos de datos Cuando se vinculan dos identidades que anteriormente no estaban conectadas, todos sus conjuntos de datos se combinan. Las aplicaciones reciben una notificación de la combinación mediante DatasetMergeHandler. El gestor recibirá el nombre del conjunto de datos raíz, así como una gama de nombres de conjuntos de datos que están marcados como combinaciones del conjunto de datos raíz. Si el DatasetMergeHandler no se implementa, no se tendrán en cuenta estos conjuntos de datos, pero se seguirá usando espacio hasta un máximo de 20 conjuntos de datos en total. Puede configurar el gestor de combinación de conjuntos de datos en el nivel de cliente: client.datasetMergedHandler = ^(NSString *datasetName, NSArray *datasets) { // Blindly delete the datasets for (NSString *name in datasets) { AWSCognitoDataset *merged = [[AWSCognito defaultCognito] openOrCreateDataset:name]; [merged clear]; [merged synchronize]; } };
O en el nivel de conjunto de datos: dataset.datasetMergedHandler = ^(NSString *datasetName, NSArray *datasets) { // Blindly delete the datasets for (NSString *name in datasets) { AWSCognitoDataset *merged = [[AWSCognito defaultCognito] openOrCreateDataset:name]; // do something with the data if it differs from existing dataset
284
Amazon Cognito Guía para desarrolladores iOS - Swift
};
}
... // now delete it [merged clear]; [merged synchronize];
iOS - Swift Notificaciones de sincronización El cliente de Amazon Cognito generará una serie de eventos NSNotification durante una llamada de sincronización. Puede registrar la supervisión de dichas notificaciones mediante el NSNotificationCenter estándar: NSNotificationCenter.defaultCenter().addObserver(observer: self, selector: "myNotificationHandler", name:NOTIFICATION_TYPE, object:nil)
Amazon Cognito admite cinco tipos de notificaciones, que indicamos a continuación. AWSCognitoDidStartSynchronizeNotification Se llamada cuando se inicia una operación se sincronización. El objeto userInfo contendrá el conjunto de datos de la clave, que corresponde al nombre del conjunto de datos sincronizado. AWSCognitoDidEndSynchronizeNotification Se llama cuando finaliza una operación de sincronización (correctamente o no). El objeto userInfo contendrá el conjunto de datos de la clave, que corresponde al nombre del conjunto de datos sincronizado. AWSCognitoDidFailToSynchronizeNotification Se llama cuando una operación de sincronización falla. El objeto userInfo contendrá el conjunto de datos de la clave, que corresponde al nombre del conjunto de datos sincronizado, y el error de clave que contiene el error que ha provocado el error. AWSCognitoDidChangeRemoteValueNotification Se llama cuando los cambios locales se transmiten correctamente a Amazon Cognito. El objeto userInfo contiene el conjunto de datos de la clave, que corresponde al nombre del conjunto de datos sincronizado, y las claves que contienen un NSArray de las claves de registro que se han transmitido. AWSCognitoDidChangeLocalValueFromRemoteNotification Se llama cuando un valor local cambia debido a una operación de sincronización. El objeto userInfo contiene el conjunto de datos de la clave, que corresponde al nombre del conjunto de datos sincronizado, y las claves que contienen un NSArray de las claves de registro que han cambiado. Gestor de resolución de conflictos Durante una operación de sincronización, pueden producirse conflictos si se ha modificado la misma clave en el almacén local y en el almacén de sincronización. Si no ha definido un gestor de resolución de conflictos, Amazon Cognito toma la última actualización como valor predeterminado. La implementación y la asignación de un gestor AWSCognitoRecordConflictHandler le permite modificar la resolución de conflictos predeterminada. El conflicto del parámetro de entrada AWSCognitoConflict contiene un objeto AWSCognitoRecord para los datos almacenados en la memoria caché local y para el registro de conflicto en el almacén de sincronización.
285
Amazon Cognito Guía para desarrolladores iOS - Swift
Con AWSCognitoConflict puede solucionar el conflicto con el registro local: [conflict resolveWithLocalRecord], el registro remoto: [conflict resolveWithRemoteRecord] o un valor nuevo: [conflict resolveWithValue: value]. La devolución de un valor nulo a partir de este método, impide que prosiga la sincronización y los conflictos volverán a producirse la siguiente vez que se inicie el proceso de sincronización. Puede configurar el gestor de resolución de conflictos en el nivel de cliente: client.conflictHandler = { (datasetName: String?, conflict: AWSCognitoConflict?) -> AWSCognitoResolvedConflict? in return conflict.resolveWithLocalRecord() }
O en el nivel de conjunto de datos: dataset.conflictHandler = { (datasetName: String?, conflict: AWSCognitoConflict?) -> AWSCognitoResolvedConflict? in return conflict.resolveWithLocalRecord() }
Gestor de supresión de conjuntos de datos Cuando se elimina un conjunto de datos, el cliente de Amazon Cognito utiliza AWSCognitoDatasetDeletedHandler para confirmar si la copia del conjunto de datos que está almacenada en la memoria caché local se tiene que eliminar también. Si no hay un AWSCognitoDatasetDeletedHandler implementado, los datos locales se purgarán automáticamente. Implemente un AWSCognitoDatasetDeletedHandler si desea conservar una copia de los datos locales antes de borrar o si desea conservar los datos locales. Puede configurar el gestor de supresión del conjunto de datos en el nivel de cliente: client.datasetDeletedHandler = { (datasetName: String!) -> Bool in // make a backup of the data if you choose ... // delete the local data (default behaviour) return true }
O en el nivel de conjunto de datos: dataset.datasetDeletedHandler = { (datasetName: String!) -> Bool in // make a backup of the data if you choose ... // delete the local data (default behaviour) return true }
Gestor de combinación del conjuntos de datos Cuando se vinculan dos identidades que anteriormente no estaban conectadas, todos sus conjuntos de datos se combinan. Las aplicaciones reciben una notificación de la combinación mediante DatasetMergeHandler. El gestor recibirá el nombre del conjunto de datos raíz, así como una gama de nombres de conjuntos de datos que están marcados como combinaciones del conjunto de datos raíz. Si el DatasetMergeHandler no se implementa, no se tendrán en cuenta estos conjuntos de datos, pero se seguirá usando espacio hasta un máximo de 20 conjuntos de datos en total.
286
Amazon Cognito Guía para desarrolladores JavaScript
Puede configurar el gestor de combinación de conjuntos de datos en el nivel de cliente: client.datasetMergedHandler = { (datasetName: String!, datasets: [AnyObject]!) -> Void in for nameObject in datasets { if let name = nameObject as? String { let merged = AWSCognito.defaultCognito().openOrCreateDataset(name) merged.clear() merged.synchronize() } } }
O en el nivel de conjunto de datos: dataset.datasetMergedHandler = { (datasetName: String!, datasets: [AnyObject]!) -> Void in for nameObject in datasets { if let name = nameObject as? String { let merged = AWSCognito.defaultCognito().openOrCreateDataset(name) // do something with the data if it differs from existing dataset ... // now delete it merged.clear() merged.synchronize() } } }
JavaScript Devoluciones de llamadas de sincronización Cuando ejecute synchronize() en un conjunto de datos, tiene la posibilidad de especificar devoluciones de llamadas para abordar cada uno de los estados siguientes: dataset.synchronize({ onSuccess: function(dataset, newRecords) { //... }, onFailure: function(err) { //... }, onConflict: function(dataset, conflicts, callback) { //... }, onDatasetDeleted: function(dataset, datasetName, callback) { //... }, onDatasetMerged: function(dataset, datasetNames, callback) { //... } });
onSuccess()
287
Amazon Cognito Guía para desarrolladores JavaScript
La devolución de llamada onSuccess() se activa cuando se actualiza correctamente un conjunto de datos desde el almacén de sincronización. Si no define una devolución de llamada, la sincronización se logrará silenciosamente. onSuccess: function(dataset, newRecords) { console.log('Successfully synchronized ' + newRecords.length + ' new records.'); }
onFailure() Se llama a onFailure() si se produce una excepción durante la sincronización. Si no define una devolución de llamada, la sincronización fallará silenciosamente. onFailure: function(err) { console.log('Synchronization failed.'); console.log(err); }
onConflict() Pueden producirse conflictos si la misma clave se ha modificado en el almacén local y en el almacén de sincronización. El método onConflict() se encarga de la resolución de conflictos. Si no implementa este método, la sincronización se anulará cuando exista un conflicto. onConflict: function(dataset, conflicts, callback) { var resolved = []; for (var i=0; i conflicts) { if (dataset.Metadata != null) { Debug.LogWarning("Sync conflict " + dataset.Metadata.DatasetName); } else { Debug.LogWarning("Sync conflict"); } List < Amazon.CognitoSync.SyncManager.Record > resolvedRecords = new List < Amazon.CognitoSync.SyncManager.Record > (); foreach(SyncConflict conflictRecord in conflicts) { // SyncManager provides the following default conflict resolution methods: // ResolveWithRemoteRecord - overwrites the local with remote records // ResolveWithLocalRecord - overwrites the remote with local records // ResolveWithValue - to implement your own logic resolvedRecords.Add(conflictRecord.ResolveWithRemoteRecord()); } // resolves the conflicts in local storage dataset.Resolve(resolvedRecords); // on return true the synchronize operation continues where it left, // returning false cancels the synchronize operation return true; }
OnDatasetDeleted Cuando se elimina un conjunto de datos, el cliente de Amazon Cognito utiliza la devolución de llamada OnDatasetDeleted para decidir si la copia del conjunto de datos que está almacenada en la memoria caché local se tiene que eliminar también. De forma predeterminada, no se eliminará el conjunto de datos. private bool HandleDatasetDeleted(Dataset dataset) { Debug.Log(dataset.Metadata.DatasetName + " Dataset has been deleted"); // Do clean up if necessary // returning true informs the corresponding dataset can be purged in the local storage and return false retains the local dataset return true; }
OnDatasetMerged Cuando se vinculan dos identidades que anteriormente no estaban conectadas, todos sus conjuntos de datos se combinan. Las aplicaciones reciben una notificación de la combinación mediante la devolución de llamada OnDatasetsMerged. public bool HandleDatasetMerged(Dataset localDataset, List mergedDatasetNames) { foreach (string name in mergedDatasetNames) { Dataset mergedDataset = syncManager.OpenOrCreateDataset(name);
290
Amazon Cognito Guía para desarrolladores Xamarin //Lambda function to delete the dataset after fetching it EventHandler lambda; lambda = (object sender, SyncSuccessEvent e) => { ICollection existingValues = localDataset.GetAll().Values; ICollection newValues = mergedDataset.GetAll().Values; //Implement your merge logic here mergedDataset.Delete(); //Delete the dataset locally mergedDataset.OnSyncSuccess -= lambda; //We don't want this callback to be
fired again
mergedDataset.OnSyncSuccess += (object s2, SyncSuccessEvent e2) => { localDataset.Synchronize(); //Continue the sync operation that was interrupted by the merge }; mergedDataset.Synchronize(); //Synchronize it as deleted, failing to do so will leave us in an inconsistent state }; mergedDataset.OnSyncSuccess += lambda; mergedDataset.Synchronize(); //Asnchronously fetch the dataset }
}
// returning true allows the Synchronize to continue and false stops it return false;
Xamarin Después de abrir o crear un conjunto de datos, puede configurar diferentes devoluciones de llamadas al conjunto de datos, que se activarán cuando use el método Synchronize. A continuación, indicamos la forma de registrar las devoluciones de llamadas en ellos: dataset.OnSyncSuccess += this.HandleSyncSuccess; dataset.OnSyncFailure += this.HandleSyncFailure; dataset.OnSyncConflict = this.HandleSyncConflict; dataset.OnDatasetMerged = this.HandleDatasetMerged; dataset.OnDatasetDeleted = this.HandleDatasetDeleted;
Tenga en cuenta que SyncSuccess y SyncFailure usan += en vez de = para que les pueda suscribir más de una devolución de llamada. OnSyncSuccess La devolución de llamada OnSyncSuccess se activa cuando se actualiza correctamente un conjunto de datos desde la nube. Si no define una devolución de llamada, la sincronización se logrará silenciosamente. private void HandleSyncSuccess(object sender, SyncSuccessEventArgs e) { // Continue with your game flow, display the loaded data, etc. }
OnSyncFailure Se llama a OnSyncFailure si se produce una excepción durante la sincronización. Si no define una devolución de llamada, la sincronización fallará silenciosamente. private void HandleSyncFailure(object sender, SyncFailureEventArgs e) { Dataset dataset = sender as Dataset; if (dataset.Metadata != null) {
291
Amazon Cognito Guía para desarrolladores Xamarin
}
Console.WriteLine("Sync failed for dataset : " + dataset.Metadata.DatasetName); } else { Console.WriteLine("Sync failed"); }
OnSyncConflict Pueden producirse conflictos si la misma clave se ha modificado en el almacén local y en el almacén de sincronización. La devolución de llamada OnSyncConflict se encarga de la resolución de conflictos. Si no implementa este método, la sincronización se anulará cuando exista un conflicto. private bool HandleSyncConflict(Dataset dataset, List < SyncConflict > conflicts) { if (dataset.Metadata != null) { Console.WriteLine("Sync conflict " + dataset.Metadata.DatasetName); } else { Console.WriteLine("Sync conflict"); } List < Amazon.CognitoSync.SyncManager.Record > resolvedRecords = new List < Amazon.CognitoSync.SyncManager.Record > (); foreach(SyncConflict conflictRecord in conflicts) { // SyncManager provides the following default conflict resolution methods: // ResolveWithRemoteRecord - overwrites the local with remote records // ResolveWithLocalRecord - overwrites the remote with local records // ResolveWithValue - to implement your own logic resolvedRecords.Add(conflictRecord.ResolveWithRemoteRecord()); } // resolves the conflicts in local storage dataset.Resolve(resolvedRecords); // on return true the synchronize operation continues where it left, // returning false cancels the synchronize operation return true; }
OnDatasetDeleted Cuando se elimina un conjunto de datos, el cliente de Amazon Cognito utiliza la devolución de llamada OnDatasetDeleted para decidir si la copia del conjunto de datos que está almacenada en la memoria caché local se tiene que eliminar también. De forma predeterminada, no se eliminará el conjunto de datos. private bool HandleDatasetDeleted(Dataset dataset) { Console.WriteLine(dataset.Metadata.DatasetName + " Dataset has been deleted"); // Do clean up if necessary // returning true informs the corresponding dataset can be purged in the local storage and return false retains the local dataset return true; }
OnDatasetMerged Cuando se vinculan dos identidades que anteriormente no estaban conectadas, todos sus conjuntos de datos se combinan. Las aplicaciones reciben una notificación de la combinación mediante la devolución de llamada OnDatasetsMerged. public bool HandleDatasetMerged(Dataset localDataset, List mergedDatasetNames) { foreach (string name in mergedDatasetNames) { Dataset mergedDataset = syncManager.OpenOrCreateDataset(name);
292
Amazon Cognito Guía para desarrolladores Sincronización mediante inserción
//Implement your merge logic here
}
}
mergedDataset.OnSyncSuccess += lambda; mergedDataset.SynchronizeAsync(); //Asnchronously fetch the dataset
// returning true allows the Synchronize to continue and false stops it return false;
Sincronización mediante inserción Si es la primera vez que usa Amazon Cognito Sync, utilice AWS AppSync. Al igual que Amazon Cognito Sync, AWS AppSync es un servicio diseñado para sincronizar los datos de las aplicaciones entre dispositivos. Permite sincronizar los datos de los usuarios, como las preferencias de la aplicación o el estado del juego. También amplía estas funcionalidades, ya que permite que diferentes usuarios se sincronicen y colaboren en tiempo real sobre los datos compartidos. Amazon Cognito hace automáticamente un seguimiento de la asociación entre identidad y dispositivos. El uso de la sincronización mediante inserción puede garantizar que todas las instancias de una determinada identidad reciban una notificación cuando cambien los datos de identidad. La sincronización por inserción garantiza que, siempre que los datos del almacén de sincronización cambien para una identidad determinada, todos los dispositivos asociados recibirán una notificación de inserción silenciosa que informe del cambio.
Note La sincronización mediante inserción no es compatible con JavaScript, Unity o Xamarin. Para poder utilizar la sincronización mediante inserción, primero debe configurar su cuenta para que se sincronice mediante inserción en la consola de Amazon Cognito.
Crear una aplicación de Amazon Simple Notification Service (Amazon SNS) Cree y configure una aplicación de Amazon SNS para sus plataformas compatibles, tal como se describe en la Guía para el desarrollador de SNS.
Activación de la sincronización mediante inserción en la consola de Amazon Cognito Puede habilitar la sincronización mediante inserción usando la consola de Amazon Cognito. En la página de inicio de la consola: 1. Haga clic en el nombre del grupo de identidades para el que desea habilitar la sincronización por inserción. Se mostrará la página Dashboard (Panel) de su grupo de identidades. 2. En la esquina superior derecha de la página Dashboard (Panel), haga clic en Manage Identity Pools (Administrar grupos de identidades). Se visualizará la página Federated Identities (Identidades federadas).
293
Amazon Cognito Guía para desarrolladores Uso de la sincronización mediante inserción en su aplicación: Android
3. Desplácese hacia abajo y haga clic en Push synchronization (Insertar sincronización) para expandirlo. 4. En el menú desplegable Service role (Rol de servicio), seleccione el rol de IAM que concede a Cognito permiso para enviar una notificación de SNS. Haga clic en Create role (Crear rol) para crear o modificar los roles asociados a su grupo de identidades en la consola de AWS IAM. 5. Seleccione una aplicación de plataforma y, a continuación, haga clic en Save Changes (Guardar cambios). 6. Autorice a SNS acceso a su aplicación En la consola de IAM, configure los roles de IAM para que tengan pleno acceso SNS o cree un rol nuevo que confíe en cognito-sync y tenga acceso SNS completo. Para obtener más información acerca de los roles de IAM, consulte la sección Roles (delegación y federación).
Uso de la sincronización mediante inserción en su aplicación: Android Su aplicación deberá importar los servicios de Google Play. Puede descargar la versión más reciente del SDK de Google Play a través del administrador de SDK para Android. Consulte la documentación de Android que se encuentra en Android Implementation para registrar la aplicación y recibir un ID de registro de GCM. Una vez que tenga el ID de registro, deberá registrar el dispositivo en Amazon Cognito, tal como se muestra en el fragmento siguiente: String registrationId = "MY_GCM_REGISTRATION_ID"; try { client.registerDevice("GCM", registrationId); } catch (RegistrationFailedException rfe) { Log.e(TAG, "Failed to register device for silent sync", rfe); } catch (AmazonClientException ace) { Log.e(TAG, "An unknown error caused registration for silent sync to fail", ace); }
Ahora ya puede suscribir un dispositivo para recibir actualizaciones de un conjunto de datos determinado: Dataset trackedDataset = client.openOrCreateDataset("myDataset"); if (client.isDeviceRegistered()) { try { trackedDataset.subscribe(); } catch (SubscribeFailedException sfe) { Log.e(TAG, "Failed to subscribe to datasets", sfe); } catch (AmazonClientException ace) { Log.e(TAG, "An unknown error caused the subscription to fail", ace); } }
Para dejar de recibir notificaciones de inserción desde un conjunto de datos, solo tiene que llamar al método unsubscribe. Para suscribirse a todos los conjuntos de datos (o a un subconjunto concreto) del objeto CognitoSyncManager, utilice subscribeAll(): if (client.isDeviceRegistered()) { try { client.subscribeAll(); } catch (SubscribeFailedException sfe) { Log.e(TAG, "Failed to subscribe to datasets", sfe); } catch (AmazonClientException ace) { Log.e(TAG, "An unknown error caused the subscription to fail", ace); } }
294
Amazon Cognito Guía para desarrolladores Uso de la sincronización mediante inserción en su aplicación: iOS - Objective-C
En la implementación del objeto Android BroadcastReceiver, puede comprobar la última versión del conjunto de datos modificado y decidir si su aplicación se debe volver a sincronizar: @Override public void onReceive(Context context, Intent intent) { PushSyncUpdate update = client.getPushSyncUpdate(intent); // // // //
The update has the source (cognito-sync here), identityId of the user, identityPoolId in question, the non-local sync count of the data set and the name of the dataset. All are accessible through relevant getters.
String source = update.getSource(); String identityPoolId = update.getIdentityPoolId(); String identityId = update.getIdentityId(); String datasetName = update.getDatasetName; long syncCount = update.getSyncCount; Dataset dataset = client.openOrCreateDataset(datasetName); // need to access last sync count. If sync count is less or equal to // last sync count of the dataset, no sync is required. long lastSyncCount = dataset.getLastSyncCount(); if (lastSyncCount < syncCount) { dataset.synchronize(new SyncCallback() { // ... }); } }
Las claves siguientes están disponibles en la carga útil de notificaciones de inserción: • source: sincronización de Cognito. Esta clave puede servir de factor de diferenciación entre las notificaciones. • identityPoolId: ID del grupo de identidades. Esta clave se puede utilizar para la validación o para obtener información adicional, aunque desde el punto de vista del receptor no sea integral. • identityId: ID de identidad dentro del grupo. • datasetName: nombre del conjunto de datos que se ha actualizado. Esta clave está disponible para la llamada openOrCreateDataset. • syncCount: número de sincronizaciones para el conjunto de datos remoto. Puede utilizar esta clave como forma de asegurarse de que el conjunto de datos local esté obsoleto y que la sincronización de entrada sea nueva.
Uso de la sincronización mediante inserción en su aplicación: iOS - Objective-C Para obtener un token de dispositivo para su aplicación, consulte la documentación de Apple en el registro para recibir notificaciones remotas. Una vez que haya recibido el token de dispositivo como objeto NSData desde APN, tendrá que registrar el dispositivo en Amazon Cognito aplicando el método registerDevice: del cliente de sincronización, tal como se muestra a continuación: AWSCognito *syncClient = [AWSCognito defaultCognito]; [[syncClient registerDevice: devToken] continueWithBlock:^id(AWSTask *task) { if(task.error){
295
Amazon Cognito Guía para desarrolladores Uso de la sincronización mediante inserción en su aplicación: iOS - Objective-C
}
NSLog(@"Unable to registerDevice: %@", task.error); } else { NSLog(@"Successfully registered device with id: %@", task.result); } return nil;
];
En el modo de depuración, el dispositivo se registra en el entorno de pruebas de APN; mientras que en el modo de lanzamiento, se registra en los APN. Para recibir actualizaciones de un conjunto de datos determinado, aplique el método subscribe: [[[syncClient openOrCreateDataset:@"MyDataset"] subscribe] continueWithBlock:^id(AWSTask *task) { if(task.error){ NSLog(@"Unable to subscribe to dataset: %@", task.error); } else { NSLog(@"Successfully subscribed to dataset: %@", task.result); } return nil; } ];
Para dejar de recibir notificaciones de inserción desde un conjunto de datos, solo tiene que llamar al método unsubscribe: [[[syncClient openOrCreateDataset:@”MyDataset”] unsubscribe] continueWithBlock:^id(AWSTask *task) { if(task.error){ NSLog(@"Unable to unsubscribe from dataset: %@", task.error); } else { NSLog(@"Successfully unsubscribed from dataset: %@", task.result); } return nil; } ];
Para suscribirse a todos los conjuntos de datos del objeto AWSCognito, llame a subscribeAll: [[syncClient subscribeAll] continueWithBlock:^id(AWSTask *task) { if(task.error){ NSLog(@"Unable to subscribe to all datasets: %@", task.error); } else { NSLog(@"Successfully subscribed to all datasets: %@", task.result); } return nil; } ];
Antes de llamar a subscribeAll, sincronice todos los conjuntos de datos como mínimo una vez, para que dichos conjuntos existan en el servidor. Para responder a las notificaciones de inserción, debe implementar el método didReceiveRemoteNotification en el delgado de la aplicación: - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { [[NSNotificationCenter defaultCenter] postNotificationName:@"CognitoPushNotification" object:userInfo];
296
Amazon Cognito Guía para desarrolladores Uso de la sincronización mediante inserción en su aplicación: iOS - Swift }
Si publica una notificación mediante el controlador de notificaciones, puede responder a la notificación en cualquier punto de la aplicación donde tenga un control sobre el conjunto de datos. Si se suscribe a la notificación de esta forma... [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceivePushSync:) name: :@"CognitoPushNotification" object:nil];
... puede actuar sobre la notificación de esta forma: - (void)didReceivePushSync:(NSNotification*)notification { NSDictionary * data = [(NSDictionary *)[notification object] objectForKey:@"data"]; NSString * identityId = [data objectForKey:@"identityId"]; NSString * datasetName = [data objectForKey:@"datasetName"]; if([self.dataset.name isEqualToString:datasetName] && [self.identityId isEqualToString:identityId]){ [[self.dataset synchronize] continueWithBlock:^id(AWSTask *task) { if(!task.error){ NSLog(@"Successfully synced dataset"); } return nil; }]; } }
Las claves siguientes están disponibles en la carga útil de notificaciones de inserción: • source: sincronización de Cognito. Esta clave puede servir de factor de diferenciación entre las notificaciones. • identityPoolId: ID del grupo de identidades. Esta clave se puede utilizar para la validación o para obtener información adicional, aunque desde el punto de vista del receptor no sea integral. • identityId: ID de identidad dentro del grupo. • datasetName: nombre del conjunto de datos que se ha actualizado. Esta clave está disponible para la llamada openOrCreateDataset. • syncCount: número de sincronizaciones para el conjunto de datos remoto. Puede utilizar esta clave como forma de asegurarse de que el conjunto de datos local esté obsoleto y que la sincronización de entrada sea nueva.
Uso de la sincronización mediante inserción en su aplicación: iOS - Swift Para obtener un token de dispositivo para su aplicación, consulte la documentación de Apple en el registro para recibir notificaciones remotas. Una vez que haya recibido el token de dispositivo como objeto NSData desde APN, tendrá que registrar el dispositivo en Amazon Cognito aplicando el método registerDevice: del cliente de sincronización, tal como se muestra a continuación: let syncClient = AWSCognito.default() syncClient.registerDevice(devToken).continueWith(block: { (task: AWSTask!) -> AnyObject! in if (task.error != nil) { print("Unable to register device: " + task.error.localizedDescription) } else {
297
Amazon Cognito Guía para desarrolladores Uso de la sincronización mediante inserción en su aplicación: iOS - Swift
})
print("Successfully registered device with id: \(task.result)") } return task
En el modo de depuración, el dispositivo se registra en el entorno de pruebas de APN; mientras que en el modo de lanzamiento, se registra en los APN. Para recibir actualizaciones de un conjunto de datos determinado, aplique el método subscribe: syncClient.openOrCreateDataset("MyDataset").subscribe().continueWith(block: { (task: AWSTask!) -> AnyObject! in if (task.error != nil) { print("Unable to subscribe to dataset: " + task.error.localizedDescription) } else { print("Successfully subscribed to dataset: \(task.result)") } return task
})
Para dejar de recibir notificaciones de inserción desde un conjunto de datos, llame al método unsubscribe: syncClient.openOrCreateDataset("MyDataset").unsubscribe().continueWith(block: { (task: AWSTask!) -> AnyObject! in if (task.error != nil) { print("Unable to unsubscribe to dataset: " + task.error.localizedDescription) } else { print("Successfully unsubscribed to dataset: \(task.result)") } return task
})
Para suscribirse a todos los conjuntos de datos del objeto AWSCognito, llame a subscribeAll: syncClient.openOrCreateDataset("MyDataset").subscribeAll().continueWith(block: { (task: AWSTask!) -> AnyObject! in if (task.error != nil) { print("Unable to subscribe to all datasets: " + task.error.localizedDescription) } else { print("Successfully subscribed to all datasets: \(task.result)") } return task
})
Antes de llamar a subscribeAll, sincronice todos los conjuntos de datos como mínimo una vez, para que dichos conjuntos existan en el servidor. Para responder a las notificaciones de inserción, debe implementar el método didReceiveRemoteNotification en el delgado de la aplicación: func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { NSNotificationCenter.defaultCenter().postNotificationName("CognitoPushNotification", object: userInfo) })
298
Amazon Cognito Guía para desarrolladores Flujos de Amazon Cognito
Si publica una notificación mediante el controlador de notificaciones, puede responder a la notificación en cualquier punto de la aplicación donde tenga un control sobre el conjunto de datos. Si se suscribe a la notificación de esta forma... NSNotificationCenter.defaultCenter().addObserver(observer:self, selector:"didReceivePushSync:", name:"CognitoPushNotification", object:nil)
... puede actuar sobre la notificación de esta forma: func didReceivePushSync(notification: NSNotification) { if let data = (notification.object as! [String: AnyObject])["data"] as? [String: AnyObject] { let identityId = data["identityId"] as! String let datasetName = data["datasetName"] as! String
}
}
if self.dataset.name == datasetName && self.identityId == identityId { dataset.synchronize().continueWithBlock {(task) -> AnyObject! in if task.error == nil { print("Successfully synced dataset") } return nil } }
Las claves siguientes están disponibles en la carga útil de notificaciones de inserción: • source: sincronización de Cognito. Esta clave puede servir de factor de diferenciación entre las notificaciones. • identityPoolId: ID del grupo de identidades. Esta clave se puede utilizar para la validación o para obtener información adicional, aunque desde el punto de vista del receptor no sea integral. • identityId: ID de identidad dentro del grupo. • datasetName: nombre del conjunto de datos que se ha actualizado. Esta clave está disponible para la llamada openOrCreateDataset. • syncCount: número de sincronizaciones para el conjunto de datos remoto. Puede utilizar esta clave como forma de asegurarse de que el conjunto de datos local esté obsoleto y que la sincronización de entrada sea nueva.
Flujos de Amazon Cognito Si es la primera vez que usa Amazon Cognito Sync, utilice AWS AppSync. Al igual que Amazon Cognito Sync, AWS AppSync es un servicio diseñado para sincronizar los datos de las aplicaciones entre dispositivos. Permite sincronizar los datos de los usuarios, como las preferencias de la aplicación o el estado del juego. También amplía estas funcionalidades, ya que permite que diferentes usuarios se sincronicen y colaboren en tiempo real sobre los datos compartidos. La característica de secuencias de Amazon Cognito proporciona a los desarrolladores control y una vista de los datos que tienen almacenados en Amazon Cognito. Ahora, los desarrolladores pueden configurar una secuencia de Kinesis para recibir eventos mientras los datos se actualizan y se sincronizan. Amazon
299
Amazon Cognito Guía para desarrolladores Flujos de Amazon Cognito
Cognito puede insertar cada cambio del conjunto de datos en tiempo real en una secuencia de Kinesis que le pertenezca. Con las secuencias de Amazon Cognito puede mover todos los datos de sincronización a Kinesis y posteriormente, transmitir dichos datos a una herramienta de almacamiento de datos, como Amazon Redshift, para realizar más análisis. Para obtener más información acerca de Kinesis, consulte Introducción al uso de Amazon Kinesis. Configuración de las secuencias Puede configurar secuencias de Amazon Cognito en la consola de Amazon Cognito. Para activar las secuencias de Amazon Cognito en la consola de Amazon Cognito, debe seleccionar la secuencia de Kinesis en la que va a publicar y un rol de IAM que conceda permiso de Amazon Cognito para insertar eventos en la secuencia seleccionada. En la página de inicio de la consola: 1. Haga clic en el nombre del grupo de identidades para el que desee configurar flujos de Amazon Cognito. Se mostrará la página Dashboard (Panel) de su grupo de identidades. 2. En la esquina superior derecha de la página Dashboard (Panel), haga clic en Manage Identity Pools (Administrar grupos de identidades). Se visualizará la página Manage Federated Identities. 3. Desplácese hacia abajo y haga clic en Cognito Streams (Secuencias de Cognito) para expandir esta opción. 4. En el menú desplegable Stream name (Nombre de la secuencia), seleccione el nombre de un flujo de Kinesis ya existente. O bien haga clic en Create stream (Crear secuencia) para crear uno, introduciendo un nombre de secuencia y el número de fragmentos. Para obtener más información acerca de las particiones y para obtener ayuda sobre cómo calcular el número de particiones necesarias para la secuencia, consulte la guía para desarrolladores de Kinesis. 5. En el menú desplegable Publish role (Publicar rol), seleccione el rol de IAM que concede a Amazon Cognito permiso para publicar su secuencia. Haga clic en Create role (Crear rol) para crear o modificar los roles asociados a su grupo de identidades en la consola de AWS IAM. 6. En el menú desplegable Stream status (Estado del flujo), seleccione Enabled (Habilitado) para habilitar las actualizaciones de la secuencia. Haga clic en Save Changes (Guardar cambios). Después de configurar correctamente los flujos de Amazon Cognito, todas las actualizaciones posteriores a conjuntos de datos de este grupo de identidades se enviarán al flujo. Contenido de la secuencia Cada registro enviado al flujo representa una sincronización única. A continuación se muestra un ejemplo de un registro enviado al flujo: {
"identityPoolId": "Pool Id", "identityId": "Identity Id", "dataSetName": "Dataset Name", "operation": "(replace|remove)", "kinesisSyncRecords": [ { "key": "Key", "value": "Value", "syncCount": 1, "lastModifiedDate": 1424801824343, "deviceLastModifiedDate": 1424801824343, "op": "(replace|remove)" }, ... ],
300
Amazon Cognito Guía para desarrolladores Eventos de Amazon Cognito
}
"lastModifiedDate": 1424801824343, "kinesisSyncRecordsURL": "S3Url", "payloadType": "(S3Url|Inline)", "syncCount": 1
En el caso de las actualizaciones que superan el tamaño de carga máximo de Kinesis (50 KB), se incluye una URL de Amazon S3 prefirmada con el contenido completo de la actualización. Después de configurar las secuencias de Amazon Cognito, si elimina la secuencia de Kinesis o cambia el permiso de confianza del rol para que Amazon Cognito Sync ya no lo pueda asumir, se deshabilitarán las secuencias de Amazon Cognito. Tendrá que volver a crear el flujo de Kinesis o bien arreglar el rol y, a continuación, volver a activar el flujo. Publicación por lotes Una vez que haya configurado los flujos de Amazon Cognito, podrá ejecutar una operación de publicación en masa de los datos existentes en su grupo de identidades. Después de iniciar una operación de publicación en masa, ya sea a través de la consola o directamente a través de la API, Amazon Cognito comenzará la publicación de estos datos en el mismo flujo que recibe las actualizaciones. Amazon Cognito no garantiza la exclusividad de los datos enviados al flujo en la operación de publicación en masa. Puede recibir la misma actualización como una actualización o como parte de una publicación en masa. Tenga en mente esta posibilidad cuando proceso los registros de su flujo. Para publicar en masa todos sus flujos, siga los pasos 1 a 6 de la sección de configuración de los flujos y, a continuación, haga clic en Start bulk publish. Tiene un límite de una operación de publicación en masa en curso en cualquier momento y una solicitud de publicación en masa correcta cada 24 horas.
Eventos de Amazon Cognito Si es la primera vez que usa Amazon Cognito Sync, utilice AWS AppSync. Al igual que Amazon Cognito Sync, AWS AppSync es un servicio diseñado para sincronizar los datos de las aplicaciones entre dispositivos. Permite sincronizar los datos de los usuarios, como las preferencias de la aplicación o el estado del juego. También amplía estas funcionalidades, ya que permite que diferentes usuarios se sincronicen y colaboren en tiempo real sobre los datos compartidos. Los eventos de Amazon Cognito le permiten ejecutar una función AWS Lambda en respuesta a eventos importantes de Amazon Cognito. Amazon Cognito lanza el evento disparador de sincronización cuando se sincroniza un conjunto de datos. Puede utilizar el evento disparador de la sincronización para actuar cuando un usuario actualiza los datos. La función puede evaluar y, de forma opcional, manipular los datos antes de que estos se almacenen en la nube y se sincronicen con los demás dispositivos del usuario. Es una función útil para validar los datos que vienen del dispositivo antes de que se sincronicen con los demás dispositivos del usuario o actualizar otros valores del conjunto de datos en función de los datos de entrada, como la emisión de un premio cuando un jugador logra un nivel nuevo. Los pasos siguientes le guiarán por la configuración de una función Lambda que se ejecuta cada vez que se sincroniza un conjunto de datos de Amazon Cognito.
Note Cuando utilice eventos de Amazon Cognito, solo puede utilizar las credenciales obtenidas en Identidad de Amazon Cognito. Si tiene una función Lambda asociada, pero llama a
301
Amazon Cognito Guía para desarrolladores Eventos de Amazon Cognito
UpdateRecords con las credenciales de la cuenta de AWS (credenciales de desarrollador), la función Lambda no se invocará. Creación de una función en AWS Lambda Para integrar Lambda con Amazon Cognito, primero debe crear una función en Lambda. Para ello:
Selección de la función Lambda en Amazon Cognito 1. Abra la consola de Lambda. 2. Haga clic en Create a Lambda function. 3. En la pantalla Select blueprint, busque "cognito-sync-trigger" y selecciónelo. 4. En la pantalla Configure event sources, deje el tipo de fuente de evento establecido en "Cognito Sync Trigger" y seleccione su grupo de identidades. Haga clic en Next. 5. En la pantalla de la función Configure, especifique un nombre y una descripción para su función. Deje Runtime establecido en "Node.js". No cambie el código para el ejemplo. El ejemplo predeterminado no modifica los datos que se están sincronizando. Solo registra el hecho de que se ha producido el evento Sync Trigger de Amazon Cognito. Deje el nombre del controlador establecido en "index.handler". Para la opción Role, seleccione un rol de IAM que conceda a su código permiso para tener acceso a AWS Lambda. Para modificar roles, consulte la consola de IAM. Deje la configuración avanzada sin cambiar. Haga clic en Next. 6. En la pantalla Review, revise los detalles y haga clic en Create function. En la página siguiente se muestra la nueva función Lambda. Ahora que ya tiene una función adecuada escrita en Lambda, debe elegir esa función como controlador del evento disparador de Amazon Cognito Sync. Los pasos siguientes le guiarán por este proceso. En la página de inicio de la consola: 1. Haga clic en el nombre del grupo de identidades para el que desee configurar eventos de Amazon Cognito. Se visualizará la página Dashboard de su grupo de identidades. 2. En la esquina superior derecha de la página Dashboard, haga clic en Manage Federated Identities. Se visualizará la página Manage Federated Identities. 3. Desplácese hacia abajo y haga clic en Cognito Events para ampliar esta opción. 4. En el menú desplegable Sync Trigger, seleccione la función de Lambda, que desee activar cuando se produzca un evento de sincronización. 5. Haga clic en Save Changes. Ahora, su función Lambda se ejecutará cada vez que se sincronice un conjunto de datos. En la sección siguiente se explica cómo puede leer y modificar los datos de su función mientras se están sincronizando. Escritura de una función Lambda para los disparadores de sincronización Los disparadores de sincronización respetan el paradigma de programación de la interfaz del proveedor de servicios. Amazon Cognito proporcionará los datos de entrada con el formato JSON siguiente a la función Lambda. {
"version": 2, "eventType": "SyncTrigger", "region": "us-east-1", "identityPoolId": "identityPoolId", "identityId": "identityId", "datasetName": "datasetName", "datasetRecords": { "SampleKey1": {
302
Amazon Cognito Guía para desarrolladores Eventos de Amazon Cognito "oldValue": "oldValue1", "newValue": "newValue1", "op": "replace"
}
}
}, "SampleKey2": { "oldValue": "oldValue2", "newValue": "newValue2", "op": "replace" },..
Amazon Cognito espera que el valor de retorno de la función tenga el mismo formato que el de la entrada. A continuación, se proporciona un ejemplo detallado. A continuación, indicamos algunos puntos clave que deben tenerse en cuenta al escribir funciones para el evento de desencadenamiento de sincronización Sync Trigger: • Cuando se invoca la función Lambda durante una operación UpdateRecords, dicha función debe responder en el plazo máximo de 5 segundos. Si no lo hace, el servicio de sincronización de Amazon Cognito arroja una excepción LambdaSocketTimeoutException. El valor de este tiempo de espera no se puede aumentar. • Si recibe una excepción LambdaThrottledException, debe volver a intentar la operación de sincronización (actualizar registros). • Amazon Cognito proporciona todos los registros presentes en el conjunto de datos como información de entrada para la función. • Los registros actualizados por el usuario de la aplicación tendrán configurado el campo "op" como "replace" y los registros eliminados tendrán el campo 'op' definido como "remove". • Puede modificar cualquier registro, aunque el usuario de la aplicación no lo actualice. • Todos los campos, salvo datasetRecords, son de solo lectura y no deben cambiarse. Si cambia estos campos se producirá un error de actualización de los registros. • Para modificar el valor de un registro, solo tiene que actualizar el valor y definir "op" como "replace". • Para eliminar un registro, establezca "op" en "remove" o defina un valor nulo. • Para añadir un registro, solo tiene que añadir un registro nuevo en la matriz datasetRecords. • Todos los registros que se hayan omitido en la respuesta no se tendrán en cuenta para la actualización. Ejemplo de función Lambda A continuación, se muestra un ejemplo de función Lambda que muestra como obtener acceso a los datos, modificarlos o eliminarlos. console.log('Loading function'); exports.handler = function(event, context) { console.log(JSON.stringify(event, null, 2)); //Check for the event type if (event.eventType === 'SyncTrigger') { //Modify value for a key if('SampleKey1' in event.datasetRecords){ event.datasetRecords.SampleKey1.newValue = 'ModifyValue1'; event.datasetRecords.SampleKey1.op = 'replace'; } //Remove a key if('SampleKey2' in event.datasetRecords){ event.datasetRecords.SampleKey2.op = 'remove';
303
Amazon Cognito Guía para desarrolladores Eventos de Amazon Cognito } //Add a key if(!('SampleKey3' in event.datasetRecords)){ event.datasetRecords.SampleKey3={'newValue':'ModifyValue3', 'op' : 'replace'}; }
};
} context.done(null, event);
304
Amazon Cognito Guía para desarrolladores Protección de los datos
Seguridad en Amazon Cognito La seguridad en la nube de AWS es la mayor prioridad. Como cliente de AWS, se beneficiará de una arquitectura de red y un centro de datos diseñados para satisfacer los requisitos de seguridad de las organizaciones más exigentes. La seguridad es una responsabilidad compartida entre AWS y usted. El modelo de responsabilidad compartida la describe como seguridad de la nube y seguridad en la nube: • Seguridad de la nube – AWS es responsable de proteger la infraestructura que ejecuta servicios de AWS en la nube de AWS. AWS también proporciona servicios que puede utilizar de forma segura. Los auditores externos prueban y verifican periódicamente la eficacia de nuestra seguridad como parte de los Programas de conformidad de AWS . Para obtener información sobre los programas de conformidad que se aplican a Amazon Cognito, consulte Servicios de AWS en el ámbito del programa de conformidad. • Seguridad en la nube – su responsabilidad viene determinada por el servicio de AWS que utilice. También es responsable de otros factores, incluida la confidencialidad de los datos, los requisitos de la empresa y la legislación y los reglamentos aplicables. Esta documentación le ayudará a conocer cómo puede aplicar el modelo de responsabilidad compartida cuando se utiliza Amazon Cognito. Muestra cómo configurar Amazon Cognito para cumplir los objetivos de seguridad y conformidad. También puede aprender a utilizar otros servicios de AWS que le ayudan a monitorizar y proteger los recursos de Amazon Cognito. Contenido • Protección de datos en Amazon Cognito (p. 305) • Administrar identidades y accesos en Grupos de usuarios de Amazon Cognito (p. 306) • Inicio de sesión y monitorización en Amazon Cognito (p. 319) • Validación de la conformidad para Amazon Cognito (p. 331) • Resiliencia en Amazon Cognito (p. 331) • Seguridad de la infraestructura en Amazon Cognito (p. 332) • Configuración y análisis de vulnerabilidades en Grupos de usuarios de Amazon Cognito (p. 333) • Prácticas recomendadas de seguridad para Grupos de usuarios de Amazon Cognito (p. 333)
Protección de datos en Amazon Cognito El modelo de responsabilidad compartida de AWS se aplica a la protección de datos en Amazon Cognito (Amazon Cognito). Como se describe en este modelo, AWS es responsable de proteger la infraestructura global que ejecuta toda la nube de AWS. Usted es responsable de mantener el control sobre el contenido alojado en esta infraestructura. Este contenido incluye la configuración de seguridad y las tareas de administración de los servicios de AWS que utiliza. Para obtener más información acerca de la privacidad de datos, consulte las Preguntas frecuentes sobre privacidad de datos. Para fines de protección de datos, recomendamos proteger las credenciales de cuenta de AWS y configurar cuentas de usuario individuales con AWS Identity and Access Management (IAM). De esta manera,solo se otorgan a cada usuario los permisos necesarios para cumplir con sus obligaciones laborales. También le recomendamos proteger sus datos de las siguientes formas: • Utilice la autenticación multifactor (MFA) con cada cuenta. • Utilice SSL/TLS para comunicarse con los recursos de AWS.
305
Amazon Cognito Guía para desarrolladores Cifrado de datos
• Configure la API y el registro de actividad del usuario con AWS CloudTrail. • Utilice las soluciones de cifrado de AWS, junto con todos los controles de seguridad predeterminados dentro de los servicios de AWS. • Utilice los servicios de seguridad administrados avanzados como, por ejemplo, Amazon Macie, que ayudan a detectar y proteger los datos personales almacenados en Amazon S3. Le recomendamos encarecidamente que nunca introduzca información de identificación confidencial, como, por ejemplo, números de cuenta de sus clientes, en los campos de formato libre, como el campo Name (Nombre). No debe introducir esta información cuando trabaje con Amazon Cognito u otros servicios de AWS a través de la consola, la API, la AWS CLI de AWS o los SDK de AWS. Cualquier dato que escriba en Amazon Cognito o en otros servicios se puede incluir en los registros de diagnóstico. Cuando proporcione una URL a un servidor externo, no incluya información de credenciales en la URL para validar la solicitud para ese servidor.
Cifrado de datos El cifrado de datos normalmente se divide en dos categorías: el cifrado en reposo y el cifrado en tránsito. Cifrado en reposo Los datos contenidos en Amazon Cognito se cifran en reposo de acuerdo con los estándares del sector. Cifrado en tránsito Todas las solicitudes a Amazon Cognito deben realizarse a través del protocolo Transport Layer Security (TLS). Los clientes deben ser compatibles con Transport Layer Security (TLS) 1.0 o una versión posterior. Le recomendamos TLS 1.2 o una versión posterior. Los clientes también deben ser compatibles con conjuntos de cifrado con confidencialidad directa total (PFS) tales como Ephemeral Diffie-Hellman (DHE) o Elliptic Curve Ephemeral Diffie-Hellman (ECDHE). La mayoría de los sistemas modernos como Java 7 y posteriores son compatibles con estos modos.
Note Amazon Cognito cifra el contenido del cliente internamente y no admite las claves proporcionadas por el cliente.
Administrar identidades y accesos en Grupos de usuarios de Amazon Cognito En esta sección, se aborda la cuestión de la restricción del acceso a los recursos de Amazon Cognito mediante AWS Identity and Access Management (IAM). Para obtener más información sobre el uso de grupos de identidades junto con conjuntos de grupos de usuarios para controlar el acceso a los recursos de AWS, consulte Agregar grupos a un grupo de usuarios (p. 136) y Control de acceso basado en roles (p. 221). Consulte Conceptos de grupos de identidades (identidades federadas) (p. 206) para obtener más información sobre los grupos de identidades e IAM.
Nombres de recursos de Amazon (ARN) ARN para las identidades federadas de Amazon Cognito En los grupos de identidades de Amazon Cognito (identidades federadas), es posible restringir el acceso de un usuario de IAM a un grupo de identidades específico, utilizando el formato de nombre de recurso de Amazon (ARN), como se muestra en el ejemplo siguiente. Para obtener más información sobre los ARN, consulte Identificadores de IAM.
306
Amazon Cognito Guía para desarrolladores Ejemplos de políticas
arn:aws:cognito-identity:REGION:ACCOUNT_ID:identitypool/IDENTITY_POOL_ID
ARN para Amazon Cognito Sync En Amazon Cognito Sync, los clientes también pueden restringir el acceso en función del ID del grupo de identidades, el ID de identidad y el nombre del conjunto de datos. En el caso de las API que operan en un grupo de identidades, el formato ARN del grupo de identidades coincide con el de las identidades federadas de Amazon Cognito, salvo por el hecho de que el nombre del servicio es cognito-sync en lugar de cognito-identity: arn:aws:cognito-sync:REGION:ACCOUNT_ID:identitypool/IDENTITY_POOL_ID
En cuanto a las API que operan en una única identidad como, por ejemplo, RegisterDevice, puede consultar la identidad individual aplicando el formato de ARN siguiente: arn:aws:cognito-sync:REGION:ACCOUNT_ID:identitypool/IDENTITY_POOL_ID/identity/IDENTITY_ID
En el caso de las API que operan en conjuntos de datos como, por ejemplo, UpdateRecords y ListRecordspuede consultar el conjunto de datos individuales usando el siguiente formato de ARN: arn:aws:cognito-sync:REGION:ACCOUNT_ID:identitypool/IDENTITY_POOL_ID/identity/IDENTITY_ID/ dataset/DATASET_NAME
ARN para la característica Sus grupos de usuarios de Amazon Cognito En el caso de la característica Sus grupos de usuarios de Amazon Cognito, se puede restringir el acceso de un usuario de IAM a un grupo de usuarios concreto, usando el formato de ARN siguiente: arn:aws:cognito-idp:REGION:ACCOUNT_ID:userpool/USER_POOL_ID
Ejemplos de políticas Restricción del acceso a la consola a un grupo de identidades concreto {
"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cognito-identity:ListIdentityPools" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "cognito-identity:*" ], "Resource": "arn:aws:cognito-identity:us-east-1:0123456789:identitypool/useast-1:1a1a1a1a-ffff-1111-9999-12345678" }, { "Effect": "Allow", "Action": [ "cognito-sync:*"
307
Amazon Cognito Guía para desarrolladores Políticas administradas ], "Resource": "arn:aws:cognito-sync:us-east-1:0123456789:identitypool/useast-1:1a1a1a1a-ffff-1111-9999-12345678" } ] }
Autorización del acceso a un conjunto de datos concreto para todas las identidades de un grupo {
"Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cognito-sync:ListRecords", "cognito-sync:UpdateRecords" ], "Resource": "arn:aws:cognito-sync:us-east-1:0123456789:identitypool/useast-1:1a1a1a1a-ffff-1111-9999-12345678/identity/*/dataset/UserProfile" } ] }
Políticas administradas Varias políticas permiten a los clientes autorizar el acceso a Amazon Cognito a través de la consola de IAM: • AmazonCognitoPowerUser - Permisos para tener acceso a todos los aspectos de los grupos de identidades y para administrarlos. • AmazonCognitoReadOnly - Permisos de acceso de solo lectura a los grupos de identidades. • AmazonCognitoDeveloperAuthenticatedIdentities - Permisos para que su sistema de autenticación se integre en Amazon Cognito. El equipo de Amazon Cognito mantiene estas políticas, por lo que si se añaden API nuevas, los usuarios de IAM seguirán teniendo el mismo nivel de acceso.
Note Como la creación de un grupo de identidades nuevo también requiere la creación de roles de IAM, también debe aplicar la política de administración a todos los usuarios de IAM a los que desee autorizar a crear grupos de identidades.
API firmadas y sin firmar Las API que se firman con las credenciales de AWS puedan restringirse mediante una política de IAM. Las API de Cognito siguientes no tienen firma y, por lo tanto, no pueden restringirse mediante una política de IAM:
Amazon Cognito Federated Identities • GetId • GetOpenIdToken • GetCredentialsForIdentity • UnlinkIdentity 308
Amazon Cognito Guía para desarrolladores Uso de roles vinculados a servicios
Amazon Cognito Your User Pools • ChangePassword • ConfirmDevice • ConfirmForgotPassword • ConfirmSignUp • DeleteUser • DeleteUserAttributes • ForgetDevice • ForgotPassword • GetDevice • GetUser • GetUserAttributeVerificationCode • GlobalSignOut • InitiateAuth • ListDevices • ResendConfirmationCode • RespondToAuthChallenge • SetUserSettings • SignUp • UpdateDeviceStatus • UpdateUserAttributes • VerifyUserAttribute Contenido • Uso de roles vinculados a servicios en Amazon Cognito (p. 309) • Autenticación con un grupo de usuarios (p. 312)
Uso de roles vinculados a servicios en Amazon Cognito Amazon Cognito usa AWS Identity and Access Management (IAM) roles vinculados a servicios. Un rol vinculado a un servicio es un tipo único de rol de IAM que está vinculado directamente a Amazon Cognito. Las funciones vinculadas a servicios están predefinidas por Amazon Cognito e incluyen todos los permisos que el servicio requiere para llamar a otros servicios de AWS en su nombre. Con una función vinculada a servicios, resulta más sencillo configurar Amazon Cognito, porque no es preciso agregar los permisos necesarios manualmente. Amazon Cognito define los permisos de las funciones vinculadas con su propio servicio y, a menos que esté definido de otra manera, solo Amazon Cognito puede asumir sus funciones. Los permisos definidos incluyen las políticas de confianza y de permisos, y que la política de permisos no se pueda asociar a ninguna otra entidad de IAM. Solo puede eliminar una función vinculada a un servicio después de eliminar sus recursos relacionados. De esta forma, se protegen los recursos de Amazon Cognito, ya que se evita que se puedan eliminar accidentalmente permisos de acceso a los recursos. Para obtener información sobre otros servicios que admiten roles vinculados a servicios, consulte Servicios de AWS que funcionan con IAM y busque los servicios que tienen Sí en la columna Rol vinculado a servicio. Seleccione una opción Sí con un enlace para ver la documentación acerca del rol vinculado al servicio en cuestión.
309
Amazon Cognito Guía para desarrolladores Uso de roles vinculados a servicios
Permisos de roles vinculados a servicios para Amazon Cognito Amazon Cognito utiliza los siguientes roles vinculados a servicios: • AmazonCognitoIdpEmailService – Allows Amazon Cognito user pools service to use your Amazon SES identities for sending email. • AmazonCognitoIdp – Allows Amazon Cognito user pools to publish events and configure endpoints for your Amazon Pinpoint projects. La función vinculada al servicio AmazonCognitoIdpEmailService confía en los siguientes servicios para asumir la función: • email.cognito-idp.amazonaws.com La política de permisos del rol permite que Amazon Cognito realice las siguientes acciones en los recursos especificados:
Acciones permitidas para AmazonCognitoidpEmailService • Acción: ses:SendEmail and ses:SendRawEmail • Recurso: * La política deniega a Amazon Cognito la capacidad para realizar las siguientes acciones en los recursos especificados:
Acciones denegadas • Acción: ses:List* • Recurso: * Con estos permisos, Amazon Cognito puede utilizar sus direcciones de correo electrónico verificadas en Amazon SES solo para enviar un correo electrónico a sus usuarios. Amazon Cognito envía un correo electrónico a sus usuarios cuando realizan ciertas acciones en la aplicación cliente para un grupo de usuarios, como registrarse o restablecer una contraseña. Debe configurar permisos para permitir a una entidad de IAM (como un usuario, grupo o función) crear, editar o eliminar la descripción de una función vinculada a un servicio. Para obtener más información, consulte Permisos de roles vinculados a servicios en la Guía del usuario de IAM. AmazonCognitoIdp La función vinculada al servicio AmazonCognitoIdp confía en los siguientes servicios para asumir la función: • email.cognito-idp.amazonaws.com La política de permisos del rol permite que Amazon Cognito realice las siguientes acciones en los recursos especificados:
Acciones permitidas para AmazonCognitoIdp • Acción: cognito-idp:Describe 310
Amazon Cognito Guía para desarrolladores Uso de roles vinculados a servicios
• Recurso: * Con este permiso, Amazon Cognito puede llamar automáticamente a las operaciones de la API de Describe Amazon Cognito.
Note Cuando se integra Amazon Cognito con Amazon Pinpoint utilizando createUserPoolClient y updateUserPoolClient, los permisos de recursos se agregarán al SLR como una política insertada. La política insertada proporcionará mobiletargeting:UpdateEndpoint los permisos mobiletargeting:PutEvents y . Estos permisos permiten Amazon Cognito a publicar eventos y configurar puntos de enlace para proyectos de Pinpoint que se integran con Cognito.
Creación de un rol vinculado al servicio para Amazon Cognito No necesita crear manualmente un rol vinculado a un servicio. Al realizar una operación de configure a user pool to use your Amazon SES configuration to handle email delivery en la Consola de administración de AWS, la AWS CLI o la API de Amazon Cognito, Amazon Cognito se encarga de crear automáticamente el rol vinculado al servicio. Si elimina este rol vinculado a servicio y necesita crearlo de nuevo, puede utilizar el mismo proceso para volver a crear el rol en su cuenta. Al realizar una operación de configure a user pool to use your Amazon SES configuration to handle email delivery, Amazon Cognito se encarga de volver crear automáticamente el rol vinculado al servicio. Para que Amazon Cognito pueda crear este rol, los permisos de IAM que utilice para configurar su grupo de usuarios deben incluir la acción iam:CreateServiceLinkedRole. Para obtener más información acerca de la actualización de permisos en IAM, consulte Cambio de los permisos de un usuario de IAM en la Guía del usuario de IAM.
Edición de un rol vinculado a un servicio para Amazon Cognito Amazon Cognito no le permite editar los roles AmazonCognitoIdpEmailService vinculados a servicios AmazonCognitoIdpEmailService o . Después de crear un rol vinculado a un servicio, no puede cambiarle el nombre, ya que varias entidades pueden hacer referencia a él. Sin embargo, puede editar la descripción de la función utilizando IAM. Para obtener más información, consulte Editar un rol vinculado a un servicio en la Guía del usuario de IAM.
Eliminación de un rol vinculado a un servicio para Amazon Cognito Si ya no necesita utilizar una característica o servicio que requiere un rol vinculado a un servicio, le recomendamos que elimine dicho rol. De esta forma no tiene una entidad no utilizada que no se monitorice ni mantenga de forma activa. Para poder eliminar o roles AmazonCognitoIdpEmailService AmazonCognitoIdpEmailService vinculados a servicios, debe realizar una de las siguientes acciones para cada grupo de usuarios que utilice el rol: • Eliminar el grupo de usuarios. • Actualizar la configuración de correo electrónico en el grupo de usuarios para utilizar la funcionalidad de correo electrónico predeterminada. La configuración predeterminada no utiliza el rol vinculado al servicio. Recuerde realizar estas acciones en cada región de AWS que contenga un grupo de usuarios que utilice el rol.
311
Amazon Cognito Guía para desarrolladores Autenticación
Note Si el servicio Amazon Cognito está utilizando el rol cuando intenta eliminar los recursos, la eliminación podría producir un error. En tal caso, espere unos minutos e intente de nuevo la operación.
Para eliminar grupo de usuarios de Amazon Cognito 1.
Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon Cognito en https:// console.aws.amazon.com/cognito.
2.
Elija Manage User Pools (Administrar grupos de usuarios).
3.
En la página Your User Pools (Sus grupos de usuarios), seleccione el grupo de usuarios que desee eliminar.
4.
Elija Delete pool (Eliminar grupo).
5.
En la ventana Delete user pool (Eliminar grupo de usuarios), escriba delete y elija Delete pool (Eliminar grupo).
Para actualizar un grupo de usuarios de Amazon Cognito para utilizar la funcionalidad de correo electrónico predeterminada 1.
Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon Cognito en https:// console.aws.amazon.com/cognito.
2.
Elija Manage User Pools (Administrar grupos de usuarios).
3.
En la página Your User Pools (Sus grupos de usuarios), seleccione el grupo de usuarios que desee actualizar.
4.
En el menú de navegación de la izquierda, elija Message customizations (Personalizaciones de mensajes).
5.
En Do you want to send emails through your Amazon SES Configuration? (¿Desea enviar correos electrónicos a través de su configuración de Amazon SES?), elija No - Use Cognito (Default) (No Usar Cognito [Predeterminado]).
6.
Cuando termine de configurar las opciones de su cuenta de correo electrónico, seleccione Save changes (Guardar modificaciones).
Para eliminar manualmente el rol vinculado al servicio mediante IAM Utilice la IAM consola de AWS CLI, la o la AWS API de para eliminar roles AmazonCognitoIdpEmailService vinculados a servicios AmazonCognitoIdpEmailService o . Para obtener más información, consulte Eliminar un rol vinculado a un servicio en la Guía del usuario de IAM.
Regiones admitidas para los roles vinculados a servicios de Amazon Cognito Amazon Cognito admite el uso de roles vinculados a servicios en todas las regiones en las que el servicio está disponible. Para obtener más información, consulte AWS Regions and Endpoints.
Autenticación con un grupo de usuarios Los usuarios de la aplicación pueden iniciar sesión directamente a través de un grupo de usuarios o pueden federarse a través de un proveedor de identidades (IdP) externo. El grupo de usuarios administra la sobrecarga que conlleva el tratamiento de los tokens que se devuelven desde el inicio de sesión de redes sociales mediante Facebook, Google, Amazon y Apple, así como de los IdP de OpenID Connect (OIDC) y SAML.
312
Amazon Cognito Guía para desarrolladores Autenticación
Después de una autenticación correcta, Amazon Cognito devuelve tokens de grupos de usuarios a la aplicación. Puede utilizar los tokens para conceder a los usuarios acceso a los recursos del lado del servidor que le pertenecen o a Amazon API Gateway. O bien, puede intercambiarlos por credenciales de AWS para obtener acceso a otros servicios de AWS.
La gestión y administración de los tokens de grupos de usuarios para la aplicación web o móvil se realiza en el lado del cliente por medio de los SDK de Amazon Cognito. Del mismo modo, el Mobile SDK for iOS y el SDK de Mobile para Android actualizan automáticamente los tokens de ID y de acceso si existe un token de actualización válido (no caducado) y los tokens de ID y de acceso tienen un mínimo de validez restante de 5 minutos. Para obtener información sobre los SDK y código de muestra para JavaScript, Android e iOS, consulte SDK de grupos de usuarios de Amazon Cognito. Una vez que el usuario de la aplicación haya iniciado sesión correctamente, Amazon Cognito crea una sesión y devuelve un token de ID, acceso y actualización para el usuario autenticado. JavaScript // Amazon Cognito creates a session which includes the id, access, and refresh tokens of an authenticated user. var authenticationData = { Username : 'username', Password : 'password', }; var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData); var poolData = { UserPoolId : 'us-east-1_ExaMPle', ClientId : '1example23456789' }; var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData); var userData = { Username : 'username', Pool : userPool }; var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData); cognitoUser.authenticateUser(authenticationDetails, { onSuccess: function (result) { var accessToken = result.getAccessToken().getJwtToken(); /* Use the idToken for Logins Map when Federating User Pools with identity pools or when passing through an Authorization Header to an API Gateway Authorizer */ var idToken = result.idToken.jwtToken; }, onFailure: function(err) { alert(err); }, });
Android // Session is an object of the type CognitoUserSession, and includes the id, access, and refresh tokens for a user. String idToken = session.getIdToken().getJWTToken();
313
Amazon Cognito Guía para desarrolladores Autenticación String accessToken = session.getAccessToken().getJWT();
iOS - Swift // AWSCognitoIdentityUserSession includes id, access, and refresh tokens for a user. - (AWSTask *)getSession;
iOS - Objective-C // AWSCognitoIdentityUserSession includes the id, access, and refresh tokens for a user. [[user getSession:@"username" password:@"password" validationData:nil scopes:nil] continueWithSuccessBlock:^id _Nullable(AWSTask * _Nonnull task) { // success, task.result has user session return nil; }];
Temas • Flujo de autenticación de los grupos de usuarios (p. 314)
Flujo de autenticación de los grupos de usuarios Los flujos de autenticación modernos incorporan nuevos tipos de desafíos, además de una contraseña, para comprobar la identidad de los usuarios. Generalizamos la autenticación en dos pasos comunes, que se implementan a través de dos operaciones de API: InitiateAuth y RespondToAuthChallenge. Un usuario se autentica respondiendo a desafíos sucesivos hasta que se produce un error de autenticación o se emiten tokens para el usuario. Con estos dos pasos, que se pueden repetir para incluir distintos desafíos, es posible implementar cualquier flujo de autenticación personalizado.
Puede personalizar el flujo de autenticación con disparadores de AWS Lambda. Estos disparadores emiten y verifican sus propios desafíos durante el flujo de autenticación.
314
Amazon Cognito Guía para desarrolladores Autenticación
También puede utilizar el flujo de autenticación de administrador para su uso en servidores backend seguros. También es posible utilizar el flujo de autenticación de migración de usuarios para permitir la migración de usuarios sin necesidad de que estos restablezcan sus contraseñas.
Note Permitimos cinco intentos fallidos de inicio de sesión. Después de esto, realizamos bloqueos temporales con incrementos de tiempo exponenciales empezando por 1 segundo y duplicándolos tras cada intento fallido hasta un máximo de 15 minutos. Los intentos durante un período de bloqueo temporal se ignoran. Después del período de bloqueo temporal, si el siguiente intento falla, comenzará un nuevo bloqueo temporal con el doble de duración que el último. Tras 15 minutos sin intentos, también se restablecerá el bloqueo temporal. Tenga en cuenta que este comportamiento está sujeto a cambios. Temas • Flujo de autenticación en el lado del cliente (p. 315) • Flujo de autenticación en el lado del servidor (p. 315) • Flujo de autenticación personalizado (p. 316) • Flujo de autenticación integrado y desafíos (p. 316) • Flujo de autenticación personalizado y desafíos (p. 317) • Usar la verificación de contraseña de SRP en el flujo de autenticación personalizado (p. 317) • Flujo de autenticación de administrador (p. 318) • Flujo de autenticación de migración de usuarios (p. 318)
Flujo de autenticación en el lado del cliente Así es como funciona la autenticación de grupos de usuarios para las aplicaciones de usuario final del lado del cliente creadas con el SDK de AWS Mobile para Android, el AWS Mobile SDK for iOS o el SDK de AWS para JavaScript: 1. El usuario introduce su nombre de usuario y contraseña en la aplicación. 2. La aplicación llama a la operación InitiateAuth con el nombre de usuario del usuario y los detalles de SRP. Este método devuelve los parámetros de autenticación.
Note La aplicación genera los detalles de SRP mediante la compatibilidad con SRP de Amazon Cognito en los SDK de Android, iOS y JavaScript. 3. La aplicación llama a la operación RespondToAuthChallenge. Si la llamada se realiza correctamente, devuelve los tokens del usuario y el flujo de autenticación finaliza. Si es necesario otro desafío, no se devuelve ningún token. En su lugar, la llamada a RespondToAuthChallenge devuelve una sesión. 4. Si RespondToAuthChallenge devuelve una sesión, la aplicación llama de nuevo a RespondToAuthChallenge, esta vez con la sesión y la respuesta al desafío (por ejemplo, código de MFA).
Flujo de autenticación en el lado del servidor Si no dispone de una aplicación de usuario final, sino que está utilizando una aplicación segura del backend o del lado del servidor en Java, Ruby o Node.js, puede utilizar la API de autenticación del lado del servidor para los grupos de usuarios de Amazon Cognito. 315
Amazon Cognito Guía para desarrolladores Autenticación
En el caso de las aplicaciones del lado del servidor, la autenticación de grupos de usuarios es similar a la de las aplicaciones del lado del cliente, excepto en el siguiente caso: • La aplicación del lado del servidor llama a la operación de API AdminInitiateAuth (en lugar de InitiateAuth). Esta operación requiere credenciales de administrador de AWS. Esta operación devuelve los parámetros de autenticación. • Una vez que tiene los parámetros de autenticación, la aplicación llama a la operación de API AdminRespondToAuthChallenge (en lugar de RespondToAuthChallenge), que también requiere credenciales de administrador de AWS. Las operaciones AdminInitiateAuth y AdminRespondToAuthChallenge no pueden aceptar credenciales de usuario consistentes en un nombre de usuario y una contraseña para el inicio de sesión del administrador, a menos que se les permita hacerlo de forma explícita mediante uno de estos métodos: • Pase ADMIN_USER_PASSWORD_AUTH (anteriormente ADMIN_NO_SRP_AUTH) para el parámetro ExplicitAuthFlow de la llamada de la aplicación del lado del servidor a CreateUserPoolClient o UpdateUserPoolClient. • Elija Enable sign-in API for server-based authentication (ADMIN_USER_PASSWORD_AUTH) en la pestaña App clients (Clientes de la aplicación) en Create a user pool (Crear un grupo de usuarios). Para obtener más información, consulte Configuración de un cliente de aplicación del grupo de usuarios (p. 185).
Flujo de autenticación personalizado Los grupos de usuarios de Amazon Cognito también habilitan los flujos de autenticación personalizados, que pueden ayudarle a crear un modelo de autenticación de tipo desafío/respuesta mediante disparadores de AWS Lambda. El flujo de autenticación personalizado está diseñado para permitir una serie de ciclos de desafíos y respuestas que se pueden personalizar para atender necesidades diferentes. El flujo comienza con una llamada a la operación de API InitiateAuth, que indica el tipo de autenticación que se utilizará y proporciona todos los parámetros de autenticación iniciales. Amazon Cognito responderá a la llamada InitiateAuth con una de los siguientes opciones: • Un desafío al usuario junto con una sesión y parámetros. • Un error si el usuario no se autentica correctamente. • ID, acceso y tokens de actualización, si los parámetros proporcionados en la llamada InitiateAuth son suficientes para que el usuario inicie sesión. (Normalmente, un desafío debe ser respondido primero, pero su código personalizado debe decidir esto). Si Amazon Cognito responde a la llamada InitiateAuth con un desafío, la aplicación reúne más entradas y llama a la operación RespondToAuthChallenge, proporcionando las respuestas al desafío y transfiriendo la sesión. Amazon Cognito responde a la llamada RespondToAuthChallenge de manera similar a la llamada InitiateAuth, proporcionando tokens si el usuario ha iniciado sesión, otro desafío o un error. Si devuelve otro desafío, la secuencia se repite: la aplicación llama a RespondToAuthChallenge hasta que el usuario inicia sesión o se devuelve un error. Encontrará más información en la documentación de las operaciones de API InitiateAuth y RespondToAuthChallenge.
Flujo de autenticación integrado y desafíos Amazon Cognito tiene algunos valores de AuthFlow y ChallengeName integrados para un flujo de autenticación estándar que valide el nombre de usuario y la contraseña mediante el protocolo Secure Remote Password (SRP). Este flujo está integrado en los SDK para iOS, Android y JavaScript para Amazon Cognito. A grandes rasgos, el flujo se inicia enviando USER_SRP_AUTH como AuthFlow 316
Amazon Cognito Guía para desarrolladores Autenticación
para InitiateAuth junto con los valores USERNAME y SRP_A en AuthParameters. Si la llamada InitiateAuth tiene éxito, la respuesta incluye el ChallengeName PASSWORD_VERIFIER y SRP_B en los parámetros del desafío. La aplicación llamará a continuación a RespondToAuthChallenge con el ChallengeName PASSWORD_VERIFIER y los parámetros necesarios en ChallengeResponses. Si la llamada a RespondToAuthChallenge se realiza correctamente y el usuario inicia sesión, se devuelven los tokens. Si la opción de autenticación multifactor (MFA) está activada para el usuario, se devuelve el ChallengeName de SMS_MFA y la aplicación puede proporcionar el código necesario mediante otra llamada a RespondToAuthChallenge.
Flujo de autenticación personalizado y desafíos Una aplicación puede iniciar un flujo de autenticación personalizado llamando a InitiateAuth con CUSTOM_AUTH como Authflow. En el caso de un flujo de autenticación personalizado, los desafíos y la verificación de las respuestas se controlan mediante tres disparadores de AWS Lambda. • El disparador de Lambda DefineAuthChallenge toma como entrada una serie de sesiones de desafíos y respuestas anteriores. Luego genera los siguientes nombres de desafíos y valores booleanos que indican si el usuario está autenticado (y se deben otorgar tokens) o no. Este disparador de Lambda es una máquina de estado que controla la ruta que sigue el usuario en los diferentes desafíos. • El disparador de Lambda CreateAuthChallenge toma un nombre de desafío como entrada y genera el desafío y los parámetros para evaluar la respuesta. Se llama a CreateAuthChallenge cuando DefineAuthChallenge devuelve CUSTOM_CHALLENGE como el siguiente desafío, y se pasa el siguiente tipo de desafío en el parámetro de metadatos del desafío. • La función VerifyAuthChallengeResponse de Lambda evalúa la respuesta y devuelve un valor booleano para indicar si la respuesta ha sido válida. Un flujo de autenticación personalizado también puede usar una combinación de desafíos integrados, como la verificación de contraseñas SRP y MFA mediante SMS. Puede usar desafíos personalizados como CAPTCHA o preguntas secretas.
Usar la verificación de contraseña de SRP en el flujo de autenticación personalizado Si desea incluir SRP en un flujo de autenticación personalizado, debe empezar por él. • Para iniciar la verificación por contraseña de SRP en un flujo personalizado, la aplicación llama a InitiateAuth con CUSTOM_AUTH como Authflow. Incluye SRP_A: (el valor de SRP A) y CHALLENGE_NAME: SRP_A en el mapa AuthParameters. • El disparador de Lambda DefineAuthChallenge se invoca con una sesión inicial de challengeName: SRP_A y challengeResult: true y debe responder con challengeName: PASSWORD_VERIFIER, issueTokens: false, y failAuthentication: false. • La aplicación a continuación debe llamar a RespondToAuthChallenge con challengeName: PASSWORD_VERIFIER y los demás parámetros necesarios para SRP en el mapa challengeResponses. • Si se verifica la contraseña, se invoca el disparador de Lambda DefineAuthChallenge con una segunda sesión de challengeName: PASSWORD_VERIFIER y challengeResult: true. En ese momento, el disparador de Lambda DefineAuthChallenge puede responder con challengeName: CUSTOM_CHALLENGE para iniciar el desafío personalizado. • Si la MFA está habilitada para un usuario, se controla automáticamente después de verificar la contraseña.
Note La página web de inicio de sesión alojada en Amazon Cognito no admite el flujo de autenticación personalizado.
317
Amazon Cognito Guía para desarrolladores Autenticación
Para obtener más información acerca de los disparadores de Lambda, incluido el código de muestra, consulte Personalizar flujos de trabajo de grupos de usuarios con disparadores de Lambda (p. 72).
Note La página web de inicio de sesión alojada en Amazon Cognito no admite el flujo de autenticación personalizado.
Flujo de autenticación de administrador Las operaciones de API descritas en Flujo de autenticación personalizado (p. 316) con el uso de SRP para la verificación de contraseña constituyen el procedimiento recomendado para la autenticación. Los SDK para iOS, Android y JavaScript se basan en este enfoque y facilitan el uso de SRP. Sin embargo, existe un conjunto alternativo de operaciones de API de administración que se usa en servidores backend seguros para evitar los cálculos de SRP. Para estas implementaciones de administración de backend, se usa AdminInitiateAuth en lugar de InitiateAuth, y se usa AdminRespondToAuthChallenge en lugar de RespondToAuthChallenge. Cuando se usan estas operaciones, la contraseña se puede proporcionar como texto sin formato para que no se tengan que realizar cálculos de SRP. A continuación se muestra un ejemplo: AdminInitiateAuth Request { "AuthFlow":"ADMIN_USER_PASSWORD_AUTH", "AuthParameters":{ "USERNAME":"", "PASSWORD":"" }, "ClientId":"", "UserPoolId":"" }
Estas operaciones de autenticación de administración requieren credenciales de desarrollador y el uso del proceso de firma de AWS Signature Version 4 (SigV4). Las operaciones están disponibles en los SDK de AWS estándar que incluyen Node.js, lo que es de gran utilidad para las funciones de Lambda. Para poder utilizar estas operaciones y hacer que acepten contraseñas como texto sin formato, debe habilitarlas para la aplicación en la consola. Alternativamente, puede pasar ADMIN_USER_PASSWORD_AUTH en el parámetro ExplicitAuthFlow en llamadas a CreateUserPoolClient o UpdateUserPoolClient. No se acepta ADMIN_USER_PASSWORD_AUTH AuthFlow en las operaciones InitiateAuth y RespondToAuthChallenge. En la respuesta AdminInitiateAuth de ChallengeParameters, el atributo USER_ID_FOR_SRP, si existe, contendrá el verdadero nombre de usuario del usuario y no su alias (como la dirección de correo electrónico o un número de teléfono). En su llamada a AdminRespondToAuthChallenge, en ChallengeResponses, debe pasar este nombre de usuario en el parámetro USERNAME.
Note Dado que está diseñado para las implementaciones de administración de backend, el flujo de autenticación de administración no es compatible con el rastreo de dispositivos. Cuando la autenticación de dispositivos está habilitada, la autenticación de administración se realiza correctamente, pero todas las llamadas de actualización del token de acceso fallan.
Flujo de autenticación de migración de usuarios Un disparador de Lambda para la migración de usuarios facilita la migración de usuarios desde un sistema de administración de usuarios heredado a un grupo de usuarios. Para evitar que los usuarios restablezcan sus contraseñas durante la migración de usuarios, elija el flujo de autenticación USER_PASSWORD_AUTH. Durante la autenticación, este flujo envía las contraseñas de los usuarios al servicio a través de una conexión SSL cifrada. Cuando haya completado la migración de todos sus usuarios, le recomendamos cambiar los flujos al flujo SRP, ya que es más seguro. El flujo SRP no envía ninguna contraseña a través de la red.
318
Amazon Cognito Guía para desarrolladores Registro y monitorización
Para obtener más información sobre los disparadores de Lambda, consulte Personalizar flujos de trabajo de grupos de usuarios con disparadores de Lambda (p. 72). Para obtener más información sobre cómo migrar usuarios con un disparador de Lambda, consulte Importación de usuarios en grupos de usuarios con un disparador de Lambda para la migración de usuarios (p. 142).
Inicio de sesión y monitorización en Amazon Cognito El monitoreo es una parte importante del mantenimiento de la fiabilidad, la disponibilidad y el rendimiento de Amazon Cognito y las demás soluciones de AWS. Amazon Cognito admite actualmente los dos servicios de AWS siguientes para que pueda monitorear su organización y la actividad que tiene lugar dentro de ella. • Amazon CloudWatch Métricas – de Con CloudWatch las métricas de puede monitorizar, informar y realizar acciones automáticas en caso de que se produzca un evento casi en tiempo real. Por ejemplo, puede crear CloudWatch paneles en las métricas proporcionadas para monitorizar los grupos de Amazon Cognito usuarios o puede crear CloudWatch alarmas en las métricas proporcionadas para notificarle si se infringe un umbral establecido. • AWS CloudTrail – Con CloudTrail puede capturar llamadas a la API desde la Amazon Cognito consola de y desde llamadas de código a las operaciones de Amazon Cognito API de . Por ejemplo, cuando un usuario se autentica, CloudTrail puede registrar detalles como la dirección IP en la solicitud, quién realizó la solicitud y cuándo se realizó. Temas • Seguimiento de cuotas y uso en CloudWatch y Cuotas de servicio (p. 319) • Métricas de Grupos de usuarios de Amazon Cognito (p. 320) • Dimensiones para Grupos de usuarios de Amazon Cognito (p. 327) • Uso de la consola Cuotas de servicio de para realizar un seguimiento de las métricas de (p. 327) • Uso de la consola CloudWatch de para realizar un seguimiento de las métricas (p. 328) • Crear una CloudWatch alarma de para una cuota (p. 328) • Registro de llamadas a la API de Amazon Cognito con AWS CloudTrail (p. 328)
Seguimiento de cuotas y uso en CloudWatch y Cuotas de servicio Puede monitorizar grupos de Amazon Cognito usuarios de mediante Amazon CloudWatch o mediante Cuotas de servicio. CloudWatch recopila y procesa los datos sin formato en métricas legibles y casi en tiempo real. En CloudWatch, puede establecer alarmas que vigilen determinados umbrales y enviar notificaciones o realizar acciones cuando se cumplan dichos umbrales. Para crear una CloudWatch alarma de para una cuota de servicio, consulte Crear una CloudWatch alarma de . Las Amazon Cognito métricas de están disponibles en intervalos de cinco minutos. Para obtener más información acerca de los periodos de retención en CloudWatch, visite la página Amazon CloudWatch de preguntas frecuentes de . Puede utilizar Cuotas de servicio para ver y administrar el uso de las Grupos de usuarios de Amazon Cognito cuotas. La Cuotas de servicio consola de tiene tres características: ver las cuotas de servicio, solicitar un aumento de la cuota de servicio y consultar la utilización actual. Puede utilizar la primera
319
Amazon Cognito Guía para desarrolladores Métricas de Grupos de usuarios de Amazon Cognito
característica para ver las cuotas y ver si la cuota es ajustable. Puede utilizar la segunda característica para solicitar un Cuotas de servicio aumento. Puede utilizar la última característica para ver la utilización de la cuota. Esta característica solo está disponible después de que su cuenta haya estado activa durante un tiempo. Para obtener más información sobre cómo ver las cuotas en la Cuotas de servicio consola de , consulte Visualización de Cuotas de servicio .
Note Amazon Cognito Las métricas de están disponibles en intervalos de 5 minutos. Para obtener más información acerca de los periodos de retención en CloudWatch, visite la página Amazon CloudWatch de preguntas frecuentes de .
Métricas de Grupos de usuarios de Amazon Cognito En la siguiente tabla se muestran las métricas disponibles para grupos de Amazon Cognito usuarios de .
Note Las métricas que no han tenido nuevos puntos de datos en las últimas dos semanas no aparecen en la consola de . Tampoco aparecen cuando se escribe el nombre o los nombres de dimensión de las métricas en el cuadro de búsqueda de la pestaña All metrics (Todas las métricas) de la consola de . Además, no se devuelven en los resultados de un comando list-metrics. La mejor forma de recuperar estas métricas es con los get-metric-data comandos get-metricstatistics o de la CLI de AWS. Métrica
Descripción
SignUpSuccesses
Proporciona el número total de solicitudes de registro de usuarios correctas realizadas al grupo de Amazon Cognito usuarios. Una solicitud de registro de usuario correcta produce un valor de 1, mientras que una solicitud incorrecta produce un valor de 0. Una solicitud limitada también se considera como una solicitud incorrecta y, por lo tanto, una solicitud limitada también producirá un recuento de 0. Para encontrar el porcentaje de solicitudes de registro de usuarios correctas, utilice la estadística Average en esta métrica. Para contar el número total de solicitudes de registro de usuarios, utilice la estadística Sample Count en esta métrica. Para contar el número total de solicitudes de registro de usuarios correctas, utilice la estadística Sum en esta métrica. Para contar el número total de solicitudes de registro de usuarios erróneas, utilice la CloudWatch Math expresión y reste la Sum estadística de la Sample Count estadística . Esta métrica se publica para cada grupo de usuarios para cada cliente de grupo de usuarios. En caso de que el registro del usuario lo realice un administrador, la métrica se publica con el cliente del grupo de usuarios como Admin. Tenga en cuenta que esta métrica no se emite en casos de importación de usuarios y migración de usuarios.
320
Amazon Cognito Guía para desarrolladores Métricas de Grupos de usuarios de Amazon Cognito
Métrica
Descripción Dimensión de métrica: UserPool, UserPoolClient Unidades: recuento Proporciona el número total de solicitudes de registro de usuarios con limitación controlada realizadas al grupo de Amazon Cognito usuarios. Se publica un recuento de 1 cada vez que se realiza la limitación controlada de una solicitud de registro de usuario.
SignUpThrottles
Para contar el número total de solicitudes de registro de usuarios con limitación controlada, utilice la estadística Sum para esta métrica. Esta métrica se publica para cada grupo de usuarios de cada cliente. En caso de que un administrador haya realizado la solicitud limitada, la métrica se publica con el cliente del grupo de usuarios como Admin. Dimensión de métrica: UserPool, UserPoolClient Unidades: recuento
321
Amazon Cognito Guía para desarrolladores Métricas de Grupos de usuarios de Amazon Cognito
Métrica
Descripción
SignInSuccesses
Proporciona el número total de solicitudes de autenticación de usuario correctas realizadas al grupo de Amazon Cognito usuarios. Una autenticación de usuario se considera correcta cuando se emite un token de autenticación al usuario. Una autenticación correcta produce un valor de 1, mientras que una solicitud incorrecta produce un valor de 0. Una solicitud limitada también se considera como una solicitud incorrecta y, por lo tanto, una solicitud limitada también producirá un recuento de 0. Para buscar el porcentaje de solicitudes de autenticación de usuario correctas, utilice la estadística Average en esta métrica. Para contar el número total de solicitudes de autenticación de usuario, utilice la estadística Sample Count en esta métrica. Para contar el número total de solicitudes de autenticación de usuario correctas, utilice la estadística Sum en esta métrica. Para contar el número total de solicitudes de autenticación de usuario erróneas, utilice la CloudWatch Math expresión y reste la Sum estadística de la Sample Count estadística . Esta métrica se publica para cada grupo de usuarios de cada cliente. En caso de que se proporcione un cliente de grupo de usuarios no válido con una solicitud, el valor de cliente de grupo de usuarios correspondiente en la métrica contiene un valor fijo Invalid en lugar del valor no válido real enviado en la solicitud. Tenga en cuenta que las solicitudes para actualizar el Amazon Cognito token no se incluyen en esta métrica. Existe una métrica independiente para proporcionar estadísticas de Refresh token. Dimensión de métrica: UserPool, UserPoolClient Unidades: recuento
322
Amazon Cognito Guía para desarrolladores Métricas de Grupos de usuarios de Amazon Cognito
Métrica
Descripción
SignInThrottles
Proporciona el número total de solicitudes de autenticación de usuarios con limitación controlada realizadas al grupo de Amazon Cognito usuarios. Se publica un recuento de 1 cada vez que se realiza la limitación controlada de una solicitud de autenticación. Para contar el número total de solicitudes de autenticación de usuarios con limitación controlada, utilice la estadística Sum para esta métrica. Esta métrica se publica para cada grupo de usuarios de cada cliente. En caso de que se proporcione un cliente de grupo de usuarios no válido con una solicitud, el valor de cliente de grupo de usuarios correspondiente en la métrica contiene un valor fijo Invalid en lugar del valor no válido real enviado en la solicitud. Las solicitudes para actualizar Amazon Cognito el token no se incluyen en esta métrica. Hay una métrica independiente para proporcionar estadísticas de Refresh token. Dimensión de métrica: UserPool, UserPoolClient Unidades: recuento
323
Amazon Cognito Guía para desarrolladores Métricas de Grupos de usuarios de Amazon Cognito
Métrica
Descripción
TokenRefreshSuccesses
Proporciona el número total de solicitudes correctas para actualizar un Amazon Cognito token de que se realizaron en el grupo de Amazon Cognito usuarios. Una solicitud de Amazon Cognito token de actualización correcta produce un valor de 1, mientras que una solicitud incorrecta produce un valor de 0. Una solicitud limitada también se considera como una solicitud incorrecta y, por lo tanto, una solicitud limitada también producirá un recuento de 0. Para encontrar el porcentaje de solicitudes correctas para actualizar un Amazon Cognito token de , utilice la Average estadística en esta métrica. Para contar el número total de solicitudes para actualizar un Amazon Cognito token de , utilice la Sample Count estadística en esta métrica. Para contar el número total de solicitudes correctas para actualizar un Amazon Cognito token de , utilice la Sum estadística en esta métrica. Para contar el número total de solicitudes erróneas para actualizar un Amazon Cognito token de , utilice la CloudWatch Math expresión y reste la Sum estadística de la Sample Count estadística . Esta métrica se publica para cada cliente de grupo de usuarios. Si un cliente de grupo de usuarios no válido está en una solicitud, el valor del cliente del grupo de usuarios contiene un valor fijo de Invalid. Dimensión de métrica: UserPool, UserPoolClient Unidades: recuento
324
Amazon Cognito Guía para desarrolladores Métricas de Grupos de usuarios de Amazon Cognito
Métrica
Descripción
TokenRefreshThrottles
Proporciona el número total de solicitudes con limitación controlada para actualizar un Amazon Cognito token de que se realizaron en el grupo de Amazon Cognito usuarios. Se publica un recuento de 1 cada vez que se limita de forma controlada una solicitud de Amazon Cognito token de actualización. Para contar el número total de solicitudes con limitación controlada para actualizar un Amazon Cognito token de , utilice la Sum estadística para esta métrica. Esta métrica se publica para cada grupo de usuarios de cada cliente. En caso de que se proporcione un cliente de grupo de usuarios no válido con una solicitud, el valor de cliente de grupo de usuarios correspondiente en la métrica contiene un valor fijo Invalid en lugar del valor no válido real enviado en la solicitud. Dimensión de métrica: UserPool, UserPoolClient Unidades: recuento Proporciona el número total de solicitudes de identidad federada correctas al grupo de Amazon Cognito usuarios. Una solicitud de identidad federada correcta produce un valor de 1, mientras que una solicitud incorrecta produce un valor de 0. Una solicitud limitada también se considera como una solicitud incorrecta y, por lo tanto, una solicitud limitada también producirá un recuento de 0.
FederationSuccesses
Para buscar el porcentaje de solicitudes de identidad federada correctas, utilice la estadística Average en esta métrica. Para contar el número total de solicitudes de identidad federada, utilice la estadística Sample Count en esta métrica. Para contar el número total de solicitudes de identidad federada correctas, utilice la estadística Sum en esta métrica. Para contar el número total de solicitudes de identidad federada erróneas, utilice la CloudWatch Math expresión y reste la Sum estadística de la Sample Count estadística . Dimensión de métrica: UserPool, UserPoolClient, IdentityProvider Unidades: recuento
325
Amazon Cognito Guía para desarrolladores Métricas de Grupos de usuarios de Amazon Cognito
Métrica
Descripción
FederationThrottles
Proporciona el número total de solicitudes de identidad federada con limitación controlada al grupo de Amazon Cognito usuarios. Se publica un recuento de 1 cada vez que se limita de forma controlada una solicitud de identidad federada. Para contar el número total de solicitudes de identidad federada con limitación controlada, utilice la estadística Sum para esta métrica. Dimensión de métrica: UserPool, UserPoolClient, IdentityProvider Unidades: recuento Proporciona el número total de llamadas realizadas por los clientes en relación con una categoría. Esta métrica incluye todas las llamadas, como las llamadas limitadas, las llamadas con error y las llamadas realizadas correctamente.
CallCount
Esta métrica está disponible en Usage (Uso) nameSpace. La cuota de categoría se aplica para cada AWS cuenta en todos los grupos de usuarios de una cuenta y región. Puede contar el número total de llamadas en una categoría mediante la Sum estadística de esta métrica. Dimensión de métrica: servicio, tipo, recurso, clase Unidades: recuento Proporciona el número total de llamadas restringidas relacionadas con una categoría.
ThrottleCount
Esta métrica está disponible en Usage (Uso) nameSpace. Esta métrica se publica en el nivel de cuenta. Puede contar el número total de llamadas en una categoría mediante la Sum estadística de esta métrica. Dimensión de métrica: servicio, tipo, recurso, clase Unidades: recuento
326
Amazon Cognito Guía para desarrolladores Dimensiones para Grupos de usuarios de Amazon Cognito
Dimensiones para Grupos de usuarios de Amazon Cognito Las siguientes dimensiones se utilizan para ajustar las métricas de uso publicadas por Amazon Cognito. Las dimensiones solo se aplican a CallCount las métricas ThrottleCount y . Dimensión
Descripción
Servicio
El nombre del servicio de AWS que contiene el recurso. Para las métricas de uso de Amazon Cognito, el valor de esta dimensión es Cognito user pool.
Tipo
El tipo de entidad que se registra. El único valor válido para las métricas de Amazon Cognito uso es la API.
Recurso
El tipo de recurso que se está ejecutando. El único valor válido es el nombre de la categoría.
Clase
La clase de recurso de la que se realiza el seguimiento. Amazon Cognito no utiliza la dimensión de clase .
Uso de la consola Cuotas de servicio de para realizar un seguimiento de las métricas de Grupos de usuarios de Amazon Cognito está integrado con Cuotas de servicio, un servicio que le permite ver y administrar sus cuotas desde una ubicación central. Puede utilizar la Cuotas de servicio consola de para ver detalles sobre una cuota específica, monitorizar la utilización de la cuota, solicitar un aumento de la cuota y crear una CloudWatch alarma de para realizar un seguimiento de la utilización de la cuota. Para ver la utilización de las cuotas de Grupos de usuarios de Amazon Cognito servicio, siga los pasos que se describen a continuación. 1.
Abra la consola de Cuotas de servicio.
2.
En el panel de navegación, elija AWS services (Servicios de AWS).
3.
En la lista AWS services (Servicios de AWS), escriba Grupos de usuarios de Amazon Cognito en el campo de búsqueda. Aparecerá la página de cuota de servicio.
4.
Desplácese hacia abajo hasta Monitoring (Monitorización).
5.
En Monitoring (Monitorización) puede ver la utilización de la cuota de servicio actual en el gráfico.
6.
En Monitoring (Monitorización), seleccione una hora, tres horas, doce horas, un día, tres días o una semana.
7.
Seleccione cualquier área dentro del gráfico para ver el porcentaje de utilización de la cuota de servicio. A partir de aquí, puede añadir el gráfico al panel o utilizar el menú de acciones para seleccionar View in metrics (Ver en métricas), que le llevará a las métricas relacionadas en la CloudWatch consola de .
327
Amazon Cognito Guía para desarrolladores Uso de la consola CloudWatch de para realizar un seguimiento de las métricas
Uso de la consola CloudWatch de para realizar un seguimiento de las métricas Puede realizar un seguimiento y recopilar Grupos de usuarios de Amazon Cognito métricas mediante CloudWatch. El CloudWatch panel mostrará métricas sobre todos los servicios de AWS que utilice. Puede utilizar CloudWatch para crear alarmas de métricas. Las alarmas se pueden configurar para enviarle notificaciones o realizar un cambio en un recurso específico que está monitorizando. Para ver las métricas de cuota de servicio en CloudWatch, siga los pasos que se describen a continuación. 1.
Abra la consola de CloudWatch.
2.
En el panel de navegación, seleccione Metrics.
3.
En All metrics (Todas las métricas), seleccione una métrica y una dimensión.
4.
Seleccione la casilla de verificación situada junto a una métrica. Las métricas aparecerán en el gráfico.
Note Las métricas que no han tenido nuevos puntos de datos en las últimas dos semanas no aparecen en la consola de . Tampoco aparecen cuando se escribe el nombre o los nombres de dimensión de las métricas en el cuadro de búsqueda de la pestaña All metrics (Todas las métricas) de la consola de y no se devuelven en los resultados de un comando list-metrics. La mejor forma de recuperar estas métricas es con los get-metric-data comandos get-metric-statistics o de la CLI de AWS.
Crear una CloudWatch alarma de para una cuota Amazon Cognito proporciona métricas de CloudWatch uso que corresponden a las cuotas de servicio de AWS para APIs CallCount de y .ThrottleCount En la Cuotas de servicio consola de , puede crear alarmas de que le avisen cuando su uso se acerque a una cuota de servicio. Siga los pasos que se describen a continuación para configurar una CloudWatch alarma de mediante la Cuotas de servicio consola de . 1.
Abra la https://docs.aws.amazon.com/servicequotas/latest/userguide/ consola de Service Quota.
2.
En el panel de navegación, elija AWS services (Servicios de AWS).
3.
Seleccionar Grupos de usuarios de Amazon Cognito.
4.
Seleccione la cuota en la que desea configurar una alarma.
5.
Desplácese hacia abajo hasta CloudWatch alarmas de .
6.
En alarms (CloudWatchAlarmas de ), elijaCreate (Crear).
7.
En Alarm threshold (Umbral de alarma), elija un umbral.
8.
En Alarm name (Nombre de alarma), escriba un nombre único.
9.
Seleccione Create (Crear).
Registro de llamadas a la API de Amazon Cognito con AWS CloudTrail Amazon Cognito está integrado con AWS CloudTrail, un servicio que proporciona un registro de las acciones realizadas por un usuario, un rol o un AWS servicio de en Amazon Cognito. CloudTrail captura un subconjunto de llamadas a la API de Amazon Cognito como eventos, incluidas las llamadas procedentes de la Amazon Cognito consola de y las llamadas del código a las operaciones de la Amazon Cognito API de . Si crea un registro de seguimiento, puede habilitar la entrega continua de eventos de CloudTrail
328
Amazon Cognito Guía para desarrolladores Registro de llamadas a la API de Amazon Cognito con AWS CloudTrail
a un bucket de Amazon S3, incluidos los eventos de Amazon Cognito. Si no configura un registro de seguimiento, puede ver los eventos más recientes en la consola de CloudTrail en el Event history (Historial de eventos). Mediante la información que recopila CloudTrail, se puede determinar la solicitud que se envió a Amazon Cognito, la dirección IP desde la que se realizó la solicitud, quién realizó la solicitud, cuándo se realizó y detalles adicionales. Para obtener más información sobre CloudTrail, incluido cómo configurarlo y habilitarlo, consulte la AWS CloudTrail User Guide. También puede crear alarmas de Amazon CloudWatch para determinados eventos de CloudTrail. Por ejemplo, puede configurar CloudWatch para que active una alarma si se cambia la configuración de un grupo de identidades. Para obtener más información, consulte Creación de alarmas de CloudWatch para eventos de CloudTrail: ejemplos.
Amazon Cognito Información de en CloudTrail CloudTrail se habilita en una cuenta de AWS al crearla. Cuando se produce una actividad de eventos compatible en Amazon Cognito, dicha actividad se registra en un evento de CloudTrail junto con los eventos de los demás servicios de AWS en Event history (Historial de eventos). Puede ver, buscar y descargar los últimos eventos de la cuenta de AWS. Para obtener más información, consulte Visualización de eventos con el historial de eventos de CloudTrail. Para mantener un registro continuo de los eventos de la cuenta de AWS, incluidos los eventos de Amazon Cognito, cree un registro de seguimiento. Un registro de seguimiento permite a CloudTrail enviar archivos de registro a un bucket de Amazon S3. De forma predeterminada, cuando se crea un registro de seguimiento en la consola, este se aplica a todas las regiones. El registro de seguimiento registra los eventos de todas las regiones de la partición de AWS y envía los archivos de registro al bucket de Amazon S3 especificado. También puede configurar otros servicios de AWS para analizar y actuar en función de los datos de eventos recopilados en los registros de CloudTrail. Para obtener más información, consulte: • Introducción a la creación de registros de seguimiento • CloudTrail Servicios e integraciones compatibles con • Configuración de notificaciones de Amazon SNS para CloudTrail • Recibir archivos de registro de CloudTrail de varias regiones y Recepción de archivos de registro de CloudTrail de varias cuentas Amazon Cognito Grupos de usuarios de Amazon Cognito admite el registro de todas las acciones enumeradas en la página User Pool Actions (Acciones del grupo de usuarios) como eventos en los archivos de CloudTrail registro de . Amazon Cognito registra UserSub pero no UserName en los registros de CloudTrail para las solicitudes que son específicas de un usuario. Puede encontrar un usuario para un determinado UserSub llamando a la ListUsers API y utilizando un filtro para sub.
Note La interfaz de usuario alojada y las llamadas de federación no se incluyen actualmente en CloudTrail.
Amazon Cognito Federated Identities • CreateIdentityPool • DeleteIdentityPool • DescribeIdentityPool • GetIdentityPoolRoles • ListIdentityPools
329
Amazon Cognito Guía para desarrolladores Registro de llamadas a la API de Amazon Cognito con AWS CloudTrail
• SetIdentityPoolRoles • UpdateIdentityPool
Amazon Cognito Sync • BulkPublish • DescribeIdentityPoolUsage • GetBulkPublishDetails • GetCognitoEvents • GetIdentityPoolConfiguration • ListIdentityPoolUsage • SetCognitoEvents • SetIdentityPoolConfiguration Cada entrada de registro o evento contiene información acerca de quién generó la solicitud. La información de identidad del usuario le ayuda a determinar lo siguiente: • Si la solicitud se realizó con las credenciales raíz o del usuario de IAM. • Si la solicitud se realizó con credenciales de seguridad temporales de un rol o fue un usuario federado. • Si la solicitud la realizó otro servicio de AWS. Para obtener más información, consulte el elemento userIdentity de CloudTrail.
Ejemplo: entradas de archivos de registro de Amazon Cognito Un registro de seguimiento es una configuración que permite la entrega de eventos como archivos de registro al bucket de Amazon S3 que se especifique. Los archivos de registro de CloudTrail contienen una o varias entradas de registro. Un evento representa una única solicitud de cualquier origen e incluye información sobre la acción solicitada, la fecha y la hora de la acción, los parámetros de la solicitud, etcétera. Los archivos de registro de CloudTrail no son un rastro de la pila ordenada de las llamadas a la API públicas, por lo que no aparecen en ningún orden específico. El siguiente ejemplo muestra una entrada de registro de una solicitud de la acción CreateIdentityPool. La solicitud fue realizada por una usuaria de IAM llamada Alicia. {
"eventVersion":"1.03", "userIdentity":{ "type":"IAMUser", "principalId":"PRINCIPAL_ID", "arn":"arn:aws:iam::123456789012:user/Alice", "accountId":"123456789012", "accessKeyId":"['EXAMPLE_KEY_ID']", "userName":"Alice" }, "eventTime":"2016-01-07T02:04:30Z", "eventSource":"cognito-identity.amazonaws.com", "eventName":"CreateIdentityPool", "awsRegion":"us-east-1", "sourceIPAddress":"127.0.0.1", "userAgent":"USER_AGENT", "requestParameters":{ "identityPoolName":"TestPool", "allowUnauthenticatedIdentities":true, "supportedLoginProviders":{
330
Amazon Cognito Guía para desarrolladores Validación de la conformidad
}
}
"graph.facebook.com":"000000000000000"
}, "responseElements":{ "identityPoolName":"TestPool", "identityPoolId":"us-east-1:1cf667a2-49a6-454b-9e45-23199EXAMPLE", "allowUnauthenticatedIdentities":true, "supportedLoginProviders":{ "graph.facebook.com":"000000000000000" } }, "requestID":"15cc73a1-0780-460c-91e8-e12ef034e116", "eventID":"f1d47f93-c708-495b-bff1-cb935a6064b2", "eventType":"AwsApiCall", "recipientAccountId":"123456789012"
Validación de la conformidad para Amazon Cognito Hay auditores externos que evalúan la seguridad y la conformidad de Amazon Cognito en distintos programas de conformidad de AWS. Estos incluyen SOC, PCI, FedRAMP, HIPAA y otros. Para obtener una lista de servicios de AWS en el ámbito de programas de conformidad específicos, consulte Servicios de AWS en el ámbito del programa de conformidad. Para obtener información general, consulte Programas de conformidad de AWS. Puede descargar los informes de auditoría de terceros utilizando AWS Artifact. Para obtener más información, consulte Descarga de informes en AWS Artifact. Su responsabilidad en el ámbito de la conformidad al usar Amazon Cognito viene determinada por la confidencialidad de los datos, los objetivos de conformidad de su empresa y las leyes y regulaciones aplicables. AWS proporciona los siguientes recursos para ayudarlo con los requisitos de conformidad: • Guías de inicio rápido de seguridad y conformidad– estas guías de implementación tratan consideraciones sobre arquitectura y ofrecen pasos para implementar los entornos de referencia centrados en la seguridad y la conformidad en AWS. • Documento técnico sobre arquitectura para seguridad y conformidad de HIPAA – este documento técnico describe cómo las empresas pueden utilizar AWS para crear aplicaciones conformes con HIPAA. • Recursos de conformidad de AWS– este conjunto de manuales y guías podría aplicarse a su sector y ubicación. • Evaluación de recursos con reglas en la AWS Config Developer Guide: el servicio – AWS Config evalúa en qué medida las configuraciones de los recursos cumplen con las prácticas internas, las directrices del sector y las normativas. • AWS Security Hub – Este servicio de AWS ofrece una vista integral de su estado de seguridad en AWS que le ayuda a comprobar la conformidad con las normas del sector de seguridad y las prácticas recomendadas.
Resiliencia en Amazon Cognito La infraestructura global de AWS está conformada por regiones y zonas de disponibilidad de AWS. Las regiones proporcionan varias zonas de disponibilidad físicamente independientes y aisladas que se encuentran conectadas mediante redes con un alto nivel de rendimiento y redundancia, además de baja latencia. Con las zonas de disponibilidad, puede diseñar y utilizar aplicaciones y bases de datos que realizan una conmutación por error automática entre las zonas sin interrupciones. Las zonas de
331
Amazon Cognito Guía para desarrolladores Consideraciones de datos regionales
disponibilidad tienen una mayor disponibilidad, tolerancia a errores y escalabilidad que las infraestructuras tradicionales de centros de datos únicos o múltiples. Para obtener más información sobre zonas de disponibilidad y las regiones de AWS, consulte Infraestructura global de AWS. Temas • Consideraciones de datos regionales (p. 332)
Consideraciones de datos regionales Los grupos de usuarios de Amazon Cognito se crean en una región de AWS y almacenan los datos de perfil de usuario solo en esa región. Los grupos de usuarios pueden enviar los datos de usuario a una región de AWS diferente, en función de cómo se hayan configurado las características opcionales. • Si la configuración de dirección de correo electrónico [emailprotected] predeterminada se utiliza para la verificación de la política de direccionamiento con grupos de usuarios de Amazon Cognito, los correos electrónicos se dirigen a través de la región EE.UU. Oeste (Oregón). • Si se utiliza una dirección de correo electrónico distinta para configurar Amazon Simple Email Service (Amazon SES) con grupos de usuarios de Amazon Cognito, dicha dirección de correo electrónico se dirige a través de la región de AWS asociada a la dirección de correo electrónico de Amazon SES. • Los mensajes SMS de los grupos de usuarios de Amazon Cognito se enrutan a través de la misma región de AWS SNS a menos que se indique lo contrario en Configuring Email or Phone Verification (Configuración del correo electrónico o de la verificación del teléfono). • Si los análisis de Amazon Pinpoint se utilizan con grupos de usuarios de Amazon Cognito, los datos de eventos se dirigen a la región EE.UU. Este (Norte de Virginia).
Note Amazon Pinpoint está disponible en varias regiones de AWS en América del Norte, Europa, Asia y Oceanía. Las regiones de Amazon Pinpoint incluyen la API Amazon Pinpoint. Si Amazon Pinpoint admite una región de Amazon Cognito, Amazon Cognito enviará eventos a proyectos de Amazon Pinpoint dentro de la misma región de Amazon Pinpoint. A partir de ahora, si una región no es compatible con Amazon Pinpoint, Amazon Cognito solo admitirá el envío de eventos en useast-1. Para obtener información detallada sobre la región de Amazon Pinpoint, consulte Puntos de enlace y cuotas de Amazon Pinpoint y Uso de análisis de Amazon Pinpoint con grupos de usuarios de Amazon Cognito.
Seguridad de la infraestructura en Amazon Cognito Como servicio administrado, Amazon Cognito está protegido por los procedimientos de seguridad de red globales de AWS que se describen en el documento técnico Amazon Web Services: Información general sobre procesos de seguridad. Puede utilizar las llamadas a la API publicadas en AWS para acceder a Amazon Cognito a través de la red. Los clientes deben ser compatibles con Transport Layer Security (TLS) 1.0 o una versión posterior. Le recomendamos TLS 1.2 o una versión posterior. Los clientes también deben ser compatibles con conjuntos de cifrado con confidencialidad directa total (PFS) tales como Ephemeral Diffie-Hellman (DHE) o Elliptic Curve Ephemeral Diffie-Hellman (ECDHE). La mayoría de los sistemas modernos como Java 7 y posteriores son compatibles con estos modos. Además, las solicitudes deben estar firmadas mediante un ID de clave de acceso y una clave de acceso secreta que estén asociados a una entidad principal de IAM. También puede utilizar AWS Security Token Service (AWS STS) para generar credenciales de seguridad temporales para firmar solicitudes.
332
Amazon Cognito Guía para desarrolladores Configuración y análisis de vulnerabilidades
Configuración y análisis de vulnerabilidades en Grupos de usuarios de Amazon Cognito AWS gestiona las tareas de seguridad básicas como la aplicación de parches en la base de datos y el sistema operativo (SO) de invitado, la configuración del firewall y la recuperación de desastres. Estos procedimientos han sido revisados y certificados por los terceros pertinentes. Para obtener más detalles, consulte los siguientes recursos: • Validación de la conformidad para Amazon Cognito (p. 331) • Modelo de responsabilidad compartida
Prácticas recomendadas de seguridad para Grupos de usuarios de Amazon Cognito Puede añadir la autenticación multifactor (MFA) a un grupo de usuarios para proteger la identidad de los usuarios. La MFA añade un segundo método de autenticación que no depende exclusivamente del nombre de usuario y la contraseña. Puede utilizar mensajes de texto SMS o contraseñas de un solo uso basadas en el tiempo (TOTP) como segundo factor para el inicio de sesión de los usuarios. También puede utilizar la autenticación flexible con su modelo basado en riesgos para predecir cuándo es posible que sea necesario utilizar otro factor de autenticación. Forma parte de las características de seguridad avanzadas del grupo de usuarios, que también incluyen protecciones contra las credenciales atacadas. Temas • Adición de la autenticación multifactor (MFA) a un grupo de usuarios (p. 333) • Adición de seguridad avanzada a un grupo de usuarios (p. 338)
Adición de la autenticación multifactor (MFA) a un grupo de usuarios La autenticación multifactor (MFA) aumenta la seguridad de la aplicación al añadir otro método de autenticación y no confiar únicamente en el nombre de usuario y la contraseña. Puede optar por utilizar mensajes de texto SMS o contraseñas de un solo uso basadas en el tiempo (TOTP) como segundo factor para el inicio de sesión de los usuarios. Con la autenticación flexible, puede configurar el grupo de usuarios para que requiera la autenticación de segundo factor en respuesta a un aumento del nivel de riesgo. Para añadir la autenticación flexible a un grupo de usuarios, consulte Adición de seguridad avanzada a un grupo de usuarios (p. 338). Cuando la autenticación multifactor (MFA) se establece en requiredpara un grupo de usuarios, todos los usuarios deben completar MFA para iniciar sesión. Cada usuario necesita al menos un factor de MFA como la configuración de SMS o TOTP para iniciar sesión. Para evitar que los usuarios no inicien sesión cuando MFA sea required, debe incluir la configuración de MFA en la incorporación de usuarios. Si habilita SMS como factor de MFA, puede solicitar números de teléfono y que se verifiquen durante la inscripción. Si ha establecido MFA en required y solo admite SMS como factor, la mayoría de los usuarios necesitarán tener un número de teléfono. Los usuarios sin números de teléfono necesitarán su ayuda para añadir un número de teléfono a su perfil antes de poder iniciar sesión. Puede utilizar números de teléfono no verificados para MFA por SMS. Estos números tendrán un estado verificado después de que la autenticación multifactor se realice correctamente.
333
Amazon Cognito Guía para desarrolladores Adición de Multi-Factor Authentication (MFA)
La configuración de usuarios en grupos de usuarios para tokens de TOTP se produce durante el inicio de sesión inicial. La configuración para habilitar o deshabilitar TOTP como factor de MFA para un grupo de usuarios controla si los usuarios pueden configurar TOTP para sí mismos. Si los usuarios han configurado TOTP, pueden utilizarlo para MFA aunque TOTP se deshabilite posteriormente para el grupo de usuarios. Temas • Prerequisites (p. 334) • Configuración de la autenticación multifactor (p. 334) • MFA por mensaje de texto SMS (p. 335) • MFA con token de software TOTP (p. 336)
Prerequisites Antes de comenzar, necesita lo siguiente: • Solo puede elegir MFA como Required (Obligatorio) en la consola del grupo de Amazon Cognito usuarios cuando crea inicialmente un grupo de usuarios. La operación de la API SetUserPoolMfaConfig se puede utilizar para establecer MFA en required para grupos de usuarios existentes. • Si se habilita MFA y se elige SMS text message (Mensaje de texto SMS) como segundo factor, se deben verificar los números de teléfono. • Las características de seguridad avanzadas requieren que se habilite la MFA y que se establezca como opcional en la consola del grupo de usuarios de Amazon Cognito. Para obtener más información, consulte Adición de seguridad avanzada a un grupo de usuarios (p. 338).
Configuración de la autenticación multifactor Puede configurar MFA en la Amazon Cognito consola de .
Para configurar la MFA en la consola de Amazon Cognito 1.
En la barra de navegación izquierda, elija MFA and verifications (MFA y verificaciones).
2.
Elija el estado de la MFA: Off (Desactivada), Optional (Opcional) o Required (Obligatoria).
334
Amazon Cognito Guía para desarrolladores Adición de Multi-Factor Authentication (MFA)
3.
Elija Optional (Opcional) para habilitar MFA para cada usuario o si utiliza la autenticación flexible basada en riesgos. Para obtener más información sobre la autenticación flexible, consulte Adición de seguridad avanzada a un grupo de usuarios (p. 338).
4.
Elija las opciones de segundo factor que desea admitir en la aplicación. Los usuarios pueden utilizar SMS text message (Mensaje de texto SMS) o Time-based One-time Password (Contraseña de un solo uso basada en el tiempo) como segundo factor. Recomendamos utilizar TOTP, que permite utilizar SMS como mecanismo de recuperación de contraseñas en lugar de como factor de autenticación.
5.
Si utiliza mensajes de texto SMS como segundo factor y no tiene un IAM rol de definido con este permiso, puede crear uno en la consola de . Elija Create role (Crear rol) para crear un IAM rol de que permita Amazon Cognito a enviar mensajes SMS a los usuarios en su nombre. Para obtener más información, consulte Roles de IAM.
6.
Elija Save changes.
MFA por mensaje de texto SMS Cuando un usuario inicia sesión con MFA habilitado, primero introduce y envía su nombre de usuario y contraseña. La aplicación cliente recibe una respuesta getMFA que indica dónde se ha enviado el código de autorización. La aplicación cliente debe indicar al usuario dónde encontrar el código (por ejemplo, a qué número de teléfono se ha enviado el código). A continuación, proporciona un formulario para introducir el código. Por último, la aplicación cliente envía el código para completar el proceso de inicio de sesión. El destino está enmascarado, lo que oculta todos los dígitos del número de teléfono excepto los cuatro últimos. Si una aplicación utiliza la interfaz de usuario Amazon Cognito alojada en , la aplicación muestra una página para que el usuario introduzca el código de MFA. El código de autorización del mensaje de texto SMS es válido durante 3 minutos. Si un usuario ya no tiene acceso al dispositivo al que se envían los códigos de MFA por mensaje de texto SMS, debe solicitar ayuda al servicio de atención al cliente. Un administrador con los permisos necesarios para la cuenta de AWS puede cambiar el número de teléfono del usuario, pero solo a través de la AWS CLI o la API.
335
Amazon Cognito Guía para desarrolladores Adición de Multi-Factor Authentication (MFA)
Cuando un usuario realiza correctamente el flujo de MFA por mensaje de texto SMS, su número de teléfono también se marca como verificado.
Note Los mensajes SMS de la autenticación multifactor se facturan por separado. (No se aplica ningún cargo por el envío de códigos de verificación a las direcciones de correo electrónico). Para obtener información acerca de los precios de Amazon SNS, consulte la sección relativa a los precios de SMS en todo el mundo. Para ver la lista actual de los países en los que los mensajes SMS están disponibles, consulte Regiones y países admitidos.
Important Para garantizar que se envíen mensajes SMS para verificar números de teléfono y para MFA por mensaje de texto SMS, debe solicitar un aumento del límite de gasto a Amazon SNS. Amazon Cognito usa Amazon SNS para enviar mensajes SMS a los usuarios. El número de mensajes SMS que Amazon SNS entrega está sujeto a los límites de gasto. Se pueden especificar límites de gasto para una cuenta de AWS y para mensajes individuales, y los límites se aplican únicamente al costo de envío de los mensajes SMS. El límite de gasto predeterminado por cuenta (si no se especifica) es de 1,00USD al mes. Si desea aumentar el límite, envíe una solicitud de aumento de límite de SNS en el AWS Support Centro de . En New limit value (Nuevo valor del límite), especifique el límite de gasto mensual que desee. En el campo Use Case Description (Descripción de caso de uso), explique que solicita un aumento del límite de gasto mensual en SMS. Para añadir la MFA a un grupo de usuarios, consulte Adición de la autenticación multifactor (MFA) a un grupo de usuarios (p. 333).
MFA con token de software TOTP Se pide al usuario que complete la autenticación con una contraseña de un solo uso basada en el tiempo (TOTP). Esta opción se habilita después de que se haya verificado el nombre de usuario y la contraseña durante la activación del token de software TOTP para MFA. Si la aplicación utiliza la interfaz de usuario Amazon Cognito alojada de para el inicio de sesión de los usuarios, la interfaz de usuario muestra una segunda página. En esta página se pide a su usuario que envíe su nombre de usuario y contraseña y, a continuación, introduzca la contraseña de TOTP. Puede habilitar la MFA con TOTP para su grupo de usuarios en la Amazon Cognito consola de , a través de la interfaz de usuario Amazon Cognito alojada de o mediante operaciones de Amazon Cognito la API de . Puede configurar MFA y activarla con TOTP para el grupo de usuarios llamando a SetUserPoolMfaConfig.
Note Si la MFA con token de software TOTP no está habilitada para el grupo de usuarios, los usuarios no se pueden asociar ni verificar con el token. Reciben esta SoftwareTokenMFANotFoundException excepción: "Software Token MFA has not been enabled by the userPool." Los usuarios que hayan asociado y verificado previamente un token de TOTP pueden seguir utilizándolo para MFA si más adelante se deshabilita la MFA con token de software para el grupo de usuarios. La configuración de TOTP para el usuario es un proceso de varios pasos en el que el usuario recibe un código secreto que valida introduciendo una contraseña de un solo uso. A continuación, se puede activar la MFA con TOTP para el usuario o configurar TOTP como método de MFA preferido para el usuario. Para añadir la MFA a un grupo de usuarios, consulte Adición de la autenticación multifactor (MFA) a un grupo de usuarios (p. 333).
Asociación del token de TOTP La asociación del token de TOTP implica enviar al usuario un código secreto que debe validar con una contraseña de un solo uso. Esta parte tiene tres pasos.
336
Amazon Cognito Guía para desarrolladores Adición de Multi-Factor Authentication (MFA)
1. Cuando el usuario elija MFA con token de software TOTP, llame a AssociateSoftwareToken para que devuelva un código único de clave secreta compartida generado para la cuenta del usuario. La solicitud de este método de la API admite un token de acceso o una cadena de sesión, pero no ambos. Para mayor comodidad, puede distribuir la clave secreta en un código QR (código de respuesta rápida). 2. El código de clave o el código QR aparece en la aplicación. El usuario debe escribirlo en una aplicación generadora de TOTP, como Google Authenticator. 3. El usuario introduce el código de la clave en la aplicación generadora de TOTP para asociar una cuenta nueva a la aplicación del cliente.
Verificación del token de TOTP El siguiente paso consiste en verificar el token de TOTP. A continuación se muestra información general del proceso. 1. Cuando se asocia una cuenta nueva de TOTP a la aplicación, esta genera una contraseña temporal. 2. El usuario introduce la contraseña temporal en la aplicación, que a su vez responde con una llamada a VerifySoftwareToken. En el servidor de servicio de Amazon Cognito, se genera un código de TOTP y se compara con la contraseña temporal del usuario. Si coinciden, el servicio lo marca como verificado. 3. Si el código es correcto, compruebe que el tiempo utilizado se encuentra dentro del rango y dentro del número máximo de reintentos. Amazon Cognito también acepta tokens TOTP que son una ventana de 30-second temprana o tardía para tener en cuenta el sesgo del reloj. Si el usuario pasa todos los pasos, la verificación finaliza. Si el código es incorrecto, la verificación no puede finalizar y el usuario puede volver a intentarlo o cancelarlo. Recomendamos que el usuario sincronice la hora de su aplicación generadora de TOTP.
Describe cómo iniciar sesión utilizando la MFA con TOTP En este punto, el usuario inicia sesión con la contraseña de un solo uso basada en el tiempo. El proceso es el siguiente. 1. El usuario introduce su nombre de usuario y contraseña para iniciar sesión en la aplicación cliente. 2. Se invoca el desafío de MFA con TOTP y la aplicación pide al usuario que introduzca una contraseña temporal. 3. El usuario obtiene la contraseña temporal de una aplicación generadora de TOTP asociada. 4. El usuario introduce el código de TOTP en la aplicación cliente. La aplicación pide al servicio de Amazon Cognito que la verifique. Es necesario llamar a RespondToAuthChallenge para cada inicio de sesión con objeto de obtener una respuesta al nuevo desafío de autenticación de TOTP. 5. Si Amazon Cognito verifica el token, el inicio de sesión es correcto y el usuario continúa con el flujo de autenticación.
Eliminación del token de TOTP Por último, la aplicación debe permitir al usuario eliminar el token de TOTP: 1. La aplicación cliente debe pedir al usuario que introduzca su contraseña. 2. Si la contraseña es correcta, debe eliminar el token de TOTP.
Note La operación de eliminación del token de software de TOTP no está disponible en la API. Esta funcionalidad está prevista para una versión futura. Utilice SetUserMFAPreference para desactivar MFA con TOTP para un usuario específico. 337
Amazon Cognito Guía para desarrolladores Adición de seguridad avanzada
Adición de seguridad avanzada a un grupo de usuarios Después de crear el grupo de usuarios, se tiene acceso a la opción Advanced security (Seguridad avanzada) de la barra de navegación de la consola de Amazon Cognito. Se pueden activar las características de seguridad avanzadas del grupo de usuarios y personalizar las acciones que se toman en respuesta a los distintos riesgos. También es posible utilizar el modo de auditoría para recopilar métricas sobre los riesgos detectados sin adoptar ninguna acción. En el modo de auditoría, las características de seguridad avanzadas publican métricas en Amazon CloudWatch. Consulte Visualización de las métricas de seguridad avanzadas (p. 344).
Note Se aplican precios adicionales para las características de seguridad avanzadas de Amazon Cognito. Consulte la página de precios de Amazon Cognito. Temas • Prerequisites (p. 338) • Configuración de las características de seguridad avanzadas (p. 338) • Comprobación de las credenciales atacadas (p. 340) • Uso de la autenticación flexible (p. 341) • Visualización de las métricas de seguridad avanzadas (p. 344) • Habilitación de la seguridad avanzada del grupo de usuarios desde la aplicación (p. 346)
Prerequisites Antes de comenzar, necesitará: • Un grupo de usuarios con un cliente de aplicación. Para obtener más información, consulte Introducción a los grupos de usuarios (p. 18). • Establezca Multi-Factor Authentication (MFA) en Optional (Opcional) en la consola de Amazon Cognito para utilizar la característica de autenticación flexible basada en riesgos. Para obtener más información, consulte Adición de la autenticación multifactor (MFA) a un grupo de usuarios (p. 333). • Si utiliza el correo electrónico para las notificaciones, vaya a la consola de Amazon SES para configurar y verificar un dominio o una dirección de correo electrónico para utilizarlos con los mensajes de correo electrónico de notificación. Para obtener más información sobre Amazon SES, consulte Verificación de identidades en Amazon SES.
Configuración de las características de seguridad avanzadas Para configurar la seguridad avanzada para un grupo de usuarios 1.
En la barra de navegación izquierda, elija Advanced security (Seguridad avanzada).
2.
Para Do you want to enable advanced security features for this user pool? (¿Desea habilitar funciones de seguridad avanzadas para este grupo de usuarios?), seleccione Yes (Sí) para habilitar la seguridad avanzada. O elija Audit only (Solo auditoría) para recopilar información y enviar datos del grupo de usuarios a Amazon CloudWatch. Recomendamos mantener las características de seguridad avanzadas en el modo de auditoría durante dos semanas antes de activar las acciones. De este modo, Amazon Cognito puede aprender los patrones de uso de los usuarios de la aplicación. 338
Amazon Cognito Guía para desarrolladores Adición de seguridad avanzada
3.
En la lista desplegable, elija What app client do you want to customize settings for? (¿Para qué cliente de aplicación desea personalizar la configuración?). El valor predeterminado es dejar la configuración como global para todos los clientes de aplicación.
4.
En Which action do you want to take with the compromised credentials? (¿Qué acción desea realizar con las credenciales atacadas?), elija Allow (Permitir) o Block use (Bloquear uso).
5.
Elija Customize when compromised credentials are blocked (Personalizar cuándo se bloquean las credenciales atacadas) para seleccionar los eventos que deben desencadenar las comprobaciones de credenciales atacadas: • Sign-in (Inicio de sesión) • Sign-up (Inscripción) • Password change (Cambio de contraseña)
6.
Elija cómo desea responder a los intentos de inicio de sesión maliciosos en How do you want to use adaptive authentication for sign-in attempts rated as low, medium and high risk? (¿Cómo desea utilizar la autenticación flexible para los intentos de inicio de sesión clasificados como de riesgo bajo, medio y alto?). Puede permitir o bloquear el intento de inicio de sesión o requerir desafíos adicionales antes de permitir el inicio de sesión. Para enviar notificaciones por correo electrónico cuando se detecten intentos de inicio de sesión anómalos, elija Notify users (Notificar a los usuarios).
7.
Si ha elegido Notify users (Notificar a los usuarios) en el paso anterior, puede personalizar el mensaje de correo electrónico de notificación mediante el formulario Notification message customization (Personalización del mensaje de notificación):
339
Amazon Cognito Guía para desarrolladores Adición de seguridad avanzada
8.
Elija Customize (Personalizar) para personalizar las notificaciones de autenticación flexible con versiones de correo electrónico en HTML y de texto sin formato. Para obtener más información sobre las plantillas de correo electrónico, consulte Plantillas de mensajes (p. 181).
9.
Escriba las direcciones IP para las que desea aplicar Always allow (Permitir siempre) o Always block (Bloquear siempre), independientemente de la evaluación de riesgos de seguridad avanzada. Especifique los rangos de direcciones IP en notación https://en.wikipedia.org/wiki/Classless_InterDomain_Routing#CIDR_notation CIDR (como 192.168.100.0/24).
10. Elija Save changes.
Comprobación de las credenciales atacadas Amazon Cognito puede detectar si las credenciales de un usuario (nombre de usuario y contraseña) se han visto comprometidas en otro sitio. Esto puede ocurrir cuando los usuarios reutilizan las credenciales en más de un sitio, o cuando utilizan contraseñas que son fáciles de adivinar. En la página Advanced security (Seguridad avanzada) de la consola de Amazon Cognito, puede elegir si desea permitir o bloquear a los usuarios cuando se detecten credenciales atacadas. El bloqueo requiere que los usuarios elijan otra contraseña. Si elige Allow (Permitir), se publican todos los intentos de uso de credenciales atacadas en Amazon CloudWatch. Para obtener más información, consulte Visualización de las métricas de seguridad avanzadas (p. 344). También puede indicar si Amazon Cognito debe comprobar si hay credenciales atacadas durante el inicio de sesión, la inscripción o los cambios de contraseña.
340
Amazon Cognito Guía para desarrolladores Adición de seguridad avanzada
Note Actualmente, Amazon Cognito no comprueba si hay credenciales atacadas para las operaciones de inicio de sesión con el protocolo Secure Remote Password (SRP), que no envía la contraseña durante el inicio de sesión. Los inicios de sesión que utilizan la API AdminInitiateAuth con el flujo ADMIN_NO_SRP_AUTH y la API InitiateAuth con el flujo USER_PASSWORD_AUTH se comprueban para ver si utilizan credenciales atacadas. Para añadir protecciones contra credenciales atacadas a un grupo de usuarios, consulte Adición de seguridad avanzada a un grupo de usuarios (p. 338).
Uso de la autenticación flexible Con la autenticación flexible, puede configurar el grupo de usuarios para bloquear los inicios de sesión sospechosos o añadir la autenticación de segundo factor en respuesta a un aumento del nivel de riesgo. Para cada intento de inicio de sesión, Amazon Cognito genera una puntuación de riesgo que indica la probabilidad de que la solicitud de inicio de sesión proceda de un origen comprometido. Esta puntuación de riesgo depende de muchos factores, como por ejemplo, si se detecta un cambio de dispositivo, de ubicación del usuario o de dirección IP. La autenticación flexible añade MFA en función del nivel de riesgo para los usuarios que no tienen un tipo de MFA habilitado en el nivel de usuario. Cuando un tipo de MFA está habilitado en el nivel de usuario, esos usuarios siempre recibirán el desafío del segundo factor durante la autenticación, independientemente de cómo haya configurado la autenticación flexible. Amazon Cognito publica en los intentos de inicio de sesión, sus niveles de riesgo y los desafíos que no se han completado correctamente Amazon CloudWatch. Para obtener más información, consulte Visualización de las métricas de seguridad avanzadas (p. 344). Para añadir la autenticación flexible a un grupo de usuarios, consulte Adición de seguridad avanzada a un grupo de usuarios (p. 338). Temas • Información general sobre la autenticación flexible (p. 341) • Creación de una huella dactilar del dispositivo (p. 342) • Visualización del historial de eventos de los usuarios (p. 342) • Suministro de comentarios sobre los eventos (p. 344) • Envío de mensajes de notificación (p. 344)
Información general sobre la autenticación flexible En la página Advanced security (Seguridad avanzada) de la consola de Amazon Cognito, puede elegir la configuración de la autenticación flexible, incluyendo las acciones que se deben realizar para los distintos niveles de riesgo y la personalización de los mensajes de notificación para los usuarios.
341
Amazon Cognito Guía para desarrolladores Adición de seguridad avanzada
Para cada nivel de riesgo, puede elegir entre las opciones siguientes: Opción
Acción
Allow
El intento de inicio de sesión se permite sin un factor de autenticación adicional.
Optional MFA (MFA opcional)
Los usuarios que tienen un segundo factor, como el número de teléfono* para SMS o un token de software TOTP configurado, deben completar un desafío de segundo factor para iniciar sesión. Los usuarios que no tengan configurado un segundo factor pueden iniciar sesión sin un factor adicional.
Require MFA (Requerir MFA)
Los usuarios que tienen un segundo factor, como el número de teléfono* para SMS o un token de software TOTP configurado, deben completar un desafío de segundo factor para iniciar sesión. Se bloquea el inicio de sesión de los usuarios que no tienen configurado un segundo factor.
Bloque
Todos los intentos de inicio de sesión con ese nivel de riesgo se bloquean.
Note *No es necesario verificar los números de teléfono para utilizarlos para SMS como segundo factor de autenticación.
Creación de una huella dactilar del dispositivo Cuando se llama a las API de autenticación de Amazon Cognito, como AdminInitiateAuth o AdminRespondToAuthChallenge desde el servidor, es necesario enviar la IP de origen del usuario en el parámetro ContextData. Esto se suma a la ruta y el nombre del servidor y a los datos de la huella dactilar codificada del dispositivo, que se recopilan mediante la biblioteca de recopilación de datos contextuales de Amazon Cognito. Para obtener información sobre cómo habilitar la seguridad avanzada desde la aplicación web o móvil, consulte Habilitación de la seguridad avanzada del grupo de usuarios desde la aplicación (p. 346). Recopile los datos de contexto del usuario desde el lado del cliente cuando la aplicación llame a Amazon Cognito desde el servidor. A continuación se muestra un ejemplo que utiliza el método del SDK de JavaScript getData. var encodedData = AmazonCognitoAdvancedSecurityData.getData(username, userPoolId, clientId);
Recomendamos que incorpore el SDK de Amazon Cognito más reciente a la aplicación. Esto permite que la autenticación flexible recopile información —de huella dactilar del dispositivo, como el ID del dispositivo, el modelo y la zona horaria. Para obtener más información sobre los SDK de Amazon Cognito, consulte Instalar un SDK de grupo de usuarios.
Visualización del historial de eventos de los usuarios Puede elegir un usuario en la página Amazon CognitoUsers and groups (Usuarios y grupos) de la consola de y ver el historial de inicios de sesión de ese usuario. conserva el historial de eventos del usuario durante de dos año Amazon Cognito.
342
Amazon Cognito Guía para desarrolladores Adición de seguridad avanzada
Cada evento de inicio de sesión tiene un ID de evento, datos contextuales como la ubicación, detalles del dispositivo y los resultados de detección de riesgos asociados.
También puede cotejar el ID de evento con el token emitido. El token emitido, como el token de ID y el token de acceso, lleva este ID de evento en su carga. El ID del evento original se conserva incluso si se utiliza el token de actualización. El ID del evento original permite localizar el ID del evento del inicio de sesión que dio lugar a la emisión de los tokens de Amazon Cognito. Esto le permite realizar un seguimiento del uso de un token en su sistema hasta un evento de autenticación en concreto.
343
Amazon Cognito Guía para desarrolladores Adición de seguridad avanzada
Suministro de comentarios sobre los eventos Los comentarios sobre los eventos afectan a la evaluación de riesgos en tiempo real y mejoran el algoritmo de evaluación de riesgos a lo largo del tiempo. Puede proporcionar comentarios sobre la validez de los intentos de inicio de sesión a través de la Amazon Cognito consola de y las operaciones de la API. En la pestaña Users and groups (Usuarios y grupos) de la consola, se muestra el historial de inicios de sesión y, si hace clic en una entrada, puede marcar el evento como válido o no válido. También puede proporcionar comentarios a través del método AdminUpdateAuthEventFeedback de la API de grupos de usuarios y a través del comando AWS CLIadmin-update-auth-event-feedback de la .
Envío de mensajes de notificación Gracias a las medidas de seguridad avanzadas, Amazon Cognito puede notificar a los usuarios los intentos de inicio de sesión, pedirles que hagan clic en enlaces para indicar si el inicio de sesión era válido o no, y utilizar sus comentarios para mejorar la precisión de la detección de riesgos para el grupo de usuarios. En la sección How do you want to use adaptive authentication for sign-in attempts rated as low, medium and high risk? (¿Cómo desea utilizar la autenticación flexible para los intentos de inicio de sesión clasificados como de riesgo bajo, medio y alto?), elija Notify Users (Notificar a los usuarios) para los casos de riesgo bajo, mediano y alto.
Puede personalizar los correos electrónicos de notificación y proporcionar versiones de texto sin formato y HTML. Elija Customize (Personalizar) en Adaptive authentication notification messages (Mensajes de notificación de autenticación flexible) para personalizar las notificaciones por correo electrónico. Para obtener más información sobre las plantillas de correo electrónico, consulte Plantillas de mensajes (p. 181).
Visualización de las métricas de seguridad avanzadas Amazon Cognito publica las métricas de las características de seguridad avanzadas en su cuenta de Amazon CloudWatch. Las métricas de seguridad avanzadas se agrupan por nivel de riesgo y también por nivel de solicitud.
Para ver las métricas mediante la consola de CloudWatch 1.
Abra la consola de CloudWatch en https://console.aws.amazon.com/cloudwatch/.
2.
En el panel de navegación, seleccione Metrics.
3.
Elija Amazon Cognito.
4.
Elija un grupo de métricas agregadas, como By Risk Classification (Por clasificación de riesgos).
344
Amazon Cognito Guía para desarrolladores Adición de seguridad avanzada
5.
La pestaña All metrics (Todas las métricas) muestra todas las métricas para esa opción. Puede hacer lo siguiente: • Para ordenar la tabla, utilice el encabezado de columna. • Para representar gráficamente una métrica, active la casilla de verificación situada junto a ella. Para seleccionar todas las métricas, seleccione la casilla de verificación en la fila de encabezado de la tabla. • Para filtrar por recurso, elija el ID de recurso y, a continuación, elija Add to search (Añadir a la búsqueda). • Para filtrar por métrica, elija el nombre de la métrica y, a continuación, elija Add to search (Añadir a la búsqueda).
Métrica
Descripción
Dimensiones de la métrica
CompromisedCredentialRisk
Solicitudes en las que Amazon Cognito ha detectado credenciales atacadas.
Operation (Operación): el tipo de operación PasswordChange SignIn, o SignUp son las únicas dimensiones. UserPoolId: el identificador del grupo de usuarios. RiskLevel: alto (predeterminado), medio o bajo.
AccountTakeOverRisk
Solicitudes en las que Amazon Cognito ha detectado riesgo de usurpación de la cuenta.
Operation (Operación): el tipo de operación PasswordChange SignIn, o SignUp son las únicas dimensiones. UserPoolId: el identificador del grupo de usuarios. RiskLevel: alto, medio o bajo.
OverrideBlock
Solicitudes que Amazon Cognito ha bloqueado debido a la configuración proporcionada por el desarrollador.
Operation (Operación): el tipo de operación PasswordChange SignIn, o SignUp son las únicas dimensiones. UserPoolId: el identificador del grupo de usuarios. RiskLevel: alto, medio o bajo.
Risk
Solicitudes que Amazon Cognito ha marcado como arriesgadas.
Operation (Operación): el tipo de operación como PasswordChange, SignIno SignUp. UserPoolId: el identificador del grupo de usuarios.
NoRisk
Solicitudes en las que Amazon Cognito no ha identificado ningún riesgo.
345
Operation (Operación): el tipo de operación como PasswordChange, SignIno SignUp.
Amazon Cognito Guía para desarrolladores Adición de seguridad avanzada
Métrica
Descripción
Dimensiones de la métrica UserPoolId: el identificador del grupo de usuarios.
Amazon Cognito le ofrece dos grupos predefinidos de métricas, listos para el análisis en CloudWatch. By Risk Classification (Por clasificación de riesgo) identifica el grado de detalle del nivel de riesgo para las solicitudes que Amazon Cognito ha identificado como arriesgadas, y By Request Classification (Por clasificación de solicitud) refleja las métricas agregadas por nivel de solicitud. Grupo de métricas agregadas
Descripción
By Risk Classification
Solicitudes que Amazon Cognito ha identificado como arriesgadas.
By Request Classification
Métricas agregadas por solicitud.
Habilitación de la seguridad avanzada del grupo de usuarios desde la aplicación Después de configurar las características de seguridad avanzadas para el grupo de usuarios, debe activarlas en la aplicación web o móvil.
Para utilizar la seguridad avanzada con JavaScript 1.
Es posible que tenga que actualizar el SDK de Amazon Cognito a la versión más reciente. Para obtener más información sobre los SDK de Amazon Cognito, consulte Instalar un SDK de grupo de usuarios.
2.
Para utilizar el SDK de autenticación para habilitar la interfaz de usuario alojada, consulte la aplicación de muestra de CognitoAuth para JavaScript.
3.
Establezca AdvancedSecurityDataCollectionFlag en true. Además, establezca UserPoolId en su ID de grupo de usuarios.
4.
En la aplicación, sustituya por su región de AWS, como us-east-1, y añada esta referencia de origen a su archivo JavaScript:
Para obtener más información, consulte el ejemplo del SDK de autenticación de Amazon Cognito para JavaScript.
Para utilizar la seguridad avanzada con Android 1.
Es posible que tenga que actualizar el SDK de Amazon Cognito a la versión más reciente. Para obtener más información sobre los SDK de Amazon Cognito, consulte Instalar un SDK de grupo de usuarios.
2.
Para utilizar el SDK de autenticación para habilitar la interfaz de usuario alojada, consulte la aplicación de muestra de CognitoAuth para Android.
3.
Utilice { transitive = true; } al importar aws-android-sdk-cognitoauth a través de Maven en Gradle. Inclúyalo como dependencia en el archivo build.gradle: 346
Amazon Cognito Guía para desarrolladores Adición de seguridad avanzada
compile "com.amazonaws:aws-android-sdk-cognitoidentityprovider-asf:1.0.0"
Para obtener más información, consulte el tema sobre AWS SDK para Android: Amazon Cognito Identity Provider ASF.
Para utilizar la seguridad avanzada con iOS 1. 2. 3.
Es posible que tenga que actualizar el SDK de Amazon Cognito a la versión más reciente. Para obtener más información sobre los SDK de Amazon Cognito, consulte Instalar un SDK de grupo de usuarios. Para utilizar el SDK de autenticación para habilitar la interfaz de usuario alojada, consulte la aplicación de muestra de CognitoAuth para iOS. Para configurar el SDK de autorización mediante Info.plist, añada la clave PoolIdForEnablingASF a la configuración de su grupo de usuarios de Amazon Cognito y establézcala en el ID del grupo de usuarios. Para configurar el SDK de autorización mediante AWSCognitoAuthConfiguration, utilice este inicializador y especifique el ID del grupo de usuarios como userPoolIdForEnablingASF. Para obtener más información, consulte AWSCognitoIdentityProviderASF.
347
Amazon Cognito Guía para desarrolladores Recursos admitidos
Etiquetado de recursos de Amazon Cognito Una etiqueta es un elemento de metadatos que usted o AWS asigna a un recurso de AWS. Cada etiqueta consta de una clave y un valor. En el caso de etiquetas que usted asigna, debe definir la clave y el valor. Por ejemplo, puede definir la clave como stage y el valor de un recurso como test. Las etiquetas le ayudan a hacer lo siguiente: • Identificar y organizar sus recursos de AWS. Muchos servicios de AWS admiten el etiquetado, por lo que puede asignar la misma etiqueta a los recursos de diferentes servicios para indicar que los recursos están relacionados. Por ejemplo, podría asignar la misma etiqueta a un grupo de usuarios de Amazon Cognito que asigne a una tabla de Amazon DynamoDB. • Realizar un seguimiento de los costos de AWS. Estas etiquetas se activan en el panel de AWS Billing and Cost Management. AWS utiliza las etiquetas para clasificar los costos y enviarle un informe mensual de asignación de costos. Para obtener más información, consulte Uso de etiquetas de asignación de costos en la Guía del usuario de AWS Billing and Cost Management. • Controle el acceso a sus recursos basándose en las etiquetas que se les asignan. El acceso se controla especificando claves y valores de etiqueta en las condiciones de una política de AWS Identity and Access Management (IAM). Por ejemplo, podría permitir que un usuario de IAM actualice un grupo de usuarios, pero solo si dicho grupo tiene una etiqueta owner con un valor del nombre de ese usuario. Para obtener más información, consulte Control del acceso mediante etiquetas en la Guía del usuario de IAM. Puede utilizar la AWS CLI o la API de Amazon Cognito para añadir, editar o eliminar etiquetas de grupos de usuarios y grupos de identidades. En el caso específico de los grupos de usuarios, también puede administrar las etiquetas utilizando la consola de Amazon Cognito. Para obtener sugerencias sobre el uso de etiquetas, consulte la entrada sobre estrategias de etiquetado de AWS en el blog de respuestas de AWS. En las siguientes secciones, se ofrece más información acerca de las etiquetas de Amazon Cognito.
Recursos admitidos en Amazon Cognito Los siguientes recursos de Amazon Cognito admiten el etiquetado: • Grupos de usuarios • Grupos de identidades
Restricciones de las etiquetas Las siguientes restricciones básicas se aplican a las etiquetas en recursos de Amazon Cognito: • Número máximo de etiquetas que puede asignar a un recurso – 50 • Longitud máxima de la clave–: 128 caracteres Unicode.
348
Amazon Cognito Guía para desarrolladores Administración de etiquetas con la consola
• Longitud máxima del valor–: 256 caracteres Unicode. • Caracteres válidos para claves y valores – a-z, A-Z, 0-9, espacio y los siguientes caracteres: _ . : / = + - y @ • Las claves y los valores distinguen entre mayúsculas y minúsculas • No utilice aws: como prefijo para claves, ya que su uso está reservado a AWS.
Administración de etiquetas mediante la consola de Amazon Cognito Puede utilizar la consola de Amazon Cognito para administrar las etiquetas que están asignadas a los grupos de usuarios. En el caso de los grupos de identidades, la consola no incluye características de etiquetado, por lo que debe administrar las etiquetas mediante programación. Por ejemplo, puede utilizar la AWS CLI.
Para añadir etiquetas a un grupo de usuarios 1. 2.
Inicie sesión en la Consola de administración de AWS y abra la consola de Amazon Cognito en https:// console.aws.amazon.com/cognito. Elija Manage User Pools (Administrar grupos de usuarios).
3.
En la página Your User Pools (Sus grupos de usuarios), seleccione el grupo de usuarios al que desee añadir etiquetas.
4. 5. 6.
En el menú de navegación de la izquierda, elija Tags (Etiquetas). A menos que el grupo de usuarios ya tenga etiquetas, seleccione Add tag (Añadir etiqueta) para añadir la primera. Especifique los valores de Tag Key (Clave de etiqueta) y Tag Value (Valor de etiqueta).
7. 8.
Para cada etiqueta adicional que desee añadir, elija Add another tag (Añadir otra etiqueta). Cuando haya terminado de añadir etiquetas, elija Save changes (Guardar cambios).
En la página Tags (Etiquetas), también puede editar las claves y los valores de las etiquetas existentes. Para quitar una etiqueta, elija la x que se encuentra en la esquina superior derecha de la etiqueta.
AWS CLI Ejemplos La AWS CLI proporciona comandos que puede utilizar para administrar las etiquetas que asigna a sus grupos de usuarios y de identidades de Amazon Cognito.
Asignación de etiquetas Utilice los siguientes comandos para asignar etiquetas a sus grupos de usuarios y de identidades existentes.
Example tag-resourceComando para grupos de usuarios Asigne etiquetas a un grupo de usuarios utilizando tag-resource en el conjunto de comandos de cognito-idp: $ aws cognito-idp tag-resource \ > --resource-arn user-pool-arn \
349
Amazon Cognito Guía para desarrolladores Visualización de etiquetas > --tags Stage=Test
Este comando incluye los siguientes parámetros: • resource-arn – el nombre de recurso de Amazon (ARN) del grupo de usuarios al que va a aplicar las etiquetas. Para buscar el ARN, elija el grupo de usuarios en la consola de Amazon Cognito y consulte el valor de Pool ARN (ARN de grupo) en la pestaña General settings (Configuración general). • tags – los pares de clave-valor de las etiquetas. Para asignar varias etiquetas a la vez, especifíquelas en una lista separada por comas: $ aws cognito-idp tag-resource \ > --resource-arn user-pool-arn \ > --tags Stage=Test,CostCenter=80432,Owner=SysEng
Example tag-resourceComando para grupos de identidades Asigne etiquetas a un grupo de identidades utilizando tag-resource en el conjunto de comandos de cognito-identity: $ aws cognito-identity tag-resource \ > --resource-arn identity-pool-arn \ > --tags Stage=Test
Este comando incluye los siguientes parámetros: • resource-arn – el nombre de recurso de Amazon (ARN) del grupo de identidades al que va a aplicar las etiquetas. Para buscar el ARN, elija el grupo de identidades en la consola de Amazon Cognito y elija Edit identity pool (Editar grupo de identidades). A continuación, en Identity pool ID (ID de grupo de identidades), elija Show ARN (Mostrar ARN). • tags – los pares de clave-valor de las etiquetas. Para asignar varias etiquetas a la vez, especifíquelas en una lista separada por comas: $ aws cognito-identity tag-resource \ > --resource-arn identity-pool-arn \ > --tags Stage=Test,CostCenter=80432,Owner=SysEng
Visualización de etiquetas Utilice los siguientes comandos para ver las etiquetas que ha asignado a sus grupos de usuarios y de identidades.
Example list-tags-for-resourceComando para grupos de usuarios Consulte las etiquetas que están asignadas a un grupo de usuarios utilizando list-tags-forresource en el conjunto de comandos de cognito-idp: $ aws cognito-idp list-tags-for-resource --resource-arn user-pool-arn
Example list-tags-for-resourceComando para grupos de identidades Consulte las etiquetas que están asignadas a un grupo de identidades utilizando list-tags-forresource en el conjunto de comandos de cognito-identity: 350
Amazon Cognito Guía para desarrolladores Eliminación de etiquetas
$ aws cognito-identity list-tags-for-resource --resource-arn identity-pool-arn
Eliminación de etiquetas Utilice los siguientes comandos para eliminar etiquetas de sus grupos de usuarios y de identidades.
Example untag-resourceComando para grupos de usuarios Elimine etiquetas de un grupo de usuarios utilizando untag-resource en el conjunto de comandos de cognito-idp: $ aws cognito-idp untag-resource \ > --resource-arn user-pool-arn \ > --tag-keys Stage CostCenter Owner
Para el parámetro --tag-keys, especifique una o más claves de etiquetas y no incluya los valores de etiqueta.
Example untag-resourceComando para grupos de identidades Elimine etiquetas de un grupo de identidades utilizando untag-resource en el conjunto de comandos de cognito-identity: $ aws cognito-identity untag-resource \ > --resource-arn identity-pool-arn \ > --tag-keys Stage CostCenter Owner
Para el parámetro --tag-keys, especifique una o más claves de etiquetas y no incluya los valores de etiqueta.
Important Después de eliminar un usuario o un grupo de identidades, las etiquetas relacionadas con el grupo eliminado pueden seguir apareciendo en la consola de o las llamadas a la API hasta treinta días después de la eliminación.
Aplicación de etiquetas al crear recursos Utilice los siguientes comandos para asignar etiquetas en el momento de crear un grupo de usuarios o un grupo de identidades.
Example create-user-poolComando con etiquetas Cuando se crea un grupo de usuarios mediante el comando create-user-pool, es posible especificar etiquetas con el parámetro --user-pool-tags: $ aws cognito-idp create-user-pool \ > --pool-name user-pool-name \ > --user-pool-tags Stage=Test,CostCenter=80432,Owner=SysEng
Example create-identity-poolComando con etiquetas Cuando se crea un grupo de identidades mediante el comando create-identity-pool, es posible especificar etiquetas con el parámetro --identity-pool-tags: 351
Amazon Cognito Guía para desarrolladores Acciones de API
$ > > >
aws cognito-identity create-identity-pool \ --identity-pool-name identity-pool-name \ --allow-unauthenticated-identities \ --identity-pool-tags Stage=Test,CostCenter=80432,Owner=SysEng
Administración de etiquetas mediante la API de Amazon Cognito Puede utilizar las siguientes acciones de la API de Amazon Cognito para administrar las etiquetas de sus grupos de usuarios y de identidades.
Acciones de la API para las etiquetas de grupo de usuarios Utilice las siguientes acciones de la API para asignar, ver y eliminar etiquetas de los grupos de usuarios. • TagResource • ListTagsForResource • UntagResource • CreateUserPool
Acciones de la API para las etiquetas de grupo de identidades Utilice las siguientes acciones de la API para asignar, ver y eliminar etiquetas de los grupos de identidades. • TagResource • ListTagsForResource • UntagResource • CreateIdentityPool
352
Amazon Cognito Guía para desarrolladores Cuotas de operación
Cuotas en Amazon Cognito Amazon Cognito limita el número de operaciones que puede realizar en su cuenta. Amazon Cognito también limita el número y el tamaño de Amazon Cognito los recursos de . Cuotas de operación (p. 353) • Clasificación de cuotas (p. 353) • Tratamiento especial de operaciones (p. 353) • Operaciones de categoría (p. 354) • Realizar un seguimiento del uso de la cuota (p. 358) • Optimizar cuotas (p. 359) • Identificar los requisitos de cuota (p. 358) • Cuotas de tasa de solicitudes de API (p. 359) Cuotas de recursos (p. 360)
Cuotas de operación Clasificación de cuotas Amazon Cognito limita el número de operaciones, como InitiateAuth o RespondToAuthChallenge, que puede utilizar para realizar determinadas acciones de usuario en sus aplicaciones. Estas operaciones se agrupan en categorías de casos de uso comunes, como UserAuthentication o UserCreation. Para obtener una lista de operaciones por categorías, consulte Operaciones de categoría (p. 354). Las categorías facilitan la monitorización del uso y la solicitud de aumentos de cuota. Las cuotas de operación se definen como el número de solicitudes permitidas por segundo (RPS) para todas las operaciones dentro de una categoría. El Grupos de usuarios de Amazon Cognito servicio aplica cuotas a todas las operaciones de cada categoría. Por ejemplo, la categoría UserCreation, incluye cuatro operaciones, SignUp, ConfirmSignUp AdminCreateUser, y AdminConfirmSignUp. Se asigna con una cuota combinada de 30 RPS. Cada operación dentro de esta categoría puede llamar a hasta 30 RPS por separado o combinadas si se producen varias operaciones al mismo tiempo.
Note La cuota de categoría se aplica para cada cuenta de AWS en todos los grupos de usuarios de una cuenta y región.
Tratamiento especial de operaciones Las cuotas de operación se miden y aplican para las solicitudes totales combinadas en el nivel de categoría, con la excepción de las AdminRespondToAuthChallenge operaciones RespondToAuthChallenge y , donde se aplican las reglas de control especiales. La UserAuthentication categoría incluye cuatro operaciones: AdminInitiateAuth, InitiateAuth AdminRespondToAuthChallenge, y RespondToAuthChallenge. Las InitiateAuth operaciones AdminInitiateAuth y se miden y aplican por cuota de categoría. Las RespondToAuthChallenge operaciones AdminRespondToAuthChallenge y coincidentes están sujetas a una cuota independiente que es tres veces el límite de UserAuthentication categorías, para acomodar varios desafíos 353
Amazon Cognito Guía para desarrolladores Operaciones de categoría
de autenticación configurados en las aplicaciones de los desarrolladores. Esta cuota elevada es suficiente para cubrir la gran mayoría de casos de uso. Más allá del umbral de tres veces por llamada de autenticación, la tasa de exceso se tendrá en cuenta para el límite de UserAuthentication categorías. Por ejemplo, si su cuota para la UserAuthentication categoría es 80 RPS, puede llamar a RespondToAuthChallenge o AdminRespondToAuthChallenge hasta 240 RPS (80 RPS x 3). Si la aplicación está configurada para cuatro rondas de desafíos por llamada de autenticación y tiene 70 inicios de sesión por segundo, el total RespondToAuthChallenge será 280 RPS (70 x 4), lo que supone 40 RPS por encima de la cuota. Las 40 RPS adicionales se añadirán a 70 InitiateAuth llamadas. El uso total de UserAuthentication la categoría es 110 RPS (40 + 70). Esto supera la cuota de categoría establecida en 80 RPS para que esta aplicación se limite porque está 30 RPS por encima de la cuota de categoría de 80 RPS.
Operaciones de categoría Puede encontrar los mapeos entre las operaciones de y sus respectivas categorías en la siguiente tabla. Todas las categorías enumeradas en esta tabla tienen cuotas ajustables, que se pueden aumentar a petición del cliente. Para obtener más información, consulte Cuotas de tasa de solicitudes de API (p. 359). Las cuotas ajustables se aplican en el nivel de cuenta. Existen algunas operaciones de categoría que están sujetas a reglas de cuota más restringidas con un umbral de límite inferior en el nivel del grupo de usuarios. Puede encontrar estas categorías con un asterisco en la tabla y sus cuotas en la nota que aparece a continuación de la tabla.
Note El límite de frecuencia de cada categoría depende de los usuarios activos mensuales (MAUs Los límites predeterminados admiten hasta dos millones MAUs. No se recomienda enviar una solicitud de aumento de límite si tiene menos de un millón MAUs. Las cuotas de operación de categoría se aplican a todos los usuarios de un grupo de usuarios. También hay cuotas por usuario que se aplican a cada usuario. Para cada usuario, puede realizar hasta diez solicitudes por segundo que son operaciones de "lectura", incluido el inicio de sesión u obtener información sobre el perfil o el dispositivo. También puede realizar hasta diez solicitudes por segundo que son operaciones de "escritura", incluida la actualización de la información de perfil o la configuración de MFA. No puede cambiar las cuotas por usuario. Nombre de categoría
Operaciones
Descripción
Cuota predeterminada (en solicitudes por segundo)
UserAuthentication • InitiateAuth
Operaciones 120 que autentican • RespondToAuthChallenge (inician sesión) a • AdminInitiateAuth un usuario. • AdminRespondToAuthChallenge Estas operaciones están sujetas a Tratamiento especial de operaciones (p. 353).
UserCreation
• SignUp
Operaciones que crean o • ConfirmSignUp confirman un • AdminCreateUser Amazon Cognito
354
50
Amazon Cognito Guía para desarrolladores Operaciones de categoría
Nombre de categoría
Operaciones
Descripción
Cuota predeterminada (en solicitudes por segundo)
• AdminConfirmSignUp usuario nativo. Los usuarios nativos son usuarios que sus grupos de usuarios de Cognito crean y verifican directamente. UserFederation
Amazon Cognito Operaciones administradas de para federar un usuario a través de un IdP de terceros en Cognito.
Operaciones que federan (autentican) usuarios con un proveedor de identidades tercero en sus grupos de usuarios de Cognito.
UserAccountRecovery • ChangePassword Operaciones que recuperan • ConfirmForgotPassword la cuenta de un • ForgotPassword usuario o cambian • AdminResetUserPassword o actualizan la • AdminSetUserPassword contraseña de un usuario. UserRead
• AdminGetUser • GetUser
UserUpdate
Operaciones que recuperan un usuario de sus grupos de usuarios.
• AdminAddUserToGroup Las operaciones que los clientes • AdminDeleteUserAttributes utilizan para • AdminUpdateUserAttributes administrar • AdminDeleteUser usuarios y • AdminDisableUser atributos de • AdminEnableUser usuario. • AdminLinkProviderForUser • AdminDisableProviderForUser • VerifyUserAttribute • DeleteUser • DeleteUserAttributes • UpdateUserAttributes • AdminUserGlobalSignOut • GlobalSignOut • AdminRemoveUserFromGroup
355
25
30
120
25
Amazon Cognito Guía para desarrolladores Operaciones de categoría
Nombre de categoría
Operaciones
Descripción
Cuota predeterminada (en solicitudes por segundo)
UserResourceRead• AdminGetDevice
Operaciones que recuperan • AdminListGroupsForUser información • AdminListDevices de recursos • GetDevice de usuario de • ListDevices Amazon Cognito como el dispositivo • GetUserAttributeVerificationCode o el grupo. • ResendConfirmationCode
50
• AdminListUserAuthEvents UserResourceUpdate • AdminForgetDeviceOperaciones que actualizan la • AdminUpdateAuthEventFeedback información de • AdminSetUserMFAPreference los recursos del • AdminSetUserSettings usuario, como el • AdminUpdateDeviceStatus grupo. • UpdateDeviceStatus
25
• UpdateAuthEventFeedback • ConfirmDevice • SetUserMFAPreference • SetUserSettings • VerifySoftwareToken • AssociateSoftwareToken • ForgetDevice UserList
• ListUsers
Operaciones que 30 devuelven una lista • ListUsersInGroup de usuarios.
UserPoolRead
• DescribeUserPool Operaciones que leen los grupos de • ListUserPools usuarios.
15
UserPoolUpdate
• CreateUserPool
15
• UpdateUserPool • DeleteUserPool
Operaciones que crean, actualizan y eliminan sus grupos de usuarios.
356
Amazon Cognito Guía para desarrolladores Operaciones de categoría
Nombre de categoría
Operaciones
Descripción
Cuota predeterminada (en solicitudes por segundo)
UserPoolResourceRead • DescribeIdentityProvider Operaciones que recuperan un • DescribeResourceServer recurso de un • DescribeUserImportJob grupo de usuarios, • DescribeUserPoolDomain como el grupo.* • GetCSVHeader • GetGroup
20
• GetSigningCertificate • GetIdentityProviderByIdentifier • GetUserPoolMfaConfig • ListGroups • ListIdentityProviders • ListResourceServers • ListTagsForResource • ListUserImportJobs • DescribeRiskConfiguration • GetUICustomization UserPoolResourceUpdate • AddCustomAttributes Operaciones que actualizan la • CreateGroup información de • CreateIdentityProvider recursos de un • CreateResourceServer grupo de usuarios, • CreateUserImportJob como el grupo.* • CreateUserPoolDomain
15
• DeleteGroup • DeleteIdentityProvider • DeleteResourceServer • DeleteUserPoolDomain • SetUserPoolMfaConfig • StartUserImportJob • StopUserImportJob • UpdateGroup • UpdateIdentityProvider • UpdateResourceServer • SetRiskConfiguration • SetUICustomization • TagResource • UntagResource UserPoolClientRead • DescribeUserPoolClient Operaciones que • ListUserPoolClientsmuestran sus clientes de grupos de usuarios.*
357
15
Amazon Cognito Guía para desarrolladores Realizar un seguimiento del uso de la cuota
Nombre de categoría
Operaciones
Descripción
Cuota predeterminada (en solicitudes por segundo)
UserPoolClientUpdate • CreateUserPoolClient Operaciones que crean, actualizan • DeleteUserPoolClient y eliminan los • UpdateUserPoolClient clientes del grupo de usuarios.*
15
* Cualquier operación individual de esta categoría tiene una restricción que impide que se llame a la operación a una velocidad superior a 5 RPS para un único grupo de usuarios.
Realizar un seguimiento del uso de la cuota Cada categoría de API tiene CallCount ThrottleCount las métricas CloudWatch y , que se aplican en el nivel de cuenta. Puede utilizar CallCount para realizar un seguimiento del número total de llamadas realizadas por los clientes relacionadas con una categoría. Puede utilizar ThrottleCount para realizar un seguimiento del número total de llamadas restringidas relacionadas con una categoría. Puede utilizar las CallCount métricas ThottleCount y con la Sum estadística para contar el número total de llamadas en una categoría. Para obtener más información sobre las métricas de CloudWatch uso, consulte Métricas de CloudWatch uso de . La utilización y el uso son dos términos que pueden ayudarle a comprender la monitorización de las cuotas de servicio. La utilización es el porcentaje de una cuota de servicio en uso. Por ejemplo, si el valor de cuota es de 200 recursos y 150 recursos están en uso, la utilización es del 75%. Uso es el número de recursos u operaciones en uso para una cuota de servicio. Seguimiento del uso a través de CloudWatch métricas de Puede realizar un seguimiento y recopilar métricas de Grupos de usuarios de Amazon Cognito utilización mediante CloudWatch. El CloudWatch panel mostrará métricas sobre todos los servicios de AWS que utilice. Puede utilizar CloudWatch para crear alarmas de métricas. Las alarmas se pueden configurar para enviarle notificaciones o realizar un cambio en un recurso específico que está monitorizando. Para obtener más información sobre CloudWatch las métricas de , Cuotas de servicioconsulte Seguimiento de las métricas de CloudWatch (p. 319)uso. Seguimiento de la utilización a través de Cuotas de servicio métricas de Grupos de usuarios de Amazon Cognito está integrado con Cuotas de servicio, que es una interfaz basada en navegador que puede utilizar para ver y administrar el uso de las cuotas de servicio. En la Cuotas de servicio consola de , puede buscar el valor de una cuota específica, ver la información de monitorización, solicitar un aumento de cuota y configurar CloudWatch alarmas. Una vez que su cuenta haya estado activa un tiempo, puede ver un gráfico de la utilización de los recursos. Para obtener más información sobre cómo ver las cuotas en la Cuotas de servicio consola de , consulte Visualización de Cuotas de servicio .
Identificar los requisitos de cuota Para calcular los requisitos de cuota, determine cuántos usuarios activos interactuarán con su aplicación en un periodo de tiempo específico. Por ejemplo, si la aplicación espera un promedio de un millón de
358
Amazon Cognito Guía para desarrolladores Optimizar cuotas
usuarios activos para iniciar sesión en un periodo 8-hour, tendría que poder autenticar un promedio de 35 usuarios por segundo. Además, si supone que la sesión de usuario promedio es de dos horas y los tokens están configurados para caducar después de una hora, cada usuario tiene que actualizar sus tokens una vez durante esta sesión. La cuota media requerida para que la categoría UserAuthentication admita esta carga es de 70 RPS. Si asume una proporción de pico a promedio de 3:1 teniendo en cuenta la varianza de la frecuencia de inicio de sesión del usuario durante el periodo de ocho horas, necesita la cuota UserAuthentication deseada de 200 RPS.
Note Si llama a varias operaciones para cada acción del usuario, debe sumar las tasas de llamadas a operaciones individuales en el nivel de categoría.
Optimizar cuotas Siga uno de los métodos siguientes para gestionar una tasa de llamadas máxima. Volver a intentar el intento después de un periodo de espera de interrupción Puede detectar el error en cada llamada a la API y, a continuación, reintentar el intento después de un periodo de interrupción. Puede ajustar el algoritmo de retardo en función de las necesidades empresariales y la carga. Los SDKs Amazon tienen lógica de reintento integrada. Para obtener más información sobre las herramientas de Amazon y SDKs, consulte Herramientas para compilar en AWS. Usar una base de datos externa para atributos actualizados con frecuencia Si la aplicación requiere varias llamadas a un grupo de usuarios para leer o escribir atributos personalizados, utilice almacenamiento externo. Puede utilizar su base de datos preferida para almacenar atributos personalizados o utilizar una capa de caché para cargar un perfil de usuario durante el inicio de sesión. Puede hacer referencia a este perfil desde la caché cuando sea necesario en lugar de volver a cargar el perfil de usuario desde un grupo de usuarios. Validar tokens JWT en el lado del cliente Las aplicaciones tienen que validar tokens JWT antes de confiar en ellas. Puede verificar la firma y validez de los tokens en el lado del cliente sin enviar llamadas a la API a un grupo de usuarios. Una vez validado el token, puede confiar en las notificaciones del token y utilizar las notificaciones en lugar de realizar más llamadas a la getUser API. Para obtener más información sobre la verificación de tokens JSON, consulte Verificación de un token web JSON.
Cuotas de tasa de solicitudes de API Amazon Cognito limita el número de operaciones del grupo de usuarios que puede realizar en su cuenta. Puede solicitar un aumento de las cuotas de tasa de solicitudes de API ajustables en Amazon Cognito. Para solicitar un aumento de cuota, puede utilizar la consola Service Quotas, utilizar el formulario de aumento del límite de servicio, utilizar la RequestServiceQuotaIncrease API de o la ListAWSDefaultServiceQuotas API de . • Para solicitar un aumento de cuota mediante la Cuotas de servicio consola de , consulte Solicitud de un aumento de cuota de API en la Guía del usuario de Cuotas de servicio .
359
Amazon Cognito Guía para desarrolladores Cuotas de recursos
• Si la cuota aún no está disponible en Cuotas de servicio, utilice el formulario de aumento del límite del servicio.
Note Solo se pueden aumentar las cuotas ajustables.
Cuotas de recursos Las cuotas de recursos son cuotas que limitan el número y el tamaño de los recursos. Puede solicitar un aumento de las cuotas de recursos ajustables en Amazon Cognito. Para solicitar un aumento de cuota, puede utilizar la Cuotas de servicio consola de o el formulario de aumento del límite del servicio de . Para solicitar una cuota desde la Cuotas de servicio consola de , consulte Solicitud de un aumento de cuota en la Guía del usuario de Cuotas de servicio . Si la cuota aún no está disponible en Cuotas de servicio, utilice el formulario de aumento del límite del servicio.
Cuotas de recursos ajustables En las tablas siguientes se proporcionan las cuotas de recursos ajustables para Amazon Cognito. Estas cuotas pueden cambiarse. Cuotas de recursos de grupos de usuarios de Recurso
Cuota
Número máximo de clientes de aplicaciones por grupo de usuarios
1 000
Número máximo de grupos de usuarios por cuenta
1 000
Número máximo de trabajos de importación de usuarios por grupo de usuarios
1 000
Número máximo de proveedores de identidades por grupo de usuarios
300
Número máximo de servidores de recursos por grupo de usuarios
25
Número máximo de usuarios por grupo de usuarios
40 000 000
Cuotas de recursos de grupos de identidades (usuarios federados) Recurso
Cuota
Número máximo de grupos de identidades por cuenta
1 000
Número máximo de proveedores de grupos de usuarios de Amazon Cognito por grupo de identidades
50
Número máximo de reglas para el control de acceso basado en roles (RBAC)
25
360
Amazon Cognito Guía para desarrolladores Cuotas de recursos no ajustables
Cuotas de recursos de sincronización Recurso
Cuota
Número máximo de conjuntos de datos por identidad
20
Número máximo de registros por conjunto de datos
1024
Tamaño máximo de un solo conjunto de datos
1MB
Cuotas de recursos no ajustables En las siguientes tablas se describen las cuotas Amazon Cognito no ajustables. Estas cuotas no pueden cambiarse. Cuotas de validez de token de grupos de usuarios Token
Cuota
Token de ID
5 minutos – 1 día
Token de actualización
1 hora – 3650 días
Token de acceso
5 minutos – 1 día
Cuotas de recursos de grupos de usuarios de Recurso
Cuota
Número máximo de atributos personalizados por grupo de usuarios
50
Número máximo de caracteres por atributo
2048 bytes
Número máximo de caracteres en el nombre de atributo personalizado
20
Caracteres mínimos y máximos en la contraseña
6 – 99
Número máximo de mensajes de correo electrónico enviados a diario por AWS cuenta de ¹
50
Número máximo de caracteres en el asunto del correo electrónico
140
Número máximo de caracteres en el mensaje de correo electrónico
20000
Número máximo de caracteres en el mensaje de verificación de SMS
140
Número máximo de caracteres en la contraseña
256
Número máximo de caracteres en el nombre del proveedor de identidad
40
361
Amazon Cognito Guía para desarrolladores Cuotas de recursos no ajustables
Recurso
Cuota
Número máximo de identificadores por proveedor de identidad
50
Número máximo de identidades vinculadas a un usuario
5
Número máximo de URL de devolución de llamada por aplicación cliente
100
Número máximo de URL de cierre de sesión por aplicación cliente
100
Cantidad máxima de ámbitos por servidor de recursos
100
Número máximo de ámbitos por cliente de aplicación
50
Número máximo de dominios personalizados por cuenta
4
Número máximo de grupos al que puede pertenecer cada usuario.
100
Número máximo de grupos por grupo de usuarios
10000
¹Esta cuota solo se aplica si utiliza la característica de correo electrónico predeterminada para un Amazon Cognito grupo de usuarios de . Para habilitar un mayor volumen de entrega de correo electrónico, configure su grupo de usuarios para que utilice su configuración de correo electrónico de Amazon SES. Para obtener más información, consulte Configuración de correo electrónico para grupos de usuarios de Amazon Cognito (p. 154). Cuotas de recursos de validez de código de grupos de usuarios de Recurso
Cuota
Código de confirmación de inscripción
24 horas
Validez del código de verificación de atributo de usuario
24 horas
Código de autenticación multifactor
3 minutos
Código de contraseña olvidada
1hora
Cuotas de recursos de grupos de identidades (usuarios federados) Recurso
Cuota
Número máximo de identidades por grupo de identidades
Sin límite
Número máximo de caracteres por nombre de grupo de identidades
128 bytes
362
Amazon Cognito Guía para desarrolladores Cuotas de recursos no ajustables
Recurso
Cuota
Número máximo de caracteres del nombre de proveedor de inicio de sesión
2048 bytes
Número máximo de resultados de una única lista o llamada de búsqueda
60
Número máximo de proveedores de identidad para los que se pueden especificar mapeos de roles
10
Cuotas de recursos de sincronización Recurso
Cuota
Número máximo de caracteres en el nombre del conjunto de datos
128 bytes
Tiempo mínimo de espera para una publicación en masa tras una solicitud efectuada correctamente
24 horas
363
Amazon Cognito Guía para desarrolladores Referencia de la API de grupos de usuarios
Referencias de API de Amazon Cognito Para obtener información sobre las referencias de API de Amazon Cognito, consulte los siguientes temas: Temas • Referencia de la API de grupos de usuarios de Amazon Cognito (p. 364) • Grupos de usuarios de Amazon CognitoReferencia de la API Auth de (p. 364) • Referencia de API de grupos de identidades de Amazon Cognito (identidades federadas) (p. 377) • Referencia de API de sincronización de Amazon Cognito (p. 377)
Referencia de la API de grupos de usuarios de Amazon Cognito Los grupos de usuarios de Amazon Cognito permiten que los usuarios de sus aplicaciones web y móviles puedan registrarse e iniciar sesión. Es posible cambiar las contraseñas de los usuarios autenticados e iniciar flujos de contraseña olvidada para los usuarios sin autenticar. Para obtener más información, consulte Flujo de autenticación de los grupos de usuarios (p. 314) y Uso de tokens con grupos de usuarios (p. 158). Para tener acceso a una referencia completa de la API de grupos de usuarios, consulte Referencia de la API de Grupos de usuarios de Amazon Cognito.
Grupos de usuarios de Amazon CognitoReferencia de la API Auth de Una vez que un dominio se ha configurado para el grupo de usuarios, Amazon Cognito aloja un servidor de autenticación que permite agregar páginas de inscripción e inicio de sesión aprovisiona automáticamente una interfaz de usuario web alojada que le permite agregar páginas web de registro e inicio de sesión a su aplicación. Para obtener más información, consulte Añadir una aplicación para habilitar la interfaz de usuario web alojada. Esta sección contiene el contrato HTTPS con el servidor de autenticación de Amazon Cognito desde un cliente de grupo de usuarios, incluidas solicitudes y respuestas de ejemplo. Describe el comportamiento esperado del servidor de autenticación para las condiciones positivas y negativas. Además de la API REST del contrato de servidor, Amazon Cognito también proporciona Auth SDKs para Android, iOS y JavaScript que facilita la creación de solicitudes e interactúa con el servidor. Más información sobre Amazon Cognito SDKs. Para obtener más información sobre la especificación, consulte OpenID Connect 1.0 and OAuth 2.0. Temas
364
Amazon Cognito Guía para desarrolladores Punto de enlace AUTHORIZATION
• Punto de enlace AUTHORIZATION (p. 365) • Punto de enlace TOKEN (p. 369) • Punto de enlace USERINFO (p. 373) • Punto de enlace LOGIN (p. 375) • Punto de enlace LOGOUT (p. 376)
Punto de enlace AUTHORIZATION El punto de enlace /oauth2/authorize inicia una sesión del usuario.
GET /oauth2/authorize El /oauth2/authorize punto de enlace solo admite HTTPS GET. El cliente de grupo de usuarios normalmente realiza esta solicitud a través de un navegador. Entre los navegadores web se incluyen Chrome o Firefox. Los navegadores Android incluyen la pestaña Custom Chrome. Los navegadores iOS incluyen el controlador de vista de Safari. El servidor de autorización requiere el protocolo HTTPS en lugar de HTTP para obtener acceso al punto de enlace de autorización. Para obtener más información sobre la especificación, consulte el tema relacionado con el punto de enlace de autorización.
Parámetros de solicitud response_type El tipo de respuesta. Debe ser code o token. Indica si el cliente desea un código de autorización (flujo de concesión de código de autorización) para el usuario final o emite tokens directamente para el usuario final (flujo implícito). Obligatorio client_id El ID de cliente. Debe ser un cliente previamente registrado en el grupo de usuarios y debe estar habilitado para federación. Obligatorio redirect_uri La dirección URL a la que el servidor de autenticación redirige el navegador después de que se le haya concedido la autorización al usuario. Una URI de redireccionamiento debe: • Ser una URI absoluta. • Estar registrada previamente con un cliente. • No incluir un componente fragmento. Consulte OAuth 2.0 - Punto de enlace de redireccionamiento. Amazon Cognito requiere HTTPS sobre HTTP, excepto para http://localhost únicamente con fines de prueba. También se admiten devoluciones de llamada URLs de aplicaciones myapp://example como . 365
Amazon Cognito Guía para desarrolladores Punto de enlace AUTHORIZATION
Obligatorio state Un valor opaco que los clientes añaden a la solicitud inicial. El servidor de autorización incluye este valor cuando redirige al cliente. El cliente debe utilizar este valor para evitar ataques https://en.wikipedia.org/wiki/Crosssite_request_forgery CSRF. Opcional, pero totalmente recomendado. identity_provider Usado por el desarrollador para autenticar directamente con un proveedor específico. • Para el inicio de sesión en redes sociales, los valores válidos son Facebook, LoginWithAmazonGoogle, y SignInWithApple . • Para los grupos de usuarios de Amazon Cognito, el valor es COGNITO. • Para otros proveedores de identidad, este sería el nombre que asignó a IdP en el grupo de usuarios. Opcional idp_identifier Usado por el desarrollador para asignar a un nombre de proveedor sin exponer el nombre del proveedor. Opcional scope Puede ser una combinación de cualquier ámbito reservado por el sistema o ámbitos personalizados asociados a un cliente. Los ámbitos deben estar separados por espacios. Los ámbitos reservados por el sistema son openid, email phone, profile, y aws.cognito.signin.user.admin. Cualquier ámbito debe haberse asociado previamente al cliente, de lo contrario, se omitirá en tiempo de ejecución. Si el cliente no solicita ningún ámbito, el servidor de autenticación utiliza todos los ámbitos asociados con el cliente. Solo se devuelve un token de ID si se solicita el ámbito openid El token de acceso solo se puede utilizar en Grupos de usuarios de Amazon Cognito si se solicita el ámbito aws.cognito.signin.user.admin Los ámbitos phone, email y profile solo se pueden solicitar si se solicita también el ámbito openid Estos ámbitos dictan las notificaciones que se incluyen en el token de ID. Opcional code_challenge_method El método utilizado para generar el desafío. El RFC https://tools.ietf.org/html/rfc7636 de PKCE define dos métodos, S256 y sin formato; sin embargo, el servidor Amazon Cognito de autenticación solo admite S256 Opcional code_challenge El desafío generado por code_verifier. Solo es necesario cuando se especifica code_challenge_method 366
Amazon Cognito Guía para desarrolladores Punto de enlace AUTHORIZATION
Ejemplos de solicitudes con respuestas positivas Concesión de código de autorización Solicitud de muestra GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=code& client_id=ad398u21ijw3s9w3939& redirect_uri=https://YOUR_APP/redirect_uri& state=STATE& scope=openid+profile+aws.cognito.signin.user.admin
Respuesta de ejemplo El servidor de autenticación de Amazon Cognito redirige a la aplicación con el código y el estado de autorización. El código y el estado deben devolverse en los parámetros de la cadena de consulta y no en el fragmento. Una cadena de consulta es la parte de una solicitud web que aparece después del carácter "?" y puede contener uno o varios parámetros separados por caracteres "&". Un fragmento es la parte de una solicitud web que aparece detrás de un carácter "#" para especificar una sección secundaria de un documento.
Note La respuesta devuelve un código de un solo uso válido durante cinco minutos. HTTP/1.1 302 Found Location: https://YOUR_APP/redirect_uri?code=AUTHORIZATION_CODE&state=STATE
Concesión de código de autorización con PKCE Solicitud de muestra GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=code& client_id=ad398u21ijw3s9w3939& redirect_uri=https://YOUR_APP/redirect_uri& state=STATE& scope=aws.cognito.signin.user.admin& code_challenge_method=S256& code_challenge=CODE_CHALLENGE
Respuesta de ejemplo El servidor de autenticación redirige a la aplicación con el código y el estado de autorización. El código y el estado deben devolverse en los parámetros de la cadena de consulta y no en el fragmento. HTTP/1.1 302 Found Location: https://YOUR_APP/redirect_uri?code=AUTHORIZATION_CODE&state=STATE
Concesión de token sin ámbito openid Solicitud de muestra GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? response_type=token&
367
Amazon Cognito Guía para desarrolladores Punto de enlace AUTHORIZATION client_id=ad398u21ijw3s9w3939& redirect_uri=https://YOUR_APP/redirect_uri& state=STATE& scope=aws.cognito.signin.user.admin
Respuesta de ejemplo El servidor de autorización de Amazon Cognito redirige a la aplicación con el token de acceso. Como no se ha solicitado el ámbito openid, no se devuelve un token de ID. En este flujo no se devuelve nunca un token de actualización. El token y el estado se devuelven en el fragmento y no en la cadena de consulta. HTTP/1.1 302 Found Location: https://YOUR_APP/ redirect_uri#access_token=ACCESS_TOKEN&token_type=bearer&expires_in=3600&state=STATE
Concesión de token con ámbito openid Solicitud de muestra GET
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/ authorize? response_type=token& client_id=ad398u21ijw3s9w3939& redirect_uri=https://YOUR_APP/redirect_uri& state=STATE& scope=aws.cognito.signin.user.admin+openid+profile
Respuesta de ejemplo El servidor de autorización redirige a la aplicación con el token de acceso y el token de ID (porque se incluyó el ámbito openid HTTP/1.1 302 Found Location: https://YOUR_APP/ redirect_ur#id_token=ID_TOKEN&access_token=ACCESS_TOKEN&token_type=bearer&expires_in=3600&state=STATE
Ejemplos de respuestas negativas A continuación se proporcionan ejemplos de respuestas negativas: • Si client_id y redirect_uri son válidos, pero hay otros problemas con los parámetros de la solicitud (por ejemplo, si no se incluye response_type; si se especifica code_challenge, pero no se especifica code_challenge_method; o si code_challenge_method no es "S256"), el servidor de autenticación redirige el error al redirect_uri. del cliente. HTTP 1.1 302 Found Location: https://client_redirect_uri? error=invalid_request • Si el cliente solicita "code" o "token" en response_type, pero no tiene permiso para estas solicitudes, el servidor de autorización de Amazon Cognito debe devolver unauthorized_client al redirect_uri del cliente, tal y como se indica a continuación: HTTP 1.1 302 Found Location: https://client_redirect_uri? error=unauthorized_client • Si el cliente solicita un ámbito no válido, desconocido o con un formato incorrecto, el servidor de autorización de Amazon Cognito debe devolver invalid_scope al redirect_uri del cliente, tal y como se indica a continuación: 368
Amazon Cognito Guía para desarrolladores Punto de enlace TOKEN
HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_scope • Si hay algún error inesperado en el servidor, el servidor de autenticación debe devolver server_error al del redirect_uricliente. No debe ser el error HTTP 500 que se muestra al usuario final en el navegador, ya que este error no se envía al cliente. Debería devolverse el siguiente error: HTTP 1.1 302 Found Location: https://client_redirect_uri?error=server_error • Al autenticarse mediante la federación a los proveedores de identidad de terceros, es posible que Cognito sufra problemas de conexión como los siguientes: • Si se produce un tiempo de espera de conexión al solicitar un token desde el proveedor de identidad, el servidor de autenticación redirecciona el error al redirect_uri del cliente como se muestra a continuación: HTTP 1.1 302 Found Location: https://client_redirect_uri? error=invalid_request&error_description=Timeout+occurred+in+calling+IdP +token+endpoint • Si se produce un tiempo de espera de conexión al llamar a un punto de enlace de jwks para la validación de un id_token, el servidor de autenticación redirecciona el error al redirect_uri del cliente como se muestra a continuación: HTTP 1.1 302 Found Location: https://client_redirect_uri? error=invalid_request&error_description=error_description=Timeout+in+calling +jwks+uri • Al autenticarse mediante la federación a los proveedores de identidad de terceros, es posible que los proveedores devuelvan respuestas de error debido a errores de configuración o, de lo contrario, como los siguientes: • Si se recibe una respuesta de error de otros proveedores, el servidor de autenticación redirige el error al redirect_uri del cliente como se muestra a continuación: HTTP 1.1 302 Found Location: https://client_redirect_uri? error=invalid_request&error_description=[IdP name]+Error+-+[status code]+error getting token • Si se recibe una respuesta de error de Google, el servidor de autenticación redirige el error al redirect_uri del cliente como se muestra a continuación: HTTP 1.1 302 Found Location: https://client_redirect_uri? error=invalid_request&error_description=Google+Error+-+[status code]+[Google provided error code] • En el extraño caso de que Cognito encuentre una excepción en el protocolo de comunicación al realizar cualquier conexión con un proveedor de identidad externo, el servidor de autenticación redirige el error al redirect_uri del cliente con alguno de los siguientes mensajes: • HTTP 1.1 302 Found Location: https://client_redirect_uri? error=invalid_request&error_description=Connection+reset • HTTP 1.1 302 Found Location: https://client_redirect_uri? error=invalid_request&error_description=Read+timed+out
Punto de enlace TOKEN El punto de enlace /oauth2/token obtiene los tokens del usuario.
POST /oauth2/token El punto de enlace /oauth2 solo admite HTTPS POST. El cliente del grupo de usuarios realiza solicitudes a este punto de enlace directamente y no a través del navegador del sistema.
369
Amazon Cognito Guía para desarrolladores Punto de enlace TOKEN
Para obtener más información sobre la especificación, consulte el tema relacionado con el punto de enlace de token.
Parámetros de la solicitud en el encabezado Autorización Si el cliente ha emitido un secreto, debe pasar su client_id y client_secret en el encabezado de la autorización a través de la autorización HTTP Basic. El secreto es Basic Base64Encode(client_id:client_secret). Content-Type Debe ser siempre 'application/x-www-form-urlencoded'.
Parámetros de la solicitud en el cuerpo grant_type Tipo de concesión. Debe ser authorization_code o refresh_token o client_credentials. Obligatorio client_id ID de cliente. Debe ser un cliente previamente registrado en el grupo de usuarios. El cliente debe estar habilitado para la federación de Amazon Cognito Obligatorio si el cliente es público y no tiene una clave secreta. scope Puede ser una combinación de cualquier ámbito asociado a un cliente. Cualquier ámbito solicitado debe haberse asociado previamente al cliente. De lo contrario, se ignorará durante el tiempo de ejecución. Si el cliente no solicita ningún ámbito, el servidor de autenticación utiliza todos los ámbitos personalizados asociados con el cliente. Opcional. Solo se utiliza si grant_type es client_credentials. redirect_uri Debe ser el mismo redirect_uri que el que se utilizó para obtener authorization_code en / oauth2/authorize. Solo es obligatorio si grant_type es authorization_code. refresh_token El token de actualización.
Note El punto de enlace del token devuelve refresh_token solo cuando grant_type es authorization_code. código Obligatorio si grant_type es authorization_code. 370
Amazon Cognito Guía para desarrolladores Punto de enlace TOKEN
code_verifier La clave de la prueba. Obligatorio si grant_type es authorization_code y el código de autorización se ha solicitado con PKCE.
Ejemplos de solicitudes con respuestas positivas Intercambio de un código de autorización para los tokens Solicitud de muestra POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token& Content-Type='application/x-www-form-urlencoded'& Authorization=Basic aSdxd892iujendek328uedj grant_type=authorization_code& client_id=djc98u3jiedmi283eu928& code=AUTHORIZATION_CODE& redirect_uri=com.myclientapp://myclient/redirect
Respuesta de ejemplo HTTP/1.1 200 OK Content-Type: application/json {
"access_token":"eyJz9sdfsdfsdfsd", "refresh_token":"dn43ud8uj32nk2je", "id_token":"dmcxd329ujdmkemkd349r", "token_type":"Bearer", "expires_in":3600
}
Note El punto de enlace del token devuelve refresh_token solo cuando grant_type es authorization_code.
Intercambio de credenciales de cliente para un token de acceso Solicitud de muestra POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token > Content-Type='application/x-www-form-urlencoded'& Authorization=Basic aSdxd892iujendek328uedj grant_type=client_credentials& scope={resourceServerIdentifier1}/{scope1} {resourceServerIdentifier2}/{scope2}
Respuesta de ejemplo HTTP/1.1 200 OK Content-Type: application/json {
"access_token":"eyJz9sdfsdfsdfsd",
371
Amazon Cognito Guía para desarrolladores Punto de enlace TOKEN "token_type":"Bearer", "expires_in":3600
}
Intercambio de una concesión de código de autorización con PKCE para los tokens Solicitud de muestra POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token Content-Type='application/x-www-form-urlencoded'& Authorization=Basic aSdxd892iujendek328uedj grant_type=authorization_code& client_id=djc98u3jiedmi283eu928& code=AUTHORIZATION_CODE& code_verifier=CODE_VERIFIER& redirect_uri=com.myclientapp://myclient/redirect
Respuesta de ejemplo HTTP/1.1 200 OK Content-Type: application/json {
"access_token":"eyJz9sdfsdfsdfsd", "refresh_token":"dn43ud8uj32nk2je", "id_token":"dmcxd329ujdmkemkd349r", "token_type":"Bearer", "expires_in":3600
}
Note El punto de enlace del token devuelve refresh_token solo cuando grant_type es authorization_code.
Intercambio de un token de actualización para los tokens Solicitud de muestra POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token > Content-Type='application/x-www-form-urlencoded' Authorization=Basic aSdxd892iujendek328uedj grant_type=refresh_token& client_id=djc98u3jiedmi283eu928& refresh_token=REFRESH_TOKEN
Respuesta de ejemplo HTTP/1.1 200 OK Content-Type: application/json {
"access_token":"eyJz9sdfsdfsdfsd", "refresh_token":"dn43ud8uj32nk2je", "id_token":"dmcxd329ujdmkemkd349r", "token_type":"Bearer", "expires_in":3600
372
Amazon Cognito Guía para desarrolladores Punto de enlace USERINFO }
Note El punto de enlace del token devuelve refresh_token solo cuando grant_type es authorization_code.
Ejemplos de respuestas negativas Ejemplo de respuesta de error HTTP/1.1 400 Bad Request Content-Type: application/json;charset=UTF-8 { "error":"invalid_request|invalid_client|invalid_grant|unauthorized_client| unsupported_grant_type|" }
invalid_request Falta un parámetro necesario en la solicitud, la solicitud incluye un valor de parámetro no admitido (distinto de unsupported_grant_type) o la solicitud tiene un formato incorrecto. Por ejemplo, grant_type es , refresh_token pero no refresh_token está incluido. invalid_client Error de autenticación del cliente. Por ejemplo, cuando el cliente incluye client_id y client_secret en el encabezado de la autorización, pero no existe un cliente con esos client_id y client_secret. invalid_grant El token de actualización se ha revocado. El código de autorización ya se ha utilizado o no existe. unauthorized_client El cliente no tiene permiso para el flujo de concesión de códigos o para la actualización de tokens. unsupported_grant_type Se devuelve si grant_type es distinto de authorization_code o refresh_token.
Punto de enlace USERINFO El punto de enlace /oauth2/userInfo devuelve información sobre el usuario autenticado.
GET /oauth2/userInfo El cliente de grupo de usuarios realiza solicitudes a este punto de enlace directamente y no mediante un navegador. Para obtener más información, consulte UserInfo Endpoint en la especificación OpenID Connect (OIDC). Temas • Parámetros de la solicitud en el encabezado (p. 374) • Solicitud de muestra (p. 374) • Ejemplo de respuesta positiva (p. 374)
373
Amazon Cognito Guía para desarrolladores Punto de enlace USERINFO
• Ejemplo de respuestas negativas (p. 374)
Parámetros de la solicitud en el encabezado Autorización: al portador Pasa el token de acceso mediante el campo de encabezado de autorización. Obligatorio
Solicitud de muestra GET https:///oauth2/userInfo Authorization: Bearer
Ejemplo de respuesta positiva HTTP/1.1 200 OK Content-Type: application/json;charset=UTF-8 { "sub": "248289761001", "name": "Jane Doe", "given_name": "Jane", "family_name": "Doe", "preferred_username": "j.doe", "email": "[emailprotected]" }
Para obtener una lista de las notificaciones OIDC, consulte Standard Claims.
Ejemplo de respuestas negativas Solicitud no válida HTTP/1.1 400 Bad Request WWW-Authenticate: error="invalid_request", error_description="Bad OAuth2 request at UserInfo Endpoint"
invalid_request Falta un parámetro necesario en la solicitud, la solicitud incluye un valor de parámetro no admitido o tiene un formato incorrecto.
Token no válido HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="Access token is expired, disabled, or deleted, or the user has globally signed out."
invalid_token El token de acceso ha caducado, se ha revocado, no tiene el formato correcto o no es válido.
374
Amazon Cognito Guía para desarrolladores Punto de enlace LOGIN
Punto de enlace LOGIN El punto de enlace /login inicia una sesión del usuario. Se abre la página de inicio de sesión, que muestra al usuario las opciones de autenticación configuradas para el cliente.
GET /login El /login punto de enlace solo admite HTTPS GET. El cliente del grupo de usuarios realiza esta solicitud a través de un navegador del sistema. Los navegadores del sistema para JavaScript incluyen Chrome o Firefox. Los navegadores Android incluyen la pestaña Custom Chrome. Los navegadores iOS incluyen el controlador de vista de Safari.
Parámetros de solicitud client_id El ID de cliente de aplicación de su aplicación. Para obtener un ID de cliente de aplicación, registre la aplicación en el grupo de usuarios. Para obtener más información, consulte Configuración de un cliente de aplicación del grupo de usuarios (p. 185). Obligatorio redirect_uri La URI a la que es redirigido el usuario tras autenticarse correctamente. Debe configurarse en el tipo response_type del ID client_id. especificado. Obligatorio response_type El tipo de OAuth respuesta, que puede ser code para el flujo de concesión de código y token para el flujo implícito. Obligatorio state Un valor opaco que el cliente añade a la solicitud inicial. El valor se devuelve al cliente tras el redireccionamiento. El cliente debe utilizar este valor para evitar ataques https://en.wikipedia.org/wiki/Crosssite_request_forgery CSRF. Opcional, pero totalmente recomendado. scope Puede ser una combinación de cualquier ámbito reservado por el sistema o ámbitos personalizados asociados a un cliente. Los ámbitos deben estar separados por espacios. Los ámbitos reservados del sistema son openid, email phone, profile, y aws.cognito.signin.user.admin. Cualquier ámbito debe haberse asociado previamente al cliente o se ignorará en tiempo de ejecución. Si el cliente no solicita ningún ámbito, el servidor de autenticación utiliza todos los ámbitos asociados con el cliente. Solo se devuelve un token de ID si se solicita un ámbito openid El token de acceso solo se puede utilizar en grupos de usuarios de Amazon Cognito si se solicita un ámbito aws.cognito.signin.user.admin Los ámbitos phone, email y profile solo se pueden solicitar si se solicita también un ámbito openid Estos ámbitos dictan las notificaciones que se incluyen en el token de ID.
375
Amazon Cognito Guía para desarrolladores Punto de enlace LOGOUT
Opcional
Ejemplo de solicitud: pedir al usuario que inicie sesión En este ejemplo se muestra la pantalla de inicio de sesión. GET https://mydomain.auth.us-east-1.amazoncognito.com/login? response_type=code& client_id=ad398u21ijw3s9w3939& redirect_uri=https://YOUR_APP/redirect_uri& state=STATE& scope=openid+profile+aws.cognito.signin.user.admin
Punto de enlace LOGOUT El punto de enlace /logout cierra la sesión del usuario.
GET /logout El /logout punto de enlace solo admite HTTPS GET. El cliente del grupo de usuarios normalmente realiza esta solicitud a través del navegador del sistema, que por lo general sería Custom Chrome Tab en Android y Safari View Control en iOS.
Parámetros de solicitud client_id El ID de cliente de aplicación de su aplicación. Para obtener un ID de cliente de aplicación, debe registrar la aplicación en el grupo de usuarios. Para obtener más información, consulte Configuración de un cliente de aplicación del grupo de usuarios (p. 185). Obligatorio logout_uri Una URL de cierre de sesión que ha registrado para la aplicación cliente. Para obtener más información, consulte Configuración de un cliente de aplicación del grupo de usuarios (p. 32). Opcional
Solicitudes de ejemplo Ejemplo 1: cerrar sesión y redirigir al cliente Este ejemplo borra la sesión existente y redirige al cliente. Ambos parámetros son obligatorios. GET https://mydomain.auth.us-east-1.amazoncognito.com/logout? client_id=ad398u21ijw3s9w3939& logout_uri=https://myclient/logout
Ejemplo 2: cerrar sesión y pedir al usuario que inicie sesión como otro usuario Este ejemplo borra la sesión existente y muestra la pantalla de inicio de sesión, utilizando los mismos parámetros que para GET /oauth2/authorize. GET https://mydomain.auth.us-east-1.amazoncognito.com/logout?
376
Amazon Cognito Guía para desarrolladores Referencia de la API de grupos de identidades response_type=code& client_id=ad398u21ijw3s9w3939& redirect_uri=https://YOUR_APP/redirect_uri& state=STATE& scope=openid+profile+aws.cognito.signin.user.admin
Referencia de API de grupos de identidades de Amazon Cognito (identidades federadas) Con un grupo de identidades de Amazon Cognito, los usuarios de aplicaciones móviles y web pueden obtener credenciales de AWS temporales con privilegios limitados para acceder a otros servicios de AWS. Para ver una referencia completa de la API de grupos de identidades (identidades federadas), consulte Amazon Cognito API Reference.
Referencia de API de sincronización de Amazon Cognito Amazon Cognito Sync es un servicio de AWS y una biblioteca de cliente que permite la sincronización entre dispositivos de los datos de usuarios relacionados con la aplicación. Para obtener más información sobre la Referencia de la API de Amazon Cognito Sync, consulte Amazon Cognito Sync API Reference.
377
Amazon Cognito Guía para desarrolladores
Historial de revisión de Amazon Cognito En la siguiente tabla se describe la documentación de esta versión de Amazon Cognito. • Versiones de la API originales: Amazon Cognito Grupos de usuarios de : 2021-1 -15 Amazon CognitoIdentidades federadas de : 30/06/2014 Amazon Cognito Sync: 30/06/2014 • Última actualización de la documentación: 4 de marzo de 2021
Cambiar
Descripción
Fecha
Publicación de la guía Markdown en GitHub
Al igual que con toda AWS la documentación de , esta guía ahora tiene disponible el marcado para revisar y realizar comentarios en en en https:// github.com/awsdocs/amazoncognito-developer-guide.
23 de marzo de2021
Prácticas de anidamiento de varios inquilinos
Las prácticas recomendadas para aplicaciones de varios inquilinos se añadieron a la documentación de .
4 de marzo de2021
Atributos para el control de acceso
Amazon Cognito Los grupos de identidades de proporcionan atributos para el control de acceso (AFAC) como medio para que los clientes puedan conceder acceso a los usuarios a los recursos de AWS. La autorización se puede realizar en función de los atributos de los usuarios del proveedor de identidad que utilizaron para federarse con Amazon Cognito.
15 de enero de 2021
Disparador de Lambda de remitente de SMS personalizado y disparador de Lambda de remitente de correo electrónico personalizado
El disparador de Lambda del Noviembre de 2020 remitente de SMS personalizado y el disparador de Lambda del remitente de correo electrónico personalizado le permiten habilitar un proveedor de terceros para enviar correo electrónico y notificaciones SMS a sus usuarios desde el código de su función de Lambda.
378
Amazon Cognito Guía para desarrolladores
Cambiar
Descripción
Fecha
Actualizaciones de token de Amazon Cognito
Se ha añadido información de vencimiento actualizada a los tokens de acceso, ID y actualización.
29 de octubre de 2020
Service Quotas Amazon Cognito
Las Service Quotas están disponibles para las cuotas de Amazon Cognito categoría. Puede utilizar la Cuotas de servicio consola de para ver el uso de la cuota, solicitar un aumento de la cuota y crear CloudWatch alarmas de para monitorizar el uso de la cuota. Durante este cambio, la sección Available CloudWatch Metrics for Amazon Cognito User Pools (Métricas de CloudWatch disponibles para grupos de usuarios de Amazon Amazon Cognito) se actualizó para reflejar la nueva información. El nuevo nombre de sección es: Seguimiento de cuotas y uso en CloudWatch y Service Quotas
29 de octubre de 2020
Clasificación de cuotas de Amazon Cognito
Las categorías de cuotas están disponibles para ayudarle a monitorizar el uso de las cuotas y solicitar un aumento. Las cuotas se agrupan en categorías en función de los casos de uso comunes.
17 de agosto de 2020
Actualizaciones de documentos de Amazon Cognito Pinpoint
Se ha añadido un nuevo rol vinculado al servicio. Las instrucciones se actualizaron en "Uso de Amazon Pinpoint Analytics con grupos de usuarios de Amazon Cognito
13de mayo de2020
Amazon Cognito se admite en AWS GovCloud en EE.UU.
Amazon Cognito ya se admite en la región AWS GovCloud (EE.UU.).
13de mayo de2020
Nuevo capítulo sobre las medidas de seguridad especiales de Amazon Cognito
El capítulo de seguridad puede ayudar a su organización a obtener información en profundidad sobre la seguridad integrada y la seguridad configurable de los servicios de AWS. Nuestros nuevos capítulos proporcionan información sobre la seguridad de la nube y en la nube.
30 de abril de 2020
379
Amazon Cognito Guía para desarrolladores
Cambiar
Descripción
Los grupos de identidades de Amazon Cognito ahora admiten Sign in with Apple
Sign in with Apple está disponible 7 de abril de 2020 en todas las regiones donde opera Amazon Cognito, excepto en la región cn-north-1.
Nuevo control de versiones de la API de Facebook
Se ha agregado la selección de versiones a la API de Facebook.
3 de abril de 2020
Actualización sobre la sensibilidad a mayúsculas en el nombre de usuario
Se ha añadido una recomendación sobre cómo deshabilitar la sensibilidad a mayúsculas y minúsculas del nombre de usuario (p. 18) antes de crear un grupo de usuarios.
11 de febrero de 2020
Nueva información acerca de AWS Amplify
Se ha añadido información acerca de la integración de Amazon Cognito (p. 13) con la aplicación web o móvil mediante los SDK y las bibliotecas de AWS Amplify. Se ha eliminado información acerca del uso de los SDK de Amazon Cognito anteriores a AWS Amplify.
22 de noviembre de 2019
Nuevo atributo de desencadenadores para grupos de usuarios
Amazon Cognito ahora incluye un parámetro clientMetadata en la información del evento que pasa a las funciones de AWS Lambda de la mayoría de los desencadenadores para grupos de usuarios. Puede utilizar este parámetro para mejorar el flujo de trabajo de autenticación personalizado con datos adicionales.
4 de octubre de 2019
Límite actualizado
Se ha actualizado el límite de limitación controlación para la acción de la API ListUsers. Para obtener más información, consulte Cuotas en Amazon Cognito (p. 353).
25 de junio de 2019
Nuevo límite
Los límites flexibles de los grupos 17 de junio de 2019 de usuarios ahora incluyen un límite para el número de usuarios. Para obtener más información, consulte Cuotas en Amazon Cognito (p. 353).
380
Fecha
Amazon Cognito Guía para desarrolladores
Cambiar
Descripción
Fecha
Configuración de correo electrónico de Amazon SES para grupos de usuarios de Amazon Cognito
Puede configurar un grupo de usuarios para que Amazon Cognito envíe correos electrónicos a sus usuarios utilizando su configuración de Amazon SES. Esta configuración permite a Amazon Cognito enviar mensajes de correo electrónico con un volumen de entrega superior al que sería posible de otro modo. Para obtener más información, consulte Configuración de correo electrónico para grupos de usuarios de Amazon Cognito (p. 154).
8 de abril de 2019
Compatibilidad del etiquetado
Se ha añadido información sobre el etiquetado de recursos de Amazon Cognito (p. 348).
26 de marzo de 2019
Cambiar el certificado de un dominio personalizado
Si utiliza un dominio personalizado para alojar la interfaz de usuario alojada en Amazon Cognito, puede cambiar el certificado SSL de este dominio siempre que sea necesario. Para obtener más información, consulte Cambiar del certificado SSL en el dominio personalizado (p. 40).
19 de diciembre de 2018
Nuevo límite
Se ha añadido un nuevo límite para el número máximo de grupos al que cada usuario puede pertenecer. Para obtener más información, consulte Cuotas en Amazon Cognito (p. 353).
14 de diciembre de 2018
Límites actualizados
Se han actualizado los límites flexibles de los grupos de usuarios. Para obtener más información, consulte Cuotas en Amazon Cognito (p. 353).
11 de diciembre de 2018
381
Amazon Cognito Guía para desarrolladores
Cambiar
Descripción
Fecha
Actualización de la documentación sobre la verificación de direcciones de correo electrónico y números de teléfono
Se ha añadido información acerca de cómo configurar el grupo de usuarios para requerir la verificación del correo electrónico o del número de teléfono cuando el usuario se registra en la aplicación. Para obtener más información, consulte Verificación de la información de contacto durante el registro (p. 126).
20 de noviembre de 2018
Actualización de la documentación sobre correos electrónicos de prueba
Se han añadido instrucciones acerca de cómo crear correos electrónicos en Amazon Cognito mientras se prueba la aplicación. Para obtener más información, consulte Envío de mensajes de correo electrónico para probar la aplicación (p. 131).
13 de noviembre de 2018
Amazon CognitoSeguridad avanzada de
Se han añadido características de seguridad nuevas que permiten a los desarrolladores proteger sus aplicaciones y usuarios de bots malintencionados, proteger las cuentas de los usuarios frente a las credenciales atacadas y ajustar automáticamente los desafíos necesarios para iniciar sesión en función del riesgo calculado del intento de inicio de sesión.
14 de junio de 2018
Dominios personalizados para la interfaz de usuario alojada de Amazon Cognito
Permiten a los desarrolladores utilizar sus propios dominios totalmente personalizados para la interfaz de usuario alojada en los grupos de usuarios de Amazon Cognito.
4 de junio de 2018
Amazon CognitoProveedor de identidad OIDC para grupos de usuarios de
Añadido el inicio de sesión de grupos de usuarios a través de un proveedor de identidad OpenID Connect (OIDC), como Salesforce o Ping Identity.
17 de mayo de 2018
382
Amazon Cognito Guía para desarrolladores
Cambiar
Descripción
Amazon CognitoActualización de guía para desarrolladores de
Se ha añadido el nivel superior 6 de abril de 2018 "Qué es Amazon Cognito" e "Introducción a Amazon Cognito". También se han agregado situaciones comunes y se ha reorganizado el índice de grupos de usuarios. Se ha añadido una nueva sección "Introducción a Grupos de usuarios de Amazon Cognito".
Amazon CognitoDisparador de migración de Lambda de
Se han agregado páginas que tratan la característica de disparador de migración de Lambda
8 de febrero de 2018
Amazon CognitoSeguridad avanzada de en versión Beta
Se han añadido características de seguridad nuevas que permiten a los desarrolladores proteger sus aplicaciones y usuarios de bots malintencionados, proteger las cuentas de los usuarios con credenciales publicadas que se han visto comprometidas en otros sitios de Internet, y ajustar automáticamente los desafíos necesarios para iniciar sesión en función del riesgo calculado del intento de inicio de sesión.
28 de noviembre de 2017
Amazon PinpointIntegración de
Se ha añadido la capacidad de utilizar Amazon Pinpoint para proporcionar análisis a las aplicaciones de grupos de usuarios de Amazon Cognito y enriquecer los datos de usuario para campañas de Amazon Pinpoint. Para obtener más información, consulte Usar análisis de Amazon Pinpoint con grupos de usuarios de Amazon Cognito (p. 121).
26 de septiembre de 2017
Características de interfaz de usuario de aplicación integrada y de federación de grupos de usuario de Amazon Cognito
Se ha añadido la posibilidad de permitir a los usuarios iniciar sesión en el grupo de usuarios a través de Facebook, Google, Login with Amazon o un proveedor de identidad SAML. Se ha añadido una interfaz de aplicaciones integradas personalizable y compatibilidad de OAuth 2.0 con notificaciones personalizadas.
10 de agosto de 2017
383
Fecha
Amazon Cognito Guía para desarrolladores
Cambiar
Descripción
Fecha
Cambios de característica relacionados con la conformidad con HIPAA y PCI
Se ha añadido la posibilidad de permitir a los usuarios utilizar un número de teléfono o una dirección de correo electrónico como su nombre de usuario.
6 de julio de 2017
Características de control de acceso basadas en grupos de usuarios y en roles
Se ha añadido una capacidad administrativa de creación y administración de grupos de usuarios. Los administradores pueden asignar roles de IAM a usuarios basados en la pertenencia a grupos y en reglas creadas por el administrador. Para obtener más información, consulte Agregar grupos a un grupo de usuarios (p. 136) y Control de acceso basado en roles (p. 221).
15 de diciembre de 2016
Actualización de la documentación
Se han actualizado los ejemplos de código iOS de Identidades autenticadas por el desarrollador (grupos de identidades) (p. 258).
18 de noviembre de 2016
Actualización de la documentación
Se ha añadido información acerca del flujo de confirmación de las cuentas de usuario. Para obtener más información, consulte Inscripción y confirmación de cuentas de usuario (p. 124).
9 de noviembre de 2016
Característica de creación de cuentas de usuario
Se ha añadido la capacidad administrativa para crear cuentas de usuario a través de la consola de Amazon Cognito y la API. Para obtener más información, consulte Creación de cuentas de usuario como administrador (p. 132).
6 de octubre de 2016
Actualización de la documentación
Se han actualizado los ejemplos que ilustran el uso de los disparadores de AWS Lambda con grupos de usuarios. Para obtener más información, consulte Personalizar flujos de trabajo de grupos de usuarios con disparadores de Lambda (p. 72).
27 de septiembre de 2016
384
Amazon Cognito Guía para desarrolladores
Cambiar
Descripción
Fecha
Característica de importación de usuarios
Se ha añadido la capacidad de importación masiva de grupos de usuarios de Cognito. Utilice esta característica para migrar usuarios desde su proveedor de identidad a un grupo de usuarios de Amazon Cognito. Para obtener más información, consulte Importación de usuarios en grupos de usuarios desde un archivo CSV (p. 144).
1 de septiembre de 2016
Disponibilidad general de grupos de usuarios de Cognito
Se ha añadido la característica de grupos de usuarios de Cognito. Utilice esta característica para crear y mantener un directorio de usuarios y añadir la inscripción y el inicio de sesión a la aplicación móvil o la aplicación web mediante grupos de usuarios. Para obtener más información, consulte Grupos de usuarios de Amazon Cognito (p. 17).
28 de julio de 2016
Compatibilidad con SAML
Se ha añadido compatibilidad con la autenticación con proveedores de identidad mediante el lenguaje SAML 2.0 (Security Assertion Markup Language 2.0). Para obtener más información, consulte Proveedores de identidad SAML (grupos de identidades) (p. 256).
23 de junio de 2016
CloudTrailIntegración de
Se ha agregado integración con AWS CloudTrail. Para obtener más información, consulte Registro de llamadas a la API de Amazon Cognito con AWS CloudTrail (p. 328).
18 de febrero de 2016
Integración de eventos con Lambda
Permite ejecutar una función AWS Lambda como respuesta a eventos importantes de Amazon Cognito. Para obtener más información, consulte Eventos de Amazon Cognito (p. 301).
9 de abril de 2015
Transmisión de datos a Amazon Kinesis
Proporciona control e información 4 de marzo de 2015 de los flujos de datos. Para obtener más información, consulte Flujos de Amazon Cognito (p. 299).
385
Amazon Cognito Guía para desarrolladores
Cambiar
Descripción
Fecha
Sincronización mediante inserción
Activa la compatibilidad con la sincronización mediante inserción silenciosa. Para obtener más información, consulte Amazon Cognito Sync (p. 272).
6 de noviembre de 2014
Compatibilidad con OpenID Connect
Activa la compatibilidad con los 23 de octubre de 2014 proveedores de OpenID Connect. Para obtener más información, consulte Proveedores de identidad externos de grupos de identidades (identidades federadas) (p. 233).
Se ha añadido compatibilidad con identidades autenticadas por el desarrollador
Permite tratar a los 29 de septiembre de 2014 desarrolladores propietarios de sus propios sistemas de administración de identidades y autenticación como un proveedor de identidad en Amazon Cognito. Para obtener más información, consulte Identidades autenticadas por el desarrollador (grupos de identidades) (p. 258).
Amazon CognitoDisponibilidad general de
10 de julio de 2014
386
Amazon Cognito Guía para desarrolladores
Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
ccclxxxvii