As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Verificando um token JSON da Web
JSONos tokens da web (JWTs) podem ser decodificados, lidos e modificados facilmente. Um token de acesso modificado cria um risco de escalonamento de privilégios. Um token de ID modificado cria um risco de falsificação de identidade. Seu aplicativo confia em seu grupo de usuários como emissor de token, mas e se um usuário interceptar o token em trânsito? Você deve garantir que seu aplicativo esteja recebendo o mesmo token emitido pelo Amazon Cognito.
O Amazon Cognito emite tokens que usam alguns dos recursos de integridade e confidencialidade da especificação OpenID Connect (). OIDC Os tokens do grupo de usuários indicam validade com objetos como prazo de validade, emissor e assinatura digital. A assinatura, o terceiro e último segmento do .
-delimitedJWT, é o principal componente da validação do token. Um usuário mal-intencionado pode modificar um token, mas se seu aplicativo recuperar a chave pública e comparar a assinatura, ela não corresponderá. Qualquer aplicativo processado JWTs a partir da OIDC autenticação deve realizar essa operação de verificação a cada login.
Nesta página, fazemos algumas recomendações gerais e específicas para verificação deJWTs. O desenvolvimento de aplicativos abrange uma variedade de linguagens e plataformas de programação. Como o Amazon Cognito implementa de OIDC forma suficientemente próxima da especificação pública, qualquer JWT biblioteca confiável em seu ambiente de desenvolvedor preferido pode lidar com seus requisitos de verificação.
Essas etapas descrevem a verificação de um JSON Web Token (JWT) do grupo de usuários.
Pré-requisitos
Sua biblioteca ou estrutura de software já pode lidar com as tarefas desta seção. SDK AWS SDKsforneça ferramentas para manipulação e gerenciamento de tokens do grupo de usuários do Amazon Cognito em seu aplicativo. AWS Amplify inclui funções para recuperar e atualizar tokens do Amazon Cognito.
Para obter mais informações, consulte as páginas a seguir.
Muitas bibliotecas estão disponíveis para decodificar e verificar um JSON Web Token ()JWT. Se você quiser processar manualmente os tokens para API processamento no lado do servidor ou se estiver usando outras linguagens de programação, essas bibliotecas podem ajudar. Veja a lista de bibliotecas da OpenID Foundation para trabalhar com JWT tokens
Valide tokens com aws-jwt-verify
Em um aplicativo Node.js, AWS recomenda o aws-jwt-verify biblioteca aws-jwt-verify
, é possível preencher um CognitoJwtVerifier
com os valores de reivindicação que você deseja verificar para um ou mais grupos de usuários. Alguns dos valores que ele pode verificar incluem o seguinte.
-
Que os tokens de acesso ou ID não estão malformados nem expirados e têm uma assinatura válida.
-
Que os tokens de acesso vieram dos grupos de usuários e clientes de aplicações corretos
. -
Essas declarações de token de acesso contêm os escopos OAuth 2.0 corretos
. -
Que as chaves que assinaram seu acesso e tokens de ID correspondam a uma chave
kid
de assinatura JWKSURIde seus grupos de usuários. O JWKS URI contém informações públicas sobre a chave privada que assinou o token do seu usuário. Você pode encontrar o JWKS URI para seu grupo de usuários em
https://cognito-idp.
.<Region>
.amazonaws.com/<userPoolId>
/.well-known/jwks.json
Para obter mais informações e exemplos de códigos que você pode usar em um aplicativo Node.js ou em um AWS Lambda
autorizador, consulte aws-jwt-verify
Noções básicas e inspeções de tokens
Antes de integrar a inspeção de tokens ao seu aplicativo, considere como o Amazon Cognito é montado. JWTs Recupere exemplos de token do grupo de usuários. Decodifique-os e examine-os detalhadamente para entender suas características e determinar o que você deseja verificar e quando. Por exemplo, talvez você queira examinar a associação de grupo em um cenário e os escopos em outro.
As seções a seguir descrevem um processo para inspecionar manualmente o Amazon JWTs Cognito enquanto você prepara seu aplicativo.
Confirme a estrutura do JWT
Um JSON Web Token (JWT) inclui três seções com um delimitador .
(ponto) entre elas.
- Cabeçalho
-
O ID da chave e o RSA algoritmo que o Amazon Cognito usou para assinar o token.
kid
alg
O Amazon Cognito assina tokens com umalg
deRS256
.kid
É uma referência truncada a uma chave de assinatura RSA privada de 2048 bits mantida pelo seu grupo de usuários. - Carga útil
-
Reivindicações de tokens. Em um token de ID, as reivindicações incluem atributos do usuário e informações sobre o grupo de usuários, o
iss
e o cliente da aplicação, oaud
. Em um token de acesso, a carga útil inclui escopos, associação ao grupo, o grupo de usuários comoiss
e o cliente de aplicação comoclient_id
. - Assinatura
-
A assinatura não é decodificável em base64, como o cabeçalho e a carga útil. É um RSA256 identificador derivado de uma chave de assinatura e de parâmetros que você pode observar no seu JWKSURI.
O cabeçalho e a carga são codificados em base64JSON. É possível identificá-los pelos caracteres de abertura eyJ
que são decodificados para o caractere inicial {
. Se seu usuário apresentar um token codificado em base64 JWT para seu aplicativo e ele não estiver no formato[JSON
Header].[JSON Payload].[Signature]
, não é um token válido do Amazon Cognito e você pode descartá-lo.
Valide o JWT
A JWT assinatura é uma combinação em hash do cabeçalho e da carga útil. O Amazon Cognito gera dois pares de chaves RSA criptográficas para cada grupo de usuários. Uma chave privada assina tokens de acesso e a outra assina tokens de ID.
Para verificar a assinatura de um JWT token
-
Decodifique o token de ID.
A OpenID Foundation também mantém uma lista de bibliotecas para trabalhar com JWT tokens
. Você também pode usar AWS Lambda para decodificar o grupo JWTs de usuários. Para obter mais informações, consulte Decodificar e verificar os tokens do Amazon JWT Cognito usando
. AWS Lambda -
Compare o ID de chave local (
kid
) com okid
público.-
Baixe e armazene a JSON Web Key pública correspondente (JWK) para seu grupo de usuários. Ele está disponível como parte de um conjunto de chaves JSON da Web (JWKS). Você pode localizá-lo construindo o seguinte
jwks_uri
URI para seu ambiente:https://cognito-idp.
<Region>
.amazonaws.com/<userPoolId>
/.well-known/jwks.jsonPara obter mais informações JWK e JWK conjuntos, consulte JSONWeb Key (JWK)
. nota
O Amazon Cognito pode alternar a chave de assinatura no grupo de usuários. Como prática recomendada, armazene as chaves públicas na aplicação usando o
kid
como chave de cache, e atualize o cache periodicamente. Compare okid
nos tokens que a aplicação recebe com o cache.Se você receber um token com o emissor correto, mas um
kid
diferente, o Amazon Cognito pode ter alternado a chave de assinatura. Atualize o cache do endpointjwks_uri
do grupo de usuários.Este é um exemplo de arquivo
jwks.json
:{ "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 da chave (
kid
) -
kid
É uma dica que indica qual chave foi usada para proteger a Assinatura JSON Web (JWS) do token. - Algoritmo (
alg
) -
O parâmetro de cabeçalho
alg
representa o algoritmo criptográfico usado para proteger o token de ID. Os grupos de usuários usam um algoritmo RS256 criptográfico, que é uma RSA assinatura com SHA -256. Para obter mais informações sobreRSA, consulte RSAcriptografia. - Tipo de chave (
kty
) -
O
kty
parâmetro identifica a família de algoritmos criptográficos usada com a chave, como "RSA" neste exemplo. - RSAexpoente ()
e
-
O
e
parâmetro contém o valor expoente da chave RSA pública. Ele é representado como um valor urlUInt codificado em Base64. - RSAmódulo ()
n
-
O
n
parâmetro contém o valor do módulo para a chave RSA pública. Ele é representado como um valor urlUInt codificado em Base64. - Usar o
use
-
O parâmetro
use
descreve o uso pretendido da chave pública. Neste exemplo, ouse
valorsig
representa assinatura.
- ID da chave (
-
Pesquise na chave pública JSON da Web uma
kid
quekid
corresponda à suaJWT.
-
-
Use uma JWT biblioteca para comparar a assinatura do emissor com a assinatura no token. A assinatura do emissor é derivada da chave pública (o RSA módulo
"n"
) dokid
in jwks.json que corresponde ao token.kid
Talvez seja necessário converter o JWK para o PEM formato primeiro. O exemplo a seguir usa o JWT e JWK e usa a biblioteca Node.js, jsonwebtoken, para verificar a assinatura: JWT
Verificar as declarações
Para verificar as JWT reivindicações
-
Usando um dos métodos a seguir, verifique se o token não expirou.
-
Decodifique o token e compare a reivindicação
exp
com a hora atual. -
Se seu token de acesso incluir uma
aws.cognito.signin.user.admin
reclamação, envie uma solicitação para um API like GetUser. APIas solicitações que você autoriza com um token de acesso retornam um erro se o token tiver expirado. -
Apresente seu token de acesso em uma solicitação ao userInfo ponto final. A solicitação retornará um erro se o token tiver expirado.
-
-
A declaração
aud
em um token de ID e a declaraçãoclient_id
em um token de acesso devem corresponder ao ID do cliente de aplicação criado no grupo de usuários do Amazon Cognito. -
A solicitação de emissor (
iss
) deve corresponder ao seu grupo de usuários. Por exemplo, um grupo de usuários criado na regiãous-east-1
terá o seguinte valor deiss
:https://cognito-idp.us-east-1.amazonaws.com/
.<userpoolID>
-
Verifique a alegação
token_use
.-
Se você está aceitando apenas o token de acesso em suas API operações na web, seu valor deve ser
access
. -
Se estiver usando apenas o token de ID, o valor dele precisa ser
id
. -
Se estiver usando os tokens de ID e acesso, a alegação
token_use
deverá serid
ouaccess
.
-
Você já pode aceitar as alegações dentro do token.