Amazon Cognito
Tags: aws, cloud, devops, security
Published: 2023-05-19 14:30:37

**Anotações sobre o Amazon Cognito para ajudar na preparação das certificações AWS.**

Até o momento as anotações são para as certificações abaixo:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/se0sqtegn424nami6rz8.png)

- [Link oficial](https://aws.amazon.com/pt/cognito/)

---
##**Definição do fornecedor**

_O Amazon Cognito permite adicionar facilmente a **autorização e autenticação** do usuário aos seus aplicativos móveis e da web._


---

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q99bk89dsdt1kwcfif5o.png)

---
![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jrrt0pwf9ezipzg491zg.png)

---
##**Anotações gerais**

- **Autenticação e Autorização**
- Web and Mobile app
- Federação de Identidade
- Web Facebook, Google
- MFA
- Detecção de Bots

---
##**User Identity**


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aurioafga4sugtmo8kn3.png)

---
##**User Pools**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/cognito-user-identity-pools.html)

**Anotações gerais**
- **São usados ​​para Autenticação.**
- User Pools é um diretório de usuários usuários que fornecem opções de inscrição e entrada para os usuários do seu aplicativo. 
- **Informações para configurar IdP:_App client Id / App client Secret / List of Scopes_**
- COGNITO_USER_POOLS autorizer - para integrar com API Gateway
- **Não tem CAPTCHA - Use Auth Chanllenge Lambda Trigger**
- **São utilizados para autenticação.**
- Os usuários podem fazer login em aplicações Web ou móveis por meio do Amazon Cognito.
- Os usuários também podem fazer login por meio de provedores de identidade social, como o Google, o Facebook, a Amazon ou a Apple, e por meio de provedores de identidade SAML.
- Quer os usuários façam login diretamente ou por meio de terceiros, todos os membros do grupo de usuários têm um perfil de diretório que você pode acessar por meio de um Kit de desenvolvimento de software (SDK).
- Serviços de cadastro e login.
- Uma interface do usuário da web integrada e personalizável para login de usuários.
- Gerenciamento de diretório de usuários e perfis de usuário.
- **Recursos de segurança como a autenticação multifator (MFA)** verifica a existência de credenciais comprometidas, proteção de aquisição de conta e verificação de e-mail e telefone.
- Fluxos de trabalho personalizados e migração de usuários por meio de triggers do AWS Lambda.

**Exemplo de utilização**
_Após autenticar com êxito um usuário, o Amazon Cognito emite JSON Web Tokens (JWT) que você pode usar para proteger e autorizar o acesso às suas próprias APIs ou trocar por credenciais da AWS_.


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/o8jle25w9plfdw0oca6n.png)

1. Os usuários enviam solicitações de autenticação para os User Pool do Cognito.
2. O User Pool do Cognito verifica a identidade do usuário ou envia a solicitação para Identity Providers, como Facebook, Google, Amazon ou autenticação SAML (com Microsoft AD).
3. O token do User Pool do Cognito é enviado de volta ao usuário.
4. A pessoa pode usar esse token para acessar suas APIs de back-end hospedadas em seus clusters do EC2 ou no API Gateway e Lambda.



**Casos de uso**

- Crie páginas da Web de inscrição e login para seu aplicativo .
- Acesse e gerencie os dados do usuário .
- Rastreie o dispositivo, a localização e o endereço IP do usuário e adapte-se às solicitações de entrada de diferentes níveis de risco .
- Use um fluxo de autenticação personalizado para seu aplicativo.



---
##**Identity Pools**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/identity-pools.html)

**Anotações gerais**
- **São utilizados para Autorização.**
- **Permitem que você conceda aos seus usuários acesso a outros serviços da AWS.**
- **Fornecem credenciais temporárias da AWS para usuários que são convidados _(não autenticados_) e para usuários que foram autenticados e receberam um token.**
- É um repositório de dados de identidade de usuários específicos para sua conta.

**Casos de uso**

- Dê a seus usuários acesso a recursos da AWS , como um bucket do Amazon Simple Storage Service (Amazon S3) ou uma tabela do Amazon DynamoDB.
- Gere credenciais temporárias da AWS para usuários não autenticados .

**Exemplo de utilização**


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t4if0kljvgp32j0ui09l.png)

1. O aplicativo Web ou aplicativo móvel envia seu token de autenticação para Cognito Identity Pools. O token pode vir de um provedor de identidade válido, como Cognito User Pools, Amazon ou Facebook.
2. O Cognito Identity Pool troca o token de autenticação do usuário por credenciais temporárias da AWS para acessar recursos como S3 ou DynamoDB. As credenciais da AWS são enviadas de volta ao usuário.
3. As credenciais temporárias da AWS serão usadas para acessar os recursos da AWS.

---
##**Integrate a REST API with an Amazon Cognito user pool**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/apigateway/latest/developerguide/apigateway-enable-cognito-user-pool.html)

----
##**Custom authentication challenge Lambda triggers**
[Documentação oficial](https://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/user-pool-lambda-challenge.html)

- Pode ser utilizado para criar desafios durante o User Pool Operarions do Cognito


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rj2xj1jud5n1ni2u8eqd.png)



----
##**Federetion with User Pools**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/udbb72cehfpkr45p142q.png)


---

##**Web Identity Federation**

---

**Referências**

- [What's the difference between Amazon Cognito user pools and identity pools?](https://aws.amazon.com/pt/premiumsupport/knowledge-center/cognito-user-pools-identity-pools/)
- [Amazon Cognito User Pools vs Identity Pools](https://tutorialsdojo.com/amazon-cognito-user-pools-and-identity-pools-explained/)