Skip to content

crobertocamilo/Cognito_API_integracao

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Desafio 4 do Bootcamp Cloud AWS

Evento promovido pela Digital Innovation One - DIO, com patrocínio da Amazon Web Services - AWS.

logo bootcamp

Desafio

Adicionando Segurança em APIs na AWS através do Cognito.


Objetivo

Utilizar o AWS Cognito para oferecer autenticação, autorização e gerenciamento de usuários que acessam uma API. Etapas a serem observadas:

  • Utilizar os serviços Amazon Cognito, DynamoDB, API Gateway e AWS Lambda;
  • Criar uma API REST no Amazon API Gateway;
  • Criar tabela no Amazon DynamoDB;
  • Criar funções no AWS Lambda;
  • Integrar o API Gateway com o Lambda back-end;
  • Utilizar a ferramenta no POSTMAN;
  • Criar um autorizador do Amazon Cognito para uma API REST no Amazon API Gateway.

Desenvolvimento da solução:

A API utilizada neste projeto foi implementada utilizando o Serverless Framework e consiste na criação de uma tabela no DynamoDB e funções Lambda, integradas ao API Gateway para realizar operações sobre a tabela (inserir item, consultar, atualizar e deletar).

A criação de toda a infraestrutura da API é automática e foi baseada no projeto que desenvolvi neste repositório. Se desejar trocar o nome/tema da tabela, renomeie o nome da tabela Paises e de sua chave Pais, no arquivo serveless.yml e nas funções python da pasta src, para os nomes que desejar.


Implementando a solução:

Requisitos:

  • Criar (ou possuir) uma conta na AWS;
  • Serverless Framework instalado (tutorial oficial aqui);
  • AWS-CLI instalado e configurado com as credenciais da conta (Access Key e Secret Key) na AWS. Para mais informações, clique aqui;
  • Instalar o Postman para interação com as rotas da API.

Para realizar o deploy da API na AWS, clone este repositório e acesse a pasta raiz pelo terminal. Digite:

serverless deploy

Se a estrutura de serviços for construída com sucesso em sua conta da AWS, será exibido no terminal uma mensagem como a mostrada abaixo, onde são listados os endpoints criados para cada método/operação no banco de dados.

Os links mostrados na imagem são apenas exemplos e não estão mais disponíveis.

Estrutura de serviços na AWS



A manipulação da tabela criada pode ser feita através do Postman, conforme exemplificado aqui, mas respeitando o nome da chave primária (neste projeto, "Pais"). Como o DynamoDB é NoSQL, não é necessário que todos os registros da tabela tenham os mesmos atributos - o único campo obrigatório é a chave primária (partition key).



> Criando um autenticador no AWS Cognito

Para implementar autenticação e gerenciamento de usuários no acesso à API é possível criar um autenticador (user pool) no Cognito. O passo a passo está documentado neste pdf.

User pool criada no Cognito
User pool criada no Cognito.



> Integrando o autenticador à API

Em seguida, é necessário fazer a integração da user pool criada com a API criando um autorizador no API Gateway e o vinculando aos métodos que terão restrição de acesso, conforme exemplificado nas imagens abaixo:

Autorizador
Criando um autorizador no API Gateway.



Vinculando o autorizador
Vinculando o autorizador ao método POST. Repetir para os outros métodos.



Com o autorizador vinculado, refaça o deploy da API clicando no botão Actions. A partir de então, o API Gateway não mais permitirá que um usuário insira novos dados na tabela, sendo necessário que ele antes se cadastre no Cognito.

Erro inserir item
Erro ao tentar inserir um item na tabela - Acesso bloqueado.



> Acessando a API no Postman

Para ter acesso novamente à API, é necessário gerar um token de acesso no Postan. A imagem abaixo mostra um exemplo de como os campos devem ser preenchidos os dados configurados na criação da user pool no Cognito.

Autorizador
Gerando um token para acesso à API no Postman.



> Casdatrando um usuário no Cognito

Para concluir a geração do token de acesso, será necessário cadastrar um usuário no Cognito, informando um email e uma senha (os critério para a definição da senha foram definidos na criação da user pool), e em seguida confirmando o código de verificação recebido no email:

Autorizador
Cadastrando um usuário no Cognito e validando a conta.



Após o usuário ser validado, será concluída a geração do token no Postman. Copie o código gerado, e retorne à aba de POST em que a modificação na tabela havia sido bloqueada. Na seção Autorization da aba, selecione uma autenticação do tipo OAuth 2.0 e cole o token gerado na etapa anterior:

Configurando token
Configurando sua autorização no Postman.



Enfim, tente outra vez inserir um novo registro na tabela. Como agora você é um usário autorizado, o Cognito irá permitir o acesso à API e será possível realizar alterações na tabela!

Autorizador
Novo registro inserido com sucesso na tabela - Acesso autorizado!

About

Implentando controle de acesso a uma API através do AWS Cognito.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages