Como soluciono os erros “401 Não autorizado” de um endpoint da API REST do API Gateway depois de configurar um grupo de usuários do Amazon Cognito?

5 minuto de leitura
0

Eu configurei meu grupo de usuários do Amazon Cognito como um autorizador COGNITO_USER_POOLS na minha API REST do Amazon API Gateway. Agora recebo erros “401 Não autorizado” na resposta da API. Como soluciono esses erros?

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

1.    No console do API Gateway, no painel APIs, escolha o nome da sua API.

2.    No painel de navegação, selecione Autorizadores em sua API.

3.    Revise a configuração do autorizador e confirme se o seguinte é verdadeiro:
O ID do grupo de usuários corresponde ao emissor do token.
A API está implantada.
O autorizador funciona no modo de teste.

Para obter mais informações, consulte Integrar uma API REST com um grupo de usuários do Amazon Cognito.

Observação: se você não conseguir invocar sua API depois de confirmar a configuração do autorizador no método da API, 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 forem válidos, você poderá decodificar os tokens. Se os tokens não forem válidos, certifique-se de que nenhum espaço tenha sido adicionado aos tokens quando eles foram passados no cabeçalho da solicitação.

Importante: se não houver escopos adicionais configurados no método do API Gateway, verifique se você está usando um token de ID válido. Se escopos adicionais estiverem configurados no método do API Gateway, confirme se você está usando um token de acesso válido. Para obter mais informações, consulte Integrar uma API REST com um grupo de usuários do Amazon Cognito e usar escopos personalizados do Amazon Cognito no API Gateway.

Exemplo de carga útil de 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 reivindicações no exemplo de carga 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:

  • Certifique-se de que o token que você está usando corresponda ao grupo de usuários configurado no método do API Gateway. Se você ainda não conseguir invocar a API, confirme se está usando o cabeçalho de autorização corretamente.
  • Se você ainda receber erros 401, certifique-se de que suas políticas de recursos não estejam bloqueando a solicitação.

Se você estiver usando o Postman para invocar a API

Use o modo de autorização OAuth 2.0 para usar os tokens do Amazon Cognito diretamente. Ao configurar o modo de autorização OAuth 2.0, confirme se o seguinte é verdadeiro:

  • O tipo de concessão é Código de autorização ou autorização implícita, seguindo sua configuração no cliente do aplicativo do grupo de usuários.
  • O URL de retorno de chamada corresponde ao URL redirecionado configurado no cliente do aplicativo do grupo de usuários.
  • O URL de autenticação está no seguinte formato:
https://mydomain.auth.us-east-1.amazoncognito.com/login

Importante: Substitua mydomain pelo nome de domínio que você está usando para configurar seu grupo de usuários. Certifique-se de inserir a região correta da AWS na qual sua API está hospedada.

  • O ID do cliente é o ID do cliente do aplicativo do grupo de usuários.
    Observação: se um segredo de cliente estiver associado ao cliente de aplicativo do grupo de usuários, certifique-se de especificar o segredo do cliente na guia Autorização no campo segredo do cliente. Se nenhum segredo do cliente estiver associado ao cliente do aplicativo do grupo de usuários, deixe o campo segredo do cliente em branco.
  • O escopo está configurado como openid.
    Observação: o escopo openid também deve ser permitido no cliente do aplicativo do grupo de usuários.
  • O endpoint correto do token do grupo de usuários do Amazon Cognito é inserido para o fluxo do código de autorização.

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:**O Postman pode não passar o tipo de conteúdo necessário para o endpoint do token, o que pode resultar em um erro 405. No entanto, você não recebe o erro 504 ao usar o fluxo implícito.


Informações relacionadas

Acesso seguro à API com identidades federadas do Amazon Cognito, grupos de usuários do Amazon Cognito e Amazon API Gateway

Como faço para decodificar e verificar a assinatura de um Amazon Cognito JSON Web Token?

Controlar o acesso a uma API REST usando grupos de usuários do Amazon Cognito como autorizador