Utilizamos cookies para ajudá-lo a navegar com eficiência e executar determinadas funções. Você encontrará informações detalhadas sobre todos os cookies em cada categoria de consentimento abaixo.
Os cookies categorizados como “Necessários” são armazenados no seu navegador, pois são essenciais para ativar as funcionalidades básicas do site.
Também utilizamos cookies de terceiros que nos ajudam a analisar como você usa este site, armazenam suas preferências e fornecem conteúdo e anúncios que são relevantes para você. Estes cookies só serão armazenados no seu navegador com o seu consentimento prévio.
Você pode optar por ativar ou desativar alguns ou todos esses cookies, mas a desativação de alguns deles pode afetar sua experiência de navegação.
Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.
Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.
Performance cookies are used to understand and analyse the key performance indexes of the website which helps in delivering a better user experience for the visitors.
Advertisement cookies are used to provide visitors with customised advertisements based on the pages you visited previously and to analyse the effectiveness of the ad campaigns.
17 de junho de 2022
A grande maioria dos sistemas necessitam controlar acesso aos seus recursos. Normalmente, esse controle é realizado por meio de cadastro de usuários que deverão se autenticar antes de poder acessar determinado endpoint de uma API, por exemplo. Essa atividade se torna um pouco repetitiva e envolve questões de segurança e planejamento de como lidar com os dados utilizados nessa tarefa. Para evitar o retrabalho e gasto do tempo com essa atividade, a AWS dispõe do Cognito.
[adrotate banner=”4″]
O Amazon Cognito (AWS Cognito) possibilita criar com facilidade e rapidez o cadastramento, autenticação e controle de acesso de usuários em aplicações Web ou Mobile, de maneira altamente escalável, configurável e segura.
Além disso, também facilita que os usuários possam fazer login utilizando provedores de identidade social, como o Facebook, Amazon e Google, e também provedores de identidade empresarial, como o OpenID Connect. Tudo isso pode ser configurado via o próprio console da AWS ou programaticamente.
Para exemplificar o uso do Amazon Cognito, vamos construir uma aplicação simples utilizando o Serverless Framework. Criaremos funções lambda para cadastrar e logar usuários no Cognito. Para, assim, utilizá-lo como autorizador em uma função simples, que retornará uma mensagem de boas-vindas ao usuário
autenticado.
Antes de começar a codificar, é necessário configurar o CLI da AWS com as credenciais de um usuário IAM, criado via console da plataforma. Também é necessário possuir o Serverless Framework instalado em sua máquina.
Vamos criar um projeto utilizando um template pré-configurado para trabalhar com a AWS, Node e TypeScript.
Para isso, basta executar o comando abaixo:
Agora, precisamos configurar nosso projeto para trabalhar com o Amazon Cognito. Para isso, vamos alterar o arquivo serverless.ts na raiz do projeto, e adicionar as configurações necessárias.
Primeiramente, precisamos configurar duas variáveis de ambiente. Então, adicionamos isso no bloco environment, são elas: user_pool_id (que contém o ID do grupo de usuários que será utilizado) e client_id (que define o ID do cliente do Amazon Cognito).
Em seguida, precisamos configurar as permissões do AWS IAM, para que as funções lambda que serão criadas a seguir possam ter acesso aos recursos necessários para se trabalhar com o Cognito. Todas as permissões foram adicionadas dentro do bloco iamRoleStatements.
Por fim, precisamos configurar os recursos necessários para se trabalhar com o Cognito. Dessa forma, adicionamos todas as configurações no bloco resources. Nele, criamos e nomeamos o grupo de usuários e cliente no Amazon Cognito, definimos como será o esquema de dados, políticas de validação de senha, número de horas que um token será válido e outras configurações.
Para isso, adicione as seguintes configurações no arquivo serverless.ts:
Agora que temos nosso projeto criado e configurado, podemos seguir e criar nossa primeira função lambda. Ela será responsável por realizar o cadastro de um usuário no Cognito:
Primeiramente, obtemos os dados recebidos pelo usuário e os validamos. Em seguida, configuramos um objeto com o e-mail validado, o ID do grupo de usuários e algumas configurações adicionais, como a MessageAction (que aqui está definida com “SUPPRESS” para não enviar e-mail de confirmação para o
usuário cadastrado).
Após registrar o usuário, precisamos também salvar a senha de acesso. Então, criamos um objeto que contém o e-mail do usuário criado, a senha validada e o ID do grupo de usuários. Se tudo ocorrer bem, a resposta conterá o e-mail do usuário cadastrado e um status associado.
Para essa função e as demais que serão implementadas, foram utilizadas três outras funções auxiliares, são elas:
Agora que já podemos realizar o cadastro no grupo de usuários do Cognito, precisamos criar também a função para fazer o login na plataforma. Para, assim, obter o token de acesso para utilizá-lo em funções que estarão protegidas.
Então, criamos a função da seguinte maneira:
Aqui, novamente, obtemos as credenciais informadas pelo usuário e as validamos. Em seguida, criamos um objeto com os dados validados, e as informações necessárias para realizar a busca do usuário, como o ID do grupo a qual ele pertence e o ID do cliente do Cognito. Por fim, chamamos a função adminInitiateAuth,passando o objeto criado para tentar autenticar o usuário.
Caso as credenciais estejam corretas, é devolvido um token de acesso como resposta. Com isso, podemos partir para a próxima etapa.
Agora que já podemos cadastrar os usuários no Cognito e obter um token de acesso por meio da função de login criada, podemos testar nosso autorizador utilizando-o em uma nova função lambda.
Para isso, precisamos configurar nossa função da seguinte maneira:
No bloco authorizer, definimos o autorizador que será utilizado para controlar o acesso a função, que verificará se o token de acesso foi passado na requisição. Nomeamos nosso autorizador de CognitoAuthorizer, e precisamos também passar o ARN do nosso grupo de usuários do Cognito. Sendo assim, referenciamos esse recurso e obtemos o ARN dele utilizando a função “:GetAtt”.
Por fim, definimos no bloco claims, que iremos utilizar o campo e-mail do objeto token decodificado. Para, assim, obter o e-mail do usuário que acesse nossa função.
Com a função devidamente configurada, podemos seguir para sua implementação. Abaixo é mostrada a função criada. Ela basicamente resgata o e-mail do usuário autenticado que a está acessando, exibindo uma mensagem de boas-vindas:
A mensagem será exibida caso o usuário tenha informado um token válido. Caso não seja passado um token, ou o token for inválido, o autorizador não permitirá que o usuário tenha acesso a função hello, devolvendo a mensagem “Unauthorized”.
Agora que temos toda a parte de implementação concluída, podemos enviar nossas funções para a AWS e testar o seu funcionamento. Para realizar o deploy, basta executar o seguinte comando pela sua CLI: serverless deploy.
Após alguns instantes, o envio estará concluído e serão exibidas as URLs para acesso de cada uma das funções implementadas, que poderão ser acessadas e testadas.
Veja também:
Como Configurar Atalhos no Git
Biblioteca de tutoriais da Luby
O AWS Cognito é uma excelente opção para quem busca implementar a autenticação e o controle de acesso em seu sistema Web ou Mobile, uma vez que ele provê:
Autor: Ivanildo Simplício.
[adrotate banner=”5″]
Autor