Eu configurei meu grupo de usuários do Amazon Cognito como um autorizador COGNITO_USER_POOLS na minha API REST do Amazon API Gateway. Recebo erros “401 Unauthorized” na resposta da API.
Resolução
Observação: o API Gateway pode retornar erros 401 Não autorizado por vários motivos. O procedimento a seguir mostra como solucionar erros 401 relacionados somente aos autorizadores COGNITO_USER_POOLS.
Verifique a configuração do autorizador no método da API
Conclua as etapas a seguir:
- Abra o console do API Gateway.
- No painel de navegação, selecione APIs e, em seguida, selecione sua API.
- No painel de navegação, selecione Autorizadores em sua API.
- Revise a configuração do autorizador e confirme se o seguinte é verdadeiro:
O ID do grupo de usuários corresponde ao emissor do token.
Você implantou a API.
O autorizador funciona no modo de teste para tokens de identificação.
Observação: não é possível usar esse atributo para testar tokens de acesso.
Para obter mais informações, consulte Integre uma API REST com um grupo de usuários do Amazon Cognito.
Observação: se não for possível invocar sua API depois de confirmar a configuração do autorizador, verifique a validade do token de segurança.
Verifique a validade do token de segurança
Ao verificar a validade do token de segurança, confirme se o seguinte é verdadeiro:
- O token de segurança não expirou.
- O emissor no token de segurança corresponde ao grupo de usuários do Amazon Cognito configurado na API.
- Os valores da string token de ID e do token de acesso são válidos.
Observação: se os valores da string estiverem válidos, será possível decodificar os tokens. Se os tokens não estiverem válidos, revise-os. Certifique-se de que os tokens não tenham espaços extras ao passar pelo cabeçalho da solicitação.
Importante: se você não configurou nenhum escopo no método API Gateway, certifique-se de usar um token de ID válido. Se você configurar escopos extras no método API Gateway, certifique-se de usar um token de acesso válido. Para obter mais informações, consulte Como autorizo o acesso às APIs do API Gateway usando escopos personalizados no Amazon Cognito?
Exemplo de carga útil do token de segurança:
Id token payload: {
"sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"aud": "xxxxxxxxxxxxexample",
"email_verified": true,
"token_use": "id",
"auth_time": 1500009400,
"iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example",
"cognito:username": "janedoe",
"exp": 1500013000,
"given_name": "Jane",
"iat": 1500009400,
"email": "janedoe@example.com"
}
Access token payload:
{
"auth_time": 1500009400,
"exp": 1500013000,
"iat": 1500009400,
"iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_example",
"scope": "aws.cognito.signin.user.admin",
"sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
"token_use": "access",
"username": "janedoe@example.com"
}
Observe os seguintes nomes de declarações no exemplo de carga útil do token de segurança:
- token_use indica o tipo de token (token de ID ou de acesso).
- exp indica o tempo de expiração do token.
Observação: a reivindicação exp é representada como segundos desde a época do Unix (1970-01-01T0:0:0Z) até a data e a hora em que o token expira no Tempo Universal Coordenado (UTC).
- auth_time indica quando o token foi emitido.
- iss indica o domínio do grupo de usuários que emitiu os tokens.
Importante: o token que você usa deve corresponder ao grupo de usuários que você configura no método API Gateway. Se não for possível invocar a API, confirme se está usando corretamente o cabeçalho de autorização. Se você receber erros 401, certifique-se de que suas políticas de recursos não bloqueiem a solicitação.
Se você usar o Postman para invocar a API
Use o modo de autorização OAuth 2.0 para usar os tokens do Amazon Cognito diretamente. Para obter mais informações, consulte API authentication and authorization in Postman (Autenticação e autorização de API no Postman) no site do Postman.
Ao configurar o modo de autorização OAuth 2.0, confirme se o seguinte é verdadeiro:
- A opção Tipo de concessão está definida como Código de autorização ou Autorização implícita.
- O URL de retorno de chamada corresponde ao URL redirecionado configurado no cliente de aplicação do grupo de usuários.
- O URL de autenticação está no seguinte formato: https://mydomain.auth.us-east-1.amazoncognito.com/login
Observação: substitua mydomain pelo nome de domínio que você usa para configurar seu grupo de usuários. Certifique-se de inserir a região da AWS correta na qual sua API está hospedada.
- O ID do cliente é o ID do cliente de aplicação do grupo de usuários.
Observação: se você associar um segredo de cliente ao cliente de aplicação do grupo de usuários, especifique o segredo na guia Autorização. Se nenhum segredo de cliente estiver associado ao cliente de aplicação do grupo de usuários, deixe o campo Segredo do cliente em branco.
- O Escopo está configurado como Openid.
Observação: você deve permitir o escopo do Openid no cliente de aplicação do grupo de usuários.
- Em fluxo do código de autorização, insira o endpoint correto de token de grupo de usuários do Amazon Cognito.
Exemplo de endpoint de token de grupo de usuários do Amazon Cognito:
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token
Observação: se o endpoint do token não suportar o tipo de conteúdo, o Postman não poderá transmitir o conteúdo necessário e resultará em um erro 405. Para evitar esse problema, use o fluxo implícito. Para obter mais informações, consulte Subsídios do OAuth 2.0.
Informações relacionadas
Secure API access with Amazon Cognito federated identities, Amazon Cognito user pools, and API Gateway (Acesso seguro à API com identidades federadas do Amazon Cognito, grupos de usuários do Amazon Cognito e API Gateway)
How do I decode and verify the signature of an Amazon Cognito JSON Web Token? (Como posso decodificar e verificar a assinatura de um JSON Web Token do Amazon Cognito?)
Controlar o acesso a APIs REST usando grupos de usuários do Amazon Cognito como autorizador