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.
Verificación de un token JSON web
JSONLos web tokens (JWTs) se pueden decodificar, leer y modificar fácilmente. Un token de acceso modificado crea un riesgo de escalada de privilegios. Un token de identificación modificado crea un riesgo de suplantación de identidad. Su aplicación confía en su grupo de usuarios como emisor del token, pero ¿qué sucede si un usuario intercepta el token en tránsito? Debe asegurarse de que su aplicación reciba el mismo token que emitió Amazon Cognito.
Amazon Cognito emite tokens que utilizan algunas de las características de integridad y confidencialidad de la especificación OpenID Connect (). OIDC Los tokens del grupo de usuarios indican la validez con elementos como la fecha de caducidad, el emisor y la firma digital. La firma, el tercer y último segmento de lo .
delimitadoJWT, es el componente clave de la validación del token. Un usuario malintencionado puede modificar un token, pero si tu aplicación recupera la clave pública y compara la firma, no coincidirá. Cualquier aplicación que procese JWTs la OIDC autenticación debe realizar esta operación de verificación con cada inicio de sesión.
En esta página, hacemos algunas recomendaciones generales y específicas para la verificación deJWTs. El desarrollo de aplicaciones abarca una variedad de lenguajes y plataformas de programación. Como Amazon Cognito se implementa OIDC lo suficientemente cerca de la especificación pública, cualquier JWT biblioteca acreditada del entorno de desarrollador que elija puede gestionar sus requisitos de verificación.
Estos pasos describen la verificación de un JSON Web Token () JWT de un grupo de usuarios.
Requisitos previos
Es posible que su biblioteca o marco de software ya se encargue de las tareas de esta sección. SDK AWS SDKsproporciona herramientas para gestionar y gestionar los tokens del grupo de usuarios de Amazon Cognito en tu aplicación. AWS Amplify incluye funciones para recuperar y actualizar los tokens de Amazon Cognito.
Para obtener más información, consulte las páginas siguientes.
Hay muchas bibliotecas disponibles para decodificar y verificar un token JSON web ()JWT. Si desea procesar manualmente los tokens para API procesarlos en el servidor o si utiliza otros lenguajes de programación, estas bibliotecas le pueden ayudar. Consulte la lista básica de bibliotecas de OpenID para trabajar con JWT tokens
Valide los tokens con aws-jwt-verify
En una aplicación Node.js, recomienda AWS aws-jwt-verify biblioteca aws-jwt-verify
, puede rellenar CognitoJwtVerifier
con los valores de las reclamaciones que desea verificar para uno o varios grupos de usuarios. Estos son algunos de los valores que puede comprobar:
-
Que esos tokens de acceso o ID no tengan un formato incorrecto ni hayan caducado y tengan una firma válida.
-
Que esos tokens de acceso procedan de los grupos de usuarios y clientes de aplicaciones correctos
. -
Las afirmaciones del token de acceso contienen los alcances OAuth 2.0 correctos
. -
Que las claves que firmaron tus tokens de acceso e ID coincidan con una clave
kid
de firma JWKSURIde tus grupos de usuarios. JWKSURIContiene información pública sobre la clave privada con la que se firmó el token de usuario. Puede encontrar el JWKS URI correspondiente a su grupo de usuarios en
https://cognito-idp.
.<Region>
.amazonaws.com/<userPoolId>
/.well-known/jwks.json
Para obtener más información y un código de ejemplo que puede usar en una aplicación de Node.js o en un AWS Lambda
autorizador, consulte aws-jwt-verify
Descripción e inspección de tokens
Antes de integrar la inspección de tokens en su aplicación, considere cómo se ensambla Amazon Cognito. JWTs Obtenga tokens de ejemplo de su grupo de usuarios. Decodifíquelos y examínelos bien para conocer sus características y determinar qué desea verificar y cuándo. Por ejemplo, es posible que desee examinar la pertenencia a un grupo en un escenario y los ámbitos en otro.
En las siguientes secciones se describe un proceso para inspeccionar manualmente Amazon Cognito JWTs mientras prepara la aplicación.
Confirme la estructura del JWT
Un JSON Web Token (JWT) incluye tres secciones con un delimitador .
(punto) entre ellas.
- Encabezado
-
El identificador clave y el RSA algoritmo que Amazon Cognito utilizó para firmar el token.
kid
alg
Amazon Cognito firma los tokens con unalg
deRS256
.kid
Es una referencia truncada a una clave de firma RSA privada de 2048 bits que se encuentra en su grupo de usuarios. - Carga
-
Reclamaciones de tokens. En un token de ID, las reclamaciones incluyen atributos de usuario e información sobre el grupo de usuarios,
iss
, y el cliente de la aplicación,aud
. En un token de acceso, la carga incluye los ámbitos, la pertenencia a grupos, el nombre de su grupo de usuarios comoiss
y el de su cliente de aplicación comoclient_id
. - Signature
-
La firma no se puede descodificar en base64 como el encabezado y la carga. Es un RSA256 identificador derivado de una clave de firma y de parámetros que puede observar en su interior. JWKS URI
El encabezado y la carga están codificados en JSON base64. Puede identificarlos por los caracteres de apertura eyJ
que se descodifican para formar el carácter inicial {
. Si tu usuario presenta un código en base64 JWT en tu aplicación y no tiene ese formato[JSON
Header].[JSON Payload].[Signature]
, no es un token de Amazon Cognito válido y puedes descartarlo.
Valide el JWT
La JWT firma es una combinación codificada del encabezado y la carga útil. Amazon Cognito genera dos pares de claves RSA criptográficas para cada grupo de usuarios. Una clave privada firma los tokens de acceso y la otra firma los tokens de ID.
Para verificar la firma de un token JWT
-
Descodifique el token de ID.
La Fundación OpenID también mantiene una lista de bibliotecas para trabajar con JWT tokens
. También se puede utilizar AWS Lambda para decodificar el grupo de usuarios. JWTs Para obtener más información, consulte Decodificar y verificar los tokens de Amazon JWT Cognito mediante
. AWS Lambda -
Compare el ID de clave local (
kid
) con elkid
público.-
Descargue y almacene la clave JSON web pública correspondiente (JWK) para su grupo de usuarios. Está disponible como parte de un conjunto de claves JSON web (JWKS). Puede localizarlo creando lo siguiente
jwks_uri
URI para su entorno:https://cognito-idp.
<Region>
.amazonaws.com/<userPoolId>
/.well-known/jwks.jsonPara obtener más información sobre JWK y JWK conjuntos, consulte JSONWeb Key (JWK)
. nota
Es posible que Amazon Cognito rote las claves de firma en su grupo de usuarios. Como práctica recomendada, almacene en caché las claves públicas en su aplicación utilizando el
kid
como clave de caché y actualice la caché periódicamente. Compare elkid
de los tokens que recibe su aplicación con su caché.Si recibe un token con el emisor correcto pero con un
kid
diferente, es posible que Amazon Cognito haya rotado la clave de firma. Actualice la memoria caché desde el punto de conexiónjwks_uri
de su grupo de usuarios.Este es un archivo
jwks.json
de muestra:{ "keys": [{ "kid": "1234example=", "alg": "RS256", "kty": "RSA", "e": "AQAB", "n": "1234567890", "use": "sig" }, { "kid": "5678example=", "alg": "RS256", "kty": "RSA", "e": "AQAB", "n": "987654321", "use": "sig" }] }
- ID de clave (
kid
) -
kid
Es una sugerencia que indica qué clave se utilizó para proteger la firma JSON web (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 utilizan un algoritmo RS256 criptográfico, que es una RSA firma con SHA -256. Para obtener más informaciónRSA, consulte RSA criptografía. - Tipo de clave (
kty
) -
El
kty
parámetro identifica la familia de algoritmos criptográficos que se utiliza con la clave, como "RSA" en este ejemplo. - RSAexponente ()
e
-
El
e
parámetro contiene el valor del exponente de la clave RSA pública. Se representa como un valor codificado en Base64urlUInt. - RSAmódulo ()
n
-
El
n
parámetro contiene el valor del módulo de la clave RSA pública. Se representa como un valor codificado en Base64urlUInt. - Uso (
use
) -
El parámetro
use
describe el uso previsto de la clave pública. En este ejemplo, eluse
valorsig
representa la firma.
- ID de clave (
-
Busque en la clave JSON web pública una
kid
que coincida conkid
la suya. JWT
-
-
Usa una JWT biblioteca para comparar la firma del emisor con la firma del token. La firma del emisor se deriva de la clave pública (el RSA módulo
"n"
) del archivo jwks.json quekid
coincide con el token.kid
Es posible que primero tengas que convertir el formato a. JWK PEM El siguiente ejemplo toma JWT JWK y usa la biblioteca Node.js, jsonwebtoken, para comprobar la firma: JWT
Comprobar las notificaciones
Para verificar JWT las reclamaciones
-
Mediante uno de los siguientes métodos, compruebe que el token no haya caducado.
-
Descodifique el token y compare la reclamación
exp
con la hora actual. -
Si tu token de acceso incluye una
aws.cognito.signin.user.admin
reclamación, envía una solicitud a alguien que API te guste GetUser. APILas solicitudes que autorices con un token de acceso muestran un error si tu token ha caducado. -
Presente el token de acceso en una solicitud a userInfo punto final. La solicitud devuelve un error si el token ha caducado.
-
-
La afirmación
aud
en un token de ID y la afirmaciónclient_id
de un token de acceso deberían coincidir con el ID de cliente de la aplicación creado en el grupo de usuarios de Amazon Cognito. -
La notificación de emisor (
iss
) debería coincidir con el grupo de usuarios. Por ejemplo, un grupo de usuarios creado en la regiónus-east-1
tendrá el siguiente valoriss
:https://cognito-idp.us-east-1.amazonaws.com/
.<userpoolID>
-
Compruebe la notificación
token_use
.-
Si solo acepta el token de acceso en sus API operaciones 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 serid
oaccess
.
-
Ahora puede confiar en las notificaciones del token.