Como configurar um grupo de usuários do Amazon Cognito como autorizador em uma API REST do API Gateway?
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:
- Como usar tokens com grupos de usuários
- Como definir servidores de recursos para seu grupo de usuários
- Criar um grupo de usuários do Amazon Cognito para uma API REST
Resolução
O procedimento a seguir mostra como criar um autorizador COGNITO_USER_POOLS. O exemplo pressupõe que você já criou duas coisas:
- Um grupo de usuários do Amazon Cognito com um cliente de aplicação.
- Um recurso da API REST do API Gateway.
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:
- Configurar a interface de usuário hospedada do Amazon Cognito.
- Usar a AWS Command Line Interface (AWS CLI)
- Usar um dos ](https://aws.amazon.com/cognito/dev-resources/)SDKs da AWS[.
- Usar a aplicação Postman.
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
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
Conteúdo relevante
- AWS OFICIALAtualizada há 8 meses
- AWS OFICIALAtualizada há 3 anos
- AWS OFICIALAtualizada há 6 meses