Flujo de autenticación de grupos de identidades - Amazon Cognito

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.

Flujo de autenticación de grupos de identidades

Amazon Cognito sirve de ayuda a fin de crear identificadores únicos para los usuarios finales, que se mantienen homogéneos en todos los dispositivos y plataformas. Amazon Cognito también proporciona credenciales temporales con privilegios limitados a su aplicación para acceder a los recursos. 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 del grupo de identidades.

Flujo de autenticación con proveedores externos

Un usuario que se autentique con Amazon Cognito pasa por varias etapas para iniciar el proceso de arranque de las credenciales. Amazon Cognito tiene dos flujos diferentes para la autenticación con proveedores públicos: el flujo básico y el mejorado.

Una vez que complete uno de estos flujos, podrá acceder a otros Servicios de AWS según lo definan las políticas de acceso de su función. De forma predeterminada, la consola de Amazon Cognito crea 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 IAMroles.

Los grupos de identidades aceptan los siguientes artefactos de los proveedores:

Proveedor Artefacto de autenticación
Grupos de usuarios de Amazon Cognito Token de ID
OpenID Connect () OIDC Token de ID
SAML2.0 SAMLafirmación
Proveedor social Token de acceso

Flujo de autenticación mejorado (simplificado)

Cuando utilizas el flujo de autenticación mejorado, tu aplicación presenta primero en una solicitud una prueba de autenticación de un grupo de usuarios autorizado de Amazon Cognito o de un proveedor de identidad externo. GetId

  1. En una solicitud de GetID, su aplicación presenta una prueba de autenticación (un token JSON web o una SAML afirmación) de un grupo de usuarios autorizado de Amazon Cognito o de un proveedor de identidad externo.

  2. Su grupo de identidades devuelve un identificador de identidad.

  3. La aplicación combina el identificador de identidad con la misma prueba de autenticación en una GetCredentialsForIdentitysolicitud.

  4. Su grupo de identidades devuelve AWS las credenciales.

  5. Su solicitud firma AWS API las solicitudes con las credenciales temporales.

La autenticación mejorada administra la lógica de selección de IAM roles y recuperación de credenciales en la configuración del grupo de identidades. Puede configurar su grupo de identidades para seleccionar un rol predeterminado y aplicar los principios del control de acceso basado en atributos (ABAC) o del control de acceso basado en roles (RBAC) a la selección de roles. Las AWS credenciales de la autenticación mejorada son válidas durante una hora.

Orden de las operaciones en la autenticación mejorada
  1. GetId

  2. GetCredentialsForIdentity

Un diagrama que muestra el flujo de la autenticación mejorada

Flujo de autenticación básico (clásico)

Al utilizar el flujo de autenticación básico,

  1. En una solicitud de GetID, su aplicación presenta una prueba de autenticación (un token JSON web o una SAML afirmación) de un grupo de usuarios autorizado de Amazon Cognito o de un proveedor de identidad externo.

  2. Su grupo de identidades devuelve un identificador de identidad.

  3. La aplicación combina el identificador de identidad con la misma prueba de autenticación en una GetOpenIdTokensolicitud.

  4. GetOpenIdTokendevuelve un nuevo token OAuth 2.0 emitido por su grupo de identidades.

  5. Su aplicación presenta el nuevo token en una AssumeRoleWithWebIdentitysolicitud.

  6. AWS Security Token Service AWS STS) devuelve AWS las credenciales.

  7. Su solicitud firma AWS API las solicitudes con las credenciales temporales.

El flujo de trabajo básico le proporciona un control más pormenorizado sobre las credenciales que distribuye a los usuarios. La solicitud GetCredentialsForIdentity del flujo de autenticación mejorado solicita un rol basado en el contenido de un token de acceso. La AssumeRoleWithWebIdentity solicitud del flujo de trabajo clásico otorga a tu aplicación una mayor capacidad para solicitar credenciales para cualquier AWS Identity and Access Management rol que hayas configurado con una política de confianza suficiente. También puede solicitar una duración de sesión de rol personalizada.

Puedes iniciar sesión con el flujo de autenticación básico en los grupos de usuarios que no tienen asignaciones de roles. Este tipo de grupo de identidades no tiene un rol autenticado o no autenticado predeterminado, y no tiene configurado el control de acceso basado en roles o atributos. Cuando intentas ingresar a un grupo GetOpenIdToken de identidades con asignaciones de roles, recibes el siguiente error.

Basic (classic) flow is not supported with RoleMappings, please use enhanced flow.
Orden de las operaciones en la autenticación básica
  1. GetId

  2. GetOpenIdToken

  3. AssumeRoleWithWebIdentity

Un diagrama que muestra el flujo de la autenticación básica

Flujo de autenticación de identidades autenticadas por el desarrollador

Cuando se utiliza Identidades autenticadas por el desarrollador, el cliente emplea 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 por fuera de Amazon Cognito se indica como tal.

Flujo de autenticación mejorado

Orden de las operaciones en la autenticación mejorada con un proveedor desarrollador
  1. Inicio de sesión a mediante un proveedor de desarrollador (código por fuera de Amazon Cognito)

  2. Validación del inicio de sesión de usuario (código por fuera de Amazon Cognito)

  3. GetOpenIdTokenForDeveloperIdentity

  4. GetCredentialsForIdentity

Un diagrama que muestra el flujo de la autenticación mejorada autenticada por el desarrollador
Orden de las operaciones en la autenticación básica con un proveedor desarrollador
  1. Implemente una lógica fuera del grupo de identidades para iniciar sesión y generar un identificador entre el desarrollador y el proveedor.

  2. Recupera las credenciales almacenadas del lado del servidor. AWS

  3. Envíe el identificador del proveedor desarrollador en una GetOpenIdTokenForDeveloperIdentityAPIsolicitud firmada con credenciales autorizadas AWS .

  4. Solicite las credenciales de la aplicación con AssumeRoleWithWebIdentity.

Un diagrama que muestra el flujo de autenticación básica autenticada por el desarrollador

¿Qué flujo de autenticación debo usar?

El flujo mejorado es la opción más segura con el nivel más bajo de esfuerzo del desarrollador:

  • El flujo mejorado reduce la complejidad, el tamaño y la velocidad de API las solicitudes.

  • No es necesario que su solicitud envíe API solicitudes adicionales a AWS STS.

  • Tu grupo de identidades evalúa a tus usuarios para determinar las credenciales de IAM rol que deben recibir. No necesita integrar la lógica para la selección de roles en su cliente.

importante

Cuando cree un nuevo grupo de identidades, no active la autenticación básica (clásica) de forma predeterminada, como práctica recomendada. Para implementar la autenticación básica, primero evalúe las relaciones de confianza de sus IAM roles con respecto a las identidades web. A continuación, incorpore la lógica para la selección de roles en su cliente y proteja al cliente contra cualquier modificación por parte de los usuarios.

El flujo de autenticación básico delega la lógica de selección de IAM roles en su aplicación. En este flujo, Amazon Cognito valida la sesión autenticada o no autenticada del usuario y emite un token con el que puede intercambiar credenciales. AWS STS Los usuarios pueden intercambiar los tokens de la autenticación básica por cualquier IAM función que confíe en su conjunto de identidades o en su estado autenticado o no autenticadoamr.

Del mismo modo, tenga en cuenta que la autenticación del desarrollador es un método abreviado para validar la autenticación del proveedor de identidad. Amazon Cognito confía en las AWS credenciales que autorizan una GetOpenIdTokenForDeveloperIdentitysolicitud sin necesidad de validar adicionalmente el contenido de la solicitud. Proteja los secretos que autorizan la autenticación de los desarrolladores para que no puedan acceder a ellos los usuarios.

APIresumen

GetId

La GetIdAPIllamada es la primera necesaria para establecer una nueva identidad en Amazon Cognito.

Acceso sin autenticar

Amazon Cognito permite acceder a sus aplicaciones como invitado no autenticado. Si esta función está habilitada en su grupo de identidades, los usuarios pueden solicitar un nuevo identificador de identidad en cualquier momento a través del GetIdAPI. Se espera que la aplicación almacene en caché este ID de identidad para realizar llamadas posteriores a Amazon Cognito. El AWS móvil SDKs y el AWS SDK for JavaScript in the Browser tienen proveedores de credenciales que se encargan de este almacenamiento en caché por usted.

Acceso autenticado

Cuando hayas configurado tu 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 pueden proporcionar tokens (OAuthu OpenID Connect) que los identifiquen en esos proveedores. Cuando se utiliza en una llamada a GetId, Amazon Cognito crea una identidad autenticada nueva o devuelve la identidad ya asociada a ese inicio de sesión en particular. Para ello, Amazon Cognito valida el token con el proveedor y se asegura de que se cumpla lo siguiente:

  • 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

GetCredentialsForIdentityAPISe puede llamar a ellos después de establecer un identificador de identidad. Por AssumeRoleWithWebIdentitylo tanto, esta operación es funcionalmente equivalente a llamar GetOpenIdToken.

Para que Amazon Cognito llame AssumeRoleWithWebIdentity en su nombre, su grupo de identidades debe tener IAM funciones asociadas. Puede hacerlo a través de la consola Amazon Cognito o manualmente mediante la SetIdentityPoolRolesoperación.

GetOpenIdToken

Realice una GetOpenIdTokenAPIsolicitud después de establecer un identificador de identidad. Guarde en caché la identidad IDs después de la primera solicitud e inicie las siguientes sesiones básicas (clásicas) para esa identidad con ellaGetOpenIdToken.

La respuesta a una GetOpenIdToken API solicitud es un token que genera Amazon Cognito. Puede enviar este token como WebIdentityToken parámetro en una AssumeRoleWithWebIdentitysolicitud.

Antes de enviar el token de OpenID, verifíquelo en su aplicación. Puedes usar OIDC bibliotecas en tu biblioteca SDK o en una similar aws-jwt-verifypara confirmar que Amazon Cognito emitió el token. El identificador de clave de firma (okid) del token OpenID es uno de los que figuran en Amazon Cognito Identity. jwks_uri documento †. Estas claves están sujetas a cambios. La función que verifica los tokens de Amazon Cognito Identity debe actualizar periódicamente su lista de claves desde el documento jwks_uri. Amazon Cognito establece la duración de la actualización en el encabezado de respuesta de cache-control jwks_uri, que actualmente está establecido max-age en 30 días.

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 que se han desactivado.

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. Esto se debe a que el ID de identidad que pasa puede que no sea el que se devuelve.

Vinculación de inicios de sesión

Si envía 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 generan una respuesta de error 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 fusionada, una identidad pasa a ser la parent/owner of all associated logins and the other is disabled. In this case, the identity ID of the parent/owner que se devuelve. Debe actualizar la caché local si este valor difiere. Los proveedores del AWS móvil SDKs o AWS SDK del navegador realizan esta operación por usted. JavaScript

GetOpenIdTokenForDeveloperIdentity

La GetOpenIdTokenForDeveloperIdentityoperación reemplaza el uso GetOpenIdTokendesde GetIdy desde el dispositivo cuando se utilizan identidades autenticadas por el desarrollador. Dado que su aplicación firma las solicitudes para esta API operación con AWS credenciales, Amazon Cognito confía en que el identificador de usuario proporcionado en la solicitud sea válido. La autenticación de desarrolladores reemplaza la validación de token que Amazon Cognito realiza con proveedores externos.

La carga útil para ello API incluye un logins mapa. Este mapa debe contener la clave de su proveedor desarrollador y un valor como identificador del usuario en su sistema. Si el identificador de usuario todavía no está vinculado a una identidad existente, Amazon Cognito crea una identidad nueva y devuelve el ID de la identidad nueva y un token de OpenID Connect para dicha entidad. Si el identificador del usuario ya está vinculado, Amazon Cognito devuelve el ID de identidad preexistente y un token de OpenID Connect. Guarde en caché la identidad IDs del desarrollador después de su primera solicitud e inicie las siguientes sesiones básicas (clásicas) para esa identidad con ellaGetOpenIdTokenForDeveloperIdentity.

La respuesta a una GetOpenIdTokenForDeveloperIdentity API solicitud es un token que genera Amazon Cognito. Puede enviar este token como parámetro WebIdentityToken en una solicitud AssumeRoleWithWebIdentity.

Antes de enviar el token de OpenID Connect, verifíquelo en su aplicación. Puede usar OIDC bibliotecas en su biblioteca SDK o en una biblioteca como aws-jwt-verifypara confirmar que Amazon Cognito emitió el token. El ID de clave de firma, o kid, del token de OpenID Connect es uno de los que figuran en el documento jwks_uri de Amazon Cognito Identity†. Estas claves están sujetas a cambios. La función que verifica los tokens de Amazon Cognito Identity debe actualizar periódicamente su lista de claves desde el documento jwks_uri. Amazon Cognito establece la duración de la actualización en el encabezado de respuesta de cache-control jwks_uri, que actualmente tiene establecido max-age en 30 días.

Vinculación de inicios de sesión

De igual modo que ocurre con los proveedores externos, si se suministran inicios de sesión adicionales que todavía no están asociados a una identidad, los inicios de sesión se vincularán implícitamente a dicha identidad. Si enlaza 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. Sin embargo, no pueden usar el nombre del proveedor de desarrolladores en el mapa de inicios de sesión al ejecutar GetIdGetOpenIdToken.

Combinación de identidades

Con las identidades autenticadas por el desarrollador, Amazon Cognito admite tanto la fusión implícita como la fusión explícita a través de. MergeDeveloperIdentitiesAPI La combinación explícita le permite marcar dos identidades con los identificadores de usuario de su sistema como una identidad única. Tan solo debe 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 tengas un token de OpenID Connect, puedes cambiarlo por AWS credenciales temporales mediante la AssumeRoleWithWebIdentityAPIsolicitud a AWS Security Token Service ()AWS STS.

Dado que no hay restricciones en cuanto al número de identidades que se pueden crear, es importante comprender los permisos que va a conceder a los usuarios. Configura diferentes IAM funciones para tu aplicación: una para los usuarios no autenticados y otra para los usuarios autenticados. La consola de Amazon Cognito puede crear funciones predeterminadas al configurar el grupo de identidades por primera vez. En efecto, estos roles no tienen permisos concedidos. Modifíquelos para adaptarlos a sus necesidades.

Obtener más información sobre Confianza y permisos de rol.

† El documento jwks_uri predeterminado de Amazon Cognito Identity contiene información sobre las claves que firman los tokens de los grupos de identidades en la mayoría de las Regiones de AWS. Las siguientes regiones tienen diferentes documentos jwks_uri.

Amazon Cognito Identity JSON web key URIs in other Regiones de AWS
Región de AWS Ruta al documento jwks_uri
AWS GovCloud (EE. UU.-Oeste) https://cognito-identity.us-gov-west-1.amazonaws.com/.well-known/jwks_uri
China (Pekín) https://cognito-identity.cn-north-1.amazonaws.com.cn/.well-known/jwks_uri
Regiones de suscripción voluntaria como Europa (Milán) y África (Ciudad del Cabo) https://cognito-identity.Region.amazonaws.com/.well-known/jwks_uri

También puede extrapolar el jwks_uri del emisor o el iss que recibe en el token de OpenID desde Amazon Cognito. El punto final OIDC de detección estándar <issuer>/.well-known/openid-configuration muestra una ruta al jwks_uri de tu token.