View a markdown version of this page

Descripción del token de identidad (ID) - 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.

Descripción del token de identidad (ID)

El token de ID es un JSON web token (JWT) que contiene notificaciones acerca de la identidad del usuario autenticado, como por ejemplo, name, email y phone_number. Puede utilizar esta información de identidad dentro de la aplicación. El token de ID también puede utilizarse para autenticar a los usuarios en sus servidores de recursos o aplicaciones de servidor. También puede usar un token de ID fuera de la aplicación con sus operaciones de API web. En esos casos, debe verificar la firma del token de ID antes de poder confiar en las notificaciones que contiene. Consulte Verificación de tokens web JSON.

Puede usar cualquier valor de entre 5 minutos y 1 día para establecer el vencimiento del token de ID. Puede configurar este valor por cliente de aplicación.

El token de identificación incluye las amr afirmaciones acr y, que describen el nivel de autenticación que cumplió el usuario y los métodos que completó. Para obtener más información, consulte Declaraciones sobre los tokens ACR y AMR.

importante

Cuando el usuario inicia sesión con un inicio de sesión administrado, Amazon Cognito establece cookies de sesión válidas durante 1 hora. Si utiliza el inicio de sesión administrado para la autenticación en su aplicación y especifica una duración mínima de menos de 1 hora para sus tokens de acceso e ID, los usuarios seguirán teniendo una sesión válida hasta que caduque la cookie. Si el usuario tiene tokens que caducan durante la sesión de una hora, podrá actualizar sus tokens sin necesidad de volver a autenticarse.

Cabecera del token de identificación

El encabezado contiene dos bloques de información: el ID de clave (kid) y el algoritmo (alg).

{ "kid" : "1234example=", "alg" : "RS256" }
kid

ID de la clave. Este valor indica la clave que se ha utilizado para proteger la firma web JSON (JWS) del token. Puede ver los ID de las claves de firma de su grupo de usuarios en el punto de conexión de jwks_uri.

Para obtener más información sobre el parámetrokid, consulte Parámetro de encabezado de identificador de clave (kid).

alg

El algoritmo criptográfico que Amazon Cognito utilizó para proteger el token de acceso. Los grupos de usuarios utilizan un algoritmo criptográfico RS256, que es una firma RSA. SHA-256

Para obtener más información sobre el algparámetro, consulte Parámetro de encabezado de algoritmos (alg).

Carga útil predeterminada del token de ID

Este es un ejemplo de carga útil de un token de ID. Contiene notificaciones sobre el usuario autenticado. Para obtener más información acerca de las notificaciones estándar de OpenID Connect (OIDC), consulte la lista OIDC standard claims. Puede añadir notificaciones de diseño propio con un Desencadenador de Lambda anterior a la generación del token.

Esta carga útil es representativa, no exhaustiva. El conjunto de afirmaciones de un token de Amazon Cognito ID aumenta con el tiempo a medida que las nuevas funciones añaden nuevas afirmaciones, por lo que las afirmaciones que contienen tus fichas pueden diferir de las de este ejemplo. Trate este ejemplo como una instantánea de las reclamaciones habituales en lugar de una lista completa y fija, y léalo ¿Cómo analizar este token de forma segura antes de escribir código que analice los tokens de Amazon Cognito.

<header>.{ "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "cognito:groups": [ "test-group-a", "test-group-b", "test-group-c" ], "email_verified": true, "cognito:preferred_role": "arn:aws:iam::111122223333:role/my-test-role", "iss": "https://cognito-idp.us-west-2.amazonaws.com/us-west-2_example", "cognito:username": "my-test-user", "middle_name": "Jane", "nonce": "abcdefg", "origin_jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "cognito:roles": [ "arn:aws:iam::111122223333:role/my-test-role" ], "aud": "xxxxxxxxxxxxexample", "identities": [ { "userId": "amzn1.account.EXAMPLE", "providerName": "LoginWithAmazon", "providerType": "LoginWithAmazon", "issuer": null, "primary": "true", "dateCreated": "1642699117273" } ], "event_id": "64f513be-32db-42b0-b78e-b02127b4f463", "token_use": "id", "auth_time": 1676312777, "exp": 1676316377, "iat": 1676312777, "jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "email": "my-test-user@example.com" } .<token signature>
sub

El identificador único (UUID) o asunto, para el usuario autenticado. Es posible que el nombre de usuario no sea único en el grupo de usuarios. La reclamación sub es la mejor forma de identificar a un usuario determinado.

importante

Amazon Cognito genera sub en un formato de Amazon que no se ajusta a un Cognito-specific formato de UUID específico, incluido el UUID de RFC. No debe validar estrictamente el formato de. sub De forma más general, tal y como se describe en la guía sobre cómo analizar de forma segura las reclamaciones relacionadas con el token, lee cada reclamación según el tipo que se documenta en esta página y no impongas un formato más estricto que el que se indica en la documentación.

cognito:groups

Una matriz de cadenas. Cada cadena es el nombre de un grupo de usuarios del que forma parte su usuario. Los grupos pueden ser un identificador que se presenta en la aplicación o pueden generar una solicitud para un rol de IAM preferido desde un grupo de identidades. Esta afirmación es siempre una matriz, incluso cuando el usuario pertenece a un solo grupo.

cognito:preferred_role

El ARN del rol de IAM que asoció al grupo de usuarios de mayor prioridad de su usuario. Para obtener más información sobre cómo el grupo de usuarios selecciona esta reclamación de rol, consulte Asignación de valores de prioridad a los grupos.

iss

Una sola cadena. El emisor del token. Esta afirmación identifica el grupo de usuarios que generó el token. La aplicación debe validar que este valor coincide con la URL del emisor prevista para el grupo de usuarios. La reclamación tiene el formato siguiente:

https://cognito-idp.<Region>.amazonaws.com/<your user pool ID>

Su grupo de usuarios puede usar un emisor original o actualizado. Los emisores actualizados alojan el mismo contenido de JWKS en varias regiones, lo que mejora la resiliencia y la eficiencia. Para obtener más información, consulte Grupos de usuarios de Amazon Cognito como emisor de OIDC.

cognito:username

El nombre de usuario del usuario en el grupo de usuarios.

nonce

La notificación nonce proviene de un parámetro del mismo nombre que puede agregar a las solicitudes al punto de conexión authorize de OAuth 2.0. Cuando agrega el parámetro, la notificación nonce se incluye en el token de ID que emite Amazon Cognito y puede utilizarla para protegerse de los ataques de repetición. Si no proporciona un valor nonce en la solicitud, Amazon Cognito genera y valida de forma automática un nonce cuando se autentica a través de un proveedor de identidad de terceros y, a continuación, lo agrega como la notificación nonce al token de ID. La implementación de la notificación nonce en Amazon Cognito se basa en estándares OIDC.

origin_jti

Un identificador de revocación de tokens asociado al token de actualización del usuario. Amazon Cognito hace referencia a la origin_jti reclamación cuando comprueba si revocó el token de su usuario con la operación Revocación de puntos de conexión o la RevokeTokenAPI. Al revocar un token, Amazon Cognito invalida todos los tokens de acceso e ID con el mismo valor origin_jti.

cognito:roles

Una matriz de cadenas. Cada cadena es el ARN de un rol de IAM asociado a uno de los grupos de usuarios. Cada grupo de usuarios puede tener un rol de IAM asociado. Esta matriz representa todas las funciones de IAM de los grupos de usuarios, independientemente de su prioridad, y siempre es una matriz incluso cuando contiene una sola función. Para obtener más información, consulte Agregar grupos a un grupo de usuarios.

aud

Una sola cadena. El cliente de la aplicación del grupo de usuarios que ha autenticado a su usuario. Amazon Cognito representa el mismo valor en la reclamación client_id del token de acceso.

identities

Una matriz de objetos . Cada objeto describe un perfil de proveedor de identidad externo que has vinculado al usuario, ya sea mediante un inicio de sesión federado o vinculando un usuario federado a un perfil local. Cada objeto contiene los campos userId (el identificador único del usuario en el proveedor),, providerName providerTypeissuer, primary y. dateCreated Todos estos campos son cadenas, con dos detalles de serialización que deben analizarse cuidadosamente: primary es la cadena "true" o "false" no un booleano de JSON, y dateCreated es una cadena que contiene el tiempo de Unix en milisegundos (por ejemplo"1642699117273"), no un número. El issuer campo puede ser. null Esta afirmación es siempre una matriz, incluso cuando el usuario tiene una identidad vinculada.

token_use

El objetivo para el que se creó el token. En un token de identificación, su valor es id.

auth_time

Un número de . La hora de autenticación, en formato de hora Unix, cuando el usuario completó la autenticación.

exp

Un número de . La hora de caducidad, en formato de hora Unix, en la que caduca el token de tu usuario.

iat

Un número de . El emitido en el momento, en formato de hora de Unix, cuando Amazon Cognito emitió el token de su usuario.

jti

El identificador único del JWT.

email

Una sola cadena. La dirección de correo electrónico del usuario, cuando el email atributo esté presente y pueda leerlo el cliente de la aplicación.

El token de ID puede contener notificaciones estándar de OIDC definidas en las notificaciones estándar de OIDC. También puede contener atributos personalizados que se definen en el grupo de usuarios. Amazon Cognito escribe valores de atributos personalizados en el token de ID como cadenas, independientemente del tipo de atributo.

nota

Los atributos personalizados de los grupos de usuarios siempre llevan el prefijo custom:.

¿Cómo analizar este token de forma segura

La afirmación establecida en un token de Amazon Cognito ID no es fija. Las afirmaciones que contiene un token varían según el flujo de autenticación, la pertenencia al grupo del usuario y el proveedor de identidad. También dependen de las funciones que estén habilitadas en el grupo de usuarios. La especificación OpenID Connect solo requiereiss,, y sub aud expiat, y están presentes en todos los tokens de Amazon Cognito ID. Amazon Cognito también añade token_use siempre el valorid, que debe comprobar para confirmar que ha recibido un token de identificación en lugar de un token de acceso. Trate todas las demás solicitudes como opcionales y supeditadas a la forma en que el usuario se haya autenticado.

El token de ID es uno de los varios tipos de token de Amazon Cognito y se aplican las mismas reglas de análisis a todos ellos. Para obtener más información sobre cómo analizar los tokens de forma segura, consulte. Analice los tokens del grupo de usuarios de forma segura

Ejemplos de tokens de ID por escenario

Carga útil predeterminada del token de IDCombina muchos reclamos opcionales en un solo ejemplo. En la práctica, los reclamos que conlleva un token dependen de la forma en que el usuario haya iniciado sesión. En los siguientes ejemplos, se muestran las combinaciones de notificaciones que Amazon Cognito emite en cuatro escenarios comunes. Cada ejemplo es una carga útil decodificada, no un JWT firmado y serializado: se trata de un token realheader.payload.signature, codificado en base64url y con la clave de su grupo de usuarios. RS256-signed Los valores del ID del grupo de usuarios sub y de la marca de tiempo son marcadores de posición ilustrativos.

Símbolo de identificación de código de autorización básico

El token de identidad que consumen la mayoría de las aplicaciones después de intercambiar un código de autorización en el punto final del token. El token_use valor de lo id distingue de un token de acceso. La nonce afirmación se debe a que el cliente envió un nonce parámetro en la solicitud de autorización para evitar los ataques de repetición.

{ "sub": "a1b2c3d4-5678-90ab-cdef-1234567890ab", "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_ExAmPlE", "aud": "6o7h8i9jexampleclientid", "cognito:username": "my-test-user", "email": "my-test-user@example.com", "email_verified": true, "origin_jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "token_use": "id", "auth_time": 1759345200, "iat": 1759345200, "exp": 1759348800, "jti": "11112222-3333-4444-5555-666677778888", "nonce": "n-0S6_WzA2Mj" }

Pertenencia a grupos y roles

Amazon Cognito añade las notificaciones de autorización de grupos y roles cuando el usuario pertenece a uno o más grupos de grupos de usuarios. Las cognito:roles afirmaciones cognito:groups y son matrices; léelas como matrices aunque contengan un solo elemento. cognito:preferred_rolees una cadena única.

{ "sub": "a1b2c3d4-5678-90ab-cdef-1234567890ab", "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_ExAmPlE", "aud": "6o7h8i9jexampleclientid", "cognito:username": "my-test-user", "cognito:groups": ["admins", "beta-testers"], "cognito:roles": ["arn:aws:iam::111122223333:role/my-test-role"], "cognito:preferred_role": "arn:aws:iam::111122223333:role/my-test-role", "origin_jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "token_use": "id", "auth_time": 1759345200, "iat": 1759345200, "exp": 1759348800, "jti": "11112222-3333-4444-5555-666677778888" }

Inicio de sesión federado

El usuario que haya iniciado sesión a través de un proveedor de identidad externo, como una red social o un SAML/OIDC proveedor, lleva la identities afirmación, que describe el enlace del proveedor externo.

{ "sub": "a1b2c3d4-5678-90ab-cdef-1234567890ab", "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_ExAmPlE", "aud": "6o7h8i9jexampleclientid", "cognito:username": "LoginWithAmazon_amzn1.account.EXAMPLE", "identities": [ { "userId": "amzn1.account.EXAMPLE", "providerName": "LoginWithAmazon", "providerType": "LoginWithAmazon", "issuer": null, "primary": "true", "dateCreated": "1642699117273" } ], "origin_jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "token_use": "id", "auth_time": 1759345200, "iat": 1759345200, "exp": 1759348800, "jti": "11112222-3333-4444-5555-666677778888" }
nota

Están dentro de cada identities objeto primary y dateCreated se serializan como cadenas ("true"y"1642699117273"), no como un booleano y un número JSON. Una comparación como, por ejemplo, se evalúa identity.primary === true silenciosamente como falsa. Se lee primary como la cadena "true" o "false" y dateCreated como una cadena que contiene el tiempo de Unix en milisegundos.

Fuerza de autenticación (ACR y AMR)

Cuando su grupo de usuarios informa del nivel de autenticación alcanzado por el usuario, Amazon Cognito añade las notificaciones acr yamr. El siguiente token proviene de un usuario que se autenticó con una contraseña y un TOTP desde una aplicación de autenticación, que es el nivel más alto. Cada token contiene exactamente uno de los niveles posibles. acr Para ver el conjunto fijo de niveles, las combinaciones de factores que satisfacen cada uno y la lista completa de amr valores, consulteNiveles de autenticación con afirmaciones de ACR y AMR.

{ "sub": "a1b2c3d4-5678-90ab-cdef-1234567890ab", "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_ExAmPlE", "aud": "6o7h8i9jexampleclientid", "cognito:username": "my-test-user", "acr": "urn:cognito:loa:4", "amr": ["pwd", "otp", "mfa"], "origin_jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee", "token_use": "id", "auth_time": 1759345200, "iat": 1759345200, "exp": 1759348800, "jti": "11112222-3333-4444-5555-666677778888" }

Para solicitar un nivel de autenticación se requiere el plan de funciones Essentials o Plus. Amazon Cognito calcula amr las reclamaciones acr y no las puede modificar un activador Lambda previo a la generación del token. La aplicación es responsable de traducir los niveles de Amazon Cognito a otro estándar, como el NIST o el eIDAS.

Identificador, token, firma

La firma del token de ID se calcula en función del encabezado y la carga útil del token JWT. Antes de aceptar las reclamaciones en cualquier token de ID que reciba su aplicación, verifique la firma del token. Para obtener más información, consulte Verificar un token web JSON. Verificación de tokens web JSON.