Como configurar um grupo de usuários do Amazon Cognito como autorizador em uma API REST do API Gateway?

9 minuto de leitura
0

Quero configurar um grupo de usuários do Amazon Cognito como autorizador na minha API REST do Amazon API Gateway.

Breve descrição

Há duas maneiras de configurar um grupo de usuários do Amazon Cognito como autorizador em uma API REST do API Gateway:

Você pode usar tokens de ID ou tokens de acesso para autorização. Os tokens de acesso podem usar escopos personalizados no Amazon Cognito para autorizar o acesso às APIs do API Gateway. Um autorizador do Lambda pode validar as reivindicações em tokens de ID e tokens de acesso emitidos pelo Amazon Cognito.

Para obter mais informações, consulte as informações a seguir:

Resolução

Pré-requisitos:

Criar um autorizador COGNITO_USER_POOLS

Para obter mais informações, consulte Integrar uma API REST com um grupo de usuários do Amazon Cognito. Siga as instruções na seção Para criar um autorizador COGNITO_USER_POOLS usando o console do API Gateway.

Teste o novo autorizador COGNITO_USER_POOLS

Conclua as seguintes etapas:

  1. Abra o console do API Gateway.
  2. No novo autorizador, escolha o botão Testar.
  3. Na janela Testar, em Autorização, insira um token de ID do novo grupo de usuários do Amazon Cognito.
  4. Escolha Testar.
    Observação: se o token de ID estiver correto, o teste retornará um código de 200 respostas. Um token de ID incorreto retorna um código de resposta 401.

Configurar o autorizador COGNITO_USER_POOLS em um método de API

Para obter mais informações, consulte Integrar uma API REST com um grupo de usuários do Amazon Cognito. Siga as instruções na seção Para configurar um autorizador COGNITO_USER_POOLS em métodos.

Obter tokens de autorização

Há quatro maneiras de obter tokens de autorização:

Observação: configure a interface de usuário hospedada pelo Amazon Cognito com uma concessão de código de autorização para que seu aplicativo possa trocar o código por um endpoint de token.

Se você usar um tipo de concessão implícito, poderá obter a concessão do URL de retorno de chamada. O URL de retorno de chamada é anexado aos parâmetros do token de acesso e do token de ID para fluxo implícito. Certifique-se de usar o tipo de token correto.

Use a interface de usuário hospedada do Amazon Cognito para obter tokens de autorização

Observação: Quando você usa o fluxo de concessão de código de autorização, o parâmetro do tipo de resposta deve ser “código”.

Para usar o fluxo Concessão de código de autorização, conclua as seguintes etapas:

  1. Envie uma solicitação GET para a concessão de um código de autorização:

    https://example_domain/oauth2/authorize?response_type=code&client_id=example_app_client_id&redirect_uri=example_callback_url

    Observação: substitua example_domain pelo nome de domínio do seu grupo de usuários. Substitua o example_app_client_id pelo ID do cliente da aplicação do seu grupo de usuários. Substitua example_callback_url pelo seu URL de retorno de chamada. Inclua o parâmetro identity_provider para que o endpoint seja redirecionado para o provedor de identidade federado. Se o cliente da aplicação estiver configurado somente para grupos de usuários do Amazon Cognito, o seguinte endpoint será redirecionado para o endpoint /login:

    https://example_domain/login?response_type=code&client_id=example_app_client_id&redirect_uri=example_callback_url
  2. Faça login no seu grupo de usuários ou no seu provedor de identidade federada. A interface do usuário redireciona para o URL especificada no retorno de chamada do cliente da aplicação.
    Importante: o URL de redirecionamento inclui o código de autorização que deve ser trocado com o endpoint do token para obter tokens válidos.

  3. Envie uma solicitação POST para o endpoint /oauth2/token para trocar um código de autorização por tokens. Para obter mais informações, consulte Endpoint de token.

Exemplo de solicitação POST para trocar um código de autorização por tokens

Observação: o exemplo de solicitação POST usa o seguinte endpoint /oauth2/token:

Content-Type='application/x-www-form-urlencoded'&Authorization=Basic ZXhhbXBsZTEyMzQ1Njc4OTA6enl4OTh3N3l2dHNycTY1NHBvMzIx
grant_type=authorization_code&
client_id=example1234567890&
code=AUTHORIZATION_CODE&
redirect_uri=com.myclientapp://myclient/redirect

Exemplo de resposta à solicitação POST

HTTP/1.1 200 OK Content-Type: application/json

{
  "access_token":"abCde1example",
  "id_token":"abCde2example",
  "refresh_token":"abCde3example",
  "token_type":"Bearer",
  "expires_in":3600
}

Observação: quando você usa o fluxo de concessão implícita, o parâmetro do tipo de resposta deve ser “token”.

Para usar o fluxo Concessão implícita, conclua as seguintes etapas:

  1. Envie uma solicitação GET para uma concessão implícita:

    https://example_domain/oauth2/authorize?response_type=token&client_id=example_app_client_id&redirect_uri=example_callback_url

    Observação: substitua example_domain pelo nome de domínio do seu grupo de usuários. Substitua o example_app_client_id pelo ID do cliente da aplicação do seu grupo de usuários. Substitua example_callback_url pelo seu URL de retorno de chamada. Inclua o parâmetro identity_provider para que o endpoint seja redirecionado para o provedor de identidade federado. Se o cliente da aplicação estiver configurado somente para grupos de usuários do Amazon Cognito, o seguinte endpoint será redirecionado para o endpoint /login:

    https://example_domain/login?response_type=token&client_id=example_app_client_id&redirect_uri=example_callback_url
  2. Faça login no seu grupo de usuários com o nome de usuário e a senha de um usuário existente ou crie um novo usuário para fazer login. A interface do usuário redireciona para o URL especificada no retorno de chamada do cliente da aplicação.
    Observação: o URL de redirecionamento inclui o token de ID e o token de acesso.
    Exemplo de URL de redirecionamento:

    https://www.example.com/#id_token=123456789idtoken123456789&access_token=123456789accesstoken123456789expires_in=3600&token_type=Bearer

Use a AWS CLI para obter tokens de autorização

Observação: se você receber erros ao executar comandos da AWS CLI, consulte Solucionar erros da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Execute o comando initiate-auth da AWS CLI para obter tokens de autorização:

aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=example_user,PASSWORD=example_password --client-id example_app_client_id

Importante: substitua example_user pelo seu nome de usuário, example_password pela sua senha e example_app_client_id pelo ID do cliente da aplicação.

Exemplo de resposta do comando initiate-auth da AWS CLI

{
  "AuthenticationResult": {
    "AccessToken": "abCde1example",
    "IdToken": "abCde2example",
    "RefreshToken": "abCde3example",
    "TokenType": "Bearer",
    "ExpiresIn": 3600
  },
  "ChallengeParameters": {}
}

Use um dos SDKs da AWS para obter tokens de autorização

Para obter mais informações, consulte Integrating Amazon Cognito authentication and authorization with web and mobile apps.

Use o Postman para obter tokens de autorização

Use o modo de autorização do OAuth 2.0 no site do Postman para obter tokens de autorização. Para obter mais informações, consulte Por que estou recebendo erros “401 Unauthorized” depois de criar um autorizador do Lambda?

Configure escopos personalizados do OAuth 2.0 nos grupos de usuários do Amazon Cognito e verifique os escopos no API Gateway

Um escopo fornece um nível de acesso que uma aplicação pode solicitar de um recurso. O Amazon Cognito tem escopos do OAuth integrados que podem ser configurados para permitir que um cliente da aplicação seja associado a um grupo de usuários. Para obter mais informações sobre escopos integrados no Amazon Cognito, consulte App client terms.

Escopos personalizados podem ser associados aos servidores de recursos do OAuth 2.0. Para obter mais informações sobre servidores de recursos, consulte OAuth 2.0 scopes and API authorization with resource servers.

Quando você usa o Amazon Cognito com o API Gateway, o autorizador do Amazon Cognito autentica a solicitação e protege os recursos. Use escopos personalizados com o Amazon Cognito e o API Gateway para fornecer níveis diferenciados de acesso aos seus recursos de API. Você também tem mais controle ao expor recursos para obter os escopos dos tokens de acesso.

Configurar um servidor de recursos e escopos personalizados do OAuth 2.0 em um grupo de usuários

  1. Defina o servidor de recursos e os escopos personalizados para seu grupo de usuários.
  2. No Identificador do servidor de recursos, forneça o endpoint HTTPS do API Gateway em que seus recursos estão localizados.
  3. Se necessário, configure um cliente de aplicativo de grupo de usuários e adicione os escopos personalizados nas configurações do cliente de aplicativo.
    Observação: um nome de escopo personalizado é formatado como ResourceServerIdentifier/ScopeName

Quando uma aplicação cliente solicita um escopo personalizado em um fluxo OAuth 2.0, ela precisa solicitar o identificador completo do escopo. Por exemplo, se o identificador do servidor de recursos for e o nome do escopo for resources.read, a aplicação cliente deverá solicitar no tempo de execução.

Verificar os escopos personalizados do OAuth 2.0 no API Gateway

  1. Integre uma API REST com um grupo de usuários do Amazon Cognito.
  2. No console do API Gateway, escolha uma API REST.
  3. No painel Recursos, escolha um nome de método.
  4. Escolha a configuração Solicitação de método.
  5. Na lista suspensa Autorização, escolha Autorizador do Cognito. Isso adiciona automaticamente um novo campo chamado Escopos do OAuth.
  6. No campo Escopos do OAuth, insira o identificador completo do escopo personalizado no formato mencionado anteriormente. Por exemplo, .
  7. Salve e implante a API.

Use Postman ou CURL para testar a configuração

  1. Para obter o token de acesso do servidor de autorização do Amazon Cognito, use um dos fluxos do OAuth 2.0 definidos para o cliente.
  2. Envie o token de acesso recebido que você recebeu como cabeçalho de autorização em uma solicitação ao API Gateway.

Se tudo der certo e o API Gateway validar e verificar o token de acesso e o escopo personalizado, você receberá uma resposta de 200 OK.

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