Ir para o conteúdo

Como soluciono os erros “401 Unauthorized” 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. 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:

  1. Abra o console do API Gateway.
  2. No painel de navegação, selecione APIs e, em seguida, selecione sua API.
  3. No painel de navegação, selecione Autorizadores em sua API.
  4. 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