Flujo de autenticación de grupos de identidades (identidades federadas) - 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 (identidades federadas)

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 Roles de IAM.

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
SAML 2.0 Aserción de SAML
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 web JSON o una afirmación de SAML) de un grupo de usuarios autorizado de Amazon Cognito o de un proveedor de identidad externo.

  2. Su conjunto 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 aplicación firma las solicitudes de AWS API con las credenciales temporales.

La autenticación mejorada gestiona la lógica de la selección de roles de IAM y la 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 web JSON o una afirmación de SAML) de un grupo de usuarios autorizado de Amazon Cognito o de un proveedor de identidad externo.

  2. Su conjunto 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 de OAuth 2.0 emitido por tu grupo de identidades.

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

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

  7. Su aplicación firma las solicitudes de AWS API 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.

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 (grupos de identidades), 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ía el identificador del proveedor desarrollador en una solicitud GetOpenIdTokenForDeveloperIdentityde API firmada con credenciales autorizadas AWS .

  4. Solicita 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 las solicitudes de API.

  • No es necesario que tu aplicación realice solicitudes de API adicionales a AWS STS.

  • Tu grupo de identidades evalúa a tus usuarios para determinar las credenciales de rol de IAM 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 funciones de IAM para 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 roles de IAM 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 función de IAM que confíe en su conjunto de identidades o en el estado autenticado o no autenticado. amr

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.

Resumen de las API

GetId

La llamada a la GetIdAPI es la primera llamada 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 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 AWS dispositivos móviles y el AWS SDK para el navegador tienen proveedores de credenciales que se encargan de este almacenamiento JavaScript en caché por usted.

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 pueden 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 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

Se puede llamar a la GetCredentialsForIdentityAPI después de establecer un ID de identidad. Por AssumeRoleWithWebIdentitylo tanto, esta operación es funcionalmente equivalente a llamar GetOpenIdToken.

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

GetOpenIdToken

Realice una solicitud a la GetOpenIdTokenAPI después de establecer un identificador de identidad. Guarde en caché los ID de identidad después de la primera solicitud e inicie las sesiones básicas (clásicas) posteriores para esa identidad con GetOpenIdToken.

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

Antes de enviar el token de OpenID, verifíquelo en su aplicación. Puede utilizar las bibliotecas OIDC del SDK o una biblioteca como aws-jwt-verify para confirmar que Amazon Cognito ha emitido el token. El ID de clave de firma, o kid, del token de OpenID 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 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 combinadas, una identidad se 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. Debe actualizar la caché local si este valor difiere. Los proveedores de los SDK AWS móviles o AWS del SDK para JavaScript el navegador realizan esta operación por ti.

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 a esta operación de API 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 de esta API incluye un logins mapa. Este mapa debe contener la clave del proveedor desarrollador y un valor como identificador del usuario en el 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é los ID de identidad del desarrollador después de la primera solicitud e inicie las sesiones básicas (clásicas) posteriores para esa identidad con GetOpenIdTokenForDeveloperIdentity.

La respuesta a una solicitud de la API GetOpenIdTokenForDeveloperIdentity 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 utilizar las bibliotecas OIDC del SDK o una biblioteca como aws-jwt-verify para confirmar que Amazon Cognito ha emitido 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 la API. MergeDeveloperIdentities 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 solicitud de AssumeRoleWithWebIdentityAPI 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 funciones de IAM 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 que se adapten 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.rproxy.goskope.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 de conexión de detección estándar de OIDC <issuer>/.well-known/openid-configuration muestra una ruta al jwks_uri para su token.