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. Tokens de acesso podem autorizar acesso às APIs do API Gateway usando escopos personalizados no Amazon Cognito. 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 estes tópicos:

Resolução

O procedimento a seguir mostra como criar um autorizador COGNITO_USER_POOLS. O exemplo pressupõe que você já criou duas coisas:

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

Depois de criar o autorizador COGNITO_USER_POOLS, faça o seguinte:

1.No console do API Gateway, escolha o botão Testar abaixo do novo autorizador.

2.Na janela Testar, em Autorização, insira um token de ID do novo grupo de usuários do Amazon Cognito.

3.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 do Amazon Cognito com uma concessão de código de autorização para que sua aplicação possa trocar o código por um endpoint de token.

Se você estiver usando 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.

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

Para usar o ](https://developer.amazon.com/docs/login-with-amazon/authorization-code-grant.html)fluxo de concessão do código de autorização[, faça o seguinte:

**Observação:**O parâmetro do tipo de resposta deve ser “código” ao usar o fluxo de concessão do código de autorização.

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

Importante: 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.

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

Observação: Inclua o parâmetro identity_provider para que o endpoint redirecione 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 precisa 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: https://example_domain.auth.us-east-1.amazoncognito.com/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
}

Para usar o fluxo de ](https://developer.amazon.com/docs/login-with-amazon/implicit-grant.html)concessão implícita[, faça o seguinte:

Observação: o parâmetro do tipo de resposta deve ser “token” ao usar o fluxo de concessão implícita.

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

Importante: 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.

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

Observação: Inclua o parâmetro identity_provider para que o endpoint redirecione 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

Para obter tokens de autorização usando a AWS CLI

Observação: se você receber erros ao executar comandos da AWS CLI, certifique-se de estar usando a versão mais recente da AWS CLI.

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

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.

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

Exemplo de resposta do comando initiate-auth da AWS CLI

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

Para obter tokens de autorização usando um dos SDKs da AWS

Para obter mais informações, consulte Como integrar o Amazon Cognito com aplicações Web e móveis.

Para obter tokens de autorização usando o Postman

Use o modo de autorização OAuth 2.0 no Postman para obter tokens de autorização. Para obter mais informações, consulte Por que estou recebendo erros 401 Não Autorizado do API Gateway 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 Terminologia de configurações do cliente da aplicação.

Escopos personalizados podem ser associados aos servidores de recursos do OAuth 2.0. Para obter mais informações sobre servidores de recursos, consulte Como definir de servidores de recursos para seu grupo de usuários.

Quando você usa o Amazon Cognito com o API Gateway, o autorizador do Amazon Cognito autentica a solicitação e protege os recursos. O uso de escopos personalizados com o Amazon Cognito e o API Gateway ajuda você a 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.Definir o servidor de recursos e os escopos personalizados para seu grupo de usuários.
No Identificador do servidor de recursos, forneça o endpoint HTTPS do API Gateway em que seus recursos estão localizados.

2.Se necessário, configure um cliente da aplicação de grupo de usuários e, em seguida, adicione os escopos personalizados nas configurações do cliente da aplicação.

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 https://myresourceserver.example.com e o nome do escopo for resources.read, a aplicação cliente deverá solicitar https://myresourceserver.example.com/resources.read no tempo de execução.

Verificar os escopos personalizados do OAuth 2.0 no API Gateway

1.Integrar 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, https://myresourceserver.example.com/resources.read.

7.Salve e implante a API.

Testar a configuração usando Postman ou CURL

1.Obtenha o token de acesso do servidor de autorização do Amazon Cognito usando um dos fluxos 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 para o API Gateway.

3.Se tudo der certo e o API Gateway validar e verificar o token de acesso e o escopo personalizado, você receberá uma resposta 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 decodificar e verificar a assinatura de um token Web JSON do Amazon Cognito?

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