

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Grupos de usuários do Amazon Cognito
<a name="cognito-user-pools"></a>

Um grupo de usuários do Amazon Cognito é um diretório de usuários para autenticação e autorização de aplicativos móveis e aplicações web. Do ponto de vista da aplicação, um grupo de usuários do Amazon Cognito é um provedor de identidades (IdP) OpenID Connect (OIDC). Um grupo de usuários adiciona camadas de outros recursos para segurança, federação de identidades, integração de aplicações e personalização da experiência do usuário.

Você pode, por exemplo, verificar se as sessões dos usuários são de fontes confiáveis. É possível combinar o diretório do Amazon Cognito com um provedor de identidades externo. Com seu AWS SDK preferido, você pode escolher o modelo de autorização de API que funciona melhor para seu aplicativo. E pode adicionar funções do  AWS Lambda  que modificam ou inspecionam o comportamento padrão do Amazon Cognito.

![\[Um diagrama com uma visão geral de alto nível sobre como os grupos de usuários funcionam. Os clientes podem entrar com aplicativos criados usando um AWS SDK ou com o IdP do OIDC incorporado aos grupos de usuários. Os grupos de usuários também unificam processos de login para vários provedores de identidade social, OpenID Connect e SAML 2.0.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/scenario-authentication-cup.png)


**Topics**
+ [

## Recursos
](#cognito-user-pools-features)
+ [

# Planos de recursos de grupos de usuários
](cognito-sign-in-feature-plans.md)
+ [

# Praticas recomendadas de segurança para grupos de usuários do Amazon Cognito
](user-pool-security-best-practices.md)
+ [

# Autenticação com grupos de usuários do Amazon Cognito
](authentication.md)
+ [

# Login do grupo de usuários com provedores de identidades de terceiros
](cognito-user-pools-identity-federation.md)
+ [

# Login gerenciado do grupo de usuários
](cognito-user-pools-managed-login.md)
+ [

# Como personalizar fluxos de trabalho do grupo de usuários com acionadores do Lambda
](cognito-user-pools-working-with-lambda-triggers.md)
+ [

# Como gerenciar usuários em seu grupo de usuários
](managing-users.md)
+ [

# Compreendendo os tokens web JSON do grupo de usuários () JWTs
](amazon-cognito-user-pools-using-tokens-with-identity-providers.md)
+ [

# Como acessar recursos após o login bem-sucedido
](accessing-resources.md)
+ [

# Escopos, M2M e servidores de recursos
](cognito-user-pools-define-resource-servers.md)
+ [

# Configurar recursos do grupo de usuários
](user-pools-configure-features.md)
+ [

# Usar atributos de segurança de grupos de usuários do Amazon Cognito
](managing-security.md)
+ [

# Referência de login gerenciado e endpoints do grupo de usuários
](cognito-userpools-server-contract-reference.md)

## Recursos
<a name="cognito-user-pools-features"></a>

Os grupos de usuários do Amazon Cognito têm os recursos a seguir.

### Cadastrar-se
<a name="cognito-user-pools-sign-up"></a>

Os grupos de usuários do Amazon Cognito têm métodos orientados pelo usuário, orientados pelo administrador e programáticos para adicionar perfis de usuário ao grupo de usuários. Os grupos de usuários do Amazon Cognito são compatíveis com os modelos de inscrição a seguir. É possível usar qualquer combinação desses modelos em sua aplicação.

**Importante**  
Se você ativar a inscrição de usuário no grupo de usuários, qualquer pessoa na internet poderá se inscrever em uma conta e entrar nas suas aplicações. Não habilite o autorregistro no grupo de usuários, a menos que queira abrir a aplicação para inscrição pública. Para alterar essa configuração, atualize a **inscrição por autoatendimento** no menu **Inscrição** em **Autenticação** no console do grupo de usuários ou atualize o valor de [ AllowAdminCreateUserOnly](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUserConfigType.html#CognitoUserPools-Type-AdminCreateUserConfigType-AllowAdminCreateUserOnly)em uma [ CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)solicitação de API. [ UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)  
Para obter informações sobre os atributos de segurança que você pode configurar nos grupos de usuários, consulte [Usar atributos de segurança de grupos de usuários do Amazon Cognito](managing-security.md).

1. Os usuários podem inserir informações em sua aplicação e criar um perfil de usuário nativo para seu grupo de usuários. Você pode chamar as operações de inscrição da API para registrar usuários em seu grupo de usuários. Você pode abrir essas operações de inscrição para qualquer pessoa ou autorizá-las com um segredo ou AWS credenciais do cliente.

1. Você pode redirecionar os usuários para um IdP de terceiros que eles possam autorizar a transmitir as informações deles ao Amazon Cognito. O Amazon Cognito processa tokens de ID OIDC, `userInfo` dados OAuth 2.0 e declarações SAML 2.0 em perfis de usuário em seu grupo de usuários. Você controla os atributos que deseja que o Amazon Cognito receba com base nas regras de mapeamento de atributos.

1. É possível ignorar a inscrição pública ou federada e criar usuários com base em sua própria fonte de dados e esquema. Adicione usuários diretamente no console ou na API do Amazon Cognito. Importe usuários de um arquivo CSV. Execute uma just-in-time AWS Lambda função que procure seu novo usuário em um diretório existente e preencha seu perfil de usuário a partir dos dados existentes.

Depois que os usuários se inscreverem, você poderá adicioná-los aos grupos que o Amazon Cognito lista nos tokens de acesso e ID. Você também pode vincular grupos de usuários a perfis do IAM ao transmitir o token de ID para um banco de identidades.

**Tópicos relacionados**
+ [Como gerenciar usuários em seu grupo de usuários](managing-users.md)
+ [Noções básicas sobre a autenticação de API, OIDC e páginas de login gerenciado](authentication-flows-public-server-side.md#user-pools-API-operations)
+ [Exemplos de código para o Amazon Cognito Identity Provider usando AWS SDKs](service_code_examples_cognito-identity-provider.md)

### Fazer login
<a name="cognito-user-pools-sign-in"></a>

O Amazon Cognito pode ser um diretório de usuários autônomo e um provedor de identidades (IdP) da aplicação. Os usuários podem fazer login com páginas de login gerenciado hospedadas pelo Amazon Cognito ou com um serviço de autenticação de usuários personalizado pela API de grupos de usuários do Amazon Cognito. O nível da aplicação por trás do frontend personalizado pode autorizar solicitações no backend com qualquer um dos vários métodos para confirmar solicitações legítimas.

Os usuários podem configurar e assinar com nomes de usuário e senhas, chaves de acesso e senhas de uso único de e-mail e SMS. Você pode oferecer login consolidado com diretórios de usuários externos, autenticação multifator (MFA) após o login, dispositivos confiáveis e fluxos de autenticação personalizados que você cria.

Para fazer login de usuários com um diretório externo, opcionalmente combinado com o diretório de usuários incorporado ao Amazon Cognito, você pode adicionar as integrações a seguir.

1. Faça login e importe dados do usuário do cliente com o login social OAuth 2.0. O Amazon Cognito suporta login com Google, Facebook, Amazon e Apple até 2.0. OAuth 

1. Faça login e importe dados de usuários corporativos e acadêmicos com o login SAML e OIDC. Também é possível configurar o Amazon Cognito para aceitar declarações de qualquer provedor de identidades (IdP) SAML ou OpenID Connect (OIDC). 

1.  Vincule perfis de usuários externos a perfis de usuário nativos. Um usuário vinculado pode fazer login com uma identidade de usuário de terceiros e receber o acesso que você atribui a um usuário no diretório interno.

**Tópicos relacionados**
+ [Login do grupo de usuários com provedores de identidades de terceiros](cognito-user-pools-identity-federation.md)
+ [Vincular usuários federados a um perfil de usuário existente](cognito-user-pools-identity-federation-consolidate-users.md)

**Machine-to-machine autorização**  
Algumas sessões não são uma human-to-machine interação. Talvez você precise de uma conta de serviço que possa autorizar uma solicitação a uma API por meio de um processo automatizado. [Para gerar tokens de acesso para machine-to-machine autorização com escopos OAuth 2.0, você pode adicionar um cliente de aplicativo que gere concessões de credenciais de cliente.](https://www.rfc-editor.org/rfc/rfc6749#section-4.4)

**Tópicos relacionados**
+ [Escopos, M2M e servidores de recursos](cognito-user-pools-define-resource-servers.md)

### Login gerenciado
<a name="cognito-user-pools-hosted-ui"></a>

Quando você não quiser criar uma interface do usuário, poderá apresentar aos usuários páginas de login gerenciado personalizadas. O login gerenciado é um conjunto de páginas da web para inscrição, login, autenticação multifator (MFA) e redefinição de senha. Você pode adicionar login gerenciado ao seu domínio existente ou usar um identificador de prefixo em um AWS subdomínio.

**Tópicos relacionados**
+ [Login gerenciado do grupo de usuários](cognito-user-pools-managed-login.md)
+ [Como configurar um domínio de grupo de usuários](cognito-user-pools-assign-domain.md)

### Segurança
<a name="cognito-user-pools-security"></a>

Os usuários locais podem fornecer um fator de autenticação adicional com um código de uma mensagem SMS ou de um e-mail ou uma aplicação que gere códigos de autenticação multifator (MFA). Você pode criar mecanismos para configurar e processar a MFA em sua aplicação ou deixar que o login gerenciado faça isso. Os grupos de usuários do Amazon Cognito podem ignorar a MFA quando os usuários fazem login em dispositivos confiáveis.

Se você não quiser exigir inicialmente a MFA dos usuários, poderá solicitá-la de maneira condicional. Com a autenticação adaptativa, o Amazon Cognito pode detectar possíveis atividades mal-intencionadas e exigir que seu usuário configure a MFA ou bloqueie o login.

Se o tráfego de rede para seu grupo de usuários puder ser malicioso, você poderá monitorá-lo e agir com a AWS WAF web ACLs.

**Tópicos relacionados**
+ [Adicionar MFA a um grupo de usuários](user-pool-settings-mfa.md)
+ [Segurança avançada com proteção contra ameaças](cognito-user-pool-settings-threat-protection.md)
+ [Associar uma ACL AWS WAF da web a um grupo de usuários](user-pool-waf.md)

### Experiência personalizada do cliente
<a name="cognito-user-pools-custom-user-experience"></a>

Na maioria dos estágios da inscrição, login ou atualização do perfil de um usuário, você pode personalizar como o Amazon Cognito lida com a solicitação. Com os acionadores do Lambda, você pode modificar um token de ID ou rejeitar uma solicitação de inscrição com base em condições personalizadas. É possível criar seu próprio fluxo de autenticação personalizado.

Você pode carregar o CSS e logotipos personalizados para dar ao login gerenciado uma aparência familiar para os usuários.

**Tópicos relacionados**
+ [Como personalizar fluxos de trabalho do grupo de usuários com acionadores do Lambda](cognito-user-pools-working-with-lambda-triggers.md)
+ [Acionadores do Lambda de desafio personalizado de autenticação](user-pool-lambda-challenge.md)
+ [Aplicar a identidade visual às páginas de login gerenciado](managed-login-branding.md)

### Monitoramento e análise
<a name="cognito-user-pools-monitoring-and-analytics"></a>

Os grupos de usuários do Amazon Cognito registram em log solicitações de API, incluindo solicitações ao login gerenciado, no AWS CloudTrail. Você pode analisar métricas de desempenho no Amazon CloudWatch Logs, enviar registros personalizados CloudWatch com acionadores Lambda, monitorar a entrega de e-mails e mensagens SMS e monitorar o volume de solicitações de API no console de Service Quotas.

Com o [plano de recursos](cognito-sign-in-feature-plans.md) Plus, você pode monitorar as tentativas de autenticação do usuário em busca de indicadores de comprometimento com a tecnologia de aprendizado automatizado e remediar imediatamente os riscos. Esses recursos avançados de segurança também registram a atividade do usuário no seu grupo de usuários e, opcionalmente, no Amazon S3 CloudWatch , Logs ou Amazon Data Firehose.

Também é possível registrar em log dados do dispositivo e da sessão das solicitações de API em uma campanha do Amazon Pinpoint. Com o Amazon Pinpoint, você pode enviar notificações push da aplicação com base em sua análise da atividade do usuário.

**Tópicos relacionados**
+ [Login no Amazon Cognito AWS CloudTrail](logging-using-cloudtrail.md)
+ [Rastreamento de cotas e uso em CloudWatch e Service Quotas](tracking-quotas-and-usage-in-cloud-watch-and-service-quotas.md)
+ [Exportação de logs dos grupos de usuários do Amazon Cognito](exporting-quotas-and-usage.md)
+ [Como usar o Amazon Pinpoint para análise de grupos de usuários](cognito-user-pools-pinpoint-integration.md)

### Integração de bancos de identidades do Amazon Cognito
<a name="cognito-user-pools-identity-pools-integration"></a>

A outra metade do Amazon Cognito são bancos de identidades. Os grupos de identidades fornecem credenciais que autorizam e monitoram solicitações de API para Serviços da AWS, por exemplo, Amazon DynamoDB ou Amazon S3, de seus usuários. É possível criar políticas de acesso baseadas em identidade que protejam os dados com base em como você classifica os usuários em seu grupo de usuários. Os bancos de identidades também podem aceitar tokens e declarações do SAML 2.0 de vários provedores de identidades, independentemente da autenticação do grupo de usuários.

**Tópicos relacionados**
+ [Acessando Serviços da AWS usando um pool de identidades após o login](amazon-cognito-integrating-user-pools-with-identity-pools.md)
+ [Banco de identidades do Amazon Cognito](cognito-identity.md)

# Planos de recursos de grupos de usuários
<a name="cognito-sign-in-feature-plans"></a>

Noções básicas sobre o custo é uma etapa crucial na preparação para implementar a autenticação de grupos de usuários do Amazon Cognito. O Amazon Cognito tem planos de recursos para grupos de usuários. Cada plano tem um conjunto de recursos e um custo mensal por usuário ativo. Cada plano de recursos libera o acesso a mais recursos do que o anterior.

Os grupos de usuários têm diversos recursos que você pode ativar e desativar. Por exemplo, você pode ativar a autenticação multifator (MFA) e desativar o login com provedores de identidade terceirizados (). IdPs Algumas mudanças exigem que você mude seu plano de recursos. As seguintes características do seu grupo de usuários determinam o custo que você AWS cobra mensalmente pelo uso.
+ Os recursos que você escolhe
+ As solicitações por segundo que sua aplicação faz à API de grupos de usuários
+ O número de usuários com atividade de autenticação, atualização ou consulta em um mês, também chamado de [usuários ativos mensais](quotas.md#monthly-active-users) ou MAUs
+ O número de usuários ativos mensais do SAML 2.0 ou do OpenID Connect (OIDC) de terceiros IdPs
+ O número de clientes de aplicativos e grupos de usuários que concedem credenciais de clientes para autorização machine-to-machine

Para obter as informações mais atuais sobre os preços do grupo de usuários, consulte os preços do [Amazon Cognito](https://aws.amazon.com/cognito/pricing).

As seleções de plano de recursos se aplicam a um grupo de usuários. Grupos de usuários diferentes na mesma Conta da AWS podem ter diferentes seleções de planos. Você não pode aplicar planos de recursos separados a clientes de aplicações em um grupo de usuários. A seleção de planos padrão para novos grupos de usuários é Essentials.

Você pode alternar entre os planos de recursos a qualquer momento para atender aos requisitos das aplicações. Algumas mudanças entre os planos exigem que você desative os recursos ativos. Para obter mais informações, consulte [Desativar recursos para alterar planos de recursos](feature-plans-deactivate.md).Planos de recursos de grupos de usuários

**Lite**  
O Lite é um plano de recursos de baixo custo para grupos de usuários com menor número de usuários ativos mensais. Esse plano é suficiente para diretórios de usuários com recursos básicos de autenticação. Ele inclui recursos de login e a IU hospedada clássica, uma antecessora mais fina e menos personalizável do login gerenciado. Muitos recursos mais novos, como personalização do token de acesso e autenticação por chave de acesso, não estão incluídos no plano Lite.

**Essentials**  
O Essentials tem todos os recursos mais recentes de autenticação de grupos de usuários. Esse plano adiciona novas opções às suas aplicações, independentemente de suas páginas de login serem gerenciadas ou personalizadas. O Essentials tem recursos avançados de autenticação, como [login baseado em opções](authentication-flows-selection-sdk.md#authentication-flows-selection-choice) e [MFA do e-mail](user-pool-settings-mfa-sms-email-message.md).

**Plus**  
O Plus inclui tudo do plano Essentials e adiciona recursos avançados de segurança que protegem seus usuários. Monitore as solicitações de login, cadastro e gerenciamento de senhas do usuário em busca de indicadores de comprometimento. Por exemplo, grupos de usuários podem detectar se os usuários estão fazendo login de um local inesperado ou usando uma senha que tenha sido parte de uma violação pública.  
Os grupos de usuários com o plano Plus geram logs de detalhes da atividade do usuário e avaliações de risco. Você pode aplicar sua própria análise de uso e segurança a esses logs ao exportá-los para serviços externos.

**nota**  
Anteriormente, alguns recursos do grupo de usuários foram incluídos em uma estrutura de preços *de recursos de segurança avançados*. Os recursos incluídos nessa estrutura agora estão no plano Essentials ou Plus.

**Topics**
+ [

## Selecionar um plano de recursos
](#cognito-sign-in-feature-plans-choose)
+ [

## Recursos por plano
](#cognito-sign-in-feature-plans-list)
+ [

# Recursos do plano Essentials
](feature-plans-features-essentials.md)
+ [

# Recursos do plano Plus
](feature-plans-features-plus.md)
+ [

# Desativar recursos para alterar planos de recursos
](feature-plans-deactivate.md)

## Selecionar um plano de recursos
<a name="cognito-sign-in-feature-plans-choose"></a>

------
#### [ Console de gerenciamento da AWS ]

Como escolher um plano de recursos

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou crie um grupo de usuários.

1. Selecione o menu **Configurações** e revise a guia **Planos de recursos**.

1. Analise os recursos disponíveis para você nos planos Lite, Essentials e Plus.

1. Para alterar seu plano, selecione **Mudar para o Essentials** ou **Mudar para o Plus**. Para mudar para o plano **Lite**, escolha **Outros planos** e, em seguida, **Comparar com o Lite**.

1. Na próxima tela, revise sua escolha e selecione **Confirmar**.

------
#### [ CLI/API/SDK ]

As [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)operações [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)e definem seu plano de recursos no `UserPoolTier` parâmetro. Quando você não especifica um valor para `UserPoolTier`, seu grupo de usuários usa `Essentials` como padrão. Se você definir `AdvancedSecurityMode` como `AUDIT` ou `ENFORCED`, seu nível de grupo de usuários deverá ser `PLUS` e o padrão ser `PLUS` quando não especificado.

Consulte [Exemplos em CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#API_CreateUserPool_Examples) para obter a sintaxe. Consulte [Consulte também em CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#API_CreateUserPool_SeeAlso) para obter links para essa função em ou AWS SDKs para uma variedade de linguagens de programação.

```
"UserPoolTier": "PLUS"
```

No AWS CLI, essa opção é `--user-pool-tier` argumento.

```
--user-pool-tier PLUS
```

Consulte [create-user-pool](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool.html)e [update-user-pool](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool.html)na referência de AWS CLI comandos para obter mais informações.

------

## Recursos por plano
<a name="cognito-sign-in-feature-plans-list"></a>


**Recursos e planos em grupos de usuários**  

| Recurso | Description | Plano de recursos | 
| --- | --- | --- | 
| Proteja-se contra senhas inseguras | Verifique as senhas em texto simples em busca de indicadores de comprometimento no runtime | Plus | 
| Proteja-se contra tentativas prejudiciais de login | Verifique as propriedades da sessão em busca de indicadores de comprometimento no runtime | Plus | 
| Registre em log e analise a atividade do usuário | Gere logs das propriedades da sessão de autenticação do usuário e das pontuações de risco | Plus | 
| Exporte logs de atividades do usuário | Envie a sessão do usuário e os registros de risco para um servidor externo AWS service (Serviço da AWS) | Plus | 
| Personalize páginas de login gerenciado com um editor visual | Use um editor visual no console do Amazon Cognito para aplicar identidade visual e estilo às suas páginas de login gerenciado | Essentials \$1 Plus | 
| MFA aprimorada com códigos únicos de e-mail | Solicite ou exija que os usuários locais forneçam um fator adicional de login por mensagem de e-mail após a autenticação do nome de usuário | Essentials \$1 Plus | 
| Personalize os escopos e as reivindicações do token de acesso no runtime | Use um acionador do Lambda para estender os recursos de autorização dos tokens de acesso ao grupo de usuários | Essentials \$1 Plus | 
| Login sem senha com códigos únicos | Permita que os usuários recebam uma senha de uso único por e-mail ou SMS como primeiro fator de autenticação | Essentials \$1 Plus | 
| Login por chave de acesso com autenticadores de hardware ou software FIDO2  | Permita que os usuários usem uma chave criptográfica armazenada em um FIDO2 autenticador como primeiro fator de autenticação | Essentials \$1 Plus | 
| Inscrição e login | Execute operações de autenticação e permita que novos usuários se inscrevam em uma conta em sua aplicação. | Lite \$1 Essentials \$1 Plus | 
| User groups (Grupos de usuários) | Crie agrupamentos lógicos de usuários e atribua perfis do IAM padrão para operações de banco de identidades. | Lite \$1 Essentials \$1 Plus | 
| Faça login com provedores sociais, SAML e OIDC | Forneça aos usuários as opções de fazer login diretamente ou com o provedor que preferirem. | Lite \$1 Essentials \$1 Plus | 
| OAuth 2.0/Servidor de autorização OIDC | Atue como emissor do OIDC. | Lite \$1 Essentials \$1 Plus | 
| Páginas de login | Uma coleção hospedada de páginas da web para autenticação. O login gerenciado está disponível nos níveis Essentials e Plus. A IU hospedada clássica está disponível em todos os níveis de recursos. | Lite \$1 Essentials \$1 Plus | 
| Autenticação personalizada, SRP, por senha e por token de atualização | Solicite aos usuários um nome de usuário e senha na aplicação. | Lite \$1 Essentials \$1 Plus | 
| Machine-to-machine (M2M) com credenciais do cliente | Emita tokens de acesso para autorização de entidades não humanas. | Lite \$1 Essentials \$1 Plus | 
| Autorização de API com servidores de recursos | Emita tokens de acesso com escopos personalizados que autorizam o acesso a sistemas externos. | Lite \$1 Essentials \$1 Plus | 
| Importe usuários | Configure trabalhos de importação de arquivos CSV e realize a just-in-time migração dos usuários à medida que eles se conectam. | Lite \$1 Essentials \$1 Plus | 
| MFA com aplicações autenticadoras e códigos SMS únicos | Solicite ou exija que os usuários locais forneçam uma mensagem SMS adicional ou um fator de login da aplicação autenticadora após a autenticação do nome de usuário | Lite \$1 Essentials \$1 Plus | 
| Personalize os escopos e as reivindicações do token de ID no runtime | Use um acionador do Lambda para ampliar os recursos de autenticação dos tokens de identidade (ID) do grupo de usuários | Lite \$1 Essentials \$1 Plus | 
| Ações de runtime personalizadas com acionadores do Lambda | Personalize o processo de login no runtime com funções do Lambda que realizam ações externas e influenciam a autenticação | Lite \$1 Essentials \$1 Plus | 
| Personalize páginas de login gerenciado com CSS | Baixe um modelo CSS e altere alguns estilos em suas páginas de login gerenciado | Lite \$1 Essentials \$1 Plus | 

# Recursos do plano Essentials
<a name="feature-plans-features-essentials"></a>

O plano de recursos Essentials tem a maioria dos melhores e mais recentes recursos de grupos de usuários do Amazon Cognito. Ao mudar do plano Lite para o Essentials, você obtém novos recursos para suas páginas de login gerenciado, autenticação multifator com senhas de uso único por mensagem de e-mail, uma política de senha aprimorada e tokens de acesso personalizados. Para continuar up-to-date com os novos recursos do grupo de usuários, escolha o plano Essentials para seus grupos de usuários.

As seções a seguir apresentam uma breve visão geral dos recursos que você pode adicionar à sua aplicação com o plano Essentials. Para obter informações detalhadas, consulte as páginas a seguir.

**Recursos adicionais do**
+ Personalização do token de acesso: [Acionador do Lambda antes da geração do token](user-pool-lambda-pre-token-generation.md)
+ MFA do e-mail: [MFA de mensagens SMS e e-mail](user-pool-settings-mfa-sms-email-message.md)
+ Histórico de senha: [Senhas, recuperação de contas e políticas de senha](managing-users-passwords.md)
+ IU aprimorada: [Aplicar a identidade visual às páginas de login gerenciado](managed-login-branding.md)

**Topics**
+ [

## Personalização do token de acesso
](#features-access-token-customization)
+ [

## MFA do e-mail
](#features-email-mfa)
+ [

## Prevenção de reutilização de senhas
](#features-password-reuse)
+ [

## Login hospedado e servidor de autorização do login gerenciado
](#features-enhanced-ui)
+ [

## Autenticação baseada em opções
](#features-user-auth)

## Personalização do token de acesso
<a name="features-access-token-customization"></a>

Os [tokens de acesso](https://datatracker.ietf.org/doc/html/rfc6749#section-1.4) de grupos de usuários concedem permissões às aplicações: para [acessar uma API](cognito-user-pools-define-resource-servers.md), recuperar atributos do usuário do [endpoint userInfo](userinfo-endpoint.md) ou estabelecer uma [associação de grupo](cognito-user-pools-user-groups.md) para um sistema externo. Em cenários avançados, você pode adicionar aos dados do token de acesso padrão do diretório do grupo de usuários parâmetros temporários adicionais que sua aplicação determina em tempo de execução. Por exemplo, talvez você queira verificar as permissões de API de um usuário com o [Amazon Verified Permissions](amazon-cognito-authorization-with-avp.md) e ajustar os escopos no token de acesso adequadamente.

O plano Essentials complementa as funções existentes de um [acionador de pré-geração de tokens](user-pool-lambda-pre-token-generation.md). Com planos de nível inferior, você pode personalizar tokens de ID com reivindicações, funções e associação a grupos adicionais. O Essentials adiciona novas versões do evento de entrada acionador que personalizam reivindicações de tokens de acesso, funções, associação a grupos e escopos. A personalização do token de acesso está disponível para [concessões de credenciais de clientes machine-to-machine](federation-endpoints-oauth-grants.md) (M2M) com a versão três do evento.

**Para personalizar tokens de acesso**

1. Selecione o plano de recursos Essentials ou Plus.

1. Crie uma função do Lambda para o acionador. Para usar nossa função de exemplo, [configure-a para Node.js](https://docs.aws.amazon.com/lambda/latest/dg/lambda-nodejs.html).

1. Preencha sua função do Lambda com nosso [código de exemplo](user-pool-lambda-pre-token-generation.md#aws-lambda-triggers-pre-token-generation-example-version-2-overview) ou crie o seu. Sua função deve processar um objeto de solicitação do Amazon Cognito e retornar as alterações que você deseja incluir.

1. Atribua sua nova função como o acionador de pré-geração de tokens da [versão dois ou três](user-pool-lambda-pre-token-generation.md#user-pool-lambda-pre-token-generation-event-versions). Os eventos da versão dois personalizam tokens de acesso para identidades de usuários. A versão três personaliza os tokens de acesso para identidades de usuários e máquinas.

**Saiba mais**
+ [Personalizar o token de acesso](user-pool-lambda-pre-token-generation.md#user-pool-lambda-pre-token-generation-accesstoken)
+ [Como personalizar tokens de acesso nos grupos de usuários do Amazon Cognito](https://aws.amazon.com/blogs/security/how-to-customize-access-tokens-in-amazon-cognito-user-pools/)

## MFA do e-mail
<a name="features-email-mfa"></a>

Grupos de usuários do Amazon Cognito podem ser configurados para usar o e-mail como o segundo fator na autenticação multifator (MFA). Com a MFA do e-mail, o Amazon Cognito pode enviar aos usuários um e-mail com um código de verificação que eles devem inserir para concluir o processo de autenticação. Isso adiciona uma importante camada a mais de segurança ao fluxo de login do usuário. Para habilitar a MFA baseada em e-mail, o grupo de usuários deve ser configurado para usar a [configuração de envio de e-mail do Amazon SES](user-pool-email.md#user-pool-email-developer) em vez da configuração de e-mail padrão.

Quando seu usuário seleciona a MFA por mensagem de e-mail, o Amazon Cognito envia um código de verificação único para o endereço de e-mail registrado do usuário sempre que ele tenta fazer login. Em seguida, o usuário deve retornar esse código ao seu grupo de usuários para concluir o fluxo de autenticação e obter acesso. Mesmo que o nome de usuário e a senha do usuário estejam comprometidos, o usuário ainda precisa fornecer um fator adicional — o código enviado por e-mail — antes de acessar os recursos da aplicação.

Para obter mais informações, consulte [MFA de mensagens SMS e e-mail](user-pool-settings-mfa-sms-email-message.md). Veja a seguir uma visão geral de como configurar seu grupo de usuários e usuários para MFA.

**Como configurar a MFA do e-mail no console do Amazon Cognito**

1. Selecione o plano de recursos Essentials ou Plus.

1. No menu **Login** do seu grupo de usuários, edite a **Autenticação multifator**.

1. Escolha o nível de **aplicação de MFA** que você deseja configurar. Com a opção **Exigir MFA**, os usuários da API recebem automaticamente um desafio para configurar, confirmar e fazer login com API MFA. Em grupos de usuários que exigem MFA, o login gerenciado solicita que eles escolham e configurem um fator de MFA. Com a **MFA opcional**, sua aplicação deve oferecer aos usuários a opção de configurar a MFA e definir a preferência do usuário pela MFA do e-mail.

1. Em **Métodos de MFA**, selecione **Mensagem de e-mail** como uma das opções.

**Saiba mais**
+ [MFA de mensagens SMS e e-mail](user-pool-settings-mfa-sms-email-message.md)

## Prevenção de reutilização de senhas
<a name="features-password-reuse"></a>

Por padrão, uma política de senhas de grupos de usuários do Amazon Cognito define os requisitos de tamanho e tipos de caracteres da senha, além da expiração temporária da senha. O plano Essentials adiciona a capacidade de aplicar o histórico de senhas. Quando um usuário tenta redefinir sua senha, seu grupo de usuários pode impedir que ele a defina com uma senha anterior. Para obter mais informações sobre a configuração da política de senha, consulte [Como adicionar requisitos de senha do grupo de usuários](managing-users-passwords.md#user-pool-settings-policies). Veja a seguir uma visão geral de como configurar o grupo de usuários com uma política de histórico de senhas.

**Como configurar o histórico de senhas no console do Amazon Cognito**

1. Selecione o plano de recursos Essentials ou Plus.

1. No menu **Métodos de autenticação** do seu grupo de usuários, localize **Política de senha** e selecione **Editar**.

1. Configure outras opções disponíveis e defina um valor para **Impedir o uso de senhas anteriores**.

**Saiba mais**
+ [Senhas, recuperação de contas e políticas de senha](managing-users-passwords.md)

## Login hospedado e servidor de autorização do login gerenciado
<a name="features-enhanced-ui"></a>

Os grupos de usuários do Amazon Cognito têm páginas da web opcionais que oferecem suporte às seguintes funções: um IdP do OpenID Connect (OIDC), um provedor de serviços ou parte confiável de IdPs terceiros e páginas públicas interativas com o usuário para cadastro e login. Essas páginas são chamadas coletivamente de *login gerenciado*. Quando você escolhe um domínio para seu grupo de usuários, o Amazon Cognito ativa automaticamente essas páginas. O plano Lite tem a interface hospedada, já o plano Essentials abre essa versão avançada das páginas de inscrição e login.

As páginas de login gerenciadas têm uma up-to-date interface limpa com mais recursos e opções para personalizar sua marca e estilos. O plano Essentials é o nível mais baixo do plano que desbloqueia o acesso ao login gerenciado.

**Como configurar o login gerenciado no console do Amazon Cognito**

1. No menu **Configurações**, selecione o plano de recursos Essentials ou Plus.

1. No menu **Domínio**, [atribua um domínio](cognito-user-pools-assign-domain.md) ao seu grupo de usuários e selecione uma **versão da marca** do **login gerenciado**.

1. No menu **Login gerenciado**, na guia **Estilos**, selecione **Criar um estilo** e atribua o estilo a um cliente de aplicação ou crie um novo cliente de aplicação.

**Saiba mais**
+ [Login gerenciado do grupo de usuários](cognito-user-pools-managed-login.md)

## Autenticação baseada em opções
<a name="features-user-auth"></a>

O nível Essentials introduz um novo *fluxo de autenticação* para operações de autenticação na IU aprimorada e nas operações de API baseadas em SDK. Esse fluxo é uma *autenticação baseada em opções*. A autenticação baseada em opções é um método em que a autenticação de seus usuários começa não com uma declaração de um método de login no na aplicação, mas com uma consulta de possíveis métodos de login seguida por uma escolha. Você pode configurar seu grupo de usuários para oferecer suporte à autenticação baseada em opções e desbloquear a autenticação por nome de usuário, senha, sem senha e chave de acesso. Na API, esse é o fluxo `USER_AUTH`.

**Como configurar a autenticação baseada em opções no console do Amazon Cognito**

1. Selecione o plano de recursos Essentials ou Plus.

1. No menu **Login** do seu grupo de usuários, edite **Opções para login baseado em opções**. Selecione e configure os métodos de autenticação que você deseja habilitar na autenticação baseada em opções.

1. No menu **Métodos de autenticação** do seu grupo de usuários, edite a configuração das operações de login.

**Saiba mais**
+ [Autenticação com grupos de usuários do Amazon Cognito](authentication.md)

# Recursos do plano Plus
<a name="feature-plans-features-plus"></a>

O plano de recursos Plus tem recursos avançados de segurança para grupos de usuários do Amazon Cognito. Esses recursos registram e analisam o contexto do usuário no runtime em busca de possíveis problemas de segurança em dispositivos, locais, dados de solicitações e senhas. Em seguida, eles reduzem os riscos potenciais com respostas automáticas que bloqueiam ou adicionam proteções de segurança às contas dos usuários. Você também pode exportar seus registros de segurança para o Amazon S3, Amazon Data Firehose ou Amazon CloudWatch Logs para análise posterior.

Ao mudar do plano Essentials para o plano Plus, você obtém todos os recursos do Essentials e os recursos adicionais a seguir. Isso inclui o conjunto de opções de segurança de proteção contra ameaças, também conhecido como *recursos avançados de segurança*. Para configurar seus grupos de usuários para se adaptarem automaticamente às ameaças em seu frontend de autenticação, escolha o plano Plus para seus grupos de usuários.

As seções a seguir apresentam uma breve visão geral dos recursos que você pode adicionar à sua aplicação com o plano Plus. Para obter informações detalhadas, consulte as páginas a seguir.

**Recursos adicionais do**
+ Autenticação adaptável: [Trabalhar com autenticação adaptável](cognito-user-pool-settings-adaptive-authentication.md)
+ Credenciais comprometidas: [Trabalhar com a detecção de credenciais comprometidas](cognito-user-pool-settings-compromised-credentials.md)
+ Exportação de log: [Exportação de logs dos grupos de usuários do Amazon Cognito](exporting-quotas-and-usage.md)

**Topics**
+ [

## Proteção contra ameaças: autenticação adaptável
](#features-adaptive-authentication)
+ [

## Proteção contra ameaças: detecção de credenciais comprometidas
](#features-compromised-credentials)
+ [

## Proteção contra ameaças: logs de atividades de usuários
](#features-user-logs)

## Proteção contra ameaças: autenticação adaptável
<a name="features-adaptive-authentication"></a>

O plano Plus inclui um recurso de *autenticação adaptável*. Quando você ativa esse recurso, seu grupo de usuários faz uma avaliação de risco de cada sessão de autenticação de usuário. Com base nas classificações de risco resultantes, você pode bloquear a autenticação ou promover a MFA para usuários que fazem login com um nível de risco acima de um limite determinado por você. Com a autenticação adaptável, seu grupo de usuários e sua aplicação bloqueiam ou configuram automaticamente a MFA para usuários com contas sob suspeita de ataque. Você também pode fornecer feedback sobre as classificações de risco do seu grupo de usuários para ajustar as avaliações futuras.

**Como configurar a autenticação adaptável no console do Amazon Cognito**

1. Selecione o plano de recursos Plus.

1. No menu **Proteção contra ameaças** do seu grupo de usuários, edite a **Autenticação padrão e personalizada** em **Proteção contra ameaças**.

1. Você pode definir o **Modo de imposição** para autenticação padrão ou personalizada como **Função completa**.

1. Em **Autenticação adaptativa**, configure respostas automáticas de risco para diferentes níveis de risco.

**Saiba mais**
+ [Trabalhar com autenticação adaptável](cognito-user-pool-settings-adaptive-authentication.md)
+ [Coletar dados para proteção contra ameaças em aplicações](user-pool-settings-viewing-threat-protection-app.md)

## Proteção contra ameaças: detecção de credenciais comprometidas
<a name="features-compromised-credentials"></a>

O plano Plus inclui um recurso de *detecção de credenciais comprometidas*. Esse recurso protege contra o uso de senhas inseguras e a ameaça de acesso não intencional às aplicações que essa prática cria. Quando você permite que seus usuários façam login com nome de usuário e senha, eles podem reutilizar uma senha que usaram em outro lugar. Essa senha pode ter vazado ou ser simplesmente adivinhada. Com a detecção de credenciais comprometidas, seu grupo de usuários lê as senhas enviadas pelos usuários e as compara aos bancos de dados de senhas. Se a operação resultar na decisão de que provavelmente a senha está comprometida, você pode configurar seu grupo de usuários para bloquear o login e, em seguida, iniciar uma redefinição de senha para o usuário em sua aplicação.

A detecção de credenciais comprometidas pode reagir a senhas inseguras quando novos usuários se inscrevem, quando usuários existentes fazem login e quando usuários tentam redefinir as senhas. Com esse recurso, seu grupo de usuários pode impedir ou avisar sobre o login com senhas inseguras onde quer que os usuários as insiram.

**Como configurar a detecção de credenciais comprometidas no console do Amazon Cognito**

1. Selecione o plano de recursos Plus.

1. No menu **Proteção contra ameaças** do seu grupo de usuários, edite a **Autenticação padrão e personalizada** em **Proteção contra ameaças**.

1. Você pode definir o **Modo de imposição** para autenticação padrão ou personalizada como **Função completa**.

1. Em **Credenciais comprometidas**, configure os tipos de operações de autenticação que deseja verificar e a resposta automática que o seu grupo de usuários deve gerar.

**Saiba mais**
+ [Trabalhar com a detecção de credenciais comprometidas](cognito-user-pool-settings-compromised-credentials.md)

## Proteção contra ameaças: logs de atividades de usuários
<a name="features-user-logs"></a>

O plano Plus adiciona um recurso de log que fornece análises de segurança e detalhes das tentativas de autenticação dos usuários. Você pode ver avaliações de risco, endereços IP de usuários, agentes de usuário e outras informações sobre o dispositivo conectado à aplicação. Você pode agir com base nessas informações com os recursos integrados de proteção contra ameaças ou pode analisar os logs nos próprios sistemas e tomar as medidas apropriadas. Você pode exportar os registros da proteção contra ameaças para o Amazon S3, CloudWatch Logs ou Amazon DynamoDB.

**Como configurar o registro de atividades de usuários no console do Amazon Cognito**

1. Selecione o plano de recursos Plus.

1. No menu **Proteção contra ameaças** do seu grupo de usuários, edite a **Autenticação padrão e personalizada** em **Proteção contra ameaças**.

1. Você pode definir o **Modo de imposição** para autenticação padrão ou personalizada como **Somente auditoria**. Essa é a configuração mínima para logs. Você também pode ativá-lo no modo de **Função completa** e configurar outros recursos de proteção contra ameaças.

1. Para exportar seus registros para outra pessoa AWS service (Serviço da AWS) para análise de terceiros, **acesse o menu de streaming** de registros do seu grupo de usuários e configure um destino de exportação.

**Saiba mais**
+ [Como exportar eventos de autenticação de usuários](cognito-user-pool-settings-adaptive-authentication.md#user-pool-settings-adaptive-authentication-event-user-history-exporting)
+ [Exportação de logs dos grupos de usuários do Amazon Cognito](exporting-quotas-and-usage.md)

# Desativar recursos para alterar planos de recursos
<a name="feature-plans-deactivate"></a>

Os planos de recursos adicionam opções de configuração ao seu grupo de usuários. Você pode configurar e usar esses recursos somente quando o plano de recursos relacionado estiver ativo. Por exemplo, você pode configurar a personalização do token de acesso nos planos Plus e Essentials, mas não no plano Lite. Para desativar esses recursos, você deve desativar cada componente ativo. A opção **Alternar para** no menu **Configurações** no console do Amazon Cognito notifica você sobre os recursos que devem ser desativados para alteração do plano de recursos. Neste capítulo, você pode aprender as alterações que a desativação faz na configuração do grupo de usuários e como desativar esses recursos individualmente.

**Personalização do token de acesso**  
Para mudar para um plano que não inclua a personalização de tokens de acesso, você deve remover o [acionador do Lambda de pré-geração de tokens](user-pool-lambda-pre-token-generation.md#user-pool-lambda-pre-token-generation-accesstoken) do seu grupo de usuários. Para adicionar um novo acionador de pré-geração de token sem a personalização do token de acesso, atribua uma nova função ao acionador e configure-o para eventos da `V1_0`. Esses eventos de acionador da versão 1 só podem processar alterações nos tokens de ID.  
Para desativar manualmente a personalização do token de acesso, remova o acionador de pré-geração do token e adicione um novo acionador da versão um.

**Proteção contra ameaças**  
Para mudar para um plano sem proteção contra ameaças, desative todos os recursos do menu **Proteção contra ameaças** do seu grupo de usuários.

**Exportação de log**  
Para mudar para um plano sem exportação de logs, desative essa opção no menu **Fluxo de logs** do seu grupo de usuários. Seu grupo de usuários deixa de gerar logs de atividades de usuários locais ou exportados. Você também pode enviar uma solicitação de [SetLogDeliveryConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetLogDeliveryConfiguration.html)API que remove qualquer configuração com um `EventSource` valor de`UserActivity`.

**MFA do e-mail**  
Para mudar para um plano sem MFA do e-mail, acesse o menu **Login** do seu grupo de usuários. Edite a **Autenticação multifator** e desmarque **Mensagem de e-mail** como um dos **métodos de MFA** disponíveis.

# Praticas recomendadas de segurança para grupos de usuários do Amazon Cognito
<a name="user-pool-security-best-practices"></a>

Esta página descreve as práticas recomendadas de segurança que você pode implementar para proteção contra ameaças comuns. A configuração escolhida dependerá do caso de uso de cada aplicação. Recomendamos que, pelo menos, sejam aplicados privilégios mínimos às operações administrativas e sejam tomadas medidas para proteger os segredos da aplicação e do usuário. Outra etapa avançada, mas eficaz, que você pode realizar é configurar e aplicar ACLs a AWS WAF web aos grupos de usuários.

## Proteja seu grupo de usuários no nível da rede
<a name="user-pool-security-best-practices-network"></a>

AWS WAF A web ACLs pode proteger o desempenho e o custo dos mecanismos de autenticação que você cria com o Amazon Cognito. Com a web ACLs, você pode implementar grades de proteção na frente da API e das solicitações de login gerenciadas. ACLs Crie filtros de camada de rede e de aplicativos na Web que podem reduzir o tráfego ou exigir um CAPTCHA com base nas regras que você cria. As solicitações não são transmitidas para seus recursos do Amazon Cognito até que atendam às qualificações nas regras da Web ACL. Para obter mais informações, consulte [AWS WAF web ACLs](user-pool-waf.md).

## Proteger contra o abuso de mensagens SMS
<a name="user-pool-security-best-practices-sms"></a>

Ao permitir a inscrição pública em seu grupo de usuários, você pode configurar a verificação da conta com códigos que o Amazon Cognito envia em mensagens de texto SMS. As mensagens SMS podem ser associadas a atividades indesejadas e aumentar sua AWS fatura. Configure sua infraestrutura para ser resiliente contra o envio de mensagens SMS em situações de fraude. Para obter mais informações, revise as seguintes postagens de AWS Blogs.
+ [Reduce risks of user sign-up fraud and SMS pumping with Amazon Cognito user pools](https://aws.amazon.com/blogs/security/reduce-risks-of-user-sign-up-fraud-and-sms-pumping-with-amazon-cognito-user-pools/)
+ [Defesa contra o bombeamento de SMS: novos AWS recursos para ajudar a combater o tráfego inflado artificialmente](https://aws.amazon.com/blogs/messaging-and-targeting/defending-against-sms-pumping-new-aws-features-to-help-combat-artificially-inflated-traffic/)

## Entender a autenticação pública
<a name="user-pool-security-best-practices-public-operations"></a>

Os grupos de usuários do Amazon Cognito têm recursos de gerenciamento de identidade e acesso do cliente (CIAM) que oferecem suporte a casos de uso em que membros do público podem cadastrar uma conta de usuário e acessar suas aplicações. Quando um grupo de usuários permite a inscrição por autoatendimento, ele está aberto a solicitações de contas de usuário da internet pública. As solicitações de autoatendimento vêm de operações de API, como [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)e [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html), e da interação do usuário com o login gerenciado. Você pode configurar grupos de usuários para mitigar abusos decorrentes de solicitações públicas ou desabilitar totalmente as operações de autenticação pública. 

As configurações a seguir são algumas das maneiras pelas quais você pode gerenciar solicitações de autenticação pública e interna em seus grupos de usuários e clientes de aplicações.


**Exemplos de configurações do grupo de usuários que afetam o acesso público ao grupo de usuários**  

| Configuração | Opções disponíveis | Configurado em | Efeito na autenticação pública | Configuração do console | Operação e parâmetro da API | 
| --- | --- | --- | --- | --- | --- | 
| [Cadastro por autoatendimento](user-pool-settings-admin-create-user-policy.md) | Permita que os usuários se inscrevam em uma conta ou criem contas de usuário como administrador. | Grupo de usuários | Impedir cadastro público | Cadastrar-se – Cadastro por autoatendimento |  [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-AdminCreateUserConfig), [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#CognitoUserPools-UpdateUserPool-request-AdminCreateUserConfig) `AdminCreateUserConfig` – `AllowAdminCreateUserOnly`  | 
| [Confirmação do administrador](signing-up-users-in-your-app.md#signing-up-users-in-your-app-and-confirming-them-as-admin) | Envie códigos de confirmação para novos usuários ou exija que os administradores os confirmem. | Grupo de usuários | Impedir a confirmação de cadastro sem ação do administrador | Cadastrar-se – Verificação e confirmação assistidas pelo Cognito |  [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-AccountRecoverySetting), [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#CognitoUserPools-UpdateUserPool-request-AccountRecoverySetting) `AccountRecoverySettings` – `admin_only`  | 
| [Divulgação de usuário](cognito-user-pool-managing-errors.md) | Entregue mensagens de “usuário não encontrado” no login e na redefinição de senha ou evite a divulgação. | Cliente da aplicação | Proteger contra adivinhação do nome de login, endereço de e-mail ou números de telefone | Clientes da aplicação – Impedir erros de existência de usuário |  [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html#CognitoUserPools-CreateUserPoolClient-request-PreventUserExistenceErrors), [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html#CognitoUserPools-UpdateUserPoolClient-request-PreventUserExistenceErrors) `PreventUserExistenceErrors`  | 
| [Segredo do cliente](user-pool-settings-client-apps.md#user-pool-settings-client-app-client-types) | Exigir ou não um hash secreto no cadastro, login e redefinição de senha | Cliente da aplicação | Proteger contra solicitações de autenticação de fontes não autorizadas | Clientes de aplicações — Segredo do cliente |  [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html#CognitoUserPools-CreateUserPoolClient-request-GenerateSecret) `GenerateSecret`  | 
| [Web ACLs](user-pool-waf.md) | Habilitar ou não um firewall de rede para solicitações de autenticação | Grupo de usuários | Limitar ou impedir o acesso com base nas características de solicitação definidas pelo administrador e nas regras de endereço IP | AWS WAF – Configurações WAF |  [AssociateWebACL](https://docs.aws.amazon.com/waf/latest/APIReference/API_AssociateWebACL.html#WAF-AssociateWebACL-request-ResourceArn) `ResourceArn`  | 
| [IdP externo](cognito-user-pools-identity-provider.md) | Permitir o login de usuários de terceiros IdPs, no diretório do grupo de usuários ou em ambos | Cliente da aplicação | Exclua [usuários locais](cognito-terms.md#terms-localuser) ou [usuários federados](cognito-terms.md#terms-federateduser) do cadastro e login. | Clientes da aplicação — Provedores de identidade |  [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html#CognitoUserPools-CreateUserPoolClient-request-SupportedIdentityProviders), [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html#CognitoUserPools-UpdateUserPoolClient-request-SupportedIdentityProviders) `SupportedIdentityProviders`  | 
| [Servidor de autorização](cognito-user-pools-assign-domain.md) | Hospedar ou não páginas da web públicas para autenticação | Grupo de usuários | Desativar páginas da web públicas e permitir somente a autenticação baseada em SDK | Domínio |  [CreateUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolDomain.html) A criação de qualquer domínio de grupo de usuários disponibiliza páginas da web públicas.  | 
| [Proteção contra ameaças](cognito-user-pool-settings-threat-protection.md) | Habilitar ou desabilitar o monitoramento de sinais de atividade maliciosa ou senhas inseguras | Grupo de usuários ou cliente da aplicação | Poder bloquear automaticamente o login ou exigir MFA quando os usuários mostram indicadores de comprometimento | Proteção contra ameaças — Configurações de proteção |  [SetRiskConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html) Os parâmetros de `SetRiskConfiguration` definem suas configurações de proteção contra ameaças.  | 

## Proteger clientes confidenciais com segredos do cliente
<a name="user-pool-security-best-practices-client-secret"></a>

O segredo do cliente é uma string opcional associada a um [cliente de aplicação](user-pool-settings-client-apps.md). Todas as solicitações de autenticação para clientes de aplicações com segredos de cliente devem incluir um [hash secreto](signing-up-users-in-your-app.md#cognito-user-pools-computing-secret-hash) gerado com base no nome de usuário, ID do cliente e segredo do cliente. Aqueles que não conhecem o segredo do cliente são excluídos da sua aplicação desde o início.

No entanto, os segredos do cliente têm limitações. Se você incorporar um segredo de cliente a um software-cliente público, o segredo do cliente estará aberto à inspeção. Assim, abre-se a capacidade de criar usuários, enviar solicitações de redefinição de senha e realizar outras operações no cliente da sua aplicação. Os segredos do cliente devem ser implementados somente quando uma aplicação é a única entidade que tem acesso ao segredo. Normalmente, isso é possível em aplicações clientes confidenciais do lado do servidor. Isso também se aplica às [aplicações M2M](cognito-user-pools-define-resource-servers.md), nas quais é necessário um segredo do cliente. Armazene o segredo do cliente em um armazenamento local criptografado ou AWS Secrets Manager. Nunca deixe o segredo de seu cliente ser visível na internet pública.

## Proteger outros segredos
<a name="user-pool-security-best-practices-manage-secrets"></a>

Seu sistema de autenticação com grupos de usuários do Amazon Cognito pode lidar com dados, senhas e credenciais da AWS . Estas são algumas das práticas recomendadas para lidar com segredos que sua aplicação pode acessar.

**Senhas**  
Os usuários podem inserir senhas ao entrarem na sua aplicação. O Amazon Cognito tem tokens de atualização que sua aplicação pode empregar para continuar as sessões de usuário expiradas sem uma nova solicitação de senha. Não coloque nenhuma senha ou hash de senha no armazenamento local. Projete sua aplicação para tratar as senhas como não visíveis e transmiti-las somente para seu grupo de usuários.  
[Como prática recomendada, implemente a autenticação sem senha com WebAuthn chaves de acesso.](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passkey) Se você precisar implementar senhas, use o [fluxo de autenticação Secure Remote Password (SRP)](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-srp) e a [autenticação multifator (MFA](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-mfa)).

**AWS credenciais**  
A autenticação administrativa e as operações administrativas do grupo de usuários exigem autenticação com AWS credenciais. Para implementar essas operações em um aplicativo, conceda acesso seguro às [AWS credenciais temporárias](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html). Conceda acesso às credenciais somente às aplicações executadas em um componente do servidor que você controla. Não coloque aplicativos que tenham AWS credenciais em sistemas públicos de controle de versão, como o. GitHub Não codifique AWS credenciais em aplicativos públicos do lado do cliente.

**Verificador de código PKCE**  
O [Proof Key for Code Exchange, ou PKCE](using-pkce-in-authorization-code.md), é para concessões de código de autorização do OpenID Connect (OIDC) com seu servidor de autorização de grupo de usuários. As aplicações compartilham segredos do verificador de código com seu grupo de usuários quando solicitam códigos de autorização. Para trocar códigos de autorização por tokens, os clientes devem reafirmar que conhecem o verificador do código. Essa prática evita a emissão de tokens com códigos de autorização interceptados.  
Os clientes devem gerar um novo verificador de código aleatório com cada solicitação de autorização. O uso de um verificador de código estático ou previsível significa que o invasor só precisa interceptar o verificador codificado e o código de autorização. Projete sua aplicação para que ela não exponha os valores do verificador de código aos usuários.

## Privilégio mínimo de administração do grupo de usuários
<a name="user-pool-security-best-practices-least-privilege"></a>

As políticas do IAM podem definir o nível de acesso das entidades principais à administração do grupo de usuários e às operações de autenticação administrativa do Amazon Cognito. Por exemplo:
+ Para um servidor web, conceda permissões para autenticação com operações administrativas de API. 
+ Para um Centro de Identidade do AWS IAM usuário que gerencia um grupo de usuários no seu Conta da AWS, conceda permissões para manutenção e geração de relatórios do grupo de usuários.

O nível de granularidade dos recursos no Amazon Cognito é limitado a [dois tipos de recursos](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncognitoidentity.html#amazoncognitoidentity-resources-for-iam-policies) para fins de política do IAM: grupo de usuários e banco de identidades. Observe que não é possível aplicar permissões para gerenciar clientes de aplicação individuais. Configure grupos de usuários com o conhecimento de que as permissões que você concede são efetivas em todos os clientes da aplicação. Quando sua organização tem vários locatários de aplicação e seu modelo de segurança exige a separação das responsabilidades administrativas entre os locatários, implemente a [multilocação com um locatário por grupo de usuários](bp_user-pool-based-multi-tenancy.md).

Embora seja possível criar políticas do IAM com permissões para operações de autenticação do usuário como `InitiateAuth`, essas permissões não têm efeito. As [operações de API públicas e autorizadas por tokens](authentication-flows-public-server-side.md) não estão sujeitas às permissões do IAM. Das operações de autenticação de grupos de usuários disponíveis, você só pode conceder permissões para operações *administrativas* do servidor, como `AdminInitiateAuth`.

Você pode limitar os níveis de administração do grupo de usuários com listas de privilégios mínimos `Action`. O exemplo de política a seguir é para um administrador que pode gerenciar servidores de recursos IdPs, clientes de aplicativos e o domínio do grupo de usuários, mas não usuários ou o grupo de usuários.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "UserPoolClientAdministrator",
      "Action": [
        "cognito-idp:CreateIdentityProvider",
        "cognito-idp:CreateManagedLoginBranding",
        "cognito-idp:CreateResourceServer",
        "cognito-idp:CreateUserPoolDomain",
        "cognito-idp:DeleteIdentityProvider",
        "cognito-idp:DeleteResourceServer",
        "cognito-idp:DeleteUserPoolDomain",
        "cognito-idp:DescribeIdentityProvider",
        "cognito-idp:DescribeManagedLoginBranding",
        "cognito-idp:DescribeManagedLoginBrandingByClient",
        "cognito-idp:DescribeResourceServer",
        "cognito-idp:DescribeUserPool",
        "cognito-idp:DescribeUserPoolClient",
        "cognito-idp:DescribeUserPoolDomain",
        "cognito-idp:GetIdentityProviderByIdentifier",
        "cognito-idp:GetUICustomization",
        "cognito-idp:ListIdentityProviders",
        "cognito-idp:ListResourceServers",
        "cognito-idp:ListUserPoolClients",
        "cognito-idp:ListUserPools",
        "cognito-idp:SetUICustomization",
        "cognito-idp:UpdateIdentityProvider",
        "cognito-idp:UpdateManagedLoginBranding",
        "cognito-idp:UpdateResourceServer",
        "cognito-idp:UpdateUserPoolClient",
        "cognito-idp:UpdateUserPoolDomain"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:cognito-idp:us-west-2:123456789012:userpool/us-west-2_EXAMPLE"
    }
  ]
}
```

------

O exemplo de política a seguir concede gerenciamento e autenticação de usuários e grupos a uma aplicação do lado do servidor.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "UserAdminAuthN",
      "Action": [
        "cognito-idp:AdminAddUserToGroup",
        "cognito-idp:AdminConfirmSignUp",
        "cognito-idp:AdminCreateUser",
        "cognito-idp:AdminDeleteUser",
        "cognito-idp:AdminDeleteUserAttributes",
        "cognito-idp:AdminDisableProviderForUser",
        "cognito-idp:AdminDisableUser",
        "cognito-idp:AdminEnableUser",
        "cognito-idp:AdminForgetDevice",
        "cognito-idp:AdminGetDevice",
        "cognito-idp:AdminGetUser",
        "cognito-idp:AdminInitiateAuth",
        "cognito-idp:AdminLinkProviderForUser",
        "cognito-idp:AdminListDevices",
        "cognito-idp:AdminListGroupsForUser",
        "cognito-idp:AdminListUserAuthEvents",
        "cognito-idp:AdminRemoveUserFromGroup",
        "cognito-idp:AdminResetUserPassword",
        "cognito-idp:AdminRespondToAuthChallenge",
        "cognito-idp:AdminSetUserMFAPreference",
        "cognito-idp:AdminSetUserPassword",
        "cognito-idp:AdminSetUserSettings",
        "cognito-idp:AdminUpdateAuthEventFeedback",
        "cognito-idp:AdminUpdateDeviceStatus",
        "cognito-idp:AdminUpdateUserAttributes",
        "cognito-idp:AdminUserGlobalSignOut",
        "cognito-idp:AssociateSoftwareToken",
        "cognito-idp:ListGroups",
        "cognito-idp:ListUsers",
        "cognito-idp:ListUsersInGroup",
        "cognito-idp:RevokeToken",
        "cognito-idp:UpdateGroup",
        "cognito-idp:VerifySoftwareToken"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:cognito-idp:us-west-2:123456789012:userpool/us-west-2_EXAMPLE"
    }
  ]
}
```

------

## Proteger e verificar os tokens
<a name="user-pool-security-best-practices-secure-tokens"></a>

Os tokens podem conter referências internas à associação ao grupo e aos atributos do usuário que talvez você não queira divulgar ao usuário final. Não armazene tokens de ID e acesso no armazenamento local. Os tokens de atualização são criptografados com uma chave que somente seu grupo de usuários pode acessar e não são visíveis para usuários e aplicações. [Revogue os tokens de atualização](token-revocation.md) quando os usuários saírem ou quando você determinar que a persistência da sessão de um usuário é indesejada por motivos de segurança.

Use tokens de acesso para autorizar o acesso somente a sistemas que verifiquem de modo independente se o token é válido e não está expirado. Para obter recursos de verificação, consulte [Verificar um token web JSON](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md).

## Determinar os provedores de identidades de confiança
<a name="user-pool-security-best-practices-trusted-idps"></a>

Ao configurar seu grupo de usuários com provedores de identidade [SAML](cognito-user-pools-saml-idp.md) ou [OIDC](cognito-user-pools-oidc-idp.md) (IdPs), você IdPs pode criar novos usuários, definir atributos de usuário e acessar os recursos do aplicativo. Os provedores de SAML e OIDC são normalmente usados em cenários business-to-business (B2B) ou corporativos em que você ou seu cliente imediato controlam a associação e a configuração do provedor.

Os [provedores sociais](cognito-user-pools-social-idp.md) oferecem contas de usuário para qualquer pessoa na internet e estão menos sob seu controle do que os provedores corporativos. Ative as redes sociais IdPs em seu cliente de aplicativo somente quando estiver pronto para permitir que clientes públicos façam login e acessem recursos em seu aplicativo.

## Entender o efeito dos escopos no acesso aos perfis de usuário
<a name="user-pool-security-best-practices-scopes"></a>

Você pode solicitar escopos de controle de acesso em suas solicitações de autenticação para o servidor de autorização do grupo de usuários. Esses escopos podem conceder aos usuários acesso a recursos externos e acesso para ver e modificar os próprios perfis dos usuários. Configure seus clientes de aplicação para oferecer suporte aos escopos mínimos necessários para a operação da aplicação.

O `aws.cognito.signin.user.admin` escopo está presente em todos os tokens de acesso emitidos pela autenticação do SDK com operações como [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html). Ele é designado para operações de autoatendimento de perfil de usuário em sua aplicação. Também é possível solicitar esse escopo no servidor de autorização. Esse escopo é necessário para operações autorizadas por tokens, como e. [UpdateUserAttributes[GetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html) O efeito dessas operações é limitado pelas permissões de leitura e gravação do seu cliente da aplicação.

Os escopos `openid`, `profile`, `email` e `phone` autorizam solicitações para o [endpoint userinfo](userinfo-endpoint.md) em seu servidor de autorização do grupo de usuários. Eles definem os atributos que o endpoint pode retornar. O escopo `openid`, quando solicitado sem outros escopos, retorna todos os atributos disponíveis, mas quando você solicita mais escopos na solicitação, a resposta é reduzida aos atributos representados pelos escopos adicionais. O escopo `openid` também indica uma solicitação de um token de ID; quando você omite esse escopo da sua solicitação para o seu [Autorizar endpoint](authorization-endpoint.md), o Amazon Cognito emite somente um token de acesso e, quando aplicável, um token de atualização. Para obter mais informações, consulte **Escopos do OpenID Connect** em [Termos do cliente da aplicação](user-pool-settings-client-apps.md#cognito-user-pools-app-idp-settings-about).

## Limpar as entradas para os atributos do usuário
<a name="user-pool-security-best-practices-sanitize-inputs"></a>

Os atributos do usuário que podem acabar como métodos de entrega e nomes de usuário, por exemplo `email`, têm [restrições de formato](user-pool-settings-attributes.md#cognito-user-pools-standard-attributes). Outros atributos podem ter tipos de dados de string, booleanos ou numéricos. Os valores dos atributos de cadeia de caracteres são compatíveis com uma variedade de entradas. Configure sua aplicação para se proteger contra tentativas de gravar dados indesejados em seu diretório de usuários ou nas mensagens que o Amazon Cognito entrega aos usuários. Realize a validação do lado do cliente dos valores de atributos de string enviados pelo usuário em sua aplicação antes de enviá-los para o Amazon Cognito.

Os grupos de usuários mapeiam atributos do IdPs seu grupo de usuários com base em um [mapeamento de atributos](cognito-user-pools-specifying-attribute-mapping.md) que você especifica. Mapeie somente atributos de IdP seguros e previsíveis para atributos de string do grupo de usuários.

# Autenticação com grupos de usuários do Amazon Cognito
<a name="authentication"></a>

O Amazon Cognito inclui vários métodos para autenticar os usuários. Os usuários podem fazer login com WebAuthn senhas e chaves de acesso. O Amazon Cognito pode enviar a eles uma senha de uso único por e-mail ou SMS. Você pode implementar funções do Lambda que orquestram sua própria sequência de desafios e respostas. Esses são *fluxos de autenticação*. Nos fluxos de autenticação, os usuários fornecem um segredo e o Amazon Cognito verifica o segredo e, em seguida, emite tokens web JSON (JWTs) para os aplicativos processarem com bibliotecas do OIDC. Neste capítulo, falaremos sobre como configurar grupos de usuários e clientes da aplicação para vários fluxos de autenticação em vários ambientes de aplicações. Você aprenderá sobre as opções para o uso das páginas de login hospedadas do login gerenciado e para criar sua própria lógica e front-end em um AWS SDK.

Todos os grupos de usuários, independentemente de você ter um domínio ou não, podem autenticar usuários na API de grupos de usuários. Se adicionar um domínio ao grupo de usuários, você poderá usar os [endpoints do grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-server-contract-reference.html). A API de grupos de usuários é compatível com uma variedade de modelos de autorização e fluxos de solicitações de API.

Para verificar a identidade dos usuários, o Amazon Cognito é compatível com fluxos de autenticação que incorporam tipos de desafio, além de senhas, como senhas de uso único e chaves de acesso enviadas por e-mail e SMS.

**Topics**
+ [

## Implementar fluxos de autenticação
](#authentication-implement)
+ [

## Coisas a saber sobre a autenticação com grupos de usuários
](#authentication-flow-things-to-know)
+ [

## Um exemplo de sessão de autenticação
](#amazon-cognito-user-pools-authentication-flow)
+ [

# Configurar métodos de autenticação para login gerenciado
](authentication-flows-selection-managedlogin.md)
+ [

# Gerencie métodos de autenticação em AWS SDKs
](authentication-flows-selection-sdk.md)
+ [

# Fluxos de autenticação
](amazon-cognito-user-pools-authentication-flow-methods.md)
+ [

# Modelos de autorização para autenticação de API e SDK
](authentication-flows-public-server-side.md)

## Implementar fluxos de autenticação
<a name="authentication-implement"></a>

Se você está implementando o [login gerenciado](authentication-flows-selection-managedlogin.md) ou um [front-end de aplicativo personalizado](authentication-flows-selection-sdk.md) com um AWS SDK para autenticação, você deve configurar seu cliente de aplicativo para os tipos de autenticação que deseja implementar. As informações a seguir descrevem a configuração dos fluxos de autenticação em seus [clientes da aplicação](user-pool-settings-client-apps.md) e em sua aplicação.

------
#### [ App client supported flows ]

Você pode configurar fluxos compatíveis para seus clientes de aplicativos no console do Amazon Cognito ou com a API em um AWS SDK. Após configurar o cliente da aplicação para oferecer suporte a esses fluxos, você poderá implantá-los em sua aplicação.

O procedimento a seguir configura os fluxos de autenticação disponíveis para um cliente da aplicação com o console do Amazon Cognito.

**Como configurar um cliente da aplicação para fluxos de autenticação (console)**

1. Faça login AWS e navegue até o console de [grupos de usuários do Amazon Cognito](https://console.aws.amazon.com/cognito/v2/idp). Selecione um grupo de usuários ou crie um.

1. Na configuração do grupo de usuários, clique no menu **Clientes da aplicação**. Selecione um cliente da aplicação ou crie um.

1. Em **Informações do cliente de aplicação**, clique em **Editar**.

1. Em **Fluxos do cliente da aplicação**, escolha os fluxos de autenticação que você deseja oferecer suporte.

**Como configurar um cliente da aplicação para fluxos de autenticação (API/SDK)**  
Para configurar os fluxos de autenticação disponíveis para um cliente de aplicativo com a API do Amazon Cognito, defina o valor de `ExplicitAuthFlows` em uma solicitação [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html#CognitoUserPools-CreateUserPoolClient-request-ExplicitAuthFlows)or [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html#CognitoUserPools-UpdateUserPoolClient-request-ExplicitAuthFlows). Veja a seguir um exemplo que fornece senha remota segura (SRP) e autenticação baseada em opções para um cliente.

```
"ExplicitAuthFlows": [ 
   "ALLOW_USER_AUTH",
   "ALLOW_USER_SRP_AUTH
]
```

Ao configurar fluxos compatíveis com o cliente da aplicação, você poderá especificar os valores da API e as opções abaixo.


**Suporte ao fluxo do cliente da aplicação**  

| Fluxo de autenticação | Compatibilidade | Console | solicitações de  | 
| --- | --- | --- | --- | 
| [Autenticação baseada em opções](authentication-flows-selection-sdk.md#authentication-flows-selection-choice) | Lado do servidor, lado do cliente | Selecionar um tipo de autenticação no login | ALLOW\$1USER\$1AUTH | 
| [Fazer login com senhas persistentes](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-password) | Lado do cliente | Fazer login com nome de usuário e senha | ALLOW\$1USER\$1PASSWORD\$1AUTH | 
| [Fazer login com senhas persistentes e carga útil segura](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-srp) | Lado do servidor, lado do cliente | Fazer login com senha remota segura (SRP) | ALLOW\$1USER\$1SRP\$1AUTH | 
| [Atualizar tokens](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-refresh) | Lado do servidor, lado do cliente | Receber novos tokens de usuário de sessões autenticadas existentes | ALLOW\$1REFRESH\$1TOKEN\$1AUTH | 
| [Autenticação no lado do servidor](authentication-flows-public-server-side.md#amazon-cognito-user-pools-server-side-authentication-flow) | Lado do servidor | Fazer login com credenciais administrativas do lado do servidor | ALLOW\$1ADMIN\$1USER\$1PASSWORD\$1AUTH | 
| [Autenticação personalizada](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-custom) | Aplicações personalizadas dos lados do servidor e do cliente. Não é compatível com o login gerenciado. | Fazer login com fluxos de autenticação personalizados dos acionadores do Lambda | ALLOW\$1CUSTOM\$1AUTH | 

------
#### [ Implement flows in your application ]

O login gerenciado disponibiliza automaticamente as opções de autenticação configuradas em suas páginas de login. Em aplicações personalizadas, inicie a autenticação com uma declaração do fluxo inicial.
+ Para escolher entre uma lista de opções de fluxo para um usuário, declare a [autenticação baseada em opções](authentication-flows-selection-sdk.md#authentication-flows-selection-choice) com o fluxo `USER_AUTH`. Esse fluxo tem métodos de autenticação disponíveis que não estão disponíveis nos fluxos de autenticação baseada em clientes, por exemplo, autenticação por [chave de acesso](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passkey) e autenticação [sem senha](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless).
+ Para escolher seu fluxo de autenticação com antecedência, declare a [autenticação baseada em clientes](authentication-flows-selection-sdk.md#authentication-flows-selection-client) juntamente com qualquer outro fluxo disponível no cliente da aplicação.

Quando você faz login com usuários, o corpo da sua [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-request-AuthFlow)solicitação [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-AuthFlow)ou solicitação deve incluir um `AuthFlow` parâmetro.

Autenticação baseada em opções:

```
"AuthFlow": "USER_AUTH"
```

Autenticação baseada em clientes com SRP:

```
"AuthFlow": "USER_SRP_AUTH"
```

------

## Coisas a saber sobre a autenticação com grupos de usuários
<a name="authentication-flow-things-to-know"></a>

Considere as informações a seguir no design do modelo de autenticação com grupos de usuários do Amazon Cognito.

**Fluxos de autenticação no login gerenciado e na IU hospedada**  
O [login gerenciado](cognito-user-pools-managed-login.md) tem mais opções de autenticação do que a IU hospedada clássica. Por exemplo, os usuários podem fazer autenticação sem senha e com chave de acesso somente no login gerenciado.

**Fluxos de autenticação personalizados disponíveis somente na autenticação AWS do SDK**  
Não é possível criar *fluxos de autenticação personalizados*, nem [autenticação personalizada com acionadores do Lambda](user-pool-lambda-challenge.md), usando o login gerenciado ou a IU hospedada clássica. A autenticação personalizada está disponível na [autenticação com AWS SDKs](authentication-flows-selection-sdk.md).

**Login gerenciado para login do provedor de identidades (IdP) externo**  
Você não pode fazer login de usuários por meio [de terceiros IdPs](cognito-user-pools-identity-federation.md) na [autenticação com AWS SDKs](authentication-flows-selection-sdk.md). Você deve implementar o login gerenciado ou a interface de usuário hospedada clássica, redirecionar IdPs e processar o objeto de autenticação resultante com as bibliotecas do OIDC em seu aplicativo. Para obter mais informações sobre o login gerenciado, consulte [Login gerenciado do grupo de usuários](cognito-user-pools-managed-login.md).

**Efeito da autenticação sem senha em outros recursos do usuário**  
A ativação do login sem senha com [senhas de uso único](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless) ou [chaves de acesso](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passkey) no grupo de usuários e no cliente da aplicação afeta a criação e a migração de usuários. Quando o login sem senha está ativo:  

1. Os administradores podem criar usuários sem senhas. O modelo de mensagem de convite padrão é alterado para não incluir mais o espaço reservado para senha `{###}`. Para obter mais informações, consulte [Como criar contas de usuário como administrador](how-to-create-user-accounts.md).

1. Para [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)operações baseadas em SDK, os usuários não precisam fornecer uma senha ao se inscreverem. O login gerenciado e a IU hospedada exigem uma senha na página de cadastro, mesmo que a autenticação sem senha seja permitida. Para obter mais informações, consulte [Como cadastrar e confirmar contas de usuários](signing-up-users-in-your-app.md).

1. Os usuários importados de um arquivo CSV podem fazer login imediatamente com opções sem senha, sem a necessidade de redefinição de senha, se seus atributos incluírem um endereço de e-mail ou número de telefone para uma opção de login sem senha disponível. Para obter mais informações, consulte [Como importar usuários para grupos de usuários com base em um arquivo CSV](cognito-user-pools-using-import-tool.md).

1. A autenticação sem senha não invoca o [acionador do Lambda de migração de usuários](user-pool-lambda-migrate-user.md).

1. Os usuários que fazem login com um primeiro fator de senha de uso único (OTP) não podem adicionar um fator de autenticação [multifator (MFA)](user-pool-settings-mfa.md) à sessão. As chaves de acesso com verificação do usuário podem atender aos requisitos de MFA quando configuradas com. `MULTI_FACTOR_WITH_USER_VERIFICATION`

**A parte confiável da chave de acesso não URLs pode estar na lista pública de sufixos**  
Você pode usar nomes de domínio que você possui, como `www.example.com`, como o ID de parte confiável (RP) na configuração da chave de acesso. Essa configuração se destina a oferecer suporte a aplicações personalizadas executadas em domínios que você possui. A [lista de sufixos públicos](https://publicsuffix.org/), ou PSL, contém domínios de alto nível protegidos. O Amazon Cognito retorna um erro quando você tenta definir o URL de RP como um domínio na PSL.

**Topics**
+ [

### Duração do fluxo da sessão de autenticação
](#authentication-flow-session-duration)
+ [

### Comportamento de bloqueio em tentativas fracassadas de login
](#authentication-flow-lockout-behavior)

### Duração do fluxo da sessão de autenticação
<a name="authentication-flow-session-duration"></a>

Dependendo dos recursos do grupo de usuários, você pode acabar respondendo a vários desafios para `InitiateAuth` e `RespondToAuthChallenge` antes da aplicação recuperar tokens do Amazon Cognito. O Amazon Cognito inclui uma string de sessão na resposta a cada solicitação. Para combinar suas solicitações de API em um fluxo de autenticação, inclua a string da sessão da resposta à solicitação anterior em cada solicitação subsequente. Por padrão, os usuários têm três minutos para concluir cada desafio antes que a string da sessão expire. Para ajustar esse período, altere o cliente da aplicação **Authentication flow session duration** (Duração da sessão do fluxo de autenticação). O procedimento a seguir descreve como alterar essa definição na configuração do cliente da aplicação.

**nota**  
As configurações de **duração da sessão do fluxo de autenticação** se aplicam à autenticação com a API de grupos de usuários do Amazon Cognito. O login gerenciado define a duração da sessão como 3 minutos para autenticação multifator e 8 minutos para códigos de redefinição de senha.

------
#### [ Amazon Cognito console ]

**Como configurar a duração da sessão do fluxo de autenticação do cliente da aplicação (Console de gerenciamento da AWS)**

1. Na guia **App integration** (Integração de aplicações) no grupo de usuários, selecione o nome do cliente da aplicação no contêiner **App clients and analytics** (Clientes e análise de aplicações).

1. Selecione **Editar** no contêiner **Informações do cliente da aplicação**.

1. Altere o valor de **Duração da sessão de fluxo de autenticação** para a duração de validade desejada, em minutos, para códigos de MFA por e-mail ou SMS. Isso também altera a quantidade de tempo que qualquer usuário tem para concluir qualquer desafio de autenticação no cliente da aplicação.

1. Escolha **Salvar alterações**.

------
#### [ User pools API ]

**Como configurar a duração da sessão do fluxo de autenticação do cliente da aplicação (API do Amazon Cognito)**

1. Prepare uma solicitação `UpdateUserPoolClient` com as configurações existentes de seu grupo de usuários usando uma solicitação `DescribeUserPoolClient`. A solicitação `UpdateUserPoolClient` deve incluir todas as propriedades existentes do cliente da aplicação.

1. Altere o valor de `AuthSessionValidity` para a duração de validade desejada, em minutos, para códigos de MFA por SMS. Isso também altera a quantidade de tempo que qualquer usuário tem para concluir qualquer desafio de autenticação no cliente da aplicação.

------

Para obter mais informações sobre clientes de aplicação, consulte [Configurações específicas da aplicação com clientes de aplicação](user-pool-settings-client-apps.md).

### Comportamento de bloqueio em tentativas fracassadas de login
<a name="authentication-flow-lockout-behavior"></a>

Após cinco tentativas de login com falha com a senha do usuário, independentemente de serem solicitadas com operações de API não autenticadas ou autorizadas pelo IAM, o Amazon Cognito bloqueia o usuário por 1 segundo. A duração do bloqueio dobra após cada tentativa adicional fracassada, até um máximo de aproximadamente 15 minutos.

As tentativas feitas durante um período de bloqueio geram uma exceção `Password attempts exceeded` e não afetam a duração dos períodos de bloqueio subsequentes. Para um número cumulativo de tentativas fracassadas de login *n*, sem incluir exceções `Password attempts exceeded`, o Amazon Cognito bloqueia o usuário por *2^(n-5)* segundos. Para redefinir o bloqueio como o estado inicial *n=0*, o usuário deve fazer login com êxito após o término do período de bloqueio ou não iniciar nenhuma tentativa de login por 15 minutos consecutivos a qualquer momento após um bloqueio. Esse comportamento está sujeito a alterações. Esse comportamento não se aplica aos desafios personalizados, a menos que eles também realizem a autenticação baseada em senha.

## Um exemplo de sessão de autenticação
<a name="amazon-cognito-user-pools-authentication-flow"></a>

O diagrama e o step-by-step guia a seguir ilustram um cenário típico em que um usuário faz login em um aplicativo. A aplicação de exemplo apresenta ao usuário várias opções de login. Ele seleciona uma inserindo suas credenciais, fornece um fator de autenticação adicional e faz login.

![\[Um fluxograma que mostra um aplicativo que solicita a entrada do usuário e faz login com um AWS SDK.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/authentication-api-userauth.png)


Imagine uma aplicação com uma página de login na qual os usuários podem fazer login com nome de usuário e senha, solicitar um código de uso único enviado por e-mail ou escolher uma opção de impressão digital.

1. **Solicitação de login:** a aplicação mostra uma tela inicial com um botão *Fazer login*.

1. **Solicitar login**: o usuário seleciona *Fazer login*. Com base em um cookie ou cache, a aplicação recupera o nome de usuário ou solicita que ele o insira.

1. **Opções de solicitação**: a aplicação solicita as opções de login do usuário por meio de uma solicitação de API `InitiateAuth` com o fluxo `USER_AUTH`, solicitando os métodos de login disponíveis para o usuário.

1. **Enviar opções de login**: o Amazon Cognito responde com `PASSWORD`, `EMAIL_OTP` e `WEB_AUTHN`. A resposta inclui um identificador de sessão para você reproduzir na próxima resposta.

1. **Opções de exibição**: a aplicação mostra elementos de IU para que o usuário insira seu nome de usuário e senha, obtenha um código de uso único ou escaneie sua impressão digital.

1. **Escolha option/Enter as credenciais**: o usuário insere seu nome de usuário e senha.

1. **Iniciar autenticação**: a aplicação fornece as informações de login do usuário por meio de uma solicitação de API `RespondToAuthChallenge` que confirma o login com nome de usuário e senha e fornece o nome de usuário e a senha.

1. **Validar credenciais**: o Amazon Cognito confirma as credenciais do usuário.

1. **Desafio adicional**: o usuário tem a autenticação multifator configurada com uma aplicação autenticadora. O Amazon Cognito retorna um desafio `SOFTWARE_TOKEN_MFA`.

1. **Solicitação de desafio**: a aplicação exibe um formulário solicitando uma senha de uso único com marcação temporal (TOTP) da aplicação autenticadora do usuário.

1. **Responder ao desafio**: o usuário envia a TOTP.

1. **Responder ao desafio**: em outra solicitação `RespondToAuthChallenge`, a aplicação fornece a TOTP do usuário.

1. **Validar a resposta ao desafio**: o Amazon Cognito confirma o código do usuário e determina que o grupo de usuários está configurado para não emitir desafios adicionais para o usuário atual.

1. **Emitir tokens**: o Amazon Cognito retorna tokens web JSON de ID, acesso e atualização (). JWTs A autenticação inicial do usuário está concluída.

1. **Armazenar tokens**: a aplicação armazena em cache os tokens do usuário para poder referenciar os dados do usuário, autorizar o acesso a recursos e atualizar os tokens quando eles expirarem.

1. **Renderizar conteúdo autorizado**: a aplicação determina o acesso do usuário aos recursos com base em sua identidade e funções e fornece o conteúdo da aplicação.

1. **Acessar conteúdo**: o usuário está conectado e começa a usar a aplicação.

1. **Solicitar conteúdo com token expirado**: posteriormente, o usuário solicita um recurso que requer autorização. O token em cache do usuário expirou.

1. **Tokens de atualização**: a aplicação faz uma solicitação `InitiateAuth` com o token de atualização salvo do usuário.

1. **Emitir tokens**: o Amazon Cognito retorna novo ID e acesso. JWTs A sessão do usuário é atualizada com segurança sem solicitações adicionais de credenciais.

Você pode usar [acionadores do AWS Lambda](cognito-user-pools-working-with-lambda-triggers.md) para personalizar a maneira como os usuários se autenticam. Esses triggers emitem e verificam seus próprios desafios como parte do fluxo de autenticação.

Também é possível usar o fluxo de autenticação de administrador para servidores de backend seguros. É possível usar o [fluxo de autenticação de migração do usuário](cognito-user-pools-using-import-tool.md) para permitir essa migração sem exigir que os usuários redefinam suas senhas.

# Configurar métodos de autenticação para login gerenciado
<a name="authentication-flows-selection-managedlogin"></a>

Você pode invocar [páginas de login gerenciado](cognito-user-pools-managed-login.md), um frontend da web para autenticação de grupos de usuários, quando quiser que os usuários façam login, logout ou redefinam suas senhas. Nesse modelo, a aplicação importa bibliotecas do OIDC para processar tentativas de autenticação baseadas em navegador com páginas de login gerenciado de grupos de usuários. As formas de autenticação disponíveis para os usuários dependem da configuração do grupo de usuários e do cliente da aplicação. Implemente o fluxo `ALLOW_USER_AUTH` no cliente da aplicação e o Amazon Cognito solicitará que os usuários selecionem um método de login entre as opções disponíveis. Implemente `ALLOW_USER_PASSWORD_AUTH` e atribua um provedor SAML e as páginas de login solicitarão aos usuários a opção de inserir seu nome de usuário e senha ou de se conectar ao IdP.

O console de grupos de usuários do Amazon Cognito pode auxiliar na configuração da autenticação de login gerenciado para sua aplicação. Ao criar um novo grupo de usuários, especifique a plataforma para a qual você está desenvolvendo e o console fornece exemplos de implementação de OIDC e OAuth bibliotecas com código inicial para implementar fluxos de entrada e saída. Você pode criar login gerenciado com diversas implementações de partes confiáveis do OIDC. Recomendamos que você trabalhe com [bibliotecas de partes confiáveis do OIDC certificadas](https://openid.net/developers/certified-openid-connect-implementations/) sempre que possível. Para obter mais informações, consulte [Conceitos básicos dos grupos de usuários](getting-started-user-pools.md).

Normalmente, as bibliotecas confiáveis do OIDC verificam periodicamente o `.well-known/openid-configuration` endpoint do seu grupo de usuários para determinar o emissor, URLs como o endpoint do token e o endpoint da autorização. Como prática recomendada, implemente esse comportamento de descoberta automática sempre que possível. A configuração manual dos endpoints do emissor apresenta potencial de erro. Por exemplo, você pode alterar o domínio do grupo de usuários. O caminho para `openid-configuration` não está vinculado ao domínio do grupo de usuários, portanto, as aplicações que descobrem automaticamente os endpoints de serviço detectarão automaticamente a alteração do domínio.

## Configurações do grupo de usuários para login gerenciado
<a name="authentication-flows-selection-managedlogin-settings"></a>

Recomenda-se permitir o login com vários provedores para sua aplicação ou usar o Amazon Cognito como um diretório de usuários independente. É recomendável também coletar atributos do usuário, configurar e solicitar a MFA ou exigir endereços de e-mail como nomes de usuário. Não é possível editar diretamente os campos no login gerenciado e na IU hospedada. Em vez disso, a configuração do grupo de usuários define automaticamente o tratamento dos fluxos de autenticação de login gerenciado.

Os itens de configuração do grupo de usuários a seguir determinam os métodos de autenticação que o Amazon Cognito apresenta aos usuários no login gerenciado e na IU hospedada.

------
#### [ User pool options (Sign-in menu) ]

As opções a seguir estão no menu **Fazer login** de um grupo de usuários no console do Amazon Cognito.

**Opções de login do grupo de usuários do Cognito**  
Tem opções para nomes de usuário. Suas páginas de login gerenciado e IU hospedada aceitam somente os nomes de usuário nos formatos que você selecionar. Por exemplo, ao configurar um grupo de usuários com **e-mail** como a única opção de login, as páginas de login gerenciado só aceitarão nomes de usuário em formato de e-mail.

**Atributos obrigatórios**  
Ao definir um atributo como obrigatório no grupo de usuários, o login gerenciado solicita aos usuários um valor para esse atributo no momento do cadastro.

**Opções para login baseado em opções**  
Tem configurações para métodos de autenticação em [Autenticação baseada em opções](authentication-flows-selection-sdk.md#authentication-flows-selection-choice). Aqui, você pode ativar ou desativar métodos de autenticação, como [chave de acesso](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passkey) e [sem senha](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless). Esses métodos estão disponíveis somente para grupos de usuários com [domínios de login gerenciado](managed-login-branding.md) e [planos de recursos](cognito-sign-in-feature-plans.md) acima do nível **Lite**.

**Autenticação multifator**  
O login gerenciado e a IU hospedada lidam com as operações de registro e autenticação para [MFA](user-pool-settings-mfa.md). Quando a MFA é obrigatória no grupo de usuários, as páginas de login solicitam automaticamente que os usuários configurem seu fator adicional. Elas também solicitam que os usuários com MFA configurada concluam a autenticação com um código de MFA. Quando a MFA está desativada ou opcional no grupo de usuários, as páginas de login não solicitam a configuração da MFA.

**Recuperação de contas de usuários**  
A configuração de [recuperação de contas]() por autoatendimento do grupo de usuários determina se as páginas de login exibem um link no qual os usuários podem redefinir suas senhas.

------
#### [ User pool options (Domain menu) ]

As opções a seguir estão no menu **Domínio** de um grupo de usuários no console do Amazon Cognito.

**Domínio**  
Sua escolha de domínio do grupo de usuários define o caminho para o link que os usuários abrem quando você invoca seus navegadores para autenticação.

**Versão de marca**  
Sua escolha de uma versão de marca define se o domínio do grupo de usuários exibe o login gerenciado ou a IU hospedada.

------
#### [ User pool options (Social and external providers menu) ]

A opção a seguir está no menu **Provedores sociais e externos** de um grupo de usuários no console do Amazon Cognito.

**Provedores**  
Os provedores de identidade (IdPs) que você adiciona ao seu grupo de usuários podem ficar ativos ou inativos para cada cliente de aplicativo no grupo de usuários.

------
#### [ App client options ]

As opções a seguir estão no menu **Clientes da aplicação** de um grupo de usuários no console do Amazon Cognito. Para analisar essas opções, selecione um cliente da aplicação na lista.

**Guia de configuração rápida**  
O guia de configuração rápida tem exemplos de código para diversos ambientes de desenvolvimento. Ele inclui as bibliotecas necessárias para integrar a autenticação de login gerenciado à sua aplicação.

**Informações do cliente da aplicação**  
Edite essa configuração para definir atribuída IdPs ao aplicativo que é representado pelo cliente do aplicativo atual. Nas páginas de login gerenciado, o Amazon Cognito exibe opções para os usuários. Essas opções são determinadas pelos métodos e IdP atribuídos. Por exemplo, se você atribuir um IdP SAML 2.0 denominado `MySAML` e um login de grupo de usuários local, as páginas de login gerenciado exibirão solicitações de método de autenticação e um botão para `MySAML`.

**Configurações de Autenticação**  
Edite esta configuração para definir métodos de autenticação para a aplicação. Nas páginas de login gerenciado, o Amazon Cognito exibe opções para os usuários. Essas opções são determinadas pela disponibilidade do grupo de usuários como um IdP e pelos métodos que você atribui. Por exemplo, se você atribuir a autenticação `ALLOW_USER_AUTH` baseada em opções, as páginas de login gerenciado exibirão as opções disponíveis, como inserir um endereço de e-mail e fazer login com uma chave de acesso. As páginas de login gerenciadas também renderizam botões para os atribuídos IdPs.

**Páginas de login**  
Defina o efeito visual das páginas interativas de login gerenciado ou da IU hospedada com as opções disponíveis nesta guia. Para obter mais informações, consulte [Aplicar a identidade visual às páginas de login gerenciado](managed-login-branding.md).

------

# Gerencie métodos de autenticação em AWS SDKs
<a name="authentication-flows-selection-sdk"></a>

Os usuários nos grupos de usuários do Amazon Cognito podem fazer login com uma variedade de opções de login inicial, ou *fatores*. Para alguns fatores, os usuários podem complementar com a autenticação multifator (MFA). Esses primeiros fatores incluem nome de usuário e senha, senha de uso único, chave de acesso e autenticação personalizada. Para obter mais informações, consulte [Fluxos de autenticação](amazon-cognito-user-pools-authentication-flow-methods.md). Quando seu aplicativo tem componentes de interface de usuário integrados e importa um módulo AWS SDK, você deve criar a lógica do aplicativo para autenticação. Você deve escolher um dos dois métodos principais e, a partir desse método, os mecanismos de autenticação que deseja implementar.

Você pode implementar a *autenticação baseada em clientes*, onde sua aplicação, ou cliente, declara o tipo de autenticação com antecedência. A outra opção é a *autenticação baseada em opções*, em que a aplicação coleta um nome de usuário e solicita os tipos de autenticação disponíveis para os usuários. Você pode implementar esses modelos juntos no mesma aplicação ou dividi-los entre clientes da aplicação, de acordo com seus requisitos. Cada método tem recursos exclusivos, como autenticação personalizada na autenticação baseada em clientes e autenticação sem senha na autenticação baseada em opções.

Em aplicativos personalizados que realizam autenticação com a implementação do AWS SDK da API de grupos de usuários, você deve estruturar suas solicitações de API de acordo com a configuração do grupo de usuários, a configuração do cliente do aplicativo e as preferências do lado do cliente. Uma sessão `InitiateAuth` que começa com um `AuthFlow` de `USER_AUTH` inicia a autenticação baseada em opções. O Amazon Cognito responde à API com um desafio que consiste em um método de autenticação preferencial ou uma lista de opções. Uma sessão que começa com `AuthFlow` de `CUSTOM_AUTH` inicia diretamente a autenticação personalizada com acionadores do Lambda.

Alguns métodos de autenticação são fixos em um dos dois tipos de fluxo, e alguns métodos estão disponíveis em ambos.

**Topics**
+ [

## Autenticação baseada em opções
](#authentication-flows-selection-choice)
+ [

## Autenticação baseada em clientes
](#authentication-flows-selection-client)

## Autenticação baseada em opções
<a name="authentication-flows-selection-choice"></a>

Sua aplicação pode solicitar os métodos de autenticação a seguir na autenticação baseada em opções. Declare essas opções no `PREFERRED_CHALLENGE` parâmetro de [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-AuthParameters)ou [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-request-AuthParameters), ou no `ChallengeName` parâmetro de [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html#CognitoUserPools-RespondToAuthChallenge-request-ChallengeName)ou [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html#CognitoUserPools-AdminRespondToAuthChallenge-request-ChallengeName).

1. `EMAIL_OTP` e `SMS_OTP`

   [Fazer login sem senha com senhas de uso único](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless)

1. `WEB_AUTHN`

   [Login sem senha com chaves de acesso WebAuthn](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passkey)

1. `PASSWORD`

   [Fazer login com senhas persistentes](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-password)

   [Fazer login com senhas persistentes e carga útil segura](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-srp)

   [MFA após o login](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-mfa)

Para revisar essas opções em seu contexto de API, consulte `ChallengeName` em [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html#CognitoUserPools-RespondToAuthChallenge-request-ChallengeName).

O login baseado em opções gera um desafio em resposta à solicitação inicial. Esse desafio verifica se a opção solicitada está disponível ou fornece uma lista das opções disponíveis. Sua aplicação pode exibir essas opções para os usuários, que então inserem as credenciais do método de login preferencial e prosseguem com a autenticação nas respostas do desafio.

Você tem as seguintes opções de autenticação baseada em opções em seu fluxo de autenticação. Todas as solicitações desse tipo exigem que sua aplicação primeiro colete um nome de usuário ou o recupere de um cache.

1. Solicite opções somente com `AuthParameters` de `USERNAME`. O Amazon Cognito retorna um desafio `SELECT_CHALLENGE`. A partir daí, sua aplicação pode solicitar que o usuário selecione um desafio e então retornar essa resposta ao grupo de usuários.

1. Solicite um desafio preferencial com `AuthParameters` de `PREFERRED_CHALLENGE` e os parâmetros de seu desafio preferencial, se houver. Por exemplo, se você solicitar um `PREFERRED_CHALLENGE` de `PASSWORD_SRP`, também deverá incluir `SRP_A`. Se seu usuário, grupo de usuários e cliente do aplicativo estiverem todos configurados para o desafio preferido, o Amazon Cognito responderá com a próxima etapa desse desafio, por exemplo, `PASSWORD_VERIFIER` no `PASSWORD_SRP` fluxo ou [CodeDeliveryDetails](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CodeDeliveryDetailsType.html)nos `EMAIL_OTP` fluxos e. `SMS_OTP` Se o desafio preferencial não estiver disponível, o Amazon Cognito responderá com `SELECT_CHALLENGE` e uma lista dos desafios disponíveis.

1. Primeiro, faça o login dos usuários e, em seguida, solicite suas opções de autenticação baseada em opções. Uma [GetUserAuthFactors](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAuthFactors.html)solicitação com o token de acesso de um usuário conectado retorna seus fatores de autenticação baseados em opções disponíveis e suas configurações de MFA. Com essa opção, um usuário pode primeiro fazer login com nome de usuário e senha e depois ativar uma forma diferente de autenticação. Também é possível usar essa operação para verificar opções adicionais para um usuário que tenha feito login com um desafio preferencial.

Para [configurar o cliente da aplicação](authentication.md#authentication-implement) para autenticação baseada em opções, adicione `ALLOW_USER_AUTH` aos fluxos de autenticação permitidos. Você também deve escolher os fatores baseados em opções que deseja permitir na configuração do grupo de usuários. O processo a seguir ilustra como escolher os fatores da autenticação baseada em opções.

------
#### [ Amazon Cognito console ]

**Como configurar opções de autenticação baseada em opções em um grupo de usuários**

1. Faça login AWS e navegue até o console de [grupos de usuários do Amazon Cognito](https://console.aws.amazon.com/cognito/v2/idp). Selecione um grupo de usuários ou crie um.

1. Na configuração do grupo de usuários, clique no menu **Fazer login**. Localize **Opções para login baseado em opções** e clique em **Editar**.

1. A opção **Senha** está sempre disponível. Isso inclui os fluxos `PASSWORD` e `PASSWORD_SRP`. Selecione as **Opções adicionais** que deseja adicionar às opções dos usuários. Você pode adicionar **Chave de acesso** para `WEB_AUTHN`, **Senha única para mensagem de e-mail** para `EMAIL_OTP` e **Senha única para mensagem SMS** para `SMS_OTP`.

1. Escolha **Salvar alterações**.

------
#### [ API/SDK ]

O corpo parcial [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)ou de [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)solicitação a seguir configura todas as opções disponíveis para autenticação baseada em opções.

```
"Policies": {
    "SignInPolicy": {
        "AllowedFirstAuthFactors": [
            "PASSWORD",
            "WEB_AUTHN",
            "EMAIL_OTP",
            "SMS_OTP"
        ]
    }
},
```

------

## Autenticação baseada em clientes
<a name="authentication-flows-selection-client"></a>

A autenticação baseada em clientes é compatível com os fluxos de autenticação a seguir. Declare essas opções no `AuthFlow` parâmetro de [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-AuthFlow)ou [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-request-AuthFlow).

1. `USER_PASSWORD_AUTH` e `ADMIN_USER_PASSWORD_AUTH`

   [Fazer login com senhas persistentes](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-password)

   [MFA após o login](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-mfa)

   Este fluxo de autenticação é equivalente a `PASSWORD` na autenticação baseada em opções.

1. `USER_SRP_AUTH`

   [Fazer login com senhas persistentes e carga útil segura](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-srp)

   [MFA após o login](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-mfa)

   Este fluxo de autenticação é equivalente a `PASSWORD_SRP` na autenticação baseada em opções.

1. `REFRESH_TOKEN_AUTH`

   [Tokens de atualização](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-refresh)

   Este fluxo de autenticação só está disponível na autenticação baseada em clientes.

1. `CUSTOM_AUTH`

   [Autenticação personalizada](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-custom)

   Este fluxo de autenticação só está disponível na autenticação baseada em clientes.

Com a autenticação baseada em clientes, o Amazon Cognito presume que você determinou como o usuário deseja se autenticar antes de iniciar os fluxos de autenticação. A lógica para determinar o fator de login que um usuário deseja fornecer deve ser determinada com configurações padrão ou solicitações personalizadas e, em seguida, declarada na primeira solicitação ao grupo de usuários. A solicitação `InitiateAuth` declara um `AuthFlow` de login que corresponde diretamente a uma das opções listadas, por exemplo, `USER_SRP_AUTH`. Com essa declaração, a solicitação também inclui os parâmetros para iniciar a autenticação, por exemplo, `USERNAME`, `SECRET_HASH` e `SRP_A`. O Amazon Cognito pode acompanhar essa solicitação com desafios adicionais, como `PASSWORD_VERIFIER` para SRP ou `SOFTWARE_TOKEN_MFA` para login por senha com MFA com TOTP.

Para [configurar o cliente da aplicação](authentication.md#authentication-implement) para autenticação baseada em clientes, adicione quaisquer fluxos de autenticação diferentes de `ALLOW_USER_AUTH` aos fluxos de autenticação permitidos. Os exemplos são`ALLOW_USER_PASSWORD_AUTH`,`ALLOW_CUSTOM_AUTH`,`ALLOW_REFRESH_TOKEN_AUTH`. Para permitir fluxos de autenticação baseada em clientes, nenhuma configuração adicional do grupo de usuários é obrigatória.

# Fluxos de autenticação
<a name="amazon-cognito-user-pools-authentication-flow-methods"></a>

O processo de autenticação com grupos de usuários do Amazon Cognito pode ser melhor descrito como um *fluxo* no qual que os usuários fazem uma escolha inicial, enviam credenciais e respondem a desafios adicionais. Quando você implementa a autenticação de login gerenciado na sua aplicação, o Amazon Cognito gerencia o fluxo dessas solicitações e desafios. Ao implementar fluxos com um AWS SDK no back-end do seu aplicativo, você deve criar a lógica das solicitações, solicitar que os usuários forneçam informações e responder aos desafios.

Como administrador da aplicação, as características do usuário, os requisitos de segurança e o modelo de autorização ajudam a determinar como você deseja permitir que os usuários façam login. Pergunte-se as questões a seguir.
+ Quero permitir que os usuários façam login com credenciais de [outros provedores de identidade (IdPs)](#amazon-cognito-user-pools-authentication-flow-methods-federated)?
+ Um [nome de usuário e senha](#amazon-cognito-user-pools-authentication-flow-methods-password) são provas suficientes de identidade?
+ Minhas solicitações de autenticação por nome de usuário e senha poderiam ser interceptadas? Quero que minha aplicação transmita senhas ou [negocie a autenticação usando hashes e salts](#amazon-cognito-user-pools-authentication-flow-methods-srp)?
+ Quero permitir que os usuários ignorem a inserção de senha e [recebam uma senha de uso único](#amazon-cognito-user-pools-authentication-flow-methods-passwordless) para fazer login?
+ Quero permitir que os usuários façam login com [impressão digital, detecção facial ou chave de segurança de hardware](#amazon-cognito-user-pools-authentication-flow-methods-passkey)?
+ Quando devo exigir a [autenticação multifator (MFA)](#amazon-cognito-user-pools-authentication-flow-methods-mfa), se é que devo?
+ Quero [manter as sessões dos usuários sem solicitar novamente as credenciais](#amazon-cognito-user-pools-authentication-flow-methods-refresh)?
+ Quero [estender meu modelo de autorização](#amazon-cognito-user-pools-authentication-flow-methods-custom) além dos recursos integrados do Amazon Cognito?

Quando tiver as respostas para essas perguntas, poderá aprender como ativar os recursos relevantes e implementá-los nas solicitações de autenticação que sua aplicação realiza.

Depois de configurar os fluxos de login para um usuário, você pode verificar o status atual do MFA e dos fatores de autenticação [com base em escolhas](authentication-flows-selection-sdk.md#authentication-flows-selection-choice) com solicitações para a operação da API. [GetUserAuthFactors](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAuthFactors.html) Essa operação requer autorização com o token de acesso de um usuário conectado. Ela retorna os fatores de autenticação do usuário e as configurações de MFA.

**Topics**
+ [

## Faça login com terceiros IdPs
](#amazon-cognito-user-pools-authentication-flow-methods-federated)
+ [

## Fazer login com senhas persistentes
](#amazon-cognito-user-pools-authentication-flow-methods-password)
+ [

## Fazer login com senhas persistentes e carga útil segura
](#amazon-cognito-user-pools-authentication-flow-methods-srp)
+ [

## Fazer login sem senha com senhas de uso único
](#amazon-cognito-user-pools-authentication-flow-methods-passwordless)
+ [

## Login sem senha com chaves de acesso WebAuthn
](#amazon-cognito-user-pools-authentication-flow-methods-passkey)
+ [

## MFA após o login
](#amazon-cognito-user-pools-authentication-flow-methods-mfa)
+ [

## Tokens de atualização
](#amazon-cognito-user-pools-authentication-flow-methods-refresh)
+ [

## Autenticação personalizada
](#amazon-cognito-user-pools-authentication-flow-methods-custom)
+ [

## Fluxo de autenticação de migração de usuários
](#amazon-cognito-user-pools-user-migration-authentication-flow)

## Faça login com terceiros IdPs
<a name="amazon-cognito-user-pools-authentication-flow-methods-federated"></a>

Os grupos de usuários do Amazon Cognito servem como intermediários de sessões de autenticação entre serviços IdPs como Sign in with Apple, Login with Amazon e OpenID Connect (OIDC). Esse processo também é chamado de *login federado* ou *autenticação federada*. A autenticação federada não usa nenhum dos fluxos de autenticação que você pode implementar no cliente da aplicação. Em vez disso, você atribui um grupo de usuários configurado IdPs ao seu cliente de aplicativo. O login federado ocorre quando os usuários selecionam seu IdP no login gerenciado ou sua aplicação invoca uma sessão com um redirecionamento para a página de login do IdP.

Com o login federado, você delega fatores de autenticação principal e de MFA ao IdP do usuário. O Amazon Cognito não adiciona os outros fluxos avançados desta seção a um usuário federado, a menos que você [os vincule a um usuário local](cognito-user-pools-identity-federation-consolidate-users.md). Usuários federados não vinculados possuem nomes de usuário, mas eles são um repositório de dados de atributos mapeados que normalmente não são usados para login, independentemente do fluxo baseado em navegador.

**Recursos de implementação**
+ [Login do grupo de usuários com provedores de identidades de terceiros](cognito-user-pools-identity-federation.md)

## Fazer login com senhas persistentes
<a name="amazon-cognito-user-pools-authentication-flow-methods-password"></a>

Nos grupos de usuários do Amazon Cognito, cada usuário tem um nome de usuário. Pode ser um número de telefone, endereço de e-mail ou um identificador escolhido ou fornecido pelo administrador. Usuários desse tipo podem fazer login com seu nome de usuário e senha e, opcionalmente, fornecer MFA. Grupos de usuários podem realizar login com nome de usuário e senha com operações de API públicas ou autorizadas pelo IAM e métodos de SDK. A aplicação pode enviar diretamente a senha ao grupo de usuários para autenticação. Seu grupo de usuários responde com desafios adicionais ou com os tokens web JSON (JWTs) que são o resultado de uma autenticação bem-sucedida.

------
#### [ Activate password sign-in ]

Para ativar a [autenticação baseada em clientes](authentication-flows-selection-sdk.md#authentication-flows-selection-client) com nome de usuário e senha, configure o cliente da aplicação para permitir isso. No console do Amazon Cognito, navegue até o menu **Clientes da aplicação** em **Aplicações** na configuração do grupo de usuários. Para permitir o login com senha simples em uma aplicação nativa ou um aplicativo móvel do lado do cliente, edite um cliente da aplicação e selecione **Fazer login com nome de usuário e senha: ALLOW\$1USER\$1PASSWORD\$1AUTH** em **Fluxos de autenticação**. Para permitir o login com senha simples em uma aplicação do lado do servidor, edite um cliente da aplicação e clique em **Fazer login com credenciais administrativas do lado do servidor: ALLOW\$1ADMIN\$1USER\$1PASSWORD\$1AUTH**.

Para ativar a [autenticação baseada em opções](authentication-flows-selection-sdk.md#authentication-flows-selection-choice) com nome de usuário e senha, configure o cliente da aplicação para permitir isso. Edite o cliente da aplicação e selecione **Login baseado em opções: ALLOW\$1USER\$1AUTH**.

![\[Uma captura de tela do console do Amazon Cognito que ilustra a escolha de fluxos de autenticação por senha simples para um cliente da aplicação. As opções ALLOW_USER_PASSWORD_AUTH, ALLOW_ADMIN_USER_PASSWORD_AUTH e ALLOW_USER_AUTH foram selecionadas.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/screenshot-choose-password-admin-password-and-user-auth.png)


Para verificar se a autenticação por senha está disponível em fluxos de autenticação baseada em opções, navegue até o menu **Fazer login** e revise a seção em **Opções para login baseado em opções**. Você pode fazer login com autenticação por senha simples se a **senha** estiver visível em **Opções disponíveis**. A opção **Senha** inclui as variantes simples e SRP da autenticação por nome de usuário e senha.

![\[Uma captura de tela do console do Amazon Cognito que ilustra a opção de autenticação por senha na configuração de login baseado em opções do USER_AUTH para um grupo de usuários. A opção Senha é exibida como ativa.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/screenshot-password-flow-in-user-auth.png)


Configure `ExplicitAuthFlows` com suas opções username-and-password de autenticação preferidas em uma [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)solicitação [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html)or.

```
"ExplicitAuthFlows": [ 
   "ALLOW_USER_PASSWORD_AUTH",
   "ALLOW_ADMIN_USER_PASSWORD_AUTH",
   "ALLOW_USER_AUTH"
]
```

Em uma [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)solicitação [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)or, configure `Policies` com os fluxos de autenticação com base em opções que você deseja oferecer suporte. O valor `PASSWORD` em `AllowedFirstAuthFactors` inclui as opções de fluxo de autenticação por senha simples e SRP.

```
"Policies": {
   "SignInPolicy": {
      "AllowedFirstAuthFactors": [
         "PASSWORD",
         "EMAIL_OTP",
         "WEB_AUTHN"
      ]
   }
}
```

------
#### [ Choice-based sign-in with a password ]

Para fazer login de um usuário em um aplicativo com autenticação por nome de usuário e senha, configure o corpo da sua [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)solicitação [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)ou da seguinte forma. Essa solicitação de login será bem-sucedida ou continuará até o próximo desafio se o usuário atual for elegível para a autenticação por nome de usuário e senha. Caso contrário, ela responderá com uma lista de desafios de autenticação de fator primário disponíveis. Esse conjunto de parâmetros é o mínimo necessário para fazer login. Parâmetros adicionais estão disponíveis.

```
{
   "AuthFlow": "USER_AUTH",
   "AuthParameters": { 
      "USERNAME" : "testuser",
      "PREFERRED_CHALLENGE" : "PASSWORD",
      "PASSWORD" : "[User's password]"
   },
   "ClientId": "1example23456789"
}
```

Você também pode omitir o valor `PREFERRED_CHALLENGE` e receber uma resposta contendo uma lista de fatores de login elegíveis para o usuário.

```
{
   "AuthFlow": "USER_AUTH",
   "AuthParameters": { 
      "USERNAME" : "testuser"
   },
   "ClientId": "1example23456789"
}
```

Se você não enviou um desafio preferencial ou o usuário enviado não for elegível para o desafio preferencial, o Amazon Cognito retornará uma lista de opções em `AvailableChallenges`. Quando `AvailableChallenges` inclui um `ChallengeName` de`PASSWORD`, você pode continuar a autenticação com uma resposta [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)ou [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)desafiar no formato a seguir. Você deve transmitir um parâmetro `Session` que associe a resposta do desafio à resposta da API à solicitação inicial de login. Esse conjunto de parâmetros é o mínimo necessário para fazer login. Parâmetros adicionais estão disponíveis.

```
{
   "ChallengeName": "PASSWORD",
   "ChallengeResponses": { 
      "USERNAME" : "testuser",
      "PASSWORD" : "[User's Password]"
   },
   "ClientId": "1example23456789",
   "Session": "[Session ID from the previous response"
}
```

O Amazon Cognito responde a solicitações de desafio preferencial elegíveis e bem-sucedidas e respostas do desafio `PASSWORD` com tokens ou um desafio adicional obrigatório, como autenticação multifator (MFA).

------
#### [ Client-based sign-in with a password ]

Para fazer login de um usuário em um aplicativo do lado do cliente com autenticação de nome de usuário e senha, configure o corpo da sua solicitação da seguinte forma. [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) Esse conjunto de parâmetros é o mínimo necessário para fazer login. Parâmetros adicionais estão disponíveis.

```
{
   "AuthFlow": "USER_PASSWORD_AUTH",
   "AuthParameters": { 
      "USERNAME" : "testuser",
      "PASSWORD" : "[User's password]"
   },
   "ClientId": "1example23456789"
}
```

Para fazer login de um usuário em um aplicativo do lado do servidor com autenticação por nome de usuário e senha, configure o corpo da solicitação da seguinte maneira. [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) Sua inscrição deve assinar essa solicitação com AWS as credenciais. Esse conjunto de parâmetros é o mínimo necessário para fazer login. Parâmetros adicionais estão disponíveis.

```
{
   "AuthFlow": "ADMIN_USER_PASSWORD_AUTH",
   "AuthParameters": { 
      "USERNAME" : "testuser",
      "PASSWORD" : "[User's password]"
   },
   "ClientId": "1example23456789"
}
```

O Amazon Cognito responde a solicitações bem-sucedidas com tokens ou um desafio adicional obrigatório, como autenticação multifator (MFA).

------

## Fazer login com senhas persistentes e carga útil segura
<a name="amazon-cognito-user-pools-authentication-flow-methods-srp"></a>

Outra forma dos métodos de login com nome de usuário e senha em grupos de usuários é com o protocolo de senha remota segura (SRP). Essa opção envia uma prova de conhecimento de uma senha (um hash de senha e um salt) que o grupo de usuários pode verificar. Sem nenhuma informação secreta legível na solicitação ao Amazon Cognito, a aplicação é a única entidade que processa as senhas inseridas pelos usuários. A autenticação SRP envolve cálculos matemáticos melhor executados por um componente existente que você pode importar no SDK. A SRP é geralmente implementada em aplicações do lado do cliente, como aplicativos móveis. Para obter mais informações sobre o protocolo, consulte [The Stanford SRP Homepage](http://srp.stanford.edu/). A [Wikipedia](https://en.wikipedia.org/wiki/Secure_Remote_Password_protocol) também tem recursos e exemplos. [Uma variedade de bibliotecas públicas](https://en.wikipedia.org/wiki/Secure_Remote_Password_protocol#Implementations) estão disponíveis para realizar os cálculos de SRP para fluxos de autenticação.

A initiate-challenge-respond sequência da autenticação do Amazon Cognito valida os usuários e suas senhas com o SRP. É necessário configurar o grupo de usuários e o cliente da aplicação para oferecer suporte à autenticação SRP e, em seguida, implementar a lógica das solicitações de login e das respostas do desafio na aplicação. Suas bibliotecas de SRP podem gerar números aleatórios e valores calculados que demonstram ao grupo de usuários que você possui a senha de um usuário. Sua aplicação preenche esses valores calculados nos campos `AuthParameters` e `ChallengeParameters` formatados em JSON e nas operações de API e métodos de SDK para autenticação de grupos de usuários do Amazon Cognito.

------
#### [ Activate SRP sign-in ]

Para ativar a [autenticação baseada em clientes](authentication-flows-selection-sdk.md#authentication-flows-selection-client) com nome de usuário e SRP, configure o cliente da aplicação para permitir isso. No console do Amazon Cognito, navegue até o menu **Clientes da aplicação** em **Aplicações** na configuração do grupo de usuários. Para permitir o login com SRP em uma aplicação nativa ou um aplicativo móvel do lado do cliente, edite um cliente da aplicação e selecione **Fazer login com senha remota segura (SRP): ALLOW\$1USER\$1SRP\$1AUTH** em **Fluxos de autenticação**.

Para ativar a [autenticação baseada em opções](authentication-flows-selection-sdk.md#authentication-flows-selection-choice) com nome de usuário e SRP, edite o cliente da aplicação e selecione **Login baseado em opções: ALLOW\$1USER\$1AUTH**.

![\[Uma captura de tela do console do Amazon Cognito que ilustra a escolha de fluxos de autenticação por senha remota segura para um cliente da aplicação. As opções ALLOW_USER_SRP_AUTH e ALLOW_USER_AUTH foram selecionadas.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/screenshot-choose-SRP-and-user-auth.png)


Para verificar se a autenticação por SRP está disponível em fluxos de autenticação baseada em opções, navegue até o menu **Fazer login** e revise a seção em **Opções para login baseado em opções**. Você pode fazer login com autenticação por SRP se a **senha** estiver visível em **Opções disponíveis**. A opção **Senha** inclui as variantes de autenticação por nome de usuário e senha em texto simples e por SRP.

![\[Uma captura de tela do console do Amazon Cognito que ilustra a opção de autenticação por senha na configuração de login baseado em opções do USER_AUTH para um grupo de usuários. A opção Senha é exibida como ativa.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/screenshot-password-flow-in-user-auth.png)


Configure `ExplicitAuthFlows` com suas opções username-and-password de autenticação preferidas em uma [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)solicitação [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html)or.

```
"ExplicitAuthFlows": [ 
   "ALLOW_USER_SRP_AUTH",
   "ALLOW_USER_AUTH"
]
```

Em uma [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)solicitação [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)or, configure `Policies` com os fluxos de autenticação com base em opções que você deseja oferecer suporte. O valor `PASSWORD` em `AllowedFirstAuthFactors` inclui as opções de fluxo de autenticação por senha de texto simples e SRP.

```
"Policies": {
   "SignInPolicy": {
      "AllowedFirstAuthFactors": [
         "PASSWORD",
         "EMAIL_OTP",
         "WEB_AUTHN"
      ]
   }
}
```

------
#### [ Choice-based sign-in with SRP ]

Para inscrever um usuário em um aplicativo com autenticação de nome de usuário e senha com SRP, configure o corpo da sua solicitação [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)ou [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)da seguinte forma. Essa solicitação de login será bem-sucedida ou continuará até o próximo desafio se o usuário atual for elegível para a autenticação por nome de usuário e senha. Caso contrário, ela responderá com uma lista de desafios de autenticação de fator primário disponíveis. Esse conjunto de parâmetros é o mínimo necessário para fazer login. Parâmetros adicionais estão disponíveis.

```
{
   "AuthFlow": "USER_AUTH",
   "AuthParameters": { 
      "USERNAME" : "testuser",
      "PREFERRED_CHALLENGE" : "PASSWORD_SRP",
      "SRP_A" : "[g^a % N]"
   },
   "ClientId": "1example23456789"
}
```

Você também pode omitir o valor `PREFERRED_CHALLENGE` e receber uma resposta contendo uma lista de fatores de login elegíveis para o usuário.

```
{
   "AuthFlow": "USER_AUTH",
   "AuthParameters": { 
      "USERNAME" : "testuser"
   },
   "ClientId": "1example23456789"
}
```

Se você não enviou um desafio preferencial ou o usuário enviado não for elegível para o desafio preferencial, o Amazon Cognito retornará uma lista de opções em `AvailableChallenges`. Quando `AvailableChallenges` inclui um `ChallengeName` de`PASSWORD_SRP`, você pode continuar a autenticação com uma resposta [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)ou [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)desafiar no formato a seguir. Você deve transmitir um parâmetro `Session` que associe a resposta do desafio à resposta da API à solicitação inicial de login. Esse conjunto de parâmetros é o mínimo necessário para fazer login. Parâmetros adicionais estão disponíveis.

```
{
   "ChallengeName": "PASSWORD_SRP",
   "ChallengeResponses": { 
      "USERNAME" : "testuser",
      "SRP_A" : "[g^a % N]"
   },
   "ClientId": "1example23456789",
   "Session": "[Session ID from the previous response"
}
```

O Amazon Cognito responde a solicitações de desafio preferencial elegíveis e respostas do desafio `PASSWORD_SRP` com um desafio `PASSWORD_VERIFIER`. Seu cliente deve concluir os cálculos do SRP e responder ao desafio em uma [RespondToAuthChallenge[AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)solicitação.

```
{
   "ChallengeName": "PASSWORD_VERIFIER",
   "ChallengeResponses": { 
      "PASSWORD_CLAIM_SIGNATURE" : "string",
      "PASSWORD_CLAIM_SECRET_BLOCK" : "string",
      "TIMESTAMP" : "string"
   },
   "ClientId": "1example23456789",
   "Session": "[Session ID from the previous response]"
}
```

Em uma resposta bem-sucedida do desafio `PASSWORD_VERIFIER`, o Amazon Cognito emite tokens ou outro desafio obrigatório, como a autenticação multifator (MFA).

------
#### [ Client-based sign-in with SRP ]

A autenticação SRP é mais comum na autenticação do lado do cliente do que na autenticação do lado do servidor. No entanto, você pode usar a autenticação SRP com [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)e. [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) Para conectar um usuário a uma aplicação, configure o corpo da solicitação `InitiateAuth` ou `AdminInitiateAuth` da forma a seguir. Esse conjunto de parâmetros é o mínimo necessário para fazer login. Parâmetros adicionais estão disponíveis.

O cliente gera `SRP_A` por meio de um gerador módulo N *g* elevado à potência de um inteiro aleatório secreto *a*.

```
{
   "AuthFlow": "USER_SRP_AUTH",
   "AuthParameters": { 
      "USERNAME" : "testuser",
      "SRP_A" : "[g^a % N]"
   },
   "ClientId": "1example23456789"
}
```

O Amazon Cognito responde com um desafio `PASSWORD_VERIFIER`. Seu cliente deve concluir os cálculos do SRP e responder ao desafio em uma [RespondToAuthChallenge[AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)solicitação.

```
{
   "ChallengeName": "PASSWORD_VERIFIER",
   "ChallengeResponses": { 
      "PASSWORD_CLAIM_SIGNATURE" : "string",
      "PASSWORD_CLAIM_SECRET_BLOCK" : "string",
      "TIMESTAMP" : "string"
   },
   "ClientId": "1example23456789",
   "Session": "[Session ID from the previous response]"
}
```

Em uma resposta bem-sucedida do desafio `PASSWORD_VERIFIER`, o Amazon Cognito emite tokens ou outro desafio obrigatório, como a autenticação multifator (MFA).

------

## Fazer login sem senha com senhas de uso único
<a name="amazon-cognito-user-pools-authentication-flow-methods-passwordless"></a>

As senhas podem ser perdidas ou roubadas. Talvez você queira verificar somente se seus usuários têm acesso a um endereço de e-mail, número de telefone ou aplicação autenticadora verificado. A solução para isso é o login *sem senha*. A aplicação pode solicitar que os usuários insiram o nome de usuário, o endereço de e-mail ou o número de telefone. O Amazon Cognito então gera uma senha de uso único (OTP), um código que eles devem confirmar. Um código bem-sucedido conclui a autenticação.

Os fluxos de autenticação de senha única (OTP) não são compatíveis com a autenticação multifator (MFA) necessária em seu grupo de usuários. A autenticação por chave de acesso com verificação do usuário pode atender aos requisitos de MFA quando você configura o. `FactorConfiguration` `MULTI_FACTOR_WITH_USER_VERIFICATION` Se o MFA for opcional em seu grupo de usuários, os usuários que ativaram o MFA não poderão fazer login com um primeiro fator OTP. Usuários que não têm uma preferência de MFA em um grupo de usuários com MFA opcional podem fazer login sem senha. Para obter mais informações, consulte [Informações importantes sobre a MFA de grupo de usuários](user-pool-settings-mfa.md#user-pool-settings-mfa-prerequisites).

Quando um usuário insere corretamente um código recebido por SMS ou e-mail como parte da autenticação sem senha, além de autenticar o usuário, o grupo de usuários marca o atributo de endereço de e-mail ou número de telefone não verificado do usuário como verificado. O status do usuário também muda de `UNCONFIRMED` para `CONFIRMED`, independentemente de você ter configurado o grupo de usuários para [verificar automaticamente](signing-up-users-in-your-app.md) endereços de e-mail ou números de telefone.

**Novas opções com login sem senha**  
Quando você ativa a autenticação sem senha no grupo de usuários, o funcionamento de alguns fluxos de usuários é alterado.

1. Os usuários podem se cadastrar sem uma senha e escolher um fator sem senha ao fazer login. Também é possível criar usuários sem senhas como administrador.

1. Os usuários que você [importa por meio de um arquivo CSV](cognito-user-pools-using-import-tool.md) podem fazer login imediatamente com um fator sem senha. Eles não precisam definir uma senha antes de fazer login.

1. Os usuários que não têm uma senha podem enviar solicitações de [ChangePassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ChangePassword.html)API sem o `PreviousPassword` parâmetro.

**Login automático com OTPs**  
Os usuários que se inscreverem e confirmarem suas contas de usuário por e-mail ou mensagem SMS OTPs podem fazer login automaticamente com o fator sem senha que corresponde à mensagem de confirmação. Na IU do login gerenciado, os usuários que confirmam suas contas e estão elegíveis para o login por OTP com o método de entrega do código de confirmação passam automaticamente para o primeiro login após fornecerem o código. Em seu aplicativo personalizado com um AWS SDK, transmita os seguintes parâmetros para uma [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)operação or. [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)
+ O `Session` parâmetro da resposta da [ConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html)API como parâmetro de `Session` solicitação.
+ Um [AuthFlow](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-AuthFlow)de`USER_AUTH`.

Você pode transmitir um [PREFERRED\$1CHALLENGE](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-AuthParameters) de `EMAIL_OTP` ou `SMS_OTP`, mas não é obrigatório. O parâmetro `Session` fornece prova de autenticação e o Amazon Cognito o ignora `AuthParameters` quando você transmite um código de sessão válido.

A operação de login retorna a resposta que indica a autenticação bem-sucedida [AuthenticationResult](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AuthenticationResultType.html), sem desafios adicionais se as seguintes condições forem verdadeiras.
+ O código `Session` é válido e não expirou.
+ O usuário é elegível para o método de autenticação por OTP.

------
#### [ Activate passwordless sign-in ]

**Console**  
Para ativar o login sem senha, configure o grupo de usuários para permitir o login primário com um ou mais tipos sem senha e, em seguida, configure o cliente da aplicação para permitir o fluxo `USER_AUTH`. No console do Amazon Cognito, navegue até o menu **Fazer login** em **Autenticação** na configuração do grupo de usuários. Edite **Opções para login baseado em opções** e selecione **Senha única para mensagem de e-mail** ou **Senha única para mensagem SMS**. É possível ativar as duas opções. Salve as alterações.

Navegue até o menu **Clientes da aplicação** e escolha um cliente ou crie um. Clique em **Editar** e selecione **Selecionar um tipo de autenticação no login: ALLOW\$1USER\$1AUTH**.

**API/SDK**  
Na API de grupos de usuários, configure `SignInPolicy` com as opções sem senha apropriadas em uma solicitação [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)or [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html).

```
"SignInPolicy": { 
    "AllowedFirstAuthFactors": [ 
        "EMAIL_OTP",
        "SMS_OTP"
    ]
}
```

Configure seu cliente de aplicativo `ExplicitAuthFlows` com a opção necessária em uma [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)solicitação [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html)ou.

```
"ExplicitAuthFlows": [ 
   "ALLOW_USER_AUTH"
]
```

------
#### [ Sign in with passwordless ]

O login sem senha não tem uma [base de cliente](authentication-flows-selection-sdk.md#authentication-flows-selection-client) `AuthFlow` que você possa especificar e. [InitiateAuth[AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) A autenticação OTP só está disponível na [opção baseada](authentication-flows-selection-sdk.md#authentication-flows-selection-choice) em`USER_AUTH`, onde você pode solicitar uma opção `AuthFlow` de login preferencial ou escolher a opção sem senha na de um usuário. [AvailableChallenges](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-response-AvailableChallenges) Para conectar um usuário a uma aplicação, configure o corpo da solicitação `InitiateAuth` ou `AdminInitiateAuth` da forma a seguir. Esse conjunto de parâmetros é o mínimo necessário para fazer login. Parâmetros adicionais estão disponíveis.

Neste exemplo, não sabemos como o usuário deseja fazer login. Se adicionarmos um parâmetro `PREFERRED_CHALLENGE` e o desafio preferencial estiver disponível para o usuário, o Amazon Cognito responderá com esse desafio.

```
{
   "AuthFlow": "USER_AUTH",
   "AuthParameters": { 
      "USERNAME" : "testuser"
   },
   "ClientId": "1example23456789"
}
```

Em vez disso, você pode adicionar `"PREFERRED_CHALLENGE": "EMAIL_OTP"` ou `"PREFERRED_CHALLENGE": "SMS_OTP"` a `AuthParameters` nesse exemplo. Se o usuário for elegível para esse método preferencial, o grupo de usuários enviará imediatamente um código para o endereço de e-mail ou número de telefone do usuário e retornará `"ChallengeName": "EMAIL_OTP"` ou `"ChallengeName": "SMS_OTP"`.

Se você não especificar um desafio preferencial, o Amazon Cognito responderá com um parâmetro `AvailableChallenges`.

```
{
   "AvailableChallenges": [ 
      "EMAIL_OTP", 
      "SMS_OTP",
      "PASSWORD"
    ],
   "Session": "[Session ID]"
}
```

Esse usuário é elegível para login sem senha com OTP por e-mail, OTP por SMS e nome de usuário e senha. A aplicação pode solicitar que o usuário faça a seleção ou pode fazer uma seleção com base na lógica interna. Em seguida, ele prossegue com uma [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)solicitação [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)or que seleciona o desafio. Suponha que o usuário queira concluir a autenticação sem senha com uma OTP enviada por e-mail.

```
{
   "ChallengeName": "SELECT_CHALLENGE",
   "ChallengeResponses": { 
      "USERNAME" : "testuser",
      "ANSWER" : "EMAIL_OTP" 
   },
   "ClientId": "1example23456789",
   "Session": "[Session ID from the previous response]"
}
```

O Amazon Cognito responde com um desafio `EMAIL_OTP` e envia um código para o endereço de e-mail verificado do usuário. Sua aplicação deve então responder novamente a esse desafio.

Essa também seria a próxima resposta do desafio se você solicitasse `EMAIL_OTP` como `PREFERRED_CHALLENGE`.

```
{
   "ChallengeName": "EMAIL_OTP",
   "ChallengeResponses": {
      "USERNAME" : "testuser", 
      "EMAIL_OTP_CODE" : "123456" 
   },
   "ClientId": "1example23456789",
   "Session": "[Session ID from the previous response]"
}
```

------

## Login sem senha com chaves de acesso WebAuthn
<a name="amazon-cognito-user-pools-authentication-flow-methods-passkey"></a>

As chaves de acesso são seguras e impõem um nível de esforço relativamente baixo aos usuários. O login com chave de acesso usa *autenticadores*, dispositivos externos que permitem a autenticação dos usuários. Senhas comuns expõem os usuários a vulnerabilidades como phishing, adivinhação de senhas e roubo de credenciais. Com as chaves de acesso, a aplicação pode se beneficiar de medidas de segurança avançadas em telefones celulares e outros dispositivos conectados ou integrados a sistemas de informação. Um fluxo de trabalho comum de login com chave de acesso começa com uma chamada para o dispositivo que invoca o gerenciador de senhas ou *credenciais*, por exemplo, o Keychain do iOS ou o gerenciador de senhas do Google Chrome. O gerenciador de credenciais do dispositivo solicita que o usuário selecione uma chave de acesso e a autorize com uma credencial existente ou um mecanismo de desbloqueio do dispositivo. Os telefones modernos têm leitores faciais, leitores de impressão digital, padrões de desbloqueio e outros mecanismos, alguns dos quais satisfazem simultaneamente os princípios de *algo que você sabe* e *algo que você tem* da autenticação forte. No caso da autenticação por chave de acesso com biometria, as chaves de acesso representam *algo que você é*.

Você pode querer substituir as senhas pela autenticação por impressão digital, reconhecimento facial ou chave de segurança. Isso é *chave* de acesso ou *WebAuthn*autenticação. É comum que os desenvolvedores de aplicações permitam que os usuários cadastrem um dispositivo biométrico após o primeiro login com senha. Com os grupos de usuários do Amazon Cognito, sua aplicação pode configurar essa opção de login para os usuários. A autenticação por chave de acesso pode atender aos requisitos de autenticação multifator (MFA) quando seu grupo de usuários estiver configurado como. `FactorConfiguration` `MULTI_FACTOR_WITH_USER_VERIFICATION` Nessa configuração, a autenticação por chave de acesso com verificação do usuário conta como autenticação multifatorial.

Os fluxos de autenticação de senha única (OTP) não são compatíveis com a autenticação multifator (MFA) necessária em seu grupo de usuários. A autenticação por chave de acesso com verificação do usuário pode atender aos requisitos de MFA quando você configura o. `FactorConfiguration` `MULTI_FACTOR_WITH_USER_VERIFICATION` Se o MFA for opcional em seu grupo de usuários, os usuários que ativaram o MFA não poderão fazer login com um primeiro fator OTP. Usuários que não têm uma preferência de MFA em um grupo de usuários com MFA opcional podem fazer login sem senha. Para obter mais informações, consulte [Informações importantes sobre a MFA de grupo de usuários](user-pool-settings-mfa.md#user-pool-settings-mfa-prerequisites).

### O que são chaves de acesso?
<a name="amazon-cognito-user-pools-authentication-flow-methods-passkey-what-are"></a>

As chaves de acesso simplificam a experiência do usuário, eliminando a necessidade de lembrar senhas complexas ou OTPs digitá-las. As chaves de acesso são baseadas WebAuthn e CTAP2 padrões elaborados pelo [World Wide Web Consortium (W3C) e pela FIDO](https://www.w3.org/TR/webauthn-3/) (Fast Identity Online) Alliance. *Os navegadores e plataformas implementam esses padrões, fornecem aplicativos web ou móveis APIs para iniciar um processo de registro ou autenticação de chave de acesso e também uma interface de usuário para o usuário selecionar e interagir com um autenticador de chave de acesso.*

Quando um usuário registra um autenticador em um site ou aplicativo, o autenticador cria um par de chaves público-privado. WebAuthn navegadores e plataformas enviam a chave pública para o back-end do aplicativo ou site. O autenticador mantém a chave privada, a chave IDs e os metadados sobre o usuário e o aplicativo. Quando o usuário deseja se autenticar na aplicação registrada com seu autenticador registrado, a aplicação gera um desafio aleatório. A resposta a esse desafio é a assinatura digital do desafio gerada com a chave privada do autenticador dessa aplicação e usuário, além de metadados relevantes. O navegador ou a plataforma da aplicação recebe a assinatura digital e a envia para o backend da aplicação. A aplicação então valida a assinatura com a chave pública armazenada.

**nota**  
Sua aplicação não recebe nenhum segredo de autenticação que os usuários forneçam ao autenticador, nem recebe informações sobre a chave privada.

Veja a seguir alguns dos exemplos e recursos dos autenticadores atualmente disponíveis no mercado. Um autenticador pode atender a uma ou a todas estas categorias.
+ Alguns autenticadores realizam a *verificação de usuário* com fatores como um PIN, entrada biométrica com reconhecimento facial/impressão digital ou uma senha antes de conceder acesso, garantindo que somente o usuário legítimo possa autorizar ações. Outros autenticadores não têm nenhum recurso de verificação de usuário, e alguns podem ignorar a verificação quando uma aplicação não a exige.
+ Alguns autenticadores, por exemplo, tokens YubiKey de hardware, são portáteis. Eles se comunicam com dispositivos por meio de conexões USB, Bluetooth ou NFC. Alguns autenticadores são locais e vinculados a uma plataforma, como o Windows Hello em um PC ou o Face ID em um iPhone. Um autenticador vinculado ao dispositivo pode ser transportado pelo usuário se for pequeno o suficiente, como um dispositivo móvel. Às vezes, os usuários podem conectar o autenticador de hardware a várias plataformas diferentes com comunicação sem fio. Por exemplo, usuários em navegadores de desktop podem usar seu smartphone como autenticador de chave de acesso ao escanear um código QR.
+ Algumas chaves de acesso vinculadas à plataforma são sincronizadas com a nuvem, permitindo seu uso em vários locais. Por exemplo, as chaves de acesso do Face ID nos iPhones sincronizam os metadados da chave de acesso com as contas da Apple dos usuários no iCloud Keychain. Essas chaves de acesso garantem uma autenticação perfeita em todos os dispositivos Apple, em vez de exigir que os usuários registrem cada dispositivo individualmente. Aplicações de autenticação baseadas em software, como 1Password, Dashlane e Bitwarden, sincronizam chaves de acesso em todas as plataformas nas quais o usuário instalou a aplicação.

Na WebAuthn terminologia, sites e aplicativos são partes *confiáveis.* Cada chave de acesso está associada a um ID de parte confiável específico, um identificador unificado que representa os sites ou aplicações que aceitam a autenticação por chave de acesso. Os desenvolvedores devem selecionar cuidadosamente o ID de parte confiável para garantir o escopo correto de autenticação. Um ID de parte confiável típico é o nome de domínio raiz de um servidor web. Uma chave de acesso com essa especificação de ID de parte confiável pode autenticar nesse domínio e em seus subdomínios. Navegadores e plataformas negam a autenticação por chave de acesso quando o URL do site que o usuário deseja acessar não corresponde ao ID de parte confiável. Da mesma forma, para aplicativos móveis, uma chave de acesso só pode ser usada se o caminho da aplicação estiver presente nos arquivos de associação `.well-known` que a aplicação disponibiliza no caminho indicado pelo ID de parte confiável.

As chaves de acesso são *detectáveis*. Elas podem ser reconhecidas e usadas automaticamente por um navegador ou plataforma sem exigir que o usuário insira um nome de usuário. Quando um usuário visita um site ou aplicação compatível com a autenticação por chave de acesso, ele pode selecionar uma chave de acesso em uma lista que o navegador ou a plataforma já conhece, ou pode escanear um código QR.

### Como o Amazon Cognito implementa a autenticação por chave de acesso?
<a name="amazon-cognito-user-pools-authentication-flow-methods-passkey-cognito"></a>

As chaves de acesso são um recurso opcional disponível em todos os [planos de recursos](cognito-sign-in-feature-plans.md), exceto no **Lite**. Elas estão disponíveis somente no [fluxo de autenticação baseada em opções](authentication-flows-selection-sdk.md#authentication-flows-selection-choice). Com o [login gerenciado](authentication-flows-selection-managedlogin.md), o Amazon Cognito lida com a lógica da autenticação por chave de acesso. Você também pode usar a [API de grupos de usuários do Amazon Cognito AWS SDKs para](#amazon-cognito-user-pools-authentication-flow-methods) fazer a autenticação por chave de acesso no back-end do seu aplicativo.

O Amazon Cognito reconhece chaves de acesso criadas usando um dos dois algoritmos criptográficos assimétricos, ES256 (-7) e (-257). RS256 A maioria dos autenticadores é compatível com os dois algoritmos. Por padrão, os usuários podem configurar qualquer tipo de autenticador, por exemplo, tokens de hardware, smartphones móveis e aplicações autenticadoras de software. No momento, o Amazon Cognito não é compatível com a aplicação de [atestados](https://csrc.nist.gov/glossary/term/attestation).

No grupo de usuários, é possível configurar a verificação de usuário como preferencial ou obrigatória. Essa configuração é definida como preferencial por padrão em solicitações de API que não fornecem um valor, e é selecionada por padrão no console do Amazon Cognito. Quando você define a verificação de usuário como preferencial, os usuários podem configurar autenticadores que não têm o recurso de verificação de usuário, e as operações de registro e autenticação podem ser bem-sucedidas sem a verificação de usuário. Para exigir a verificação de usuário no registro e na autenticação por chave de acesso, altere essa configuração para obrigatória.

A definição do ID de parte confiável (RP) na configuração da chave de acesso é uma decisão importante. Quando você não especifica o contrário e a [versão de marca do domínio](managed-login-branding.md) é login gerenciado, o grupo de usuários considera, por padrão, o nome do [domínio personalizado](cognito-user-pools-add-custom-domain.md) como o ID de RP. Se você não tiver um domínio personalizado e não especificar o contrário, o grupo de usuários utilizará como padrão o ID de RP do [domínio de prefixo](cognito-user-pools-assign-domain-prefix.md). Você também pode configurar o ID de RP para ser qualquer nome de domínio que não esteja na lista de sufixos públicos (PSL). A entrada do ID de RP se aplica ao registro e à autenticação por chave de acesso no login gerenciado e na autenticação do SDK. A chave de acesso só funciona em aplicativos móveis se o Amazon Cognito conseguir localizar um arquivo de associação `.well-known` com o ID de RP como domínio. Como prática recomendada, determine e defina o valor do ID de parte confiável antes que o site ou a aplicação esteja disponível publicamente. Se você alterar o ID de RP, os usuários deverão se registrar novamente com o novo ID de RP.

Cada usuário pode registrar até vinte chaves de acesso. O registro de uma chave de acesso só é possível após o usuário ter feito login no grupo de usuários pelo menos uma vez. O login gerenciado elimina grande parte do esforço necessário para o registro de chaves de acesso. Quando você habilita a autenticação por chave de acesso para um grupo de usuários e um cliente da aplicação, o grupo de usuários com um domínio de login gerenciado lembra os usuários finais de registrarem uma chave de acesso após se cadastrarem em uma nova conta. Você também pode invocar os navegadores dos usuários a qualquer momento para direcioná-los a uma página de login gerenciado para registro da chave de acesso. Os usuários devem fornecer um nome de usuário antes que o Amazon Cognito possa iniciar a autenticação por chave de acesso. O login gerenciado lida com isso automaticamente. A página de login solicita um nome de usuário, valida se o usuário tem pelo menos uma chave de acesso registrada e, em seguida, solicita o login por chave de acesso. Da mesma forma, as aplicações baseados em SDK devem solicitar um nome de usuário e fornecê-lo na solicitação de autenticação.

Quando você configura a autenticação do grupo de usuários com chaves de acesso e tem um domínio personalizado e um domínio de prefixo, o ID de RP usa como padrão o nome de domínio totalmente qualificado (FQDN) do domínio personalizado. Para definir um domínio de prefixo como o ID de RP no console do Amazon Cognito, exclua seu domínio personalizado ou insira o FQDN do domínio de prefixo como um **domínio de terceiros**.

------
#### [ Activate passkey sign-in ]

**Console**  
Para ativar o login com chaves de acesso, configure o grupo de usuários para permitir o login primário com um ou mais tipos sem senha e, em seguida, configure o cliente da aplicação para permitir o fluxo `USER_AUTH`. No console do Amazon Cognito, navegue até o menu **Fazer login** em **Autenticação** na configuração do grupo de usuários. Edite **Opções para login baseado em opções** e adicione **Chave de acesso** à lista **Opções disponíveis**.

Navegue até o menu **Métodos de autenticação** e edite **Chave de acesso**.
+ **Verificação de usuário** é a configuração para determinar se o grupo de usuários exige dispositivos com chave de acesso que realizem verificações adicionais para garantir que o usuário atual esteja autorizado a usar uma chave de acesso. Para incentivar os usuários a configurar um dispositivo com a verificação de usuário, mas não a tornar obrigatória, selecione **Preferencial**. Para oferecer suporte somente a dispositivos com verificação de usuário, selecione **Obrigatório**. Para obter mais informações, consulte [User verification](https://www.w3.org/TR/webauthn-2/#user-verification) em w3.org.
+ **Domínio para ID de parte confiável** é o identificador que a aplicação transmitirá nas solicitações de registro de chave de acesso dos usuários. Ele define a meta da relação de confiança com o emissor das chaves de acesso dos usuários. O ID de parte confiável pode ser: o domínio do seu grupo de usuários, se   
**Domínio Cognito**  
O [domínio de prefixo](cognito-user-pools-assign-domain-prefix.md) do Amazon Cognito do seu grupo de usuários.  
**Domínio personalizado**  
O [domínio personalizado](cognito-user-pools-add-custom-domain.md) do seu grupo de usuários.  
**Domínio de terceiros**  
O domínio para aplicações que não usam as páginas de login gerenciado dos grupos de usuários. Essa configuração geralmente está associada a grupos de usuários que não têm um [domínio](cognito-user-pools-assign-domain.md) e realizam autenticação com um AWS SDK e a API de grupos de usuários no back-end.

Navegue até o menu **Clientes da aplicação** e escolha um cliente ou crie um. Clique em **Editar** e, em **Fluxos de autenticação**, selecione **Selecionar um tipo de autenticação no login: ALLOW\$1USER\$1AUTH**.

**API/SDK**  
Na API de grupos de usuários, configure `SignInPolicy` com as opções de chave de acesso apropriadas em uma [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)solicitação [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)or. A opção `WEB_AUTHN` para autenticação por chave de acesso deve ser acompanhada por pelo menos uma outra opção. O registro da chave de acesso requer uma sessão de autenticação existente.

```
"SignInPolicy": { 
    "AllowedFirstAuthFactors": [ 
        "PASSWORD",
        "WEB_AUTHN"
    ]
}
```

Configure sua preferência de verificação de usuário e ID de RP no `WebAuthnConfiguration` parâmetro de uma [SetUserPoolMfaConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserPoolMfaConfig.html#CognitoUserPools-SetUserPoolMfaConfig-request-WebAuthnConfiguration)solicitação. `RelyingPartyId`, o destino pretendido dos resultados da autenticação por chave de acesso, pode ser o domínio personalizado ou de prefixo do grupo de usuários ou um domínio de sua escolha.

```
"WebAuthnConfiguration": { 
   "RelyingPartyId": "example.auth.us-east-1.amazoncognito.com",
   "UserVerification": "preferred",
   "FactorConfiguration": "SINGLE_FACTOR"
}
```

Configure seu cliente de aplicativo `ExplicitAuthFlows` com a opção necessária em uma [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)solicitação [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html)ou.

```
"ExplicitAuthFlows": [ 
   "ALLOW_USER_AUTH"
]
```

------
#### [ Register a passkey (managed login) ]

O login gerenciado gerencia o registro das chaves de acesso dos usuários. Quando a autenticação por chave de acesso está ativa no grupo de usuários, o Amazon Cognito solicita que os usuários configurem uma chave de acesso ao se registrarem em uma nova conta.

O Amazon Cognito não solicita que os usuários configurem uma chave de acesso quando eles já se cadastraram e não configuraram uma chave de acesso, ou se você criou a conta deles como administrador. Os usuários nesse estado devem fazer login com outro fator, como uma senha ou uma OTP sem senha, antes de poderem registrar uma chave de acesso.

**Como registrar uma chave de acesso**

1. Direcione o usuário para a [página de login](authorization-endpoint.md).

   ```
   https://auth.example.com/oauth2/authorize/?client_id=1example23456789&response_type=code&scope=email+openid+phone&redirect_uri=https%3A%2F%2Fwww.example.com
   ```

1. Processe o resultado da autenticação do usuário. Neste exemplo, o Amazon Cognito o redireciona para `www.example.com` com um código de autorização que a aplicação troca por tokens.

1. Direcione o usuário para a página de registro de chave de acesso. O usuário terá um cookie de navegador que mantém a sessão ativa. O URL da chave de acesso aceita os parâmetros `client_id` e `redirect_uri`. O Amazon Cognito permite que somente usuários autenticados acessem essa página. Faça login do usuário com uma senha, uma OTP enviada por e-mail ou uma OTP enviada por SMS e, em seguida, invoque um URL que corresponda ao padrão a seguir.

   Você também pode adicionar outros parâmetros [Autorizar endpoint](authorization-endpoint.md)a essa solicitação, como `response_type` e `scope`.

   ```
   https://auth.example.com/passkeys/add?client_id=1example23456789&redirect_uri=https%3A%2F%2Fwww.example.com
   ```

------
#### [ Register a passkey (SDK) ]

Você registra as credenciais da chave de acesso com metadados em um objeto. [PublicKeyCreationOptions](https://www.w3.org/TR/webauthn-3/#dictdef-publickeycredentialcreationoptions) Você pode gerar esse objeto com as credenciais de um usuário conectado e apresentá-las em uma solicitação de API ao emissor da chave de acesso. O emissor retornará um objeto [RegistrationResponseJSON](https://www.w3.org/TR/webauthn-3/#dictdef-registrationresponsejson) que confirma o registro da chave de acesso.

Para iniciar o processo de registro da chave de acesso, conecte um usuário com uma opção de login existente. Autorize a solicitação de [StartWebAuthnRegistration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_StartWebAuthnRegistration.html)API [autorizada pelo token](authentication-flows-public-server-side.md#user-pool-apis-auth-unauth-token-auth) com o token de acesso do usuário atual. Veja a seguir o corpo de um exemplo de solicitação `GetWebAuthnRegistrationOptions`.

```
{
   "AccessToken": "eyJra456defEXAMPLE"
}
```

A resposta do grupo de usuários contém o objeto `PublicKeyCreationOptions`. Apresente esse objeto em uma solicitação de API para o emissor do usuário. Ele fornece informações como a chave pública e o ID de parte confiável. O emissor responderá com um objeto `RegistrationResponseJSON`.

Apresente a resposta do registro em uma solicitação de [CompleteWebAuthnRegistration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CompleteWebAuthnRegistration.html)API, novamente autorizada com o token de acesso do usuário. Quando o grupo de usuários responder com uma resposta HTTP 200 com um corpo vazio, a chave de acesso do usuário estará registrada.

------
#### [ Sign in with a passkey ]

O login sem senha não tem um nome `AuthFlow` que você possa especificar e. [InitiateAuth[AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) Em vez disso, você deve declarar um `AuthFlow` de `USER_AUTH` e solicitar uma opção de login ou escolher a opção sem senha na resposta do grupo de usuários. Para conectar um usuário a uma aplicação, configure o corpo da solicitação `InitiateAuth` ou `AdminInitiateAuth` da forma a seguir. Esse conjunto de parâmetros é o mínimo necessário para fazer login. Parâmetros adicionais estão disponíveis.

Neste exemplo, sabemos que o usuário deseja fazer login com uma chave de acesso e adicionamos um parâmetro `PREFERRED_CHALLENGE`.

```
{
   "AuthFlow": "USER_AUTH",
   "AuthParameters": { 
      "USERNAME" : "testuser",
      "PREFERRED_CHALLENGE" : "WEB_AUTHN"
   },
   "ClientId": "1example23456789"
}
```

O Amazon Cognito responde com um desafio `WEB_AUTHN`. Sua aplicação deve responder a esse desafio. Inicie uma solicitação de login com o provedor da chave de acesso do usuário. Ele retornará um objeto [AuthenticationResponseJSON](https://www.w3.org/TR/webauthn-3/#dictdef-authenticationresponsejson).

```
{
   "ChallengeName": "WEB_AUTHN",
   "ChallengeResponses": {
      "USERNAME" : "testuser", 
      "CREDENTIAL" : "{AuthenticationResponseJSON}" 
   },
   "ClientId": "1example23456789",
   "Session": "[Session ID from the previous response]"
}
```

------

## MFA após o login
<a name="amazon-cognito-user-pools-authentication-flow-methods-mfa"></a>

Você pode configurar usuários que concluem o login com um fluxo de nome de usuário e senha para serem solicitados a fazer uma verificação adicional com uma senha de uso único enviada por e-mail, SMS ou uma aplicação geradora de código. O MFA é diferente do login sem senha com senhas de uso único. No entanto, as chaves de acesso com verificação de usuário podem atender aos requisitos de MFA quando você `FactorConfiguration` configura `MULTI_FACTOR_WITH_USER_VERIFICATION` como em seu grupo de usuários. `WebAuthnConfiguration` Para fluxos baseados em senha, o MFA em grupos de usuários é um modelo de resposta a desafios em que um usuário primeiro demonstra que sabe a senha e, em seguida, demonstra que tem acesso ao dispositivo registrado de segundo fator.

**Recursos de implementação**
+ [Adicionar MFA a um grupo de usuários](user-pool-settings-mfa.md)

## Tokens de atualização
<a name="amazon-cognito-user-pools-authentication-flow-methods-refresh"></a>

Sua aplicação utiliza *tokens de atualização* para manter os usuários conectados sem a necessidade de inserir suas credenciais novamente. As aplicações podem apresentar tokens de atualização ao grupo de usuários e trocá-los por novos tokens de ID e acesso. Com o token de atualização, você pode garantir que um usuário conectado ainda esteja ativo, obter informações de atributos atualizadas e atualizar os direitos de controle de acesso sem a intervenção do usuário.

**Recursos de implementação**
+ [Tokens de atualização](amazon-cognito-user-pools-using-the-refresh-token.md)

## Autenticação personalizada
<a name="amazon-cognito-user-pools-authentication-flow-methods-custom"></a>

Você pode querer configurar um método de autenticação para seus usuários que não esteja listado aqui. Você pode fazer isso com a *autenticação personalizada* usando acionadores do Lambda. Em uma sequência de funções do Lambda, o Amazon Cognito emite um desafio, faz uma pergunta que os usuários devem responder, verifica a precisão da resposta e determina se outro desafio deve ser emitido. As perguntas e respostas podem incluir perguntas de segurança, solicitações a um serviço CAPTCHA, solicitações a uma API de serviço de MFA externa ou tudo isso em sequência.

**Recursos de implementação**
+ [Acionadores do Lambda de desafio personalizado de autenticação](user-pool-lambda-challenge.md)

### Fluxo de autenticação personalizado
<a name="amazon-cognito-user-pools-custom-authentication-flow"></a>

Os grupos de usuários do Amazon Cognito também permitem usar fluxos de autenticação personalizados, os quais podem ajudar você a criar um modelo de autenticação baseado em desafio/resposta usando acionadores do AWS Lambda .

O fluxo de autenticação personalizado possibilita ciclos personalizados de desafio e resposta para atender a diferentes requisitos. O fluxo começa com uma chamada para a operação de API `InitiateAuth` que indica o tipo de autenticação que será usado e fornece todos os parâmetros de autenticação inicial. O Amazon Cognito responde à chamada do `InitiateAuth` com um dos seguintes tipos de informação: 
+ Um desafio para o usuário com uma sessão e parâmetros
+ Um erro se houver falha na autenticação do usuário.
+ ID, acesso e tokens de atualização, se os parâmetros fornecidos na chamada de `InitiateAuth` forem suficientes para que o usuário faça login. (Normalmente, o usuário ou a aplicação deve primeiro responder a um desafio, mas seu código personalizado deve determinar isso.)

 Se o Amazon Cognito responder à chamada `InitiateAuth` com um desafio, a aplicação reunirá mais entradas e chamará a operação `RespondToAuthChallenge`. Essa chamada fornece as respostas do desafio e repassa a sessão. O Amazon Cognito responde à chamada `RespondToAuthChallenge` de forma semelhante à chamada `InitiateAuth`. Se o usuário tiver feito login, o Amazon Cognito fornecerá tokens ou, se o usuário não estiver conectado, o Amazon Cognito apresentará outro desafio ou um erro. Se o Amazon Cognito retornar outro desafio, a sequência se repetirá e a aplicação chamará `RespondToAuthChallenge` até que o usuário faça login com êxito ou um erro seja retornado. Mais detalhes sobre as operações de API `InitiateAuth` e `RespondToAuthChallenge` são fornecidos na [documentação da API](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html). 

### Fluxo de autenticação personalizado e desafios
<a name="Custom-authentication-flow-and-challenges"></a>

Um aplicativo pode iniciar um fluxo de autenticação personalizado chamando `InitiateAuth` com `CUSTOM_AUTH` como o `Authflow`. Com um fluxo de autenticação personalizado, três acionadores do Lambda controlam os desafios e a verificação das respostas.
+ O acionador `DefineAuthChallenge` do Lambda usa como entrada uma matriz de sessão de desafios e respostas anteriores. Depois, ele gera o nome do próximo desafio e os boolianos que indicam se o usuário está autenticado e pode receber tokens. Esse acionador do Lambda é uma máquina de estado que controla o caminho do usuário por meio dos desafios.
+ O acionador `CreateAuthChallenge` do Lambda usa um nome de desafio como entrada e gera o desafio e os parâmetros para avaliar a resposta. Quando `DefineAuthChallenge` retorna `CUSTOM_CHALLENGE` como o próximo desafio, o fluxo de autenticação chama `CreateAuthChallenge`. O acionador `CreateAuthChallenge` do Lambda passa o próximo tipo de desafio no parâmetro de metadados de desafio.
+ A função do `VerifyAuthChallengeResponse` Lambda avalia a resposta e retorna um booleano para indicar se a resposta foi válida.

Um fluxo de autenticação personalizado também pode usar uma combinação de desafios integrados, como verificação de senha SRP e MFA por SMS. Ele pode usar desafios personalizados, como CAPTCHA ou perguntas secretas.

### Usar verificação de senha SRP no fluxo de autenticação personalizado
<a name="Using-SRP-password-verification-in-custom-authentication-flow"></a>

Para incluir a SRP em um fluxo de autenticação personalizado, você deve começar com ele.
+ Para iniciar a verificação de senha SRP em um fluxo personalizado, o aplicativo chama `InitiateAuth` com `CUSTOM_AUTH` como o `Authflow`. No mapa de `AuthParameters`, a solicitação de sua aplicação inclui `SRP_A:` (o valor de SRP A) e `CHALLENGE_NAME: SRP_A`.
+ O fluxo de `CUSTOM_AUTH` invoca o acionador do Lambda `DefineAuthChallenge` com uma sessão inicial de `challengeName: SRP_A` e `challengeResult: true`. Sua função do Lambda responde com `challengeName: PASSWORD_VERIFIER`, `issueTokens: false` e `failAuthentication: false`.
+  Depois, a aplicação deve chamar `RespondToAuthChallenge` com `challengeName: PASSWORD_VERIFIER` e os outros parâmetros necessários para a SRP no mapa `challengeResponses`. 
+ Se o Amazon Cognito verificar a senha, `RespondToAuthChallenge` invocará o acionador `DefineAuthChallenge` do Lambda com uma segunda sessão de `challengeName: PASSWORD_VERIFIER` e `challengeResult: true`. Nesse ponto, o acionador do Lambda `DefineAuthChallenge` pode responder com `challengeName: CUSTOM_CHALLENGE` para iniciar o desafio personalizado.
+ Se a MFA estiver habilitada para um usuário, depois que o Amazon Cognito verificar a senha, o usuário será desafiado a configurar ou fazer login com a MFA.

**nota**  
A página da Web de login hospedada do Amazon Cognito não pode ativar [Acionadores do Lambda de desafio personalizado de autenticação](user-pool-lambda-challenge.md).

Para obter mais informações sobre os acionadores do Lambda, incluindo o código de exemplo, consulte [Como personalizar fluxos de trabalho do grupo de usuários com acionadores do Lambda](cognito-user-pools-working-with-lambda-triggers.md).

## Fluxo de autenticação de migração de usuários
<a name="amazon-cognito-user-pools-user-migration-authentication-flow"></a>

Um acionador de migração de usuários do Lambda ajuda a migrar usuários de um sistema de gerenciamento de usuários herdado para seu grupo de usuários. Se você escolher o fluxo de autenticação `USER_PASSWORD_AUTH`, os usuários não terão que redefinir suas senhas durante a migração de usuários. Esse fluxo envia as senhas dos usuários para o serviço por uma conexão SSL criptografada durante a autenticação.

Quando você concluir a migração de todos os usuários, alterne os fluxos para o fluxo de SRP mais seguro. O fluxo de SRP não envia senhas pela rede.

Para saber mais sobre acionadores do Lambda, consulte [Como personalizar fluxos de trabalho do grupo de usuários com acionadores do Lambda](cognito-user-pools-working-with-lambda-triggers.md).

Para obter mais informações sobre como migrar usuários com um acionador do Lambda, consulte [Como importar usuários com um acionador do Lambda de migração de usuários](cognito-user-pools-import-using-lambda.md).

# Modelos de autorização para autenticação de API e SDK
<a name="authentication-flows-public-server-side"></a>

Ao iniciar o desenvolvimento da sua aplicação com a autenticação de grupos de usuários, você deve decidir qual modelo de autorização de API se adequa ao tipo da sua aplicação. Um modelo de autorização é um sistema para fornecer autorizações para fazer solicitações com os componentes de autenticação nas integrações de API e SDK dos grupos de usuários do Amazon Cognito. O Amazon Cognito tem três modelos de autorização: autorizado pelo IAM, público e autorizado por token.

Com solicitações autorizadas pelo IAM, a autorização provém de uma assinatura de um conjunto de credenciais do AWS IAM no cabeçalho `Authorization` de uma solicitação. Para aplicações do lado do servidor, essa prática protege as operações de autenticação com autorização do IAM. Com solicitações de autenticação públicas (não autenticadas), nenhuma autorização é necessária. Isso é adequado para aplicações do lado do cliente distribuídas aos usuários. Com operações autorizadas por token, normalmente implementadas em combinação com operações públicas, a autorização provém de um token de sessão ou de um token de acesso incluído no cabeçalho `Authorization` da solicitação. A autenticação do Amazon Cognito normalmente exige que você implemente duas ou mais operações de API em ordem, e as operações de API utilizadas dependem das características da sua aplicação. Clientes públicos, onde a aplicação é distribuída aos usuários, usam operações públicas, nas quais as solicitações de login não exigem autorização. As operações autorizadas por tokens mantêm a sessão dos usuários em aplicações públicas. Clientes do lado do servidor, onde a lógica da aplicação está hospedada em um sistema remoto, protegem as operações de autenticação com a autorização do IAM para solicitações de login. Os pares de operações de API a seguir e seus métodos de SDK correspondentes são mapeados para os modelos de autorização disponíveis.

Cada operação de autenticação pública tem alguma forma de equivalente do lado do servidor, por exemplo e. [UpdateUserAttributes[AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html) Enquanto as operações do lado do cliente são iniciadas pelo usuário e exigem confirmação, as operações do lado do servidor pressupõem que a alteração foi confirmada por um administrador do grupo de usuários e as alterações entram em vigor imediatamente. Neste exemplo, o Amazon Cognito envia uma mensagem com um código de confirmação para o usuário, e o token de acesso do usuário autoriza uma [VerifyUserAttribute](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html)solicitação que envia o código. A aplicação do lado do servidor pode definir imediatamente o valor de qualquer atributo, embora [considerações especiais se apliquem](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html#CognitoUserPools-AdminUpdateUserAttributes-request-UserAttributes) à alteração do valor de endereços de e-mail e números de telefone quando usados para login.

Para comparar a autenticação de API e ver uma lista completa das operações de API e seus modelos de autorização, consulte [Noções básicas sobre a autenticação de API, OIDC e páginas de login gerenciado](#user-pools-API-operations).

------
#### [ Client-side (public) authentication ]

Veja a seguir uma sequência típica de solicitações em uma aplicação do lado do cliente.

1. A [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)operação pública envia credenciais primárias, como nome de usuário e senha.

1. A [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)operação autorizada pelo token envia um token de *sessão* a partir da `InitiateAuth` resposta e da resposta a um desafio, por exemplo, MFA. A autorização do token de sessão indica solicitações que fazem parte dos ciclos de not-yet-complete autenticação.

1. A [ConfirmDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmDevice.html)operação autorizada pelo token envia um token de *acesso* e executa a operação de gravação de adicionar um dispositivo lembrado ao perfil do usuário. A autorização do token de acesso indica solicitações que são para operações de autoatendimento do usuário após a conclusão da autenticação.

Para obter mais informações, consulte [Opções de autenticação do lado do cliente](#amazon-cognito-user-pools-client-side-authentication-flow) e [Noções básicas sobre a autenticação de API, OIDC e páginas de login gerenciado](#user-pools-API-operations).

------
#### [ Server-side authentication ]

Veja a seguir uma sequência típica de solicitações de uma operação do lado do servidor. Cada solicitação tem um cabeçalho de autorização do [AWS Signature versão 4](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_sigv.html) assinado com as credenciais da máquina IAM emitidas para o servidor da aplicação.

1. A [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)operação envia credenciais primárias, como nome de usuário e senha.

1. [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)operação envia a resposta a um desafio, por exemplo, MFA.

1. A [AdminUpdateDeviceStatus](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateDeviceStatus.html)operação define a chave do dispositivo a partir da `AdminInitiateAuth` [resposta](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#API_AdminInitiateAuth_ResponseSyntax) conforme lembrada.

Para obter mais informações, consulte [Opções de autenticação do lado do servidor](#amazon-cognito-user-pools-server-side-authentication-flow) e [Noções básicas sobre a autenticação de API, OIDC e páginas de login gerenciado](#user-pools-API-operations).

------

Um usuário faz a autenticação respondendo a desafios sucessivos até que ela falhe ou o Amazon Cognito emita tokens para o usuário. Você pode repetir essas etapas com o Amazon Cognito, em um processo que inclui desafios diferentes, para comportar qualquer fluxo de autenticação personalizado.

**Topics**
+ [

## Opções de autenticação do lado do servidor
](#amazon-cognito-user-pools-server-side-authentication-flow)
+ [

## Opções de autenticação do lado do cliente
](#amazon-cognito-user-pools-client-side-authentication-flow)
+ [

## Noções básicas sobre a autenticação de API, OIDC e páginas de login gerenciado
](#user-pools-API-operations)
+ [

## Lista de operações de API agrupadas por modelo de autorização
](#user-pool-apis-auth-unauth)

## Opções de autenticação do lado do servidor
<a name="amazon-cognito-user-pools-server-side-authentication-flow"></a>

As aplicações Web e outras aplicações do *lado do servidor* implementam a autenticação em um servidor remoto que um cliente carrega em uma aplicação de exibição remota, como um navegador ou uma sessão SSH. As aplicações do lado do servidor geralmente têm as características a seguir.
+ Elas são criadas em uma aplicação instalada em um servidor em linguagens como Java, Ruby ou Node.js.
+ Elas se conectam a [clientes da aplicação](user-pool-settings-client-apps.md) de grupos de usuários que podem ter um segredo do cliente, chamados de *clientes confidenciais*.
+ Eles têm acesso às AWS credenciais.
+ Elas invocam o [login gerenciado](cognito-user-pools-managed-login.md) para autenticação ou usam operações autorizadas pelo IAM na API de grupos de usuários com um SDK da AWS .
+ Elas atendem clientes internos e podem atender clientes públicos.

As operações do lado do servidor com a API de grupos de usuários podem usar senhas, senhas de uso único ou chaves de acesso como o principal fator de login. Para aplicações no lado do servidor, a autenticação do grupo de usuários é semelhante à das aplicações no lado do cliente, exceto pelo seguinte:
+ O aplicativo do lado do servidor faz uma [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)solicitação de API. Essa operação requer AWS credenciais com permissões que incluem `cognito-idp:AdminInitiateAuth` e. `cognito-idp:AdminRespondToAuthChallenge` A operação retorna o desafio exigido ou o resultado da autenticação.
+ Quando o aplicativo recebe um desafio, ele faz uma solicitação de [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)API. A operação de API `AdminRespondToAuthChallenge` também requer credenciais da AWS .

*Para obter mais informações sobre a assinatura de solicitações da API do Amazon Cognito com AWS credenciais, consulte [Processo de assinatura do Signature versão 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) na AWS Referência geral.*

Na resposta `AdminInitiateAuth` `ChallengeParameters`, o atributo `USER_ID_FOR_SRP`, se estiver presente, incluirá o nome do usuário real, não um alias (como o endereço de e-mail ou o número de telefone). Na chamada para `AdminRespondToAuthChallenge`, nas `ChallengeResponses`, é necessário transmitir esse nome de usuário no parâmetro `USERNAME`. 

**nota**  
Como as implementações de administração de backend usam o fluxo de autenticação de administração, o fluxo não é compatível com dispositivos memorizados. Quando você ativa o rastreamento de dispositivo, a autenticação de administração é executada com êxito, mas qualquer chamada para atualizar o token de acesso falha.

## Opções de autenticação do lado do cliente
<a name="amazon-cognito-user-pools-client-side-authentication-flow"></a>

Aplicativos móveis e outros tipos de aplicações *do lado do cliente* são instalados nos dispositivos dos usuários e executam a lógica de autenticação e interface do usuário localmente. Eles geralmente têm as características a seguir.
+ Eles são desenvolvidos em linguagens como React Native, Flutter e Swift e implantados nos dispositivos do usuário.
+ Eles se conectam a [clientes da aplicação](user-pool-settings-client-apps.md) de grupos de usuários que não têm um segredo do cliente, chamados de *clientes públicos*.
+ Eles não têm acesso às AWS credenciais que autorizariam solicitações de API autorizadas pelo IAM.
+ Eles invocam o [login gerenciado](cognito-user-pools-managed-login.md) para autenticação ou usam operações públicas e autorizadas por token na API de grupos de usuários com um SDK. AWS 
+ Eles atendem clientes públicos e permitem que qualquer pessoa se cadastre e faça login.

As operações do lado do cliente com a API de grupos de usuários podem usar senhas, senhas de uso único ou chaves de acesso como o principal fator de login. O processo a seguir funciona para aplicativos do lado do cliente do usuário que você cria com [AWS Amplify](https://docs.amplify.aws/javascript/start/getting-started/)ou o. [AWS SDKs](https://aws.amazon.com/developer/tools/)

1. O usuário insere suas respectivas credenciais no aplicativo.

1. A aplicação chama a operação `InitiateAuth` com o nome de usuário e os detalhes da Secure Remote Password (SRP).

   Essa operação da API retorna os parâmetros de autenticação.
**nota**  
O aplicativo gera detalhes do SRP com os recursos do Amazon Cognito SRP incorporados ao. AWS SDKs

1. O aplicativo chama a operação `RespondToAuthChallenge`. Se a chamada for bem-sucedida, o Amazon Cognito retornará os tokens do usuário e o fluxo de autenticação será concluído.

   Se o Amazon Cognito exigir outro desafio, a chamada para `RespondToAuthChallenge` não retornará tokens. Em vez disso, a chamada retornará uma sessão.

1. Se `RespondToAuthChallenge` retornar uma sessão, o aplicativo chamará `RespondToAuthChallenge` novamente, dessa vez com a sessão e a resposta ao desafio (por exemplo, código de MFA).

## Noções básicas sobre a autenticação de API, OIDC e páginas de login gerenciado
<a name="user-pools-API-operations"></a>

Os grupos de usuários do Amazon Cognito são uma combinação de várias tecnologias de autenticação. Eles confiam em provedores de identidade externos (IdPs). Eles são IdPs para aplicativos que implementam autenticação com o OpenID Connect (OIDC). SDKs Eles fornecem autenticação como emissores de tokens web JSON (JWTs) semelhante à autenticação OIDC, mas em métodos de API que fazem parte do. AWS SDKs Também podem servir como pontos de entrada seguros para suas aplicações.

Quando quiser se inscrever, fazer login e gerenciar usuários no grupo de usuários, você terá duas opções. 

1. As *páginas de login gerenciado* e a *IU hospedada* clássica incluem os [endpoints interativos de login gerenciado](managed-login-endpoints.md) e os [endpoints de federação](federation-endpoints.md) que lidam com funções de IdP e de partes confiáveis. Eles formam um pacote de páginas da web públicas que o Amazon Cognito ativa quando você [seleciona um domínio](cognito-user-pools-assign-domain.md) para o grupo de usuários. Para começar rapidamente com os recursos de autenticação e autorização dos grupos de usuários do Amazon Cognito, incluindo páginas para cadastro, login, gerenciamento de senhas e autenticação multifator (MFA), use a interface de usuário integrada do login gerenciado.

   Os outros endpoints do pool de usuários facilitam a autenticação com provedores de identidade terceirizados (IdPs). Os serviços que eles realizam incluem o seguinte:

   1. Endpoints de retorno de chamada do provedor de serviços para reivindicações autenticadas de você, como e. IdPs `saml2/idpresponse` `oauth2/idpresponse` Quando o Amazon Cognito é um provedor de serviços (SP) intermediário entre sua aplicação e o IdP, os endpoints de retorno de chamada representam o serviço.

   1. Endpoints que fornecem informações sobre seu ambiente, como `oauth2/userInfo` e `/.well-known/jwks.json`. Seu aplicativo usa esses endpoints quando verifica tokens ou recupera dados do perfil do usuário com bibliotecas de desenvolvedores OIDC ou 2.0. OAuth 

1. A [API de grupos de usuários do Amazon Cognito](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html) é um conjunto de ferramentas para sua aplicação web ou aplicativo móvel autenticar usuários após coletar informações de login em seu próprio frontend personalizado. A autenticação da API de grupos de usuários produz os tokens web JSON a seguir.

   1. Um token de identidade com declarações de atributos verificáveis do usuário.

   1. Um token de acesso que autoriza o usuário a criar solicitações de API autorizadas por token para um [endpoint de serviço da AWS](https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html).
**nota**  
Por padrão, os tokens de acesso da autenticação da API de grupos de usuários contêm apenas o escopo `aws.cognito.signin.user.admin`. Para gerar um token de acesso com escopos adicionais, por exemplo, para autorizar uma solicitação para uma API de terceiros, solicite os escopos durante a autenticação por meio dos endpoints do grupo de usuários ou adicione escopos personalizados em um [Acionador do Lambda antes da geração do token](user-pool-lambda-pre-token-generation.md). A personalização do token de acesso adiciona custos à sua AWS fatura.

   1. Um token de atualização que autoriza solicitações de novos tokens de ID e acesso e atualiza a identidade do usuário e as propriedades de controle de acesso.

Você pode vincular um usuário federado, que normalmente faria login por meio dos endpoints de grupos de usuários, a um usuário cujo perfil seja *local* para sua lista de usuários. Um usuário local existe exclusivamente em seu diretório de grupo de usuários sem federação por meio de um IdP externo. Se você vincular sua identidade federada a um usuário local em uma solicitação de [AdminLinkProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminLinkProviderForUser.html)API, ele poderá fazer login com a API de grupos de usuários. Para obter mais informações, consulte [Vincular usuários federados a um perfil de usuário existente](cognito-user-pools-identity-federation-consolidate-users.md).

A API de grupos de usuários do Amazon Cognito tem duplo propósito.

1. Ela cria e configura os recursos de grupos de usuários do Amazon Cognito. Por exemplo, você pode criar grupos de usuários, adicionar AWS Lambda acionadores e configurar o domínio do grupo de usuários que hospeda suas páginas de login gerenciadas.

1. Ela realiza operações de cadastro, login e outras operações para usuários locais e vinculados.

**Exemplo de cenário com a API de grupos de usuários do Amazon Cognito**

1. O usuário seleciona o botão “Criar uma conta” que você criou na aplicação. Ele inserem um endereço de e-mail e uma senha.

1. Seu aplicativo envia uma solicitação de [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)API e cria um novo usuário no seu grupo de usuários.

1. A aplicação solicita que o usuário forneça um código de confirmação enviado por e-mail. O usuário insere o código que recebeu em uma mensagem de e-mail.

1. Seu aplicativo envia uma solicitação de [ConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html)API com o código de confirmação do usuário.

1. A aplicação solicita que o usuário informe o nome de usuário e a senha, e ele insere essas informações.

1. Seu aplicativo envia uma solicitação de [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API e armazena um token de ID, um token de acesso e um token de atualização. A aplicação chama as bibliotecas do OIDC para gerenciar os tokens do usuário e manter uma sessão persistente para esse usuário.

Na API de grupos de usuários do Amazon Cognito, você não pode conectar usuários que se federam por meio de um IdP. É necessário autenticar esses usuários por meio dos endpoints de grupo de usuários. Para ter mais informações sobre os endpoints do grupo de usuários que incluem login gerenciado, consulte [Referência de login gerenciado e endpoints do grupo de usuários](cognito-userpools-server-contract-reference.md).

Os usuários federados podem começar no login gerenciado e selecionar o IdP deles ou você pode ignorar o login gerenciado e enviar os usuários diretamente ao seu IdP para fazer login. Quando a solicitação de API para [Autorizar endpoint](authorization-endpoint.md) inclui um parâmetro de IdP, o Amazon Cognito redireciona silenciosamente o usuário para a página de login do IdP.

**Exemplo de cenário com páginas de login gerenciado**

1. O usuário seleciona o botão “Criar uma conta” que você criou na aplicação.

1. O login gerenciado apresenta ao usuário uma lista dos provedores de identidades social nos quais você registrou as credenciais de desenvolvedor. O usuário escolhe a Apple.

1. A aplicação inicia uma solicitação para [Autorizar endpoint](authorization-endpoint.md) com o nome do provedor `SignInWithApple`.

1. O navegador do usuário abre a página de autenticação da Apple. O usuário faz login e opta por autorizar que o Amazon Cognito leia as informações do perfil dele.

1. O Amazon Cognito confirma o token de acesso da Apple e consulta o perfil Apple do usuário.

1. O usuário apresenta um código de autorização do Amazon Cognito para a aplicação.

1. A biblioteca OIDC na aplicação troca o código de autorização com o [Endpoint de token](token-endpoint.md) e armazena um token de ID, token de acesso e token de atualização emitidos pelo grupo de usuários. A aplicação usa bibliotecas do OIDC para gerenciar os tokens do usuário e manter uma sessão persistente para esse usuário.

A API de grupo de usuários e as páginas de login gerenciado são compatíveis com uma variedade de cenários descritos neste guia. As seções a seguir examinam como a API de grupos de usuários se divide ainda mais em classes que atendem aos seus requisitos de inscrição, login e gerenciamento de recursos.

## Lista de operações de API agrupadas por modelo de autorização
<a name="user-pool-apis-auth-unauth"></a>

A API de grupos de usuários do Amazon Cognito, tanto uma interface de gerenciamento de recursos quanto uma interface de autenticação e autorização voltada para o usuário, combina os modelos de autorização a seguir nas respectivas operações. Dependendo da operação da API, talvez seja necessário fornecer autorização com credenciais do IAM, um token de acesso, um token de sessão, um segredo do cliente ou uma combinação deles. Para muitas operações de autenticação e autorização de usuários, você pode escolher entre versões autenticadas e não autenticadas da solicitação. Operações não autenticadas são a prática recomendada de segurança para aplicações que você distribui para os usuários, como aplicações móveis; não é necessário incluir nenhum segredo no código.

Você pode atribuir permissões nas políticas do IAM somente para [Operações de gerenciamento autorizadas pelo IAM](#user-pool-apis-auth-unauth-sigv4-management) e [Operações de usuário autorizadas pelo IAM](#user-pool-apis-auth-unauth-sigv4-user).

### Operações de gerenciamento autorizadas pelo IAM
<a name="user-pool-apis-auth-unauth-sigv4-management"></a>

As operações de gerenciamento autorizadas pelo IAM permitem modificar e exibir a configuração do grupo de usuários e do cliente da aplicação, da mesma forma que você faria no Console de gerenciamento da AWS. 

Por exemplo, para modificar seu grupo de usuários em uma solicitação de [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API, você deve apresentar AWS credenciais e permissões do IAM para atualizar o recurso.

Para autorizar essas solicitações no AWS Command Line Interface (AWS CLI) ou em um AWS SDK, configure seu ambiente com variáveis de ambiente ou configuração de cliente que adicionem credenciais do IAM à sua solicitação. Para obter mais informações, consulte [Acessando AWS usando suas AWS credenciais](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys) no *Referência geral da AWS*. Você também pode enviar solicitações diretamente aos [endpoints de serviço](https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html) da API de grupos de usuários do Amazon Cognito. Você deve autorizar ou *assinar* essas solicitações com AWS as credenciais que você incorpora no cabeçalho da sua solicitação. Para obter mais informações, consulte [Assinatura de solicitações AWS da API](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html).


| Operações de gerenciamento autorizadas pelo IAM | 
| --- |
| [AddCustomAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AddCustomAttributes.html) | 
| [CreateGroup](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateGroup.html) | 
| [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html) | 
| [CreateResourceServer](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateResourceServer.html) | 
| [CreateUserImportJob](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserImportJob.html) | 
| [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) | 
| [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html) | 
| [CreateUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolDomain.html) | 
| [DeleteGroup](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteGroup.html) | 
| [DeleteIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteIdentityProvider.html) | 
| [DeleteResourceServer](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteResourceServer.html) | 
| [DeleteUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUserPool.html) | 
| [DeleteUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUserPoolClient.html) | 
| [DeleteUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUserPoolDomain.html) | 
| [DescribeIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeIdentityProvider.html) | 
| [DescribeResourceServer](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeResourceServer.html) | 
| [DescribeRiskConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeRiskConfiguration.html) | 
| [DescribeUserImportJob](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserImportJob.html) | 
| [DescribeUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html) | 
| [DescribeUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html) | 
| [DescribeUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolDomain.html) | 
| [Obtenha CSVHeader](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetCSVHeader.html) | 
| [GetGroup](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetGroup.html) | 
| [GetIdentityProviderByIdentifier](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetIdentityProviderByIdentifier.html) | 
| [GetSigningCertificate](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetSigningCertificate.html) | 
| [Obtenha UICustomization](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUICustomization.html) | 
| [GetUserPoolMfaConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserPoolMfaConfig.html) | 
| [ListGroups](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListGroups.html) | 
| [ListIdentityProviders](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListIdentityProviders.html) | 
| [ListResourceServers](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListResourceServers.html) | 
| [ListTagsForResource](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListTagsForResource.html) | 
| [ListUserImportJobs](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUserImportJobs.html) | 
| [ListUserPoolClients](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUserPoolClients.html) | 
| [ListUserPools](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUserPools.html) | 
| [ListUsers](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html) | 
| [ListUsersInGroup](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsersInGroup.html) | 
| [SetRiskConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html) | 
| [Conjunto UICustomization](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUICustomization.html) | 
| [SetUserPoolMfaConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserPoolMfaConfig.html) | 
| [StartUserImportJob](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_StartUserImportJob.html) | 
| [StopUserImportJob](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_StopUserImportJob.html) | 
| [TagResource](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_TagResource.html) | 
| [UntagResource](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UntagResource.html) | 
| [UpdateGroup](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateGroup.html) | 
| [UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html) | 
| [UpdateResourceServer](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateResourceServer.html) | 
| [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) | 
| [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html) | 
| [UpdateUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolDomain.html) | 

### Operações de usuário autorizadas pelo IAM
<a name="user-pool-apis-auth-unauth-sigv4-user"></a>

As operações de usuário autorizadas pelo IAM permitem o cadastro, o login, o gerenciamento de credenciais, a modificação e a exibição dos usuários. 

Por exemplo, você pode ter um nível de aplicação do lado do servidor que oferece suporte a um front-end da Web. Seu aplicativo do lado do servidor é um cliente OAuth confidencial no qual você confia com acesso privilegiado aos recursos do Amazon Cognito. Para registrar um usuário no aplicativo, seu servidor pode incluir AWS credenciais em uma solicitação de [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html)API. Para obter mais informações sobre os tipos de OAuth clientes, consulte [Tipos de clientes](https://www.rfc-editor.org/rfc/rfc6749#section-2.1) *na Estrutura de Autorização OAuth 2.0*.

Para autorizar essas solicitações no AWS CLI ou em um AWS SDK, configure seu ambiente de aplicativo do lado do servidor com variáveis de ambiente ou configuração de cliente que adicionem credenciais do IAM à sua solicitação. Para obter mais informações, consulte [Acessando AWS usando suas AWS credenciais](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys) no *Referência geral da AWS*. Você também pode enviar solicitações diretamente aos [endpoints de serviço](https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html) da API de grupos de usuários do Amazon Cognito. Você deve autorizar ou *assinar* essas solicitações com AWS as credenciais que você incorpora no cabeçalho da sua solicitação. Para obter mais informações, consulte [Assinatura de solicitações AWS da API](https://docs.aws.amazon.com/general/latest/gr/signing_aws_api_requests.html).

Se o cliente da aplicação tiver um segredo de cliente, você deverá fornecer suas credenciais do IAM e, dependendo da operação, o parâmetro `SecretHash` ou o valor `SECRET_HASH` em `AuthParameters`. Para obter mais informações, consulte [Computar valores de hash de segredo](signing-up-users-in-your-app.md#cognito-user-pools-computing-secret-hash).


| Operações de usuário autorizadas pelo IAM | 
| --- |
| [AdminAddUserToGroup](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminAddUserToGroup.html) | 
| [AdminConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminConfirmSignUp.html) | 
| [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html) | 
| [AdminDeleteUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDeleteUser.html) | 
| [AdminDeleteUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDeleteUserAttributes.html) | 
| [AdminDisableProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDisableProviderForUser.html) | 
| [AdminDisableUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDisableUser.html) | 
| [AdminEnableUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminEnableUser.html) | 
| [AdminForgetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminForgetDevice.html) | 
| [AdminGetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminGetDevice.html) | 
| [AdminGetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminGetUser.html) | 
| [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) | 
| [AdminLinkProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminLinkProviderForUser.html) | 
| [AdminListDevices](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListDevices.html) | 
| [AdminListGroupsForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListGroupsForUser.html) | 
| [AdminListUserAuthEvents](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListUserAuthEvents.html) | 
| [AdminRemoveUserFromGroup](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRemoveUserFromGroup.html) | 
| [AdminResetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminResetUserPassword.html) | 
| [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html) | 
| [AdminSetUserMFAPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserMFAPreference.html) | 
| [AdminSetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html) | 
| [AdminSetUserSettings](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserSettings.html) | 
| [AdminUpdateAuthEventFeedback](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateAuthEventFeedback.html) | 
| [AdminUpdateDeviceStatus](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateDeviceStatus.html) | 
| [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html) | 
| [AdminUserGlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUserGlobalSignOut.html) | 

### Operações de usuário não autenticadas
<a name="user-pool-apis-auth-unauth-unauth"></a>

Operações de usuário não autenticadas para se inscrever, fazer login e iniciar redefinições de senha para os usuários. Use operações de API não autenticadas ou *públicas* quando quiser que qualquer pessoa na internet se inscreva e faça login na aplicação.

Por exemplo, para registrar um usuário em seu aplicativo, você pode distribuir um cliente OAuth público que não forneça acesso privilegiado aos segredos. Você pode registrar esse usuário com a operação de API não autenticada. [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)

Para enviar essas solicitações em um cliente público que você desenvolveu com um AWS SDK, você não precisa configurar nenhuma credencial. Você também pode enviar solicitações diretamente aos [endpoints de serviço](https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html) da API de grupos de usuários do Amazon Cognito sem autorização adicional.

Se o cliente da aplicação tiver um segredo de cliente, você deverá fornecer, dependendo da operação, o parâmetro `SecretHash` ou o valor `SECRET_HASH` em `AuthParameters`. Para obter mais informações, consulte [Computar valores de hash de segredo](signing-up-users-in-your-app.md#cognito-user-pools-computing-secret-hash).


| Operações de usuário não autenticadas | 
| --- |
| [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html) | 
| [ConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html) | 
| [ResendConfirmationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html) | 
| [ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html) | 
| [ConfirmForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html) | 
| [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) | 

### Operações de usuário autorizadas por token
<a name="user-pool-apis-auth-unauth-token-auth"></a>

As operações de usuário autorizadas por token terminam a sessão, gerenciam as credenciais, modificam e visualizam os usuários após eles fazerem login ou iniciarem o processo de login. Use operações de API autorizadas por token quando não quiser distribuir segredos na aplicação e quiser autorizar solicitações com as credenciais do seu próprio usuário. Se o usuário tiver concluído o login, você deverá autorizar a solicitação de API autorizada por token com um token de acesso. Se o usuário estiver no meio de um processo de login, você deverá autorizar a solicitação de API autorizada por token com um token de sessão que o Amazon Cognito retornou em resposta à solicitação anterior.

Por exemplo, em um cliente público, talvez você queira atualizar o perfil de um usuário de uma forma que restrinja o acesso de gravação somente ao próprio perfil do usuário. Para fazer essa atualização, seu cliente pode incluir o token de acesso do usuário em uma solicitação de [UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html)API.

Para enviar essas solicitações em um cliente público que você desenvolveu com um AWS SDK, você não precisa configurar nenhuma credencial. Inclua um parâmetro `AccessToken` ou `Session` na solicitação. Você também pode enviar solicitações diretamente aos [endpoints de serviço](https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html) da API de grupos de usuários do Amazon Cognito. Para autorizar uma solicitação para um endpoint de serviço, inclua o token de acesso ou sessão no corpo POST da solicitação.

Para assinar uma solicitação de API para uma operação autorizada por token, inclua o token de acesso como cabeçalho `Authorization` na solicitação, no formato `Bearer <Base64-encoded access token>`.


| Operações de usuário autorizadas por token | AccessToken | Sessão | 
| --- |--- |--- |
| [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) |  | ✓ | 
| [ChangePassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ChangePassword.html) | ✓ |  | 
| [GetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html) | ✓ |  | 
| [StartWebAuthnRegistration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_StartWebAuthnRegistration.html) | ✓ |  | 
| [CompleteWebAuthnRegistration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CompleteWebAuthnRegistration.html) | ✓ |  | 
| [DeleteWebAuthnCredential](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteWebAuthnCredential.html) | ✓ |  | 
| [ListWebAuthnCredentials](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListWebAuthnCredentials.html) | ✓ |  | 
| [UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html) | ✓ |  | 
| [DeleteUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUserAttributes.html) | ✓ |  | 
| [DeleteUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUser.html) | ✓ |  | 
| [ConfirmDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmDevice.html) | ✓ |  | 
| [ForgetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgetDevice.html) | ✓ |  | 
| [GetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetDevice.html) | ✓ |  | 
| [ListDevices](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListDevices.html) | ✓ |  | 
| [UpdateDeviceStatus](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateDeviceStatus.html) | ✓ |  | 
| [GetUserAttributeVerificationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html) | ✓ |  | 
| [VerifyUserAttribute](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html) | ✓ |  | 
| [SetUserSettings](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserSettings.html) | ✓ |  | 
| [SetUserMFAPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserMFAPreference.html) | ✓ |  | 
| [GlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GlobalSignOut.html) | ✓ |  | 
| [UpdateAuthEventFeedback](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateAuthEventFeedback.html) |  | ✓ | 
| [AssociateSoftwareToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AssociateSoftwareToken.html) | ✓ | ✓ | 
| [VerifySoftwareToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifySoftwareToken.html) | ✓ | ✓ | 
| [RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html)¹ |  |  | 
| [GetTokensFromRefreshToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetTokensFromRefreshToken.html)¹ |  |  | 

¹ `RevokeToken` e `GetTokensFromRefreshToken` usam tokens de atualização como parâmetro de autorização. O token de atualização serve como token de autorização e como recurso de destino.

# Login do grupo de usuários com provedores de identidades de terceiros
<a name="cognito-user-pools-identity-federation"></a>

Os usuários da aplicação podem fazer login diretamente por meio de um grupo de usuários ou federar por meio de um provedor de identidades (IdP) de terceiros. O grupo de usuários gerencia a sobrecarga de lidar com os tokens que são retornados do login social por meio do Facebook, Google, Amazon e Apple, e do OpenID Connect (OIDC) e SAML. IdPs Com a interface web hospedada integrada, o Amazon Cognito fornece gerenciamento e gerenciamento de tokens para usuários autenticados de todos. IdPs Dessa forma, os sistemas de backend podem realizar a padronização com base em um conjunto de tokens do grupo de usuários.

## Como o login federado funciona em grupos de usuários do Amazon Cognito
<a name="cognito-user-pools-identity-federation-how-it-works"></a>

O login por meio de um terceiro (federação) está disponível em grupos de usuários do Amazon Cognito. Esse recurso é independente da federação nos grupos de identidades do Amazon Cognito (identidades federadas).

![\[Visão geral de autenticação com login em redes sociais\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/scenario-authentication-cup.png)


O Amazon Cognito é um diretório de usuários e um provedor de identidade (IdP) OAuth 2.0. Quando você faz login de *usuários locais* no diretório do Amazon Cognito, seu grupo de usuários é um IdP para sua aplicação. Um usuário local existe exclusivamente em seu diretório de grupo de usuários sem federação por meio de um IdP externo.

Quando você conecta o Amazon Cognito às redes sociais, SAML ou OpenID Connect (OIDC IdPs), seu grupo de usuários atua como uma ponte entre vários provedores de serviços e seu aplicativo. Para o IdP, o Amazon Cognito é um provedor de serviços (SP). Você IdPs passa um token de ID do OIDC ou uma declaração SAML para o Amazon Cognito. O Amazon Cognito lê as reivindicações sobre seu usuário no token ou na afirmação e mapeia essas reivindicações para um novo perfil de usuário no diretório do grupo de usuários.

Depois, o Amazon Cognito cria um perfil para o usuário federado em seu próprio diretório. O Amazon Cognito adiciona atributos ao usuário com base nas reivindicações do seu IdP e, no caso do OIDC e de provedores de identidades sociais, um endpoint `userinfo` público operado pelo IdP. Os atributos do usuário mudam em seu grupo de usuários quando um atributo do IdP mapeado é alterado. Você também pode adicionar mais atributos independentes dos do IdP.

Depois que o Amazon Cognito cria um perfil para seu usuário federado, ele altera sua função e se apresenta como o IdP para sua aplicação, que agora é o SP. O Amazon Cognito é uma combinação de OIDC e 2.0 IdP. OAuth Ele gera tokens de acesso, tokens de ID e tokens de atualização. Para mais informações sobre tokens, consulte [Compreendendo os tokens web JSON do grupo de usuários () JWTs](amazon-cognito-user-pools-using-tokens-with-identity-providers.md).

É necessário criar uma aplicação que se integre ao Amazon Cognito para autenticar e autorizar os usuários, sejam eles federados ou locais.

## As responsabilidades de uma aplicação como provedor de serviços do Amazon Cognito
<a name="cognito-user-pools-identity-federation-how-it-works-app-responsibilities"></a><a name="cognito-user-pools-identity-federation-how-it-works-app-responsibilities"></a>

**Confirmar e processar as informações nos tokens**  
Na maioria dos casos, o Amazon Cognito redireciona seu usuário autenticado para um URL de aplicação que ele anexa com um código de autorização. Sua aplicação [troca o código](https://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html) por tokens de acesso, ID e atualização. Depois, ela precisa [conferir a validade dos tokens](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-verifying-a-jwt.html) e fornecer informações ao usuário com base nas reivindicações contidas nos tokens.

**Responder a eventos de autenticação com solicitações da API do Amazon Cognito**  
Sua aplicação precisa se integrar à [API de grupos de usuários do Amazon Cognito](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html) e aos [endpoints de API de autenticação](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-server-contract-reference.html). A API de autenticação conecta e desconecta o usuário e gerencia tokens. A API de grupos de usuários tem uma variedade de operações que gerenciam seu grupo de usuários, seus usuários e a segurança do ambiente de autenticação. Sua aplicação precisa saber o que fazer em seguida ao receber uma resposta do Amazon Cognito.

## Fatos a saber sobre o login de terceiro dos grupos de usuários do Amazon Cognito
<a name="cognito-user-pools-identity-federation-how-it-works-considerations"></a><a name="cognito-user-pools-identity-federation-how-it-works-considerations"></a>
+ Se quiser que seus usuários façam login com provedores federados, você deve escolher um domínio. Isso configura as páginas para [login gerenciado](cognito-userpools-server-contract-reference.md). Para obter mais informações, consulte [Usar o próprio domínio para fazer login gerenciado](cognito-user-pools-add-custom-domain.md).
+ Você não pode cadastrar usuários federados com operações de API como [ InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)e. [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) Os usuários federados só podem fazer login com o [Endpoint de login](login-endpoint.md) ou o [Autorizar endpoint](authorization-endpoint.md).
+ O [Autorizar endpoint](authorization-endpoint.md) é um endpoint de *redirecionamento*. Se você fornecer um parâmetro `idp_identifier` ou `identity_provider` na solicitação, ela será redirecionada silenciosamente para o IdP, ignorando o login gerenciado. Caso contrário, ela será redirecionada para o [Endpoint de login](login-endpoint.md) do login gerenciado.
+ Quando o login gerenciado redireciona uma sessão para um IdP federado, o Amazon Cognito inclui o cabeçalho `user-agent` `Amazon/Cognito` na solicitação.
+ O Amazon Cognito gera o atributo `username` para um perfil de usuário federado usando a combinação de um identificador fixo com o nome de seu IdP. Para gerar um nome de usuário que corresponda aos seus requisitos personalizados, crie um mapeamento para o atributo `preferred_username`. Para obter mais informações, consulte [Coisas a saber sobre mapeamentos](cognito-user-pools-specifying-attribute-mapping.md#cognito-user-pools-specifying-attribute-mapping-requirements).

  Exemplo: `MyIDP_bob@example.com`
+ O Amazon Cognito cria um [grupo de usuários](cognito-user-pools-user-groups.md) para cada OIDC SAMl e IdP social que você adiciona ao seu grupo de usuários. O nome do grupo está no formato `[user pool ID]_[IdP name]`, por exemplo, `us-east-1_EXAMPLE_MYSSO` ou `us-east-1_EXAMPLE_Google`. Cada perfil de usuário exclusivo do IdP gerado automaticamente é adicionado automaticamente a esse grupo. Os [usuários vinculados](cognito-user-pools-identity-federation-consolidate-users.md) não são adicionados automaticamente a esse grupo, mas você pode adicionar seus perfis ao grupo em um processo separado.
+ O Amazon Cognito registra informações sobre a identidade de seu usuário federado em um atributo e uma reivindicação no token de ID, chamada `identities`. Essa reivindicação contém o provedor do usuário e o ID exclusivo do provedor. Não é possível alterar o atributo `identities` em um perfil de usuário diretamente. Para obter mais informações sobre como vincular um usuário federado, consulte [Vincular usuários federados a um perfil de usuário existente](cognito-user-pools-identity-federation-consolidate-users.md).
+ Quando você atualiza o IdP em uma solicitação de API [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html), as alterações podem levar até 1 minuto para aparecerem no login gerenciado.
+ O Amazon Cognito é compatível com até 20 redirecionamentos HTTP entre ele e o IdP.
+ Quando o usuário faz login com o login gerenciado, o navegador armazena um cookie de sessão de login criptografado que registra o cliente e o provedor com os quais ele fez login. Se ele tentar fazer login novamente com os mesmos parâmetros, o login gerenciado reutilizará qualquer sessão existente *não expirada*, e o usuário se autenticará sem fornecer as credenciais novamente. Se o usuário fizer login novamente com um IdP diferente, incluindo uma mudança para ou do login do grupo de usuários local, ele deverá fornecer credenciais e gerar uma sessão de login.

  Você pode atribuir qualquer parte do seu grupo de usuários IdPs a qualquer cliente de aplicativo, e os usuários só podem entrar com um IdP que você atribuiu ao cliente do aplicativo.

**Topics**
+ [

## Como o login federado funciona em grupos de usuários do Amazon Cognito
](#cognito-user-pools-identity-federation-how-it-works)
+ [

## As responsabilidades de uma aplicação como provedor de serviços do Amazon Cognito
](#cognito-user-pools-identity-federation-how-it-works-app-responsibilities)
+ [

## Fatos a saber sobre o login de terceiro dos grupos de usuários do Amazon Cognito
](#cognito-user-pools-identity-federation-how-it-works-considerations)
+ [

# Como configurar provedores de identidade para seu grupo de usuários
](cognito-user-pools-identity-provider.md)
+ [

# Como usar provedores de identidade social com um grupo de usuários
](cognito-user-pools-social-idp.md)
+ [

# Como usar provedores de identidade SAML com um grupo de usuários
](cognito-user-pools-saml-idp.md)
+ [

# Como usar provedores de identidade OIDC com um grupo de usuários
](cognito-user-pools-oidc-idp.md)
+ [

# Mapeamento de atributos de IdP para perfis e tokens
](cognito-user-pools-specifying-attribute-mapping.md)
+ [

# Vincular usuários federados a um perfil de usuário existente
](cognito-user-pools-identity-federation-consolidate-users.md)

# Como configurar provedores de identidade para seu grupo de usuários
<a name="cognito-user-pools-identity-provider"></a>

Com grupos de usuários, você pode implementar o login por meio de uma variedade de provedores de identidade externos ()IdPs. Esta seção do guia tem instruções para configurar esses provedores de identidade com seu grupo de usuários no console do Amazon Cognito. Como alternativa, você pode usar a API de grupos de usuários e um AWS SDK para adicionar programaticamente provedores de identidade de grupos de usuários. Para obter mais informações, consulte [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html).

As opções de provedores de identidade compatíveis incluem provedores sociais, como Facebook, Google e Amazon, e os provedores OpenID Connect (OIDC) e SAML 2.0. Antes de começar, configure suas credenciais administrativas para seu IdP. Para cada tipo de provedor, você precisará registrar a aplicação, obter as credenciais necessárias e, em seguida, configurar os detalhes do provedor em seu grupo de usuários. Seus usuários podem então se inscrever e acessar a aplicação com as contas existentes dos provedores de identidade conectados.

O menu **Provedores sociais e externos** em **Autenticação** adiciona e atualiza o grupo de usuários IdPs. Para obter mais informações, consulte [Login do grupo de usuários com provedores de identidades de terceiros](cognito-user-pools-identity-federation.md).

**Topics**
+ [

## Configurar o acesso do usuário com um IdP social
](#cognito-user-pools-facebook-provider)
+ [

## Configurar o login do usuário com um IdP OIDC
](#cognito-user-pools-oidc-providers)
+ [

## Configurar o login do usuário com um IdP SAML
](#cognito-user-pools-saml-providers)

## Configurar o acesso do usuário com um IdP social
<a name="cognito-user-pools-facebook-provider"></a>

É possível usar a federação para integrar grupos de usuários do Amazon Cognito com provedores de identidade social, como o Facebook, o Google e o Login with Amazon.

Para adicionar um provedor de identidade social, primeiro é necessário criar uma conta de desenvolvedor com o provedor de identidade. Depois de criar sua conta de desenvolvedor, registre a aplicação no provedor de identidade. O provedor de identidade cria um ID da aplicação e um segredo para a aplicação e esses valores são configurados no grupo de usuários do Amazon Cognito.
+ [Plataforma de identidade Google](https://developers.google.com/identity/)
+ [Facebook para desenvolvedores](https://developers.facebook.com/docs/facebook-login)
+ [Login da Amazon](https://developer.amazon.com/login-with-amazon)
+ [Fazer login com a Apple](https://developer.apple.com/sign-in-with-apple/)

**Como integrar o login do usuário a um IdP social**

1. Faça login no [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. No painel de navegação, escolha **User Pools** (Grupos de usuários) e escolha o grupo de usuários que deseja editar.

1. Clique no menu **Provedores sociais e externos**.

1. Escolha **Add an identity provider** (Adicionar um provedor de identidade) ou o provedor de identidade **Facebook**, **Google**, **Amazon** ou **Apple** que você configurou, localize **Identity provider information** (Informações do provedor de identidade) e escolha **Edit** (Editar). Para obter mais informações sobre como adicionar provedores de identidade social, consulte [Como usar provedores de identidade social com um grupo de usuários](cognito-user-pools-social-idp.md).

1. Insira as informações do provedor de identidade social concluindo uma das etapas a seguir, com base em sua escolha de IdP:  
**Facebook, Google e Login with Amazon**  
Insira o ID e o segredo da aplicação recebidos ao criar a aplicação cliente.  
**Sign in with Apple**  
Insira o ID de serviço fornecido à Apple, bem como o ID de equipe, o ID de chave e a chave privada recebidos ao criar o cliente da aplicação.

1. Para **Authorized scopes** (Escopos autorizados), insira os nomes dos escopos do provedor de identidade social que deseja mapear aos atributos do grupo de usuários. Os escopos definem quais atributos do usuário, como nome e e-mail, você deseja acessar com a aplicação. Ao inserir escopos, use as seguintes diretrizes com base em sua escolha de IdP:
   + **Facebook**: separe os escopos com vírgulas. Por exemplo:

     `public_profile, email`
   + **Google, Login with Amazon e Sign in with Apple**: separe os escopos com espaços. Por exemplo:
     + **Google:** `profile email openid`
     + **Login with Amazon:** `profile postal_code`
     + **Sign in with Apple:** `name email`
**nota**  
Para Sign In with Apple (console), use as caixas de seleção para selecionar os escopos.

1. Escolha **Salvar alterações**.

1. No menu **Clientes da aplicação**, escolha um cliente da aplicação na lista e clique em **Editar**. Adicione o novo provedor de identidade social ao cliente da aplicação em **Identity providers** (Provedores de identidade).

1. Escolha **Salvar alterações**.

Para obter mais informações sobre redes sociais IdPs, consulte[Como usar provedores de identidade social com um grupo de usuários](cognito-user-pools-social-idp.md).

## Configurar o login do usuário com um IdP OIDC
<a name="cognito-user-pools-oidc-providers"></a>

É possível integrar o login do usuário a um provedor de identidade OpenID Connect (OIDC), como Salesforce ou Ping Identity.

**Como adicionar um provedor OIDC a um grupo de usuários**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários) no menu de navegação.

1. Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Clique no menu **Provedores sociais e externos** e selecione **Adicionar um provedor de identidade**.

1. Escolha um provedor de identidade **OpenID Connect**.

1. Insira um nome exclusivo em **Provider name** (Nome do provedor).

1. Insira o ID do cliente que você recebeu do provedor em **Client ID** (ID do cliente).

1. Insira o segredo do cliente que você recebeu do provedor em **Client secret** (Segredo do cliente).

1. Insira os **Authorized scopes** (Escopos autorizados) para esse provedor. Os escopos definem quais grupos de atributos do usuário (como `name` e `email`) sua aplicação solicitará ao seu provedor. Os escopos devem ser separados por espaços, seguindo a especificação [OAuth 2.0](https://tools.ietf.org/html/rfc6749#section-3.3).

   O usuário deve receber consentimento para o fornecimento desses atributos à aplicação.

1. Escolha um **Attribute request method** (Método de solicitação de atributos) para fornecer ao Amazon Cognito o método HTTP (GET ou POST) que ele usa para buscar os detalhes do usuário no endpoint **userInfo** operado pelo provedor.

1. Escolha um **Setup method** (Método de configuração) para recuperar endpoints OpenID Connect por meio de **Auto fill through issuer URL** (Preenchimento automático por meio do URL do emissor) ou **Manual input** (Entrada manual). Use o **preenchimento automático do URL do emissor** quando seu provedor tiver um `.well-known/openid-configuration` endpoint público em que o Amazon Cognito possa recuperar URLs os endpoints`token`,, e. `authorization` `userInfo` `jwks_uri`

1. Insira o URL do emissor ou`authorization`,, `token``userInfo`, e o `jwks_uri` endpoint URLs do seu IdP.
**nota**  
Você pode usar somente os números de porta 443 e 80 com descoberta, preenchida automaticamente e inserida manualmente. URLs Os logins de usuários falharão se o provedor OIDC usar qualquer porta TCP não padrão.  
O URL do emissor deve começar com `https://` e não pode terminar com o caractere `/`. Por exemplo, Salesforce usa este URL:  
`https://login.salesforce.com`   
O `openid-configuration` documento associado ao URL do emissor deve fornecer HTTPS URLs para os seguintes valores: `authorization_endpoint``token_endpoint`,`userinfo_endpoint`, e. `jwks_uri` Da mesma forma, ao escolher **Entrada manual**, você só pode inserir HTTPS URLs.

1. Por padrão, a declaração OIDC **sub** é mapeada para o atributo de grupo de usuários **Username** (Nome de usuário). Você pode mapear outras [solicitações](https://openid.net/specs/openid-connect-basic-1_0.html#StandardClaims) OIDC para atributos de grupo de usuários. Insira a solicitação OIDC e selecione o atributo de grupo de usuários correspondente na lista suspensa. Por exemplo, a solicitação **email** geralmente é mapeada para o atributo de grupo de usuários **E-mail**.

1. Mapeie atributos adicionais do provedor de identidade ao seu grupo de usuários. Para mais informações, consulte [Especificar mapeamentos de atributos do provedor de identidade para o grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-specifying-attribute-mapping.html).

1. Escolha **Criar**.

1. No menu **Clientes da aplicação**, selecione um cliente da aplicação na lista. Para adicionar o novo provedor de identidades SAML ao cliente da aplicação, navegue até a guia **Páginas de login** e selecione **Editar** em **Configuração gerenciada de páginas de login**.

1. Escolha **Salvar alterações**.

Para obter mais informações sobre o OIDC IdPs, consulte. [Como usar provedores de identidade OIDC com um grupo de usuários](cognito-user-pools-oidc-idp.md)

## Configurar o login do usuário com um IdP SAML
<a name="cognito-user-pools-saml-providers"></a>

Você pode usar a federação para que os grupos de usuários do Amazon Cognito se integrem a um provedor de identidade (IdP) SAML. Forneça um documento de metadados, fazendo upload do arquivo ou inserindo um URL do endpoint de documento de metadados. Para obter informações sobre como obter documentos de metadados para SAML de terceiros IdPs, consulte. [Como configurar seu provedor de identidades SAML de terceiros](cognito-user-pools-integrating-3rd-party-saml-providers.md)

**Para configurar um provedor de identidade SAML 2.0 no seu grupo de usuários**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Clique no menu **Provedores sociais e externos** e selecione **Adicionar um provedor de identidade**.

1. Escolha um provedor de identidade **SAML**.

1. Insira **Identifiers** (Identificadores) separados por vírgulas. Um identificador direciona o Amazon Cognito para que ele confira o endereço de e-mail de login do usuário e, depois, direciona o usuário para o provedor que corresponde ao domínio dele.

1. Escolha **Add sign-out flow** (Adicionar fluxo de desconexão) se quiser que o Amazon Cognito envie solicitações de desconexão assinadas ao seu provedor quando um usuário se desconectar. Configure o provedor de identidades SAML 2.0 para enviar respostas de logout para o endpoint `https://mydomain.auth.us-east-1.amazoncognito.com/saml2/logout` que o Amazon Cognito cria quando você configura o login gerenciado. O endpoint `saml2/logout` usa uma associação POST.
**nota**  
Se você selecionar essa opção e seu provedor de identidade SAML esperar uma solicitação de logout assinada, você também precisará configurar o certificado de assinatura fornecido pelo Amazon Cognito com seu IdP SAML.   
O IdP SAML processará a solicitação de logout assinada e fará logout do seu usuário da sessão do Amazon Cognito.

1. Selecione uma **Metadata document source** (Fonte de documento de metadados). Se seu provedor de identidade oferecer metadados SAML em um URL público, você pode escolher **Metadata document URL** (URL do documento de metadados) e inserir esse URL público. Do contrário, escolha **Upload metadata document** (Carregar documento de metadados) e, em seguida, um arquivo de metadados que você tenha baixado de seu provedor anteriormente.
**nota**  
Se seu provedor tiver um endpoint público, recomendamos que você insira um URL do documento de metadados em vez de carregar um arquivo. Se você usar o URL, o Amazon Cognito atualizará os metadados automaticamente. Normalmente, a atualização de metadados ocorre a cada seis horas ou antes de os metadados expirarem, o que ocorrer primeiro.

1. Escolha **Map attributes between your SAML provider and your app** (Mapear atributos entre seu provedor SAML e sua aplicação) para mapear atributos do provedor SAML para o perfil de usuário em seu grupo de usuários. Inclua os atributos obrigatórios do grupo de usuários no mapa de atributos. 

   Por exemplo, quando escolher o **User pool attribute** (Atributo do grupo de usuários) `email`, insira o nome do atributo SAML como ele aparece na afirmação SAML de seu provedor de identidade. Seu provedor de identidade pode oferecer exemplos de afirmações SAML como referência. Alguns provedores de identidade usam nomes simples, como `email`, enquanto outros usam nomes de atributos formatados com URL, semelhantes a:

   ```
   http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
   ```

1. Escolha **Criar**.

**nota**  
Se você vir `InvalidParameterException` durante a criação de um IdP SAML com um URL do endpoint de metadados HTTPS, verifique se o endpoint de metadados está com o SSL configurado corretamente e se há um certificado SSL válido associado a ele. Um exemplo dessa exceção seria “Erro ao recuperar metadados de*<metadata endpoint>*”.

**Para configurar o IdP SAML para adicionar um certificado de assinatura**
+ Para obter o certificado contendo a chave pública que o IdP usa para verificar a solicitação de logout assinada, faça o seguinte:

  1. Navegue até o menu **Provedores sociais e externos** do grupo de usuários.

  1. Selecione seu provedor SAML.

  1. Clique em **Ver certificado de assinatura**.

Para obter mais informações sobre SAML, IdPs consulte[Como usar provedores de identidade SAML com um grupo de usuários](cognito-user-pools-saml-idp.md).

# Como usar provedores de identidade social com um grupo de usuários
<a name="cognito-user-pools-social-idp"></a>

Os usuários de aplicativos web e móveis podem fazer login por meio de provedores de identidade social (IdP), como o Facebook, o Google, a Amazon e a Apple. Com a interface do usuário da Web hospedada integrada, o Amazon Cognito fornece manuseio e gerenciamento de tokens para todos os usuários autenticados. Dessa forma, os sistemas de backend podem realizar a padronização com base em um conjunto de tokens do grupo de usuários. Você deve habilitar o login gerenciado para se integrar com provedores de identidades social compatíveis. Quando o Amazon Cognito cria suas páginas de login gerenciadas, ele cria endpoints OAuth 2.0 que o Amazon Cognito, seu OIDC e redes sociais usam para trocar informações. IdPs Para mais informações, consulte [Referência da API de autenticação dos grupos de usuários do Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-server-contract-reference.html).

Você pode adicionar um IdP social no Console de gerenciamento da AWS, ou você pode usar a AWS CLI ou a API do Amazon Cognito. 

**nota**  
O login por meio de um terceiro (federação) está disponível em grupos de usuários do Amazon Cognito. Esse recurso é independente da federação nos grupos de identidades do Amazon Cognito (identidades federadas).

**Topics**
+ [

## Configurar uma conta de desenvolvedor e uma aplicação de IdP social
](#cognito-user-pools-social-idp-step-1)
+ [

## Configurar o grupo de usuários com um IdP social
](#cognito-user-pools-social-idp-step-2)
+ [

## Testar a configuração do IdP social
](#cognito-user-pools-social-idp-step-3)

## Configurar uma conta de desenvolvedor e uma aplicação de IdP social
<a name="cognito-user-pools-social-idp-step-1"></a>

Antes de criar um IdP social com o Amazon Cognito, é necessário registrar sua aplicação no IdP social para receber um ID do cliente e a chave secreta do cliente.

------
#### [ Facebook ]

Para obter as informações mais recentes sobre configuração de contas de desenvolvedor e autenticação da Meta, consulte [Desenvolvimento de apps com a Meta](https://developers.facebook.com/docs/development).

**Como registrar uma aplicação com o Facebook/Meta**

1. Crie uma [conta de desenvolvedor com o Facebook](https://developers.facebook.com/docs/facebook-login).

1. [Faça login](https://developers.facebook.com/) com as credenciais do Facebook.

1. No menu **My Apps (Meus aplicativos)**, escolha **Create New App (Criar novo aplicativo)**.

1. Insira um nome para sua aplicação do Facebook e, em seguida, escolha **Create App ID** (Criar ID da aplicação).

1. Na barra de navegação à esquerda, escolha **Settings** (Configurações) e, em seguida, **Basic** (Básico).

1. Anote o **App ID (ID do aplicativo)** e a **App Secret (Chave secreta do aplicativo)**. Você poderá usá-los na próxima seção.

1. Escolha **\$1 Add Platform (Adicionar plataforma)** na parte inferior da página.

1. Escolha **Website**.

1. Em **Website** (Site da Web), insira o caminho para a página de acesso da aplicação em **Site URL** (URL do site).

   ```
   https://mydomain.auth.us-east-1.amazoncognito.com/login?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com
   ```

1. Escolha **Salvar alterações**.

1. Insira o caminho para a raiz do domínio do grupo de usuários em **App Domains** (Domínios da aplicação).

   ```
   https://mydomain.auth.us-east-1.amazoncognito.com
   ```

1. Escolha **Salvar alterações**.

1. Na barra de navegação, escolha **Add Product** (Adicionar produto) e escolha **Set up** (Configurar) para o produto **Facebook Login** (Login do Facebook).

1. Na barra de navegação, escolha **Facebook Login (Login do Facebook)** e **Settings (Configurações)**.

   Insira o caminho para o `/oauth2/idpresponse` endpoint do seu domínio do grupo de usuários em **Valid OAuth URIs Redirect**.

   ```
   https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/idpresponse
   ```

1. Escolha **Salvar alterações**.

------
#### [ Login with Amazon ]

Para obter as informações mais recentes sobre a configuração das contas de desenvolvedor e autenticação do Login with Amazon, consulte [Login with Amazon Documentation](https://developer.amazon.com/docs/login-with-amazon/documentation-overview.html).

**Como registrar uma aplicação com o Login with Amazon**

1. Crie uma [conta de desenvolvedor com a Amazon](https://developer.amazon.com/login-with-amazon).

1. [Faça login](https://developer.amazon.com/lwa/sp/overview.html) com as credenciais da Amazon.

1. Você precisa criar um perfil de segurança da Amazon para receber o ID do cliente e a chave secreta do cliente da Amazon.

   Selecione **Apps and Services (Aplicativos e serviços)** na barra de navegação na parte superior da página e, em seguida, selecione **Login with Amazon (Login com a Amazon)**.

1. Escolha **Create a Security Profile (Criar um perfil de segurança)**.

1. Insira o **Security Profile Name** (Nome do perfil de segurança), **Security Profile Description** (Descrição do perfil de segurança) e um **Consent Privacy Notice URL** (URL de notificação de consentimento de privacidade).

1. Escolha **Save** (Salvar).

1. Selecione **Client ID (ID de cliente)** e **Client Secret (Segredo de cliente)** para mostrar o ID e o segredo do cliente. Você poderá usá-los na próxima seção.

1. Passe o cursor sobre o ícone de engrenagem e escolha **Web Settings** (Configurações da Web) e, em seguida, escolha **Edit** (Editar).

1. Insira o domínio do grupo de usuários em **Allowed Origins** (Origens permitidas).

   ```
   https://mydomain.auth.us-east-1.amazoncognito.com
   ```

1. Insira seu domínio do grupo de usuários com o `/oauth2/idpresponse` endpoint em **Allowed Return URLs**.

   ```
   https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/idpresponse
   ```

1. Escolha **Salvar**.

------
#### [ Google ]

Para obter mais informações sobre OAuth 2.0 na plataforma Google Cloud, consulte [Saiba mais sobre autenticação e autorização](https://developers.google.com/workspace/guides/auth-overview) na documentação do Google Workspace for Developers.

**Como registrar uma aplicação com o Google**

1. Crie uma [conta de desenvolvedor com o Google](https://developers.google.com/identity).

1. Faça login no [Console do Google Cloud Platform](https://console.cloud.google.com/home/dashboard).

1. Na barra de navegação superior, escolha **Select a project** (Selecionar um projeto). Se você já tiver um projeto na plataforma do Google, esse menu exibirá seu projeto padrão.

1. Selecione **NEW PROJECT** (Novo projeto).

1. Insira um nome para o produto e, depois, escolha **CREATE** (Criar).

1. Na barra de navegação esquerda, escolha **Serviços APIs e**, em seguida, tela de **consentimento do Oauth**.

1. Insira as informações da aplicação, um **App domain** (Domínio da aplicação), **Authorized domains** (Domínios autorizados) e **Developer contact information** (Informações de contato do desenvolvedor). Seus **Authorized domains** (Domínios autorizados) devem incluir `amazoncognito.com` e a raiz de seu domínio personalizado; por exemplo, `example.com`. Escolha **SAVE AND CONTINUE** (Salvar e continuar).

1. 1. Em **Escopos**, escolha **Adicionar ou remover escopos** e escolha, no mínimo, os seguintes OAuth escopos.

   1. `.../auth/userinfo.email`

   1. `.../auth/userinfo.profile`

   1. OpenID

1. Em **Test users** (Testar usuários), escolha **Add Users** (Adicionar usuários). Insira seu e-mail e todos os outros usuários de teste autorizados e escolha **SAVE AND CONTINUE** (Salvar e continuar).

1. Expanda a barra de navegação esquerda novamente e escolha **Serviços APIs e**, em seguida, **Credenciais.** 

1. Escolha **CRIAR CREDENCIAIS e, em** seguida, **ID OAuth do cliente.**

1. Escolha um **Application type** (Tipo de aplicação) e forneça ao seu cliente um **Name** (Nome).

1. Em ** JavaScript Origens autorizadas**, escolha **ADICIONAR URI**. Insira o domínio de seu grupo de usuários.

   ```
   https://mydomain.auth.us-east-1.amazoncognito.com
   ```

1. Em **Redirecionamento autorizado URIs**, escolha **ADICIONAR URI**. Insira o caminho para o endpoint `/oauth2/idpresponse` do domínio de seu grupo de usuários.

   ```
   https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/idpresponse
   ```

1. Selecione **CREATE** (Criar).

1. Armazene com segurança os valores que o Google exibe em **Your client ID** (Seu ID de cliente) e **Your client secret** (Seu segredo do cliente). Forneça esses valores ao Amazon Cognito quando você adicionar um IdP do Google.

------
#### [ Sign in with Apple ]

Para up-to-date obter mais informações sobre como configurar o Login com a Apple, consulte [Configurando seu ambiente para fazer login com a Apple](https://developer.apple.com/documentation/signinwithapple/configuring-your-environment-for-sign-in-with-apple) na documentação do desenvolvedor da Apple.

**Como registrar uma aplicação com o Sign in with Apple (SIWA)**

1. Crie uma [conta de desenvolvedor com a Apple](https://developer.apple.com/programs/enroll/).

1. [Faça login](https://developer.apple.com/account/#/welcome) com as credenciais da Apple.

1. Na barra de navegação à esquerda, escolha **Certificates, Identifiers & Profiles** (Certificados, identificadores e perfis).

1. Na barra de navegação à esquerda, escolha **Identifiers** (Identificadores).

1. Na página **Identifiers** (Identificadores), escolha o ícone **\$1**.

1. Na página **Registrar um novo identificador**, escolha **Aplicativo** e IDs, em seguida, escolha **Continuar**.

1. Na página **Select a type** (Selecionar um tipo), escolha **App** (Aplicação) e, depois, **Continue** (Continuar).

1. Na página **Register an App ID** (Registrar ID de uma aplicação), faça o seguinte:

   1. Em **Description** (Descrição), insira uma descrição.

   1. Em **App ID Prefix** (Prefixo do ID da aplicação), insira um **Bundle ID** (ID do pacote). Anote o valor em **App ID Prefix** (Prefixo do ID da aplicação). Você usará esse valor após escolher a Apple como seu provedor de identidade em [Configurar o grupo de usuários com um IdP social](#cognito-user-pools-social-idp-step-2).

   1. Em **Capabilities** (Recursos), escolha **Sign In with Apple** (Fazer login com a Apple) e, depois, selecione **Edit** (Editar).

   1. Na página **Entrar com a Apple: Configuração do ID do aplicativo**, escolha configurar o aplicativo como principal ou agrupado com outro aplicativo IDs e escolha **Salvar**.

   1. Escolha **Continue** (Continuar).

1. Na página **Confirm your App ID (Confirmar ID do seu app)**, escolha **Register (Registrar)**.

1. Na página **Identifiers** (Identificadores), escolha o ícone **\$1**.

1. Na página **Registrar um novo identificador**, escolha **Serviços** e IDs, em seguida, escolha **Continuar**.

1. Na página **Register a Services ID (Registrar um ID de serviços)**, faça o seguinte:

   1. Em **Description (Descrição)**, digite uma descrição.

   1. Em **Identifier (Identificador)**, digite um identificador. Anote esse ID de serviços, pois você precisará desse valor depois de escolher a Apple como provedor de identidades em [Configurar o grupo de usuários com um IdP social](#cognito-user-pools-social-idp-step-2).

   1. Escolha **Continue** (Continuar) e, depois, **Register** (Registrar).

1. Escolha o ID de serviços que você acabou de criar na página Identifiers (Identificadores).

   1. Selecione **Sign In with Apple** (Fazer login com a Apple) e escolha **Configure** (Configurar).

   1. Na página **Web Authentication Configuration** (Configuração da autenticação web), selecione o ID da aplicação que você criou anteriormente como o **Primary App ID** (ID da aplicação principal). 

   1. Escolha o ícone **\$1** ao lado **do site URLs**. 

   1. Em **Domains and subdomains** (Domínios e subdomínios), insira o domínio do grupo de usuários sem um prefixo `https://`.

      ```
      mydomain.auth.us-east-1.amazoncognito.com
      ```

   1. Em **Return URLs**, insira o caminho para o `/oauth2/idpresponse` endpoint do seu domínio do grupo de usuários.

      ```
      https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/idpresponse
      ```

   1. Escolha **Next** (Próximo) e, depois, selecione **Done** (Concluído). Não é necessário verificar o domínio.

   1. Escolha **Continue** (Continuar) e, depois, **Save** (Salvar).

1. No painel de navegação à esquerda, selecione **Keys** (Chaves).

1. Na página **Keys (Chaves)**, escolha o ícone **\$1**.

1. Na página **Register a New Key (Registrar uma chave nova)**, faça o seguinte:

   1. Em **Key Name** (Nome da chave), insira um nome de chave. 

   1. Escolha **Sign In with Apple** (Fazer login com a Apple) e escolha **Configure** (Configurar).

   1. Na página **Configure Key** (Configurar chave), selecione o ID da aplicação que você criou anteriormente como o **Primary App ID** (ID da aplicação principal). Escolha **Salvar**.

   1. Escolha **Continue** (Continuar) e, depois, **Register** (Registrar).

1. Na página **Download Your Key** (Baixe sua chave), escolha **Download** para baixar a chave privada e anote a **Key ID** (ID da chave). Em seguida, escolha **Done** (Concluído). Você precisará dessa chave privada e do valor de **Key ID** (ID da chave) mostrado nesta página depois de escolher a Apple como provedor de identidade no [Configurar o grupo de usuários com um IdP social](#cognito-user-pools-social-idp-step-2).

------

## Configurar o grupo de usuários com um IdP social
<a name="cognito-user-pools-social-idp-step-2"></a>

**Para configurar um IdP social do grupo de usuários com o Console de gerenciamento da AWS**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. Escolha **Grupos de usuários**.

1. Escolha um grupo de usuários existente na lista ou crie um grupo de usuários.

1. Clique no menu **Provedores sociais e externos** e selecione **Adicionar um provedor de identidade**.

1. Escolha um IdP social: **Facebook**, **Google**, **Login with Amazon** ou **Sign in with Apple**.

1. Escolha entre as seguintes etapas, com base em sua opção de IdP social:
   + **Google** e **Login with Amazon**: insira o **app client ID** (ID do cliente da aplicação) e o **app client secret** (o segredo do cliente da aplicação) gerado na seção anterior.
   + **Facebook**: insira o **app client ID** (ID do cliente da aplicação) e o **app client secret** (segredo do cliente da aplicação) gerado na seção anterior e, em seguida, escolha uma versão da API (por exemplo, versão 2.12). Recomendamos escolher a versão mais recente possível, já que cada API do Facebook tem um ciclo de vida e uma data de suspensão. Os escopos e atributos do Facebook podem variar entre as versões da API. Recomendamos que você teste seu login de identidade social com o Facebook para confirmar se a federação funciona como pretendido.
   + **Sign In with Apple** (Fazer login com a Apple): insira o **Services ID** (ID de serviços), o **Team ID** (ID de equipe), o **Key ID** (ID da chave) e a **private key** (chave privada) gerados na seção anterior.

1. Insira os nomes dos **Authorized scopes** (Escopos autorizados) que deseja utilizar. Os escopos definem quais atributos do usuário (como `name` e `email`) você deseja acessar com a aplicação. Para o Facebook, eles devem estar separados por vírgulas. Para o Google e o Login with Amazon, eles devem estar separados por espaços. Para Sign in with Apple, marque a caixa de seleção dos escopos que deseja acessar.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/cognito-user-pools-social-idp.html)

   O consentimento do usuário da aplicação é solicitado para o fornecimento desses atributos à sua aplicação. Para mais informações sobre os escopos de provedores sociais, consulte a documentação do Google, Facebook, Login with Amazon ou do Sign in with Apple. 

   Em caso de acesso com Sign in with Apple, a seguir apresentamos os cenários de usuário cujos escopos talvez não sejam retornados:
   + Um usuário final encontra falhas depois de sair da página de login com a Apple (elas podem ter origem de falhas internas dentro do Amazon Cognito ou de qualquer elemento escrito pelo desenvolvedor)
   + O identificador de ID do serviço é usado em grupos de usuários e and/or outros serviços de autenticação.
   + Um desenvolvedor inclui escopos adicionais depois que o usuário final tiver feito o login (sem recuperar novas informações)
   + Um desenvolvedor exclui o usuário e, a seguir, o usuário faz login novamente sem remover a aplicação de seu perfil de ID da Apple

1. Mapeie atributos do IdP para o grupo de usuários. Para obter mais informações, consulte [Especificar mapeamentos de atributos do provedor de identidade para seu grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-specifying-attribute-mapping.html).

1. Escolha **Criar**.

1. No menu **Clientes da aplicação**, selecione um cliente da aplicação na lista. Para adicionar o novo provedor de identidades social ao cliente da aplicação, navegue até a guia **Páginas de login** e selecione **Editar** em **Configuração gerenciada de páginas de login**.

1. Escolha **Salvar alterações**.

## Testar a configuração do IdP social
<a name="cognito-user-pools-social-idp-step-3"></a>

Na aplicação, você deve invocar um navegador no cliente do usuário para que ele possa fazer login com seu provedor social. Teste o login com seu provedor social após concluir os procedimentos de configuração nas seções anteriores. O exemplo de URL a seguir carrega a página de login do grupo de usuários com um domínio de prefixo.

```
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com
```

Esse link é a página para a qual o Amazon Cognito direcionará você ao acessar o menu **Clientes da aplicação**, selecionar um cliente da aplicação, navegar até a guia **Páginas de login** e selecionar **Visualizar página de login**. Para obter mais informações sobre domínios do grupo de usuários, consulte [Como configurar um domínio de grupo de usuários](cognito-user-pools-assign-domain.md). Para obter mais informações sobre clientes de aplicativos, incluindo cliente IDs e retorno de chamada URLs, consulte[Configurações específicas da aplicação com clientes de aplicação](user-pool-settings-client-apps.md).

O link de exemplo a seguir configura o redirecionamento silencioso para um provedor social por meio do [Autorizar endpoint](authorization-endpoint.md) com um parâmetro de consulta `identity_provider`. Esse URL ignora o login interativo do grupo de usuários com login gerenciado e leva diretamente à página de login do IdP.

```
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?identity_provider=Facebook|Google|LoginWithAmazon|SignInWithApple&response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com
```

# Como usar provedores de identidade SAML com um grupo de usuários
<a name="cognito-user-pools-saml-idp"></a>

Você pode determinar que os usuários da aplicação web e do aplicativo móvel façam login por meio de um provedor de identidades (IdP) SAML, como o [Microsoft Active Directory Federation Services (ADFS)](https://msdn.microsoft.com/en-us/library/bb897402.aspx) ou o [Shibboleth](http://www.shibboleth.net/). Você deve escolher um IdP SAML compatível com o [padrão SAML 2.0](http://saml.xml.org/saml-specifications).

Com o login gerenciado, o Amazon Cognito autentica usuários de IdP locais e terceirizados e emite tokens web JSON (). JWTs Com os tokens que o Amazon Cognito emite, você pode consolidar várias fontes de identidade em um padrão universal do OpenID Connect (OIDC) em todas as aplicações. O Amazon Cognito pode processar declarações SAML de seus fornecedores terceirizados nesse padrão de SSO. Você pode criar e gerenciar um SAML IdP na, por meio da ou com Console de gerenciamento da AWS a API de AWS CLI grupos de usuários do Amazon Cognito. Para criar seu primeiro IdP SAML no Console de gerenciamento da AWS, consulte. [Como adicionar e gerenciar provedores de identidade SAML em um grupo de usuários](cognito-user-pools-managing-saml-idp.md)

![\[Visão geral de autenticação com login do SAML\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/scenario-authentication-saml.png)


**nota**  
A federação com login por meio de um IdP de terceiros é um recurso dos grupos de usuários do Amazon Cognito. Os bancos de identidades do Amazon Cognito, às vezes chamados de identidades federadas do Amazon Cognito, são uma implementação da federação que você deve configurar separadamente em cada banco. Um grupo de usuários pode ser um IdP de terceiros para um banco de identidades. Para obter mais informações, consulte [Banco de identidades do Amazon Cognito](cognito-identity.md).

## Referência rápida para configuração do IdP
<a name="cognito-user-pools-saml-idp-reference"></a>

É necessário configurar o IdP SAML para aceitar solicitação e enviar respostas ao grupo de usuários. A documentação de seu para IdP SAML conterá informações sobre como adicionar o grupo de usuários como uma aplicação ou terceira parte confiável para o IdP SAML 2.0. A documentação a seguir contém os valores que você deve fornecer para o ID da entidade SP e o URL do Serviço do consumidor de Declaração (ACS).Referência rápida de valores SAML do grupo de usuários

**ID de entidade SP**  

```
urn:amazon:cognito:sp:us-east-1_EXAMPLE
```

**URL DO ACS**  

```
https://Your user pool domain/saml2/idpresponse
```

Você deve configurar seu grupo de usuários para apoiar o provedor de identidades. As etapas detalhadas para adicionar um IdP SAML externo são as seguintes:

1. Faça o download dos metadados SAML do seu IdP ou recupere o URL para o seu endpoint de metadados. Consulte [Como configurar seu provedor de identidades SAML de terceiros](cognito-user-pools-integrating-3rd-party-saml-providers.md).

1. Adicione um novo IdP ao seu grupo de usuários. Faça o upload dos metadados do SAML ou forneça o URL dos metadados. Consulte [Como adicionar e gerenciar provedores de identidade SAML em um grupo de usuários](cognito-user-pools-managing-saml-idp.md).

1. Atribua o IdP aos seus clientes de aplicações. Consulte [Configurações específicas da aplicação com clientes de aplicação](user-pool-settings-client-apps.md).

**Topics**
+ [

## Referência rápida para configuração do IdP
](#cognito-user-pools-saml-idp-reference)
+ [

# Coisas que você deve saber sobre o SAML IdPs nos grupos de usuários do Amazon Cognito
](cognito-user-pools-saml-idp-things-to-know.md)
+ [

## Diferenciação entre maiúsculas e minúsculas dos nomes de usuário SAML
](#saml-nameid-case-sensitivity)
+ [

# Como configurar seu provedor de identidades SAML de terceiros
](cognito-user-pools-integrating-3rd-party-saml-providers.md)
+ [

# Como adicionar e gerenciar provedores de identidade SAML em um grupo de usuários
](cognito-user-pools-managing-saml-idp.md)
+ [

# Iniciação de sessão SAML em grupos de usuários do Amazon Cognito
](cognito-user-pools-SAML-session-initiation.md)
+ [

# Como desconectar usuários do SAML com logout único
](cognito-user-pools-saml-idp-sign-out.md)
+ [

# Assinatura e criptografia SAML
](cognito-user-pools-SAML-signing-encryption.md)
+ [

# Nomes e identificadores do provedor de identidades SAML
](cognito-user-pools-managing-saml-idp-naming.md)

# Coisas que você deve saber sobre o SAML IdPs nos grupos de usuários do Amazon Cognito
<a name="cognito-user-pools-saml-idp-things-to-know"></a>

A implementação de um IdP SAML 2.0 vem com alguns requisitos e restrições. Consulte esta seção ao implementar seu IdP. Você também encontrará informações úteis para solucionar erros durante a federação do SAML com um grupo de usuários.

**O Amazon Cognito processa declarações do SAML para você**  
Os grupos de usuários do Amazon Cognito são compatíveis com a federação SAML 2.0 com endpoints de pós-vinculação. Isso elimina a necessidade de a aplicação recuperar ou analisar as respostas de afirmação do SAML, pois o grupo de usuários recebe diretamente a resposta do SAML de seu IdP por meio de um agente de usuário. Seu grupo de usuários atua como um provedor de serviços (SP) em nome da aplicação. O Amazon Cognito é compatível com a autenticação única (SSO) iniciada por SP e por IdP, conforme descrito nas seções 5.1.2 e 5.1.4 da [Visão geral técnica do SAML V2.0](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0-cd-02.html).

**Fornecer um certificado de assinatura de IdP válido**  
O certificado de assinatura nos metadados do seu provedor SAML não deve estar vencido quando você for configurar o IdP do SAML em seu grupo de usuários.

**Grupos de usuários aceitam vários certificados de assinatura**  
Quando o IdP SAML inclui mais de um certificado de assinatura nos metadados do SAML, no login, o grupo de usuários determina que a declaração do SAML é válida se corresponder a qualquer certificado nos metadados do SAML. Cada certificado de assinatura deve ter no máximo 4.096 caracteres.

**Manter o parâmetro do estado de retransmissão**  
O Amazon Cognito e o IdP SAML mantêm as informações da sessão com um parâmetro `relayState`.  

1. O Amazon Cognito é compatível com valores de `relayState` maiores do que 80 bytes. Embora as especificações do SAML afirmem que o valor de `relayState` “não deve exceder 80 bytes de comprimento”, a prática atual do setor geralmente diverge desse comportamento. Como consequência, rejeitar valores de `relayState` maiores que 80 bytes quebrará muitas integrações padrão de provedor de SAML.

1. O token `relayState` é uma referência invisível às informações de estado mantidas pelo Amazon Cognito. O Amazon Cognito não garante o conteúdo do parâmetro `relayState`. Não analise o respectivo conteúdo de forma que sua aplicação dependa do resultado. Para obter mais informações, consulte a [SAML 2.0 specification](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0.html) (Especificação do SAML 2.0).

**Identificar o endpoint do ACS**  
Seu provedor de identidade SAML exige que você defina um endpoint de consumidor de declaração. Seu IdP redireciona seus usuários para esse endpoint com sua declaração SAML. Configure o endpoint a seguir no domínio do grupo de usuários para a vinculação POST SAML 2.0 no provedor de identidades SAML.  

```
https://Your user pool domain/saml2/idpresponse
With an Amazon Cognito domain:
https://mydomain.auth.us-east-1.amazoncognito.com/saml2/idpresponse
With a custom domain:
https://auth.example.com/saml2/idpresponse
```
Consulte [Como configurar um domínio de grupo de usuários](cognito-user-pools-assign-domain.md) para obter mais informações sobre domínios do grupo de usuários.

**Sem declarações reproduzidas**  
Você não pode repetir nem *reproduzir* uma declaração de SAML em seu`saml2/idpresponse` endpoint do Amazon Cognito. Uma declaração de SAML reproduzida tem um ID que duplica o ID de uma resposta anterior do IdP.

**O ID do grupo de usuários é o ID da entidade SP**  
É necessário fornecer o ID do grupo de usuários ao IdP no (SP) `urn` do provedor de serviços, também chamado de *URI de público* ou *ID da entidade SP*. O URI de público do grupo de usuários tem o formato a seguir.  

```
urn:amazon:cognito:sp:us-east-1_EXAMPLE
```
Você pode encontrar o ID do grupo de usuários na **Visão geral do grupo de usuários**, no [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home).

**Mapear todos os atributos obrigatórios**  
Configure seu IdP SAML para que forneça valores para todos os atributos definidos como necessários em seu grupo de usuários. Por exemplo, `email` é um atributo obrigatório comum para grupos de usuários. Para que seus usuários possam fazer login, suas declarações do IdP SAML devem incluir uma declaração a ser mapeada para o **atributo do grupo de usuários** `email`. Para ter mais informações sobre mapeamento de atributos, consulte [Mapeamento de atributos de IdP para perfis e tokens](cognito-user-pools-specifying-attribute-mapping.md).

**O formato de declaração tem requisitos específicos**  
O IdP do SAML deve incluir as seguintes reivindicações na declaração do SAML:  
+ Uma reivindicação de `NameID`. O Amazon Cognito associa uma declaração de SAML ao usuário de destino por `NameID`. Se houver alterações de `NameID`, o Amazon Cognito considerará que a declaração é para um novo usuário. O atributo definido em `NameID` na configuração do IdP deve ter um valor persistente. Para atribuir usuários do SAML a um perfil de usuário consistente no grupo de usuários, atribua sua declaração `NameID` a partir de um atributo com um valor que não mude.

  ```
  <saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:persistent">
    carlos
  </saml2:NameID>
  ```

  O `Format` na declaração de `NameID` de `urn:oasis:names:tc:SAML:1.1:nameid-format:persistent` indica que seu IdP está transmitindo um valor imutável. O Amazon Cognito não exige essa declaração de formato. Ele atribui um formato de `urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified` quando o IdP não especifica um formato da declaração `NameID`. Esse comportamento está em conformidade com a seção 2.2.2 *Nome do tipo complexo IDType*, [da especificação SAML](https://groups.oasis-open.org/higherlogic/ws/public/download/35711/sstc-saml-core-errata-2.0-wd-06-diff.pdf/latest) 2.0.
+ Uma reivindicação `AudienceRestriction` com um valor de `Audience` que define o ID da entidade SP do grupo de usuários como o destino da resposta.

  ```
  <saml:AudienceRestriction>
    <saml:Audience> urn:amazon:cognito:sp:us-east-1_EXAMPLE
  </saml:AudienceRestriction>
  ```
+ Para login único iniciado pelo SP, um elemento `Response` com valor `InResponseTo` do ID da solicitação SAML original.

  ```
  <saml2p:Response Destination="https://mydomain.auth.us-east-1.amazoncognito.com/saml2/idpresponse" ID="id123" InResponseTo="_dd0a3436-bc64-4679-a0c2-cb4454f04184" IssueInstant="Date-time stamp" Version="2.0" xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  ```
**nota**  
As declarações de SAML iniciadas pelo IdP *não* devem conter um valor `InResponseTo`.
+ Um elemento `SubjectConfirmationData` com um valor de `Recipient` do endpoint `saml2/idpresponse` do grupo de usuários e, para SAML iniciado pelo SP, um valor de `InResponseTo` que corresponde ao ID da solicitação SAML original.

  ```
  <saml2:SubjectConfirmationData InResponseTo="_dd0a3436-bc64-4679-a0c2-cb4454f04184" NotOnOrAfter="Date-time stamp" Recipient="https://mydomain.auth.us-east-1.amazoncognito.com/saml2/idpresponse"/>
  ```

**Solicitações de login iniciadas pelo SP**  
Quando o [Autorizar endpoint](authorization-endpoint.md) direciona o usuário para a página de login do IdP, o Amazon Cognito inclui uma *solicitação SAML* em um parâmetro de URL da solicitação `HTTP GET`. A solicitação SAML contém informações sobre seu grupo de usuários, incluindo endpoint do ACS. Como opção, você pode aplicar uma assinatura criptográfica a essas solicitações.

**Assinar solicitações e criptografar respostas**  
Cada grupo de usuários com um provedor de SAML gera um par de chaves assimétrico e um *certificado de assinatura* para uma assinatura digital que o Amazon Cognito atribui às solicitações de SAML. Cada IdP de SAML externo que você configura para aceitar uma resposta de SAML criptografada faz com que o Amazon Cognito gere um novo par de chaves e um *certificado de criptografia* para esse provedor. Para visualizar e baixar os certificados com a chave pública, escolha seu IdP no menu **Provedores sociais e externos** no console do Amazon Cognito.  
Para estabelecer confiança com as solicitações de SAML do seu grupo de usuários, forneça ao IdP uma cópia do certificado de assinatura SAML 2.0 de seu grupo de usuários. Seu IdP pode ignorar as solicitações de SAML que seu grupo de usuários assinou se você não configurar o IdP para aceitar solicitações assinadas.  

1. O Amazon Cognito aplica uma assinatura digital às solicitações de SAML que o usuário transmite ao IdP. Seu grupo de usuários assina todas as solicitações de logout único (SLO), e você pode configurar seu grupo de usuários para assinar solicitações de autenticação única (SSO) para qualquer IdP externo do SAML. Quando você fornece uma cópia do certificado, o IdP consegue verificar a integridade das solicitações SAML de seus usuários. 

1. Seu IdP SAML pode criptografar respostas do SAML com o certificado de criptografia. Quando você configura um IdP com criptografia SAML, seu IdP só deve enviar respostas criptografadas.

**Codificar caracteres não alfanuméricos**  
O Amazon Cognito não aceita caracteres UTF-8 de 4 bytes (como 😐 ou 𠮷) que o IdP transmite como um valor de atributo. É possível codificar o caractere em Base64, transmiti-lo como texto e, então, decodificá-lo na aplicação.  
No exemplo a seguir, a declaração de atributo não será aceita:  

```
<saml2:Attribute Name="Name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
  <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">😐</saml2:AttributeValue>
</saml2:Attribute>
```
Ao contrário do exemplo anterior, a seguinte declaração de atributo será aceita:  

```
<saml2:Attribute Name="Name" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified">
  <saml2:AttributeValue xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">8J+YkA==</saml2:AttributeValue>
</saml2:Attribute>
```

**O endpoint de metadados deve ter uma segurança de camada de transporte válida**  
Se você ver, `InvalidParameterException` ao criar um IdP SAML com uma URL de endpoint de metadados HTTPS, por exemplo, “Erro ao recuperar metadados de”, certifique-se *<metadata endpoint>* de que o endpoint de metadados tenha o SSL configurado corretamente e que haja um certificado SSL válido associado a ele. Para obter mais informações sobre a validação de certificados, consulte [O que é um SSL/TLS certificado](https://aws.amazon.com/what-is/ssl-certificate/)? .

**O endpoint de metadados deve estar em uma porta TCP padrão para HTTP ou HTTPS**  
O Amazon Cognito só aceita metadados URLs para provedores de SAML nas portas TCP padrão 80 para HTTP e 443 para HTTPS. Como prática recomendada de segurança, hospede os metadados SAML em um URL criptografado por TLS com o prefixo `https://`. Insira os metadados URLs no formato *`http://www.example.com/saml2/metadata.xml`* ou*`https://www.example.com/saml2/metadata.xml`*. O console do Amazon Cognito aceita metadados URLs somente com o prefixo. `https://` Você também pode configurar os metadados do IdP com e. [CreateIdentityProvider[UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html)

**Clientes de aplicações com SAML iniciado pelo IdP só podem fazer login com SAML**  
Ao ativar o suporte para um IdP do SAML 2.0 que oferece suporte ao login iniciado pelo IdP em um cliente de aplicativo, você só pode adicionar outro SAML IdPs 2.0 a esse cliente de aplicativo. Você não consegue adicionar o diretório de usuários ao grupo de usuários *e* todos os provedores de identidade externos que não sejam SAML a um cliente de aplicação configurado dessa forma.

**As respostas de logout devem usar a vinculação POST**  
O endpoint `/saml2/logout` aceita `LogoutResponse` como solicitações `HTTP POST`. Os grupos de usuários não aceitam respostas de logout com vinculação `HTTP GET`.

**Alternância de certificados de assinatura de metadados**  
O Amazon Cognito armazena em cache os metadados SAML por até 6 horas quando você fornece metadados com um URL. Ao realizar qualquer alternância de certificados de assinatura de metadados, configure sua fonte de metadados para publicar os certificados *originais e novos* por pelo menos 6 horas. Quando o Amazon Cognito atualiza o cache do URL de metadados, ele trata cada certificado como válido e o IdP SAML pode começar a assinar as declarações SAML com o novo certificado. Após esse período, você pode remover o certificado original dos metadados publicados.

## Diferenciação entre maiúsculas e minúsculas dos nomes de usuário SAML
<a name="saml-nameid-case-sensitivity"></a>

Quando um usuário federado tenta fazer login, o provedor de identidades (IdP) SAML passa um `NameId` para o Amazon Cognito na declaração SAML do usuário. O Amazon Cognito identifica um usuário federado SAML por meio da respectiva declaração `NameId`. Independentemente das configurações de diferenciação entre maiúsculas e minúsculas do grupo de usuários, o Amazon Cognito reconhece que um usuário federado voltou de um IdP SAML quando passa uma declaração `NameId` exclusiva e que diferencie maiúsculas e minúsculas. Se você mapear um atributo como `email` para `NameId` e seu usuário alterar o endereço de e-mail, ele não conseguirá fazer login na aplicação.

Mapeie `NameId` em suas declarações SAML de um atributo do IdP que tenha valores que não se alteram.

Por exemplo, Carlos tem um perfil de usuário em seu grupo de usuários que não diferencia maiúsculas e minúsculas de uma declaração SAML dos Serviços de Federação do Active Directory (ADFS) que passou um valor `NameId` de `Carlos@example.com`. Na próxima vez em que Carlos tentar fazer login, seu IdP ADFS passará um valor `NameId` de `carlos@example.com`. Como `NameId` deve apresentar uma correspondência exata de maiúsculas e minúsculas, o login não é bem-sucedido.

Se seus usuários não conseguirem fazer login depois que o respectivo `NameID` mudar, exclua o perfil desses usuários do grupo de usuários. O Amazon Cognito criará novos perfis de usuário na próxima vez em que eles fizerem login.

**Topics**
+ [

## Referência rápida para configuração do IdP
](#cognito-user-pools-saml-idp-reference)
+ [

# Coisas que você deve saber sobre o SAML IdPs nos grupos de usuários do Amazon Cognito
](cognito-user-pools-saml-idp-things-to-know.md)
+ [

## Diferenciação entre maiúsculas e minúsculas dos nomes de usuário SAML
](#saml-nameid-case-sensitivity)
+ [

# Como configurar seu provedor de identidades SAML de terceiros
](cognito-user-pools-integrating-3rd-party-saml-providers.md)
+ [

# Como adicionar e gerenciar provedores de identidade SAML em um grupo de usuários
](cognito-user-pools-managing-saml-idp.md)
+ [

# Iniciação de sessão SAML em grupos de usuários do Amazon Cognito
](cognito-user-pools-SAML-session-initiation.md)
+ [

# Como desconectar usuários do SAML com logout único
](cognito-user-pools-saml-idp-sign-out.md)
+ [

# Assinatura e criptografia SAML
](cognito-user-pools-SAML-signing-encryption.md)
+ [

# Nomes e identificadores do provedor de identidades SAML
](cognito-user-pools-managing-saml-idp-naming.md)

# Como configurar seu provedor de identidades SAML de terceiros
<a name="cognito-user-pools-integrating-3rd-party-saml-providers"></a>

Para adicionar um provedor de identidades (IdP) SAML ao seu grupo de usuários, você deve fazer algumas atualizações de configuração na interface de gerenciamento do IdP. Esta seção descreve como formatar os valores que você deve fornecer ao IdP. Você também aprenderá a recuperar o documento de metadados de URL estático ou ativo que identifica o IdP e suas declarações SAML para o grupo de usuários.

Para configurar soluções do provedor de identidades (IdP) SAML 2.0 de terceiros para funcionar com federação para grupos de usuários do Amazon Cognito, é necessário configurar o IdP SAML para redirecionar ao seguinte URL do Serviço do Consumidor de Declaração (ACS): `https://mydomain.auth.us-east-1.amazoncognito.com/saml2/idpresponse`. Se o grupo de usuários tiver um domínio do Amazon Cognito, você poderá encontrar o caminho do domínio do grupo de usuários no menu **Domínio** do grupo de usuários no [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home).

Alguns SAML IdPs exigem que você forneça o`urn`, também chamado de URI do público ou ID da entidade SP, no formulário`urn:amazon:cognito:sp:us-east-1_EXAMPLE`. Você pode encontrar o ID do grupo de usuários na **Visão geral do grupo de usuários**, no console do Amazon Cognito.

Você também precisa configurar o IdP SAML para que forneça valores de todos os *atributos obrigatórios* em seu grupo de usuários. Normalmente, `email` é um atributo obrigatório para grupos de usuários. Nesse caso, o IdP SAML precisa fornecer alguma forma de reivindicação `email` em sua declaração SAML, e você precisa mapear a declaração para esse provedor.

As seguintes informações de configuração para soluções IdP SAML 2.0 de terceiros são um bom ponto de partida para configurar a federação com grupos de usuários do Amazon Cognito: Para obter as informações mais atuais, consulte diretamente a documentação do seu provedor.

Para assinar solicitações SAML, você deve configurar seu IdP para confiar nas solicitações assinadas pelo certificado de assinatura do grupo de usuários. Para aceitar respostas SAML criptografadas, configure seu IdP para criptografar *todas* as respostas SAML para seu grupo de usuários. Seu provedor terá a documentação sobre a configuração desses recursos. Para ver um exemplo da Microsoft, consulte [Configurar a criptografia de token SAML do Microsoft Entra](https://learn.microsoft.com/en-us/entra/identity/enterprise-apps/howto-saml-token-encryption).

**nota**  
O Amazon Cognito exige apenas o documento de metadados do seu provedor de identidades. O provedor também pode oferecer informações de configuração personalizadas para a federação SAML 2.0 com o IAM ou o Centro de Identidade do AWS IAM. Para saber como configurar a integração com o Amazon Cognito, procure instruções gerais para recuperar o documento de metadados e gerenciar o restante da configuração em seu grupo de usuários.


| Solução | Mais informações | 
| --- | --- | 
| Microsoft Entra ID | [Metadados da federação](https://learn.microsoft.com/en-us/entra/identity-platform/federation-metadata) | 
| Okta | [Como baixar os metadados do IdP e os certificados de assinatura SAML para uma integração de aplicações SAML](https://support.okta.com/help/s/article/Location-to-download-Okta-IDP-XML-metadata-for-a-SAML-app-in-the-new-Admin-User-Interface) | 
| Auth0 | [Configurar Auth0 como provedor de identidades SAML](https://auth0.com/docs/authenticate/protocols/saml/saml-sso-integrations/configure-auth0-saml-identity-provider) | 
| Identidade de ping (PingFederate) | [Exportação de metadados SAML de PingFederate](https://docs.pingidentity.com/integrations/contentful/configuring_single_sign-on/pf_contentful_integration_exporting_saml_metadata_from_pf.html) | 
| JumpCloud | [Notas de configuração do SAML](https://jumpcloud.com/support/saml-configuration-notes) | 
| SecureAuth | [Integração de aplicações SAML](https://docs.secureauth.com/2104/en/saml-application-integration.html) | 

# Como adicionar e gerenciar provedores de identidade SAML em um grupo de usuários
<a name="cognito-user-pools-managing-saml-idp"></a>

Depois de configurar seu provedor de identidades para trabalhar com o Amazon Cognito, você pode adicioná-lo aos seus grupos de usuários e clientes de aplicações. Os procedimentos a seguir demonstram como criar, modificar e excluir provedores SAML em um grupo de usuários do Amazon Cognito.

------
#### [ Console de gerenciamento da AWS ]

Você pode usar o Console de gerenciamento da AWS para criar e excluir provedores de identidade SAML (IdPs).

Antes de criar um IdP SAML, é necessário ter o documento de metadados do SAML, que você obtém do IdP de terceiros. Para obter instruções sobre como obter ou gerar o documento de metadados do SAML necessário, consulte [Como configurar seu provedor de identidades SAML de terceiros](cognito-user-pools-integrating-3rd-party-saml-providers.md).

**Para configurar um IdP SAML 2.0 em seu grupo de usuários**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas credenciais da AWS .

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Clique no menu **Provedores sociais e externos** e selecione **Adicionar um provedor de identidade**.

1. Escolha um IdP **SAML**.

1. Insira um **Nome de provedor**. Você pode passar esse nome amigável em um parâmetro de solicitação `identity_provider` para [Autorizar endpoint](authorization-endpoint.md).

1. Insira **Identifiers** (Identificadores) separados por vírgulas. Um identificador diz ao Amazon Cognito que ele deve conferir o endereço de e-mail que um usuário insere quando faz o acesso e, em seguida, direcioná-lo ao provedor que corresponde ao domínio dele.

1. Escolha **Add sign-out flow** (Adicionar fluxo de desconexão) se quiser que o Amazon Cognito envie solicitações de desconexão assinadas ao seu provedor quando um usuário se desconectar. Você deve configurar o IdP SAML 2.0 para enviar respostas de logout ao endpoint `https://mydomain.auth.us-east-1.amazoncognito.com/saml2/logout` que é criado quando você configura o login gerenciado. O endpoint `saml2/logout` usa uma associação POST.
**nota**  
Se você selecionar essa opção e seu IdP SAML esperar uma solicitação de logout assinada, você também precisará configurar o IdP SAML com um certificado de assinatura do seu grupo de usuários.  
O IdP SAML processará a solicitação de logout assinada e desconectará seu usuário da sessão do Amazon Cognito.

1. Escolha sua configuração de **login SAML iniciada pelo IdP**. Como prática recomendada de segurança, escolha **Aceitar somente declarações SAML iniciadas pelo SP**. Se você preparou seu ambiente para aceitar com segurança sessões de login SAML não solicitadas, escolha **Aceitar declarações de SAML iniciadas pelo SP e iniciadas pelo IdP**. Para obter mais informações, consulte [Iniciação de sessão SAML em grupos de usuários do Amazon Cognito](cognito-user-pools-SAML-session-initiation.md).

1. Escolha uma **Metadata document source** (Fonte de documento de metadados). Se seu IdP oferecer metadados SAML em um URL público, você poderá escolher **Metadata document URL** (URL do documento de metadados) e inserir esse URL público. Do contrário, escolha **Upload metadata document** (Carregar documento de metadados) e, em seguida, um arquivo de metadados que você tenha baixado de seu provedor anteriormente.
**nota**  
Se seu provedor tiver um endpoint público, recomendamos que você insira um URL do documento de metadados em vez de carregar um arquivo. O Amazon Cognito atualiza os metadados automaticamente a partir do URL de metadados. Normalmente, a atualização de metadados ocorre a cada seis horas ou antes de os metadados expirarem, o que ocorrer primeiro.

1. Escolha **Mapear atributos entre seu provedor SAML e sua aplicação** para mapear atributos do provedor SAML para o perfil de usuário em seu grupo de usuários. Inclua os atributos obrigatórios do grupo de usuários no mapa de atributos. 

   Por exemplo, quando escolher o **User pool attribute** (Atributo do grupo de usuários) `email`, insira o nome do atributo SAML como ele aparece na declaração SAML de seu IdP. Se o IdP oferecer exemplos de declarações SAML, é possível usá-los para ajudar você a encontrar o nome. Alguns IdPs usam nomes simples, como`email`, enquanto outros usam nomes como os seguintes.

   ```
   http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
   ```

1. Escolha **Criar**.

------
#### [ API/CLI ]

Use os comandos a seguir para criar e gerenciar um provedor de identidade (IdP) SAML.

**Para criar um IdP e carregar um documento de metadados**
+ AWS CLI: `aws cognito-idp create-identity-provider`

  Exemplo com arquivo de metadados: `aws cognito-idp create-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --provider-type SAML --provider-details file:///details.json --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`

  Onde `details.json` contém:

  ```
  "ProviderDetails": { 
        "MetadataFile": "<SAML metadata XML>",
        "IDPSignout" : "true",
        "RequestSigningAlgorithm" : "rsa-sha256",
        "EncryptedResponses" : "true",
        "IDPInit" : "true"
  }
  ```
**nota**  
Se *<SAML metadata XML>* contiver alguma instância do personagem`"`, você deve adicionar `\` como caractere de escape:`\"`.

  Exemplo com URL de metadados: `aws cognito-idp create-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --provider-type SAML --provider-details MetadataURL=https://myidp.example.com/sso/saml/metadata --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`
+ AWS API: [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html)

**Para fazer upload de um novo documento de metadados para um IdP**
+ AWS CLI: `aws cognito-idp update-identity-provider`

  Exemplo com arquivo de metadados: `aws cognito-idp update-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --provider-details file:///details.json --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`

  Onde `details.json` contém:

  ```
  "ProviderDetails": { 
        "MetadataFile": "<SAML metadata XML>",
        "IDPSignout" : "true",
        "RequestSigningAlgorithm" : "rsa-sha256",
        "EncryptedResponses" : "true",
        "IDPInit" : "true"
  }
  ```
**nota**  
Se *<SAML metadata XML>* contiver alguma instância do personagem`"`, você deve adicionar `\` como caractere de escape:`\"`.

  Exemplo com URL de metadados: `aws cognito-idp update-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1 --provider-details MetadataURL=https://myidp.example.com/sso/saml/metadata --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`
+ AWS API: [UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html)

**Para obter informações sobre um IdP específico**
+ AWS CLI: `aws cognito-idp describe-identity-provider`

  `aws cognito-idp describe-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1`
+ AWS API: [DescribeIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeIdentityProvider.html)

**Para listar informações sobre todos IdPs**
+ AWS CLI: `aws cognito-idp list-identity-providers`

  Exemplo: `aws cognito-idp list-identity-providers --user-pool-id us-east-1_EXAMPLE --max-results 3`
+ AWS API: [ListIdentityProviders](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListIdentityProviders.html)

**Para excluir um IdP**
+ AWS CLI: `aws cognito-idp delete-identity-provider`

  `aws cognito-idp delete-identity-provider --user-pool-id us-east-1_EXAMPLE --provider-name=SAML_provider_1`
+ AWS API: [DeleteIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteIdentityProvider.html)

------

**Para configurar o IdP SAML para adicionar um grupo de usuários como uma parte dependente**
+ O URN do provedor de serviço dos grupos de usuários é `urn:amazon:cognito:sp:us-east-1_EXAMPLE`. O Amazon Cognito exige um valor de restrição de público que corresponda a esse URN na resposta do SAML. Configure seu IdP para usar o seguinte endpoint de vinculação POST para a IdP-to-SP mensagem de resposta.

  ```
  https://mydomain.auth.us-east-1.amazoncognito.com/saml2/idpresponse
  ```
+ O IdP SAML deve preencher o `NameID` e quaisquer atributos necessários para o grupo de usuários na declaração do SAML. `NameID` é usado para identificar exclusivamente o usuário federado do SAML no grupo de usuários. O IdP deve transmitir o ID de nome do SAML de cada usuário em um formato consistente com distinção entre maiúsculas e minúsculas. Qualquer variação no valor do ID do nome de um usuário cria um novo perfil de usuário.

**Como fornecer um certificado de assinatura ao IdP SAML 2.0**
+ Para baixar uma cópia da chave pública do Amazon Cognito que o IdP pode usar para validar solicitações de logout SAML, clique no menu **Provedores sociais e externos** do grupo de usuários, selecione seu IdP e, em **Ver certificado de assinatura**, selecione **Baixar como .crt**.

É possível excluir qualquer provedor SAML configurado em seu grupo de usuários com o console do Amazon Cognito.

**Como excluir um provedor SAML**

1. Faça login no [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home).

1. No painel de navegação, escolha **User Pools** (Grupos de usuários) e escolha o grupo de usuários que deseja editar.

1. Clique no menu **Provedores sociais e externos**.

1. Selecione o botão de rádio ao lado do SAML IdPs que você deseja excluir.

1. Quando receber a solicitação de **Delete identity provider** (Excluir provedor de identidade), insira o nome do provedor SAML para confirmar a exclusão e escolha **Delete** (Excluir).

# Iniciação de sessão SAML em grupos de usuários do Amazon Cognito
<a name="cognito-user-pools-SAML-session-initiation"></a>

O Amazon Cognito é compatível com autenticação única (SSO) iniciada pelo provedor de serviços (iniciada pelo SP) e pelo IdP. Como prática recomendada de segurança, implemente o SSO iniciado pelo SP em seu grupo de usuários. A Seção 5.1.2 de [Visão geral técnica do SAML V2.0](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0-cd-02.html#5.1.2.SP-Initiated%20SSO:%20%20Redirect/POST%20Bindings|outline) descreve a SSO iniciada pelo SP. O Amazon Cognito é o provedor de identidade (IdP) de sua aplicação. A aplicação é o provedor de serviços (SP) que recupera tokens para usuários autenticados. No entanto, quando você usa um IdP de terceiro para autenticar usuários, o Amazon Cognito é o SP. Quando os usuários do SAML 2.0 fazem a autenticação com um fluxo iniciado por SP, sempre devem fazer uma solicitação ao Amazon Cognito e redirecionar para o IdP para autenticação.

Para alguns casos de uso empresariais, o acesso a aplicações internas começa em um marcador em um painel hospedado pelo IdP empresarial. Quando um usuário seleciona um marcador, o IdP gera uma resposta SAML e a envia ao SP para autenticar o usuário na aplicação.

Você pode configurar um IdP SAML em seu grupo de usuários para oferecer suporte ao SSO iniciado pelo IdP. Com a autenticação iniciada por IdP, o Amazon Cognito não consegue verificar se ele solicitou a resposta SAML recebida, pois ele não inicia a autenticação com uma solicitação SAML. Com SSO iniciado pelo SP, o Amazon Cognito define parâmetros de estado que validam uma resposta SAML em relação à solicitação original. Com o login iniciado pelo SP, você também pode se proteger contra falsificação de solicitação entre sites (CSRF).

**Topics**
+ [

## Implementar o login SAML iniciado pelo SP
](#cognito-user-pools-saml-idp-authentication)
+ [

## Implementar o login SAML iniciado pelo IdP
](#cognito-user-pools-SAML-session-initiation-idp-initiation)

## Implementar o login SAML iniciado pelo SP
<a name="cognito-user-pools-saml-idp-authentication"></a>

Como prática recomendada, implemente o login service-provider-initiated (iniciado pelo SP) em seu grupo de usuários. O Amazon Cognito inicia a sessão do usuário e a redireciona para o seu IdP. Com esse método, você tem mais controle sobre quem apresenta as solicitações de login. Você também pode permitir o login iniciado pelo IdP em alguns casos.

O processo a seguir mostra como os usuários fazem o login iniciado pelo SP em seu grupo de usuários por meio de um provedor SAML.

![\[Diagrama de fluxo de autenticação do login SAML iniciado pelo SP do Amazon Cognito.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/scenario-authentication-saml-stepbystep.png)


1. Seu usuário insere o endereço de e-mail em uma página de login. Para determinar o redirecionamento do usuário para o IdP, você pode coletar o endereço de e-mail em uma aplicação personalizada ou invocar o login gerenciado na visualização da web.

   Você pode configurar suas páginas de login gerenciadas para exibir uma lista IdPs ou solicitar um endereço de e-mail e combiná-lo com o identificador do seu IdP SAML. Para solicitar um endereço de e-mail, edite o estilo de identidade visual do login gerenciado e, em **Fundação**, localize **Comportamento de autenticação** e, em **Exibição do provedor**, defina **Estilo de exibição** como **Entrada de pesquisa de domínio**.

1. Sua aplicação invoca o endpoint de redirecionamento do grupo de usuários e solicita uma sessão com o ID do cliente que corresponde à aplicação e o ID do IdP que corresponde ao usuário.

1. O Amazon Cognito redireciona seu usuário para o IdP com uma solicitação SAML, [opcionalmente assinada](cognito-user-pools-SAML-signing-encryption.md#cognito-user-pools-SAML-signing.title), em um elemento `AuthnRequest`.

1. O IdP autentica o usuário de forma interativa ou com uma sessão memorizada por um cookie do navegador.

1. O IdP redireciona seu usuário para o endpoint de resposta SAML do grupo de usuários com a declaração SAML [opcionalmente criptografada](cognito-user-pools-SAML-signing-encryption.md#cognito-user-pools-SAML-signing-encryption.title) em sua carga útil POST.
**nota**  
O Amazon Cognito cancela sessões que não recebem uma resposta em 5 minutos e redireciona o usuário para o login gerenciado. Quando seu usuário encontra esse resultado, ele recebe a mensagem de erro `Something went wrong`.

1. Após verificar a declaração do SAML e [mapear atributos do usuário](cognito-user-pools-specifying-attribute-mapping.md#cognito-user-pools-specifying-attribute-mapping.title) das declarações na resposta, o Amazon Cognito cria ou atualiza internamente o perfil do usuário no grupo de usuários. Normalmente, seu grupo de usuários retorna um código de autorização para a sessão do navegador do usuário.

1. Seu usuário apresenta o código de autorização ao seu aplicativo, que troca o código por tokens web JSON (JWTs).

1. A aplicação aceita e processa o token de ID do usuário como autenticação, gera solicitações autorizadas aos recursos com o token de acesso e armazena o token de atualização.

Quando um usuário se autentica e recebe uma concessão de código de autorização, o grupo de usuários retorna tokens de ID, acesso e atualização. O token de ID é um objeto de autenticação para gerenciamento de identidade baseado em OIDC. O token de acesso é um objeto de autorização com escopos [OAuth 2.0](https://oauth.net/2/). O token de atualização é um objeto que gera novos tokens de ID e acesso quando os tokens atuais do usuário expiram. Você pode configurar a duração dos tokens dos usuários em seu cliente de aplicação do grupo de usuários.

Você também pode escolher a duração dos tokens de atualização. Depois que o token de atualização do usuário expirar, ele deverá fazer login novamente. Se eles fizerem a autenticação por meio de um IdP SAML, a duração da sessão de seus usuários será definida pela expiração dos tokens, não pela expiração da sessão com o IdP. A aplicação precisa armazenar o token de atualização de cada usuário e renovar a sessão quando ela expirar. O login gerenciado mantém as sessões do usuário em um cookie do navegador válido por 1 hora.

## Implementar o login SAML iniciado pelo IdP
<a name="cognito-user-pools-SAML-session-initiation-idp-initiation"></a>

Ao configurar seu provedor de identidades para fazer login no SAML 2.0 iniciado pelo IdP, você pode apresentar declarações de SAML ao endpoint `saml2/idpresponse` em seu domínio de grupo de usuários sem a necessidade de iniciar a sessão no [Autorizar endpoint](authorization-endpoint.md). Um grupo de usuários com essa configuração aceita declarações SAML iniciadas pelo IdP de um provedor de identidades externo do grupo de usuários compatível com o cliente de aplicação solicitado.

![\[Diagrama de fluxo de autenticação do login SAML iniciado pelo IdP do Amazon Cognito.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/scenario-authentication-saml-idpinit.png)


1. Um usuário solicita o login SAML em sua aplicação.

1. A aplicação invoca um navegador ou redireciona o usuário para a página de login do provedor SAML.

1. O IdP autentica o usuário de forma interativa ou com uma sessão memorizada por um cookie do navegador.

1. O IdP redireciona o usuário para sua aplicação com a declaração SAML, ou resposta, no corpo POST.

1. A aplicação adiciona a declaração SAML ao corpo POST de uma solicitação para o endpoint `saml2/idpresponse` do grupo de usuários.

1. O Amazon Cognito emite um código de autorização para o usuário.

1. Seu usuário apresenta o código de autorização ao seu aplicativo, que troca o código por tokens web JSON (JWTs).

1. A aplicação aceita e processa o token de ID do usuário como autenticação, gera solicitações autorizadas aos recursos com o token de acesso e armazena o token de atualização.

As etapas a seguir descrevem o processo geral de configuração e login com um provedor SAML 2.0 iniciado pelo IdP.

1. Crie ou atribua um grupo de usuários e um cliente de aplicação.

1. Crie um IdP SAML 2.0 em seu grupo de usuários.

1. Configure seu IdP para aceitar a iniciação do IdP. O SAML iniciado pelo IdP apresenta considerações de segurança às quais outros provedores de SSO não estão sujeitos. Por esse motivo, você não pode adicionar algo que não seja SAML IdPs, incluindo o próprio grupo de usuários, a nenhum cliente de aplicativo que use um provedor de SAML com login iniciado pelo IdP.

1. Associe seu provedor SAML iniciado pelo IdP a um cliente de aplicação em seu grupo de usuários.

1. Direcione seu usuário para a página de login do seu IdP SAML e recupere uma declaração de SAML.

1. Direcione o usuário ao endpoint `saml2/idpresponse` do grupo de usuários com sua declaração SAML.

1. Receba tokens web JSON (JWTs).

Para aceitar declarações de SAML não solicitadas em seu grupo de usuários, pense no impacto sobre a segurança da sua aplicação. É provável que ocorram tentativas de falsificação de solicitações e CSRF quando você aceita solicitações iniciadas pelo IdP. Embora seu grupo de usuários não possa verificar uma sessão de login iniciada pelo IdP, o Amazon Cognito valida seus parâmetros de solicitação e declarações de SAML.

Além disso, sua declaração de SAML não deve conter uma reivindicação `InResponseTo` e deve ter sido emitida nos últimos 6 minutos.

Você deve enviar solicitações com SAML iniciado pelo IdP para o `/saml2/idpresponse`. Para solicitações de autorização de login gerenciado e iniciadas pelo SP, forneça parâmetros que identifiquem o cliente da aplicação solicitado, os escopos, o URI de redirecionamento e outros detalhes, como parâmetros da string de consulta nas solicitações `HTTP GET`. Entretanto, para declarações de SAML iniciadas pelo IdP, os detalhes da solicitação devem ser formatados como um parâmetro `RelayState` no corpo de uma solicitação `HTTP POST`. O corpo da solicitação também deve conter sua declaração de SAML como um parâmetro `SAMLResponse`.

Veja a seguir um exemplo de solicitação e resposta para um provedor SAML iniciado pelo IdP.

```
POST /saml2/idpresponse HTTP/1.1
User-Agent: USER_AGENT
Accept: */*
Host: example.auth.us-east-1.amazoncognito.com
Content-Type: application/x-www-form-urlencoded

SAMLResponse=[Base64-encoded SAML assertion]&RelayState=identity_provider%3DMySAMLIdP%26client_id%3D1example23456789%26redirect_uri%3Dhttps%3A%2F%2Fwww.example.com%26response_type%3Dcode%26scope%3Demail%2Bopenid%2Bphone

HTTP/1.1 302 Found
Date: Wed, 06 Dec 2023 00:15:29 GMT
Content-Length: 0
x-amz-cognito-request-id: 8aba6eb5-fb54-4bc6-9368-c3878434f0fb
Location: https://www.example.com?code=[Authorization code]
```

------
#### [ Console de gerenciamento da AWS ]

**Para configurar um IdP para SAML iniciado pelo IdP**

1. Crie um [grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html), um [cliente de aplicação](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-configuring-app-integration.html) e um provedor de identidades SAML.

1. Desassocie todos os provedores de identidade social e OIDC do seu cliente de aplicação, se houver algum associado.

1. Navegue até o menu **Provedores sociais e externos** do grupo de usuários.

1. Edite ou adicione um provedor SAML.

1. Em **Login de SAML iniciado por IdP**, escolha **Aceitar declarações de SAML iniciadas pelo SP e iniciadas pelo IdP**.

1. Escolha **Salvar alterações**.

------
#### [ API/CLI ]

**Para configurar um IdP para SAML iniciado pelo IdP**

Configure o SAML iniciado pelo IdP com o `IDPInit` parâmetro em uma solicitação de API [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html)ou [UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html)API. Veja a seguir um exemplo de `ProviderDetails` de um IdP que oferece suporte ao SAML iniciado pelo IdP.

```
"ProviderDetails": { 
      "MetadataURL" : "https://myidp.example.com/saml/metadata",
      "IDPSignout" : "true",
      "RequestSigningAlgorithm" : "rsa-sha256",
      "EncryptedResponses" : "true",
      "IDPInit" : "true"
}
```

------

# Como desconectar usuários do SAML com logout único
<a name="cognito-user-pools-saml-idp-sign-out"></a>

O Amazon Cognito oferece suporte ao [logout único](http://docs.oasis-open.org/security/saml/Post2.0/sstc-saml-tech-overview-2.0-cd-02.html#5.3.Single%20Logout%20Profile|outline) (SLO) do SAML 2.0. Com o SLO, seu aplicativo pode desconectar usuários de seus provedores de identidade SAML (IdPs) quando eles se desconectam do seu grupo de usuários. Dessa forma, quando os usuários quiserem entrar na aplicação novamente, precisam fazer a autenticação com o IdP SAML. Caso contrário, eles podem ter cookies do navegador do IdP ou do grupo de usuários que os transmitem à aplicação sem a necessidade de inserir credenciais.

Quando você configura seu IdP SAML para aceitar o **Fluxo de logout**, o Amazon Cognito redireciona seu usuário com uma solicitação de logout de SAML assinada para seu IdP. O Amazon Cognito determina o local de redirecionamento a partir do URL `SingleLogoutService` nos metadados do seu IdP. O Amazon Cognito assina a solicitação de desconexão com seu certificado de assinatura do grupo de usuários.

![\[Diagrama de fluxo de autenticação de logout do SAML do Amazon Cognito. O usuário solicita o logout e o Amazon Cognito o redireciona para seu provedor com uma solicitação de desconexão do SAML.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/scenario-authentication-saml-sign-out.png)


Quando você direciona um usuário com uma sessão de SAML para o endpoint `/logout` do grupo de usuários, o Amazon Cognito redireciona seu usuário do SAML com a seguinte solicitação para o endpoint de SLO especificado nos metadados do IdP.

```
https://[SingleLogoutService endpoint]?
SAMLRequest=[encoded SAML request]&
RelayState=[RelayState]&
SigAlg=http://www.w3.org/2001/04/xmldsig-more#rsa-sha256&
Signature=[User pool RSA signature]
```

Em seguida, seu usuário retorna ao seu endpoint `saml2/logout` com um `LogoutResponse` de seu IdP. Seu IdP deve enviar a `LogoutResponse` em uma solicitação `HTTP POST`. Em seguida, o Amazon Cognito faz o redirecionamento para o destino de redirecionamento a partir da solicitação inicial de desconexão.

Seu provedor de SAML pode enviar um `LogoutResponse` com mais de um `AuthnStatement`. O `sessionIndex` no primeiro `AuthnStatement` em uma resposta desse tipo deve corresponder ao `sessionIndex` na resposta SAML que autenticou originalmente o usuário. Se `sessionIndex` estiver em qualquer outro `AuthnStatement`, o Amazon Cognito não reconhecerá a sessão e seu usuário não será desconectado.

------
#### [ Console de gerenciamento da AWS ]

**Para configurar a desconexão do SAML**

1. Crie um [grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html), um [cliente de aplicação](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-configuring-app-integration.html) e um IdP SAML.

1. Ao criar ou editar seu provedor de identidades SAML, em **Informações do provedor de identidades**, marque a caixa com o título **Adicionar fluxo de saída**.

1. No menu **Provedores sociais e externos** do grupo de usuários, selecione seu IdP e localize o **Certificado de assinatura**.

1. Escolha **Baixar como .crt**.

1. Configure seu provedor SAML para oferecer suporte ao logout único e à assinatura de solicitações do SAML, além de carregar o certificado de assinatura do grupo de usuários. Seu IdP deve redirecionar para `/saml2/logout` no domínio do grupo de usuários.

------
#### [ API/CLI ]

**Para configurar a desconexão do SAML**

Configure o logout único com o `IDPSignout` parâmetro de uma solicitação de [UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html)API [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html)ou. Veja a seguir um exemplo de `ProviderDetails` de um IdP compatível com o logout único do SAML.

```
"ProviderDetails": { 
      "MetadataURL" : "https://myidp.example.com/saml/metadata",
      "IDPSignout" : "true",,
      "RequestSigningAlgorithm" : "rsa-sha256",
      "EncryptedResponses" : "true",
      "IDPInit" : "true"
}
```

------

# Assinatura e criptografia SAML
<a name="cognito-user-pools-SAML-signing-encryption"></a>

O login do SAML 2.0 acontece com base no usuário de uma aplicação como portador de solicitações e respostas em seu fluxo de autenticação. Talvez você queira que os usuários não leiam nem modifiquem esses documentos SAML em trânsito. Para fazer isso, adicione assinatura e criptografia SAML aos provedores de identidade SAML (IdPs) em seu grupo de usuários. Com a assinatura SAML, seus grupos de usuários adicionam uma assinatura às solicitações de login e saída do SAML. Com a chave pública do grupo de usuários, seu IdP pode verificar se está recebendo solicitações SAML não modificadas. Então, quando seu IdP responde e transmite as declarações de SAML para as sessões do navegador dos usuários, o IdP pode criptografar essa resposta para que o usuário não inspecione seus próprios atributos e direitos.

Com a assinatura e criptografia do SAML, todas as operações criptográficas durante as operações do SAML do grupo de usuários devem gerar assinaturas e texto cifrado com as chaves geradas pelo Amazon Cognito. user-pool-provided Atualmente, você não pode configurar um grupo de usuários para assinar solicitações ou aceitar declarações criptografadas usando uma chave externa.

**nota**  
Seus certificados de grupo de usuários são válidos por 10 anos. Uma vez por ano, o Amazon Cognito gera novos certificados de assinatura e criptografia para seu grupo de usuários. O Amazon Cognito retorna o certificado mais recente quando você solicita o certificado de assinatura e assina as solicitações com o certificado de assinatura mais recente. Seu IdP pode criptografar declarações SAML com qualquer certificado de criptografia de grupo de usuários que não tenha expirado. Seus certificados anteriores continuam válidos até o fim do prazo, e a chave pública não muda entre os certificados. Como prática recomendada, atualize anualmente o certificado na configuração do seu provedor.

**Topics**
+ [

## Aceitar respostas SAML criptografadas do seu IdP
](#cognito-user-pools-SAML-encryption)
+ [

## Assinatura de solicitações SAML
](#cognito-user-pools-SAML-signing)

## Aceitar respostas SAML criptografadas do seu IdP
<a name="cognito-user-pools-SAML-encryption"></a>

O Amazon Cognito e seu IdP podem estabelecer confidencialidade nas respostas do SAML quando os usuários fazem login e logout. O Amazon Cognito atribui um par de chaves RSA público-privado e um certificado a cada provedor externo de SAML que você configura no seu grupo de usuários. Ao ativar a criptografia de resposta para seu provedor de SAML do grupo de usuários, carregue o certificado em um IdP que aceite respostas SAML criptografadas. A conexão do grupo de usuários com o IdP SAML só funciona quando o IdP começa a criptografar todas as declarações do SAML com a chave fornecida.

Veja a seguir uma visão geral do fluxo de login com SAML criptografado.

1. Seu usuário inicia o login e escolhe o IdP SAML.

1. Seu grupo de usuários [Autorizar endpoint](authorization-endpoint.md) redireciona o usuário para o IdP SAML com uma solicitação de login do SAML. Seu grupo de usuários pode, como opção, colocar nessa solicitação uma assinatura que permita a verificação da integridade pelo IdP. Quando quiser assinar solicitações SAML, você deve configurar seu IdP para aceitar solicitações que seu grupo de usuários tenha assinado com a chave pública no certificado de assinatura.

1. O IdP SAML faz login com seu usuário e gera uma resposta SAML. O IdP criptografa a resposta com a chave pública e redireciona o usuário para o endpoint `/saml2/idpresponse` do grupo de usuários. O IdP deve criptografar a resposta conforme definido pela especificação SAML 2.0. Para obter mais informações, consulte `Element <EncryptedAssertion>` em [Declarações e protocolos para o OASIS Security Assertion Markup Language (SAML) V2.0](https://docs.oasis-open.org/security/saml/v2.0/saml-core-2.0-os.pdf).

1. Seu grupo de usuários decifra o texto cifrado na resposta SAML com a chave privada e faz login com seu usuário.

**Importante**  
Quando você ativa a criptografia de resposta para um IdP SAML em seu grupo de usuários, o IdP deve criptografar todas as respostas com uma chave pública específica do provedor. O Amazon Cognito não aceita respostas SAML não criptografadas de um IdP externo SAML que você configura para aceitar a criptografia. 

Qualquer IdP SAML externo no grupo de usuários pode aceitar criptografia de resposta, e cada IdP recebe seu próprio par de chaves.

------
#### [ Console de gerenciamento da AWS ]

**Para configurar a criptografia de resposta SAML**

1. Crie um [grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html), um [cliente de aplicação](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-configuring-app-integration.html) e um IdP SAML.

1. Ao criar ou editar seu provedor de identidades SAML, em **Assinar solicitações e criptografar respostas**, marque a caixa com o título **Exigir declarações de SAML criptografadas desse provedor**.

1. No menu **Provedores sociais e externos** do grupo de usuários, selecione o IdP SAML e clique em **Exibir certificado de criptografia**.

1. Escolha **Baixar como .crt** e envie o arquivo baixado ao seu IdP SAML. Configure o IdP SAML para criptografar as respostas do SAML com a chave no certificado.

------
#### [ API/CLI ]

**Para configurar a criptografia de resposta SAML**

Configure a criptografia de resposta com o `EncryptedResponses` parâmetro de uma solicitação [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html)ou de [UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html)API. Veja a seguir um exemplo de `ProviderDetails` de um IdP compatível com a assinatura da solicitação.

```
"ProviderDetails": { 
      "MetadataURL" : "https://myidp.example.com/saml/metadata",
      "IDPSignout" : "true",
      "RequestSigningAlgorithm" : "rsa-sha256",
      "EncryptedResponses" : "true",
      "IDPInit" : "true"
}
```

Para obter o certificado de criptografia do seu grupo de usuários, faça uma solicitação de [DescribeIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeIdentityProvider.html)API e recupere o valor de `ActiveEncryptionCertificate` no parâmetro `ProviderDetails` de resposta. Salve esse certificado e envie-o ao seu IdP como certificado de criptografia para solicitações de login do seu grupo de usuários.

------

## Assinatura de solicitações SAML
<a name="cognito-user-pools-SAML-signing"></a>

A possibilidade de provar a integridade das solicitações do SAML 2.0 ao seu IdP é uma vantagem de segurança do login do SAML iniciado pelo SP do Amazon Cognito. Cada grupo de usuários com um domínio recebe um certificado de assinatura X.509. Com a chave pública nesse certificado, os grupos de usuários aplicam uma assinatura criptográfica às *solicitações de saída* que seu grupo de usuários gera quando os usuários selecionam um IdP SAML. Como opção, você pode configurar seu cliente de aplicação para assinar *solicitações de login* SAML. Quando você assina a solicitações SAML, seu IdP pode verificar se a assinatura nos metadados XML de suas solicitações corresponde à chave pública no certificado do grupo de usuários que você fornece.

------
#### [ Console de gerenciamento da AWS ]

**Para configurar a assinatura da solicitação SAML**

1. Crie um [grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html), um [cliente de aplicação](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-configuring-app-integration.html) e um IdP SAML.

1. Ao criar ou editar seu provedor de identidades SAML, em **Assinar solicitações e criptografar respostas**, marque a caixa com o título **Assinar solicitações SAML neste provedor**.

1. No menu **Provedores sociais e externos** do grupo de usuários, selecione **Ver certificado de assinatura**.

1. Escolha **Baixar como .crt** e envie o arquivo baixado ao seu IdP SAML. Configure seu IdP SAML para verificar a assinatura das solicitações SAML recebidas.

------
#### [ API/CLI ]

**Para configurar a assinatura da solicitação SAML**

Configure a assinatura da solicitação com o `RequestSigningAlgorithm` parâmetro de uma solicitação [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html)ou de [UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html)API. Veja a seguir um exemplo de `ProviderDetails` de um IdP compatível com a assinatura da solicitação.

```
"ProviderDetails": { 
      "MetadataURL" : "https://myidp.example.com/saml/metadata",
      "IDPSignout" : "true",
      "RequestSigningAlgorithm" : "rsa-sha256",
      "EncryptedResponses" : "true",
      "IDPInit" : "true"
}
```

------

# Nomes e identificadores do provedor de identidades SAML
<a name="cognito-user-pools-managing-saml-idp-naming"></a>

Ao nomear seus provedores de identidade SAML (IdPs) e atribuir identificadores de IdP, você pode automatizar o fluxo de solicitações de entrada e saída iniciadas pelo SP para esse provedor. Para obter informações sobre restrições de string ao nome do provedor, consulte a `ProviderName` propriedade de. [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html#CognitoUserPools-CreateIdentityProvider-request-ProviderName)

![\[Diagrama de fluxo de autenticação do login SAML iniciado pelo SP do Amazon Cognito com um identificador de IdP e login gerenciado. O usuário fornece um endereço de e-mail para login gerenciado e o Amazon Cognito o redireciona automaticamente para seu provedor.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/scenario-authentication-saml-identifier.png)


Você também pode escolher até 50 identificadores para os provedores SAML. Identificador é um nome amigável para um IdP em seu grupo de usuários e deve ser exclusivo dentro do grupo. Se os identificadores SAML corresponderem aos domínios de e-mail dos usuários, o login gerenciado solicitará o endereço de e-mail de cada usuário, avaliará o domínio em seu endereço de e-mail e os redirecionará para o IdP que corresponde ao domínio. Como a mesma organização pode ter vários domínios, um único IdP pode ter vários identificadores.

Independentemente de você usar identificadores de domínio de e-mail, é possível usar identificadores em uma aplicação multilocatário para redirecionar os usuários para o IdP correto. Quando quiser ignorar totalmente o login gerenciado, você pode personalizar os links que apresenta aos usuários para que eles sejam redirecionados por [Autorizar endpoint](authorization-endpoint.md) diretamente para o IdP. Para cadastrar usuários com um identificador e redirecionar para o IdP, inclua o identificador no formato `idp_identifier=myidp.example.com` nos parâmetros de solicitação da solicitação de autorização inicial.

Outro método para passar um usuário para o seu IdP é preencher o parâmetro `identity_provider` com o nome do IdP no seguinte formato de URL.

```
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
identity_provider=MySAMLIdP&
client_id=1example23456789&
redirect_uri=https://www.example.com
```

Depois que o usuário faz login com seu IdP SAML, ele o redireciona com uma resposta SAML no corpo `HTTP POST` para o endpoint `/saml2/idpresponse`. O Amazon Cognito processa a declaração do SAML e, se as declarações na resposta atenderem às expectativas, redireciona para a URL de retorno de chamada do cliente de aplicação. Depois que seu usuário tiver concluído a autenticação dessa forma, ele poderá interagir com páginas da Web somente para seu IdP e aplicação.

Com identificadores de IdP em formato de domínio, o login gerenciado solicita endereços de e-mail no login e, quando o domínio de e-mail corresponde a um identificador de IdP, redireciona os usuários para a página de login do IdP. Por exemplo, você cria uma aplicação que exige o login de funcionários de duas empresas diferentes. A primeira empresa, AnyCompany A, possui `exampleA.com` `exampleA.co.uk` e. A segunda empresa, AnyCompany B, possui`exampleB.com`. Neste exemplo, você configurou dois IdPs, um para cada empresa, da seguinte forma: 
+ Para o IdP A, você define os identificadores `exampleA.com` e `exampleA.co.uk`.
+ Para o IdP B, você define o identificador `exampleB.com`.

Na aplicação, invoque o login gerenciado para seu cliente da aplicação para solicitar que cada usuário insira seu endereço de e-mail. O Amazon Cognito traz o domínio do endereço de e-mail, correlaciona o domínio a um IdP com um identificador de domínio e redireciona seu usuário para o IdP correto com uma solicitação para [Autorizar endpoint](authorization-endpoint.md) que contém um parâmetro de solicitação `idp_identifier`. Por exemplo, se um usuário inserir `bob@exampleA.co.uk`, a próxima página com a qual ele vai interagir é a página de login do IdP em `https://auth.exampleA.co.uk/sso/saml`.

Também é possível implementar a mesma lógica de forma independente. Na aplicação, você pode criar um formulário personalizado que coleta as entradas do usuário e as correlaciona com o IdP correto de acordo com sua própria lógica. Você pode gerar portais personalizados para cada um dos locatários da aplicação, em que cada um é vinculado ao endpoint de autorização com o identificador do locatário nos parâmetros da solicitação.

Para coletar um endereço de e-mail e analisar o domínio no login gerenciado, atribua pelo menos um identificador a cada IdP SAML que você atribuiu ao cliente da aplicação. Por padrão, a tela de login gerenciado exibe um botão para cada um dos IdPs que você atribuiu ao seu cliente de aplicativo. Mas se tiver atribuído os identificadores com êxito, a página de login da IU hospedada clássica será semelhante à imagem a seguir.

![\[Uma página de login do login gerenciado no Amazon Cognito exibindo um login de usuário local e uma solicitação para que um usuário federado insira um endereço de e-mail.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/cup-saml-identifiers.png)


**nota**  
Na interface de usuário hospedada clássica, a página de login do seu cliente de aplicativo solicita automaticamente um endereço de e-mail quando você atribui identificadores ao seu. IdPs Na experiência de login gerenciado, você deve habilitar esse comportamento no editor de identidade visual. Na categoria de configurações **Comportamento de autenticação**, selecione **Entrada de pesquisa de domínio** sob o cabeçalho **Exibição do provedor**.

A análise de domínio no login gerenciado exige que você use domínios como identificadores de IdP. Se você atribuir um identificador de qualquer tipo a cada SAML IdPs de um cliente de aplicativo, o login gerenciado desse aplicativo não exibirá mais os botões de seleção de IDP. Adicione identificadores de IdP para SAML quando você quiser usar análise de e-mail ou lógica personalizada para gerar redirecionamentos. Quando você quiser gerar redirecionamentos silenciosos e também quiser que suas páginas de login gerenciadas exibam uma lista de IdPs, não atribua identificadores e use o parâmetro de `identity_provider` solicitação em suas solicitações de autorização.
+ Se você atribuir somente um IdP SAML ao cliente da aplicação, a página de login do login gerenciado exibirá um botão para fazer login com esse IdP.
+ Se você atribuir um identificador a cada IdP SAML ativado para o cliente da aplicação, na página de login do login gerenciado, será exibido um prompt de entrada para inserção de um endereço de e-mail.
+ Se você tiver vários IdPs e não atribuir um identificador a todos eles, a página de login gerenciado exibirá um botão para entrar com cada IdP atribuído.
+ Se você atribuiu identificadores à sua IdPs e deseja que suas páginas de login gerenciadas exibam uma seleção de botões de IdP, adicione um novo IdP que não tenha identificador no seu cliente de aplicativo ou crie um novo cliente de aplicativo. Também é possível excluir um IdP existente e adicioná-lo novamente sem um identificador. Se você criar um IdP, seus usuários do SAML criarão novos perfis de usuário. Essa duplicação de usuários ativos pode afetar a cobrança no mês em que você altera a configuração do IdP.

Para obter mais informações sobre a configuração do IdP, consulte [Como configurar provedores de identidade para seu grupo de usuários](cognito-user-pools-identity-provider.md).

# Como usar provedores de identidade OIDC com um grupo de usuários
<a name="cognito-user-pools-oidc-idp"></a>

Os usuários podem entrar no seu aplicativo usando suas contas existentes dos provedores de identidade do OpenID Connect (OIDC) (). IdPs Com os provedores do OIDC, os usuários de sistemas independentes de login único podem fornecer as credenciais existentes enquanto a aplicação recebe tokens do OIDC no formato compartilhado dos grupos de usuários. Para configurar um IdP OIDC, configure seu IdP para gerenciar o grupo de usuários como a RP e configure sua aplicação para gerenciar o grupo de usuários como o IdP. O Amazon Cognito serve como uma etapa intermediária entre vários OIDC IdPs e seus aplicativos. O grupo de usuários aplica regras de mapeamento de atributos às declarações nos tokens de ID e acesso que o provedor transmite diretamente para o grupo de usuários. O Amazon Cognito então emite novos tokens com base nos atributos de usuário mapeados e em quaisquer ajustes adicionais que você tenha feito no fluxo de autenticação com [acionadores do Lambda](cognito-user-pools-working-with-lambda-triggers.md#lambda-triggers-for-federated-users).

Os usuários que fazem login com um IdP do OIDC não precisam fornecer novas credenciais ou informações para acessar a aplicação de grupo de usuários. Sua aplicação pode redirecioná-los silenciosamente para seu IdP para login, com um grupo de usuários como uma ferramenta em segundo plano que padroniza o formato do token da aplicação. Para saber mais sobre o redirecionamento de IdP, consulte [Autorizar endpoint](authorization-endpoint.md).

Assim como com outros provedores de identidade de terceiros, você deve registrar a aplicação no provedor OIDC e obter informações sobre a aplicação IdP que deseja conectar ao seu grupo de usuários. Um IdP de grupo de usuários OIDC exige um ID do cliente, segredo do cliente, escopos que você deseja solicitar e informações sobre endpoints de serviços do provedor. Seu grupo de usuários pode descobrir os endpoints OIDC do provedor a partir de um endpoint de descoberta. Ou você pode inseri-los manualmente. Você também deve examinar os tokens de ID do provedor e criar mapeamentos de atributos entre o IdP e os atributos em seu grupo de usuários.

![\[Fluxo de autenticação do IdP do grupo de usuários do OIDC\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/flow-cup-oidc-endpoints.png)


Consulte [Fluxo de autenticação do IdP do grupo de usuários do OIDC](cognito-user-pools-oidc-flow.md) para obter mais detalhes sobre esse fluxo de autenticação.

**nota**  
O login por meio de um terceiro (federação) está disponível em grupos de usuários do Amazon Cognito. Esse recurso é independente da federação OIDC com bancos de identidades do Amazon Cognito.

Você pode adicionar um IdP OIDC ao seu grupo de usuários no Console de gerenciamento da AWS, por meio do ou com o método da AWS CLI API do grupo de usuários. [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html)

**Topics**
+ [

## Pré-requisitos
](#cognito-user-pools-oidc-idp-prerequisites)
+ [

## Registrar uma aplicação com um IdP OIDC
](#cognito-user-pools-oidc-idp-step-1)
+ [

## Adicionar um IdP OIDC ao seu grupo de usuários
](#cognito-user-pools-oidc-idp-step-2)
+ [

## Testar a configuração de IdP OIDC
](#cognito-user-pools-oidc-idp-step-3)
+ [

# Fluxo de autenticação do IdP do grupo de usuários do OIDC
](cognito-user-pools-oidc-flow.md)

## Pré-requisitos
<a name="cognito-user-pools-oidc-idp-prerequisites"></a>

Antes de começar, você precisará fazer o seguinte:
+ Um grupo de usuários com um cliente da aplicação e um domínio do grupo de usuários. Para obter mais informações, consulte [Criar um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).
+ Um IdP OIDC com a seguinte configuração: 
  + Comporta a autenticação de cliente `client_secret_post`. O Amazon Cognito não verifica a declaração `token_endpoint_auth_methods_supported` no endpoint de descoberta OIDC para seu IdP. O Amazon Cognito não comporta a autenticação de cliente `client_secret_basic`. Para obter mais informações sobre a autenticação do cliente, consulte [Autenticação de cliente](https://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication) na documentação do OpenID Connect.
  + Só usa HTTPS para endpoints OIDC, como `openid_configuration`, `userInfo` e `jwks_uri`.
  + Só usa as portas TCP 80 e 443 para endpoints OIDC.
  + Só assina tokens de ID com algoritmos HMAC-SHA, ECDSA ou RSA.
  + Publica uma reivindicação de ID de chave `kid` no `jwks_uri` e inclui uma reivindicação `kid` nos respectivos tokens.
  + Apresenta uma chave pública não expirada com uma cadeia de confiança de CA raiz válida.

## Registrar uma aplicação com um IdP OIDC
<a name="cognito-user-pools-oidc-idp-step-1"></a>

Antes de adicionar um IdP OIDC à configuração do grupo de usuários e atribuí-lo aos clientes da aplicação, você configura uma aplicação cliente do OIDC no IdP. Seu grupo de usuários é a aplicação de parte confiável que gerenciará a autenticação com o IdP.

**Para registrar com um IdP OIDC**

1. Crie uma conta de desenvolvedor com o IdP OIDC.  
**Links para o OIDC IdPs**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/cognito-user-pools-oidc-idp.html)

1. Inscreva o URL do domínio do grupo de usuários com o endpoint `/oauth2/idpresponse` com o IdP OIDC. Isso garante que o IdP OIDC o aceite posteriormente no Amazon Cognito quando autenticar os usuários.

   ```
   https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/idpresponse
   ```

1. Selecione os [escopos](cognito-user-pools-define-resource-servers.md#cognito-user-pools-define-resource-servers-about-scopes) que você deseja que seu diretório de usuários compartilhe com o grupo de usuários. O escopo **openid** é necessário para que o OIDC ofereça qualquer IdPs informação do usuário. O escopo `email` é necessário para conceder acesso às [declarações](https://openid.net/specs/openid-connect-basic-1_0.html#StandardClaims) `email` e `email_verified`. Escopos adicionais na especificação do OIDC são `profile` para todos os atributos do usuário e `phone` para `phone_number` e `phone_number_verified`.

1. O IdP OIDC fornece um ID e uma chave secreta do cliente. Anote esses valores e adicione-os à configuração do IdP OIDC que você adicionará posteriormente ao grupo de usuários.

**Exemplo: usar o Salesforce como um IdP OIDC com o grupo de usuários**

 Você usa um IdP OIDC quando deseja estabelecer confiança entre um IdP compatível com OIDC, como o Salesforce e seu grupo de usuários.

1. [Crie uma conta](https://developer.salesforce.com/signup) no site de desenvolvedores do Salesforce.

1. [Faça login na conta de desenvolvedor que você criou na etapa anterior.](https://developer.salesforce.com)

1. Na página do Salesforce, execute um dos seguintes procedimentos:
   +  Se você estiver usando o Lightning Experience, escolha o ícone de engrenagem da configuração e, depois, **Setup Home** (Página inicial de configuração).
   +  Se você estiver usando o Salesforce Classic e você visualizar **Setup (Configuração)** no cabeçalho da interface do usuário, selecione-o.
   +  Se você estiver usando o Salesforce Classic e você não visualizar **Setup (Configuração)** no cabeçalho, selecione seu nome na barra de navegação superior e selecione **Setup (Configuração)** na lista suspensa.

1. Na barra de navegação à esquerda, escolha **Company Settings (Configurações da empresa)**. 

1. Na barra de navegação, escolha **Domain** (Domínio), insira um domínio e escolha **Create** (Criar). 

1. Na barra de navegação à esquerda, em **Platform Tools** (Ferramentas de plataforma), escolha **Apps** (Aplicações). 

1. Escolha **App Manager (Gerenciador de aplicativos)**.

1. 

   1. Escolha **New connected app** (Nova aplicação conectada).

   1. Preencha os campos necessários.

      Em **Start URL** (URL de início), insira um URL no endpoint `/authorize` para o domínio do grupo de usuários que faz login em seu IdP Salesforce. Quando seus usuários acessam sua aplicação conectada, o Salesforce os direciona para esse URL para concluir o login. Em seguida, o Salesforce redireciona os usuários para o URL de retorno de chamada que você associou ao cliente de aplicação.

      ```
      https://mydomain.auth.us-east-1.amazoncognito.com/authorize?response_type=code&client_id=<your_client_id>&redirect_uri=https://www.example.com&identity_provider=CorpSalesforce
      ```

   1. Ative **OAuth as configurações** e insira a URL do `/oauth2/idpresponse` endpoint do seu domínio do grupo de usuários em URL de **retorno de chamada**. Esse é o URL em que o Salesforce emite o código de autorização que o Amazon Cognito troca por um token. OAuth 

      ```
      https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/idpresponse
      ```

1. Selecione seus [escopos](https://openid.net/specs/openid-connect-basic-1_0.html#Scopes). Você deve incluir o escopo **openid**. Para conceder acesso às [declarações](https://openid.net/specs/openid-connect-basic-1_0.html#StandardClaims) **email** e **email\$1verified**, adicione o escopo **email**. Escopos separados por espaços.

1. Escolha **Criar**.

   No Salesforce, o ID do cliente é chamado de **Consumer Key (Chave do consumidor)** e a chave secreta do cliente é uma **Consumer Secret (Chave secreta do consumidor)**. Anote o ID e a chave secreta do cliente. Você poderá usá-los na próxima seção.

## Adicionar um IdP OIDC ao seu grupo de usuários
<a name="cognito-user-pools-oidc-idp-step-2"></a>

Após configurar o IdP, você pode configurar o grupo de usuários para lidar com solicitações de autenticação com um IdP OIDC.

------
#### [ Amazon Cognito console ]

**Adicionar um IdP OIDC no console**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas credenciais da AWS .

1. Escolha **User Pools** (Grupos de usuários) no menu de navegação.

1. Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Clique no menu **Provedores sociais e externos** e selecione **Adicionar um provedor de identidade**.

1. Escolha um IdP **OpenID Connect**.

1. Insira um **Nome do provedor** exclusivo.

1. Insira o **ID do cliente** do IdP. Esse é o ID do cliente da aplicação que você criou no IdP OIDC. O ID do cliente fornecido deve ser um provedor OIDC que você configurou com um URL de retorno de chamada de `https://[your user pool domain]/oauth2/idpresponse`.

1. Insira o **Segredo do cliente** do IdP. Esse deve ser o segredo do cliente para o mesmo cliente da aplicação da etapa anterior.

1. <a name="cognito-user-pools-oidc-step-2-substep-9"></a>Insira os **Authorized scopes** (Escopos autorizados) para esse provedor. Os escopos definem quais grupos de atributos do usuário (como `name` e `email`) sua aplicação solicitará ao seu provedor. Os escopos devem ser separados por espaços, seguindo a especificação [OAuth2.0](https://tools.ietf.org/html/rfc6749#section-3.3).

   O IdP pode solicitar que os usuários consintam em fornecer esses atributos à aplicação quando fizerem login.

1. Escolha um **método de solicitação de atributo**. IdPspode exigir que as solicitações para seus `userInfo` endpoints sejam formatadas como ou. `GET` `POST` O endpoint `userInfo` do Amazon Cognito exige solicitações `HTTP GET`, por exemplo.

1. Selecione um **Método de configuração** para definir como o grupo de usuários determinará o caminho para os principais endpoints de federação OIDC no IdP. Normalmente, IdPs hospeda um `/well-known/openid-configuration` endpoint em um URL base do emissor. Se esse for o caso do seu provedor, a opção **Preenchimento automático por meio do URL do emissor** solicitará esse URL base, tentará acessar o caminho `/well-known/openid-configuration` com base nele e lerá os endpoints listados. Você pode ter caminhos de endpoint não típicos ou deseja encaminhar solicitações para um ou mais endpoints por meio de um proxy alternativo. Nesse caso, selecione **Entrada manual** e especifique caminhos para os endpoints `authorization`, `token`, `userInfo` e `jwks_uri`.
**nota**  
O URL deve começar com `https://` e não deve terminar com uma barra `/`. Somente os números de porta 443 e 80 podem ser usados com esse URL. Por exemplo, Salesforce usa este URL:  
`https://login.salesforce.com`   
Se você escolher preenchimento automático, o documento de descoberta deverá usar HTTPS para os seguintes valores: `authorization_endpoint`, `token_endpoint`, `userinfo_endpoint` e `jwks_uri`. Caso contrário, o login falhará.

1. Configure as regras de mapeamento de atributos em **Mapear atributos entre o provedor OpenID Connect e o grupo de usuários**. **Atributo do grupo de usuários** é o atributo de *destino* no perfil de usuário do Amazon Cognito e o **atributo OpenID Connect** é o atributo de *origem* que você deseja que o Amazon Cognito encontre em uma declaração de token de ID ou resposta `userInfo`. O Amazon Cognito mapeia automaticamente a declaração OIDC **sub** para `username` no perfil do usuário de destino.

   Para obter mais informações, consulte [Mapeamento de atributos de IdP para perfis e tokens](cognito-user-pools-specifying-attribute-mapping.md).

1. Selecione **Adicionar provedor de identidade**.

1. No menu **Clientes da aplicação**, selecione um cliente da aplicação na lista. Navegue até a guia **Páginas de login** e, em **Configuração gerenciada de páginas de login**, clique em **Editar**. Localize **provedores de identidades **e adicione o novo IdP OIDC.

1. Escolha **Salvar alterações**.

------
#### [ API/CLI ]

Veja a configuração do OIDC no exemplo dois em. [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html#API_CreateIdentityProvider_Example_2) Você pode modificar essa sintaxe e usá-la como o corpo da `CreateIdentityProvider` solicitação ou `UpdateIdentityProvider` o arquivo `--cli-input-json` de entrada para [create-identity-provider](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-identity-provider.html).

------

## Testar a configuração de IdP OIDC
<a name="cognito-user-pools-oidc-idp-step-3"></a>

Na aplicação, você deve invocar um navegador no cliente do usuário para que ele possa fazer login com o provedor OIDC. Teste o login com seu provedor após concluir os procedimentos de configuração nas seções anteriores. O exemplo de URL a seguir carrega a página de login do grupo de usuários com um domínio de prefixo.

```
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com
```

Esse link é a página para a qual o Amazon Cognito direcionará você ao acessar o menu **Clientes da aplicação**, selecionar um cliente da aplicação, navegar até a guia **Páginas de login** e selecionar **Visualizar página de login**. Para obter mais informações sobre domínios do grupo de usuários, consulte [Como configurar um domínio de grupo de usuários](cognito-user-pools-assign-domain.md). Para obter mais informações sobre clientes de aplicativos, incluindo cliente IDs e retorno de chamada URLs, consulte[Configurações específicas da aplicação com clientes de aplicação](user-pool-settings-client-apps.md).

O link de exemplo a seguir configura o redirecionamento silencioso para o provedor `MyOIDCIdP` por meio do [Autorizar endpoint](authorization-endpoint.md) com um parâmetro de consulta `identity_provider`. Esse URL ignora o login interativo do grupo de usuários com login gerenciado e leva diretamente à página de login do IdP.

```
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?identity_provider=MyOIDCIdP&response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com
```

# Fluxo de autenticação do IdP do grupo de usuários do OIDC
<a name="cognito-user-pools-oidc-flow"></a>

Com o login do OpenID Connect (OIDC), seu grupo de usuários automatiza um fluxo de login com código de autorização em seu provedor de identidades (IdP). Depois que o usuário conclui o login com o IdP, o Amazon Cognito coleta o código no endpoint `oauth2/idpresponse` do provedor externo. Com o token de acesso resultante, seu grupo de usuários consulta o endpoint `userInfo` do IdP para recuperar os atributos do usuário. Em seguida, seu grupo de usuários compara os atributos recebidos com as regras de mapeamento de atributos que você configurou e preenche o perfil do usuário e o token de ID adequadamente.

Os escopos OAuth 2.0 que você solicita na configuração do seu provedor OIDC definem os atributos do usuário que o IdP fornece ao Amazon Cognito. Como prática recomendada de segurança, solicite somente os escopos que correspondem aos atributos que você deseja mapear para seu grupo de usuários. Por exemplo, se seu grupo de usuários solicitar `openid profile`, você receberá todos os atributos possíveis, mas se solicitar `openid email phone_number`, você receberá apenas o endereço de e-mail e o número de telefone do usuário. Você pode configurar os escopos que você [solicita do OIDC IdPs](cognito-user-pools-oidc-idp.md#cognito-user-pools-oidc-step-2-substep-9) para serem diferentes daqueles que você autoriza e solicita na solicitação de autenticação do [cliente do aplicativo](user-pool-settings-client-apps.md#user-pool-settings-client-apps-scopes) e do grupo de usuários.

Quando o usuário faz login em sua aplicação usando um IdP OIDC, seu grupo de usuários conduz o seguinte fluxo de autenticação.

1. Um usuário acessa a página de login do login gerenciado e opta por fazer login com seu IdP OIDC.

1. Sua aplicação direciona o navegador do usuário para o endpoint de autorização do grupo de usuários.

1. O grupo de usuários redireciona a solicitação para o endpoint de autorização do IdP OIDC.

1. O IdP exibe uma solicitação de login.

1. Na aplicação, a sessão do usuário exibe uma solicitação de login para o IdP OIDC.

1. O usuário insere suas credenciais para o IdP ou apresenta um cookie para uma sessão já autenticada.

1. Depois que o usuário é autenticado, o IdP OIDC é redirecionado para o Amazon Cognito com um código de autorização.

1. O grupo de usuários troca o código de autorização por tokens de ID e acesso. O Amazon Cognito recebe tokens de acesso quando você configura o IdP com os escopos `openid`. As declarações no token de ID e na resposta `userInfo` são determinadas por escopos adicionais da configuração do IdP, por exemplo, `profile` e `email`.

1. O IdP emite os tokens solicitados.

1. Seu grupo de usuários determina o caminho do emissor para o `jwks_uri` endpoint do IdP na configuração do IdP e solicita URLs as chaves de assinatura do token do endpoint JSON web key set (JWKS).

1. O IdP retorna as chaves de assinatura do endpoint do JWKS.

1. O grupo de usuários valida os tokens do IdP com base nos dados de assinatura e expiração nos tokens.

1. O grupo de usuários autoriza uma solicitação para o endpoint `userInfo` do IdP com o token de acesso. O IdP responde com dados do usuário com base nos escopos do token de acesso.

1. O grupo de usuários compara o token de ID e a resposta `userInfo` do IdP com as regras de mapeamento de atributos no grupo de usuários. Ele grava atributos de IdP mapeados nos atributos do perfil do grupo de usuários.

1. O Amazon Cognito emite tokens do portador da aplicação, o que pode incluir tokens de identidade, acesso e atualização.

1. A aplicação processa os tokens do grupo de usuários e faz o login do usuário.

![\[Fluxo de autenticação do IdP do grupo de usuários do OIDC\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/flow-cup-oidc-endpoints.png)


**nota**  
O Amazon Cognito cancela solicitações de autenticação que não são concluídas em 5 minutos e redireciona o usuário para o login gerenciado. A página exibe a mensagem de erro `Something went wrong` (Ocorreu algum problema).

O OIDC é uma camada de identidade acima da OAuth 2.0, que especifica tokens de identidade formatados em JSON (JWT) que são emitidos pelos IdPs aplicativos clientes do OIDC (partes confiáveis). Consulte a documentação do IdP OIDC para obter informações sobre como adicionar o Amazon Cognito como uma parte dependente OIDC.

Quando um usuário se autentica com uma concessão de código de autorização, o grupo de usuários retorna tokens de ID, acesso e atualização. O token de ID é um token [OIDC](http://openid.net/specs/openid-connect-core-1_0.html) padrão para gerenciamento de identidade, e o token de acesso é um token [OAuth 2.0](https://oauth.net/2/) padrão. Para obter mais informações sobre os tipos de concessão que o cliente de aplicação do grupo de usuários pode comportar, consulte [Autorizar endpoint](authorization-endpoint.md).

## Como um grupo de usuários processa declarações de um provedor de OIDC
<a name="how-a-cognito-user-pool-processes-claims-from-an-oidc-provider"></a>

Quando o usuário conclui o login com um provedor OIDC de terceiros, o login gerenciado recupera um código de autorização do IdP. O grupo de usuários troca o código de autorização por tokens de acesso e ID com o endpoint `token` do IdP. O grupo de usuários não transmite esses tokens ao usuário ou à aplicação, mas os utiliza para criar um perfil de usuário com dados que ele apresenta em declarações nos próprios tokens.

 O Amazon Cognito não valida de forma independente o token de acesso. Em vez disso, ele solicita informações de atributos do usuário do endpoint `userInfo` do provedor e espera que a solicitação seja negada se o token não for válido.

O Amazon Cognito valida o token de ID do provedor com as seguintes verificações:

1. Confira se o provedor assinou o token com um algoritmo do seguinte conjunto: RSA, HMAC, Elliptic Curve.

1. Se o provedor assinou o token com um algoritmo de assinatura assimétrico, confira se o ID da chave de assinatura na declaração `kid` do token está listado no endpoint `jwks_uri` do provedor. O Amazon Cognito atualiza a chave de assinatura do endpoint do JWKS na configuração do IdP para cada token de ID de IdP que processa.

1. Compare a assinatura do token de ID com a assinatura que se espera com base nos metadados do provedor.

1. Compare a declaração `iss` com o emissor de OIDC configurado para o IdP.

1. Compare se a declaração `aud` corresponde ao ID do cliente configurado no IdP ou se ela contém o ID do cliente configurado se houver vários valores na declaração `aud`.

1. Confira se a data e a hora na declaração `exp` não é anterior à hora atual.

O grupo de usuários valida o token de ID e, depois, tenta fazer uma solicitação ao endpoint `userInfo` do provedor com o token de acesso do provedor. Ele recupera todas as informações do perfil do usuário que os escopos no token de acesso o autorizam a ler. Depois, o grupo de usuários procura os atributos do usuário definidos conforme necessário. É necessário criar mapeamentos para os atributos necessários na configuração do provedor. O grupo de usuários confere o token de ID do provedor e a resposta `userInfo`. O grupo de usuários grava todas as declarações que correlacionam regras de mapeamento e atributos do usuário no perfil do grupo de usuários. O grupo de usuários ignora atributos que, embora correspondam a uma regra de mapeamento, não são obrigatórios e não se encontram nas declarações do provedor.

# Mapeamento de atributos de IdP para perfis e tokens
<a name="cognito-user-pools-specifying-attribute-mapping"></a>

Os serviços de provedor de identidades (IdP), incluindo o Amazon Cognito, normalmente podem registrar mais informações sobre um usuário. Talvez você queira saber em qual empresa ele trabalha, como falar com ele e outras informações de identificação. Mas o formato que esses atributos assumem varia entre os provedores. Por exemplo, configure três IdPs de três fornecedores diferentes com seu grupo de usuários e examine um exemplo de declaração SAML, token de ID ou `userInfo` carga útil de cada um. Um deles representará o endereço de e-mail do usuário como `email`, outro como `emailaddress`, e o terceiro como `http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`.

Um grande benefício da consolidação IdPs com um grupo de usuários é a capacidade de mapear a variedade de nomes de atributos em um único esquema de token OIDC com nomes de atributos compartilhados, consistentes e previsíveis. Dessa forma, seus desenvolvedores não precisam manter a lógica para processar uma variedade complexa de eventos de autenticação única. Essa consolidação de formato é o mapeamento de atributos. O mapeamento de atributos do grupo de usuários adiciona nomes de atributos do IdP aos nomes de atributos do grupo de usuários correspondentes. Por exemplo, você pode configurar seu grupo de usuários para gravar o valor de uma reivindicação `emailaddress` no atributo padrão do grupo de usuários `email`.

Cada IdP do grupo de usuários tem um esquema de mapeamento de atributos separado. Para especificar mapeamentos de atributos para seu IdP, configure um provedor de identidades de grupo de usuários no console do Amazon Cognito, um SDK da AWS ou a API REST de grupos de usuários.

## Coisas a saber sobre mapeamentos
<a name="cognito-user-pools-specifying-attribute-mapping-requirements"></a>

Antes de começar a configurar o mapeamento de atributos de usuário, analise os seguintes detalhes importantes:
+ Quando um usuário federado faz login em sua aplicação, deve haver um mapeamento para cada atributo que seu grupo de usuários exige. Por exemplo, se seu grupo de usuários exigir um atributo `email` para cadastro, mapeie esse atributo ao seu equivalente usando o IdP.
+ Por padrão, os endereços de e-mail mapeados não são verificados. Não é possível verificar um endereço de e-mail mapeado usando um código único. Em vez disso, mapeie um atributo usando o IdP para obter o status de verificação. Por exemplo, o Google e a maioria dos provedores de OIDC incluem o atributo `email_verified`.
+ É possível associar tokens do provedor de identidades (IdP) a atributos personalizados no grupo de usuários. Os provedores sociais apresentam um token de acesso e os provedores de OIDC apresentam um token de acesso e ID. Para associar um token, adicione um atributo personalizado com 2.048 caracteres, no máximo, conceda ao cliente da aplicação acesso de gravação ao atributo e associe `access_token` ou `id_token` do IdP ao atributo personalizado.
+ Para cada atributo mapeado do grupo de usuários, a extensão máxima do valor de 2.048 caracteres deve ser suficiente para o valor que o Amazon Cognito obtém do IdP. Caso contrário, o Amazon Cognito vai relatar um erro quando os usuários acessarem sua aplicação. O Amazon Cognito não comporta mapeamento de tokens de IdP a atributos personalizados quando os tokens têm mais de 2.048 caracteres.
+ O Amazon Cognito gera o atributo `username` no perfil de um usuário federado com base em reivindicações específicas transmitidas por seu IdP federado, conforme mostra a tabela a seguir. O Amazon Cognito anexa esse valor de atributo com o nome de seu IdP, por exemplo, `MyOIDCIdP_[sub]`. Quando você quiser que seus usuários federados tenham um atributo que corresponda exatamente a um atributo em seu diretório de usuários externo, mapeie esse atributo para um atributo de login do Amazon Cognito, como `preferred_username`.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/cognito-user-pools-specifying-attribute-mapping.html)
+ Quando um grupo de usuários [não diferencia maiúsculas de minúsculas](user-pool-case-sensitivity.md), o Amazon Cognito converte o atributo de origem do nome de usuário em minúsculas nos nomes de usuário gerados automaticamente pelos usuários federados. Veja a seguir um exemplo de nome de usuário para um grupo de usuários que diferencia maiúsculas de minúsculas: `MySAML_TestUser@example.com`. A seguir, veja o mesmo nome de usuário para um grupo de usuários que *não diferencia maiúsculas de minúsculas*: `MySAML_testuser@example.com`.

  Em grupos de usuários que não diferenciam maiúsculas de minúsculas, seus acionadores do Lambda que processam o nome de usuário devem considerar essa modificação em qualquer reivindicação de maiúsculas e minúsculas para atributos de origem de nome de usuário. Para vincular seu IdP a um grupo de usuários que tenha uma configuração de diferenciação de maiúsculas e minúsculas diferente do grupo de usuários atual, crie um grupo de usuários.
+ O Amazon Cognito deve ser capaz de atualizar seus atributos mapeados do grupo de usuários quando os usuários fazem login na sua aplicação. Quando um usuário faz login por meio de um IdP, o Amazon Cognito atualiza os atributos mapeados com as informações mais recentes do IdP. O Amazon Cognito só atualiza os atributos mapeados quando seus valores mudam. Para garantir que o Amazon Cognito possa atualizar os atributos, verifique os seguintes requisitos:
  + Todos os atributos personalizados do grupo de usuários mapeados por meio do IdP devem ser *mutáveis*. É possível atualizar atributos personalizados mutáveis a qualquer momento. Entretanto, você só pode definir um valor para o atributo personalizado *imutável* ao criar o perfil de usuário pela primeira vez. Para criar um atributo personalizado mutável no console do Amazon Cognito, ative a caixa de seleção **Mutável** correspondente ao atributo adicionado ao selecionar **Adicionar atributos personalizados** no menu **Cadastrar-se**. Ou, se você criar seu grupo de usuários usando a operação de [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)API, poderá definir o `Mutable` parâmetro para cada um desses atributos como`true`. Se seu IdP enviar um valor para um atributo imutável mapeado, o Amazon Cognito retornará um erro, e o login falhará.
  + Nas configurações do cliente de aplicativo para seu aplicativo, os atributos mapeados deve ser *gravável*. Você pode definir quais atributos são graváveis na página **App clients** (Clientes da aplicação) no console do Amazon Cognito. Ou, se você criar o aplicativo cliente usando a operação de API [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html), você pode adicionar esses atributos à matriz `WriteAttributes`. Se o seu IdP enviar um valor para um atributo mapeado não gravável, o Amazon Cognito não definirá o valor do atributo e prosseguirá com a autenticação.
+ Quando os atributos do IdP contêm vários valores, o Amazon Cognito transforma todos os valores em uma única string delimitada por vírgulas entre os caracteres de colchetes `[` e `]`. O Amazon Cognito codifica em forma de URL os valores que contêm caracteres não alfanuméricos, exceto para `.`, `-`, `*` e `_`. Você deve decodificar e analisar os valores individuais antes de usá-los em sua aplicação.
+ O atributo de destino retém qualquer valor que as regras de mapeamento de atributos atribuam a ele, a menos que uma ação administrativa ou de login o altere. O Amazon Cognito não remove atributos dos usuários quando o atributo de origem não é mais enviado no token de provedor ou na declaração SAML. As ações a seguir removem o valor de um atributo de um perfil do grupo de usuários para um usuário federado:

  1. O IdP envia um valor em branco para o atributo de origem e uma regra de mapeamento aplica o valor em branco ao atributo de destino.

  1. Você limpa o valor do atributo mapeado com uma [AdminDeleteUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDeleteUserAttributes.html)solicitação [DeleteUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUserAttributes.html)or.

## Como especificar mapeamentos de atributos do provedor de identidade para o grupo de usuários (Console de gerenciamento da AWS)
<a name="cognito-user-pools-specifying-attribute-mapping-console"></a>

Você pode usar o Console de gerenciamento da AWS para especificar mapeamentos de atributos para o IdP, seu grupo de usuários.

**nota**  
O Amazon Cognito mapeará solicitações de entrada para atributos do grupo de usuários somente se as solicitações existirem no token de entrada. Se uma reivindicação mapeada anteriormente não existir mais no token de entrada, ela não será excluída ou alterada. Se sua aplicação exigir o mapeamento de declarações excluídas, é possível usar o acionador do Lambda de pré-autenticação para excluir o atributo personalizado durante a autenticação e permitir que esses atributos sejam preenchidos novamente com base no token de entrada.

**Para especificar um mapeamento de atributo de IdP**

1. Faça login no [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. No painel de navegação, escolha **User Pools** (Grupos de usuários) e escolha o grupo de usuários que deseja editar.

1. Clique no menu **Provedores sociais e externos**.

1. Clique em **Adicionar um provedor de identidade** ou selecione o IdP **Facebook**, **Google**, **Amazon** ou **Apple** que você configurou. Localize **Attribute mapping** (Mapeamento de atributos) e escolha **Edit** (Editar). 

   Para obter mais informações sobre como adicionar um IdP social, consulte [Como usar provedores de identidade social com um grupo de usuários](cognito-user-pools-social-idp.md).

1. Conclua as seguintes etapas para cada atributo que precisar mapear:

   1. Escolha um atributo da coluna **User pool attribute** (Atributo do grupo de usuários). Esse é o atributo que será atribuído ao perfil de usuário no grupo de usuários. Os atributos personalizados são listados depois dos atributos padrão.

   1. Selecione um atributo na coluna de ***<provider>*atributos**. Esse será o atributo transmitido do diretório do provedor. Atributos conhecidos do provedor social são fornecidos em uma lista suspensa.

   1. Para mapear atributos adicionais entre seu IdP e o Amazon Cognito, escolha **Add another attribute** (Adicionar outro atributo).

1. Escolha **Salvar alterações**.

**Para especificar um mapeamento de atributos do provedor SAML**

1. Faça login no [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. No painel de navegação, escolha **User Pools** (Grupos de usuários) e escolha o grupo de usuários que deseja editar.

1. Clique no menu **Provedores sociais e externos**.

1. Escolha **Add an identity provider** (Adicionar um provedor de identidade) ou escolha o IdP que você configurou. Localize **Attribute mapping** (Mapeamento de atributos) e escolha **Edit** (Editar). Para mais informações sobre como adicionar um IdP SAML, consulte [Como usar provedores de identidade SAML com um grupo de usuários](cognito-user-pools-saml-idp.md).

1. Conclua as seguintes etapas para cada atributo que precisar mapear:

   1. Escolha um atributo da coluna **User pool attribute** (Atributo do grupo de usuários). Esse é o atributo que será atribuído ao perfil de usuário no grupo de usuários. Os atributos personalizados são listados depois dos atributos padrão.

   1. Selecione um atributo da coluna **SAML attribute** (Atributo SAML). Esse será o atributo transmitido do diretório do provedor.

      Seu IdP pode oferecer exemplos de declarações SAML como referência. Alguns IdPs usam nomes simples, como`email`, enquanto outros usam nomes de atributos formatados em URL semelhantes a:

      ```
      http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
      ```

   1. Para mapear atributos adicionais entre seu IdP e o Amazon Cognito, escolha **Add another attribute** (Adicionar outro atributo).

1. Escolha **Salvar alterações**.

## Especificando mapeamentos de atributos do provedor de identidade para seu grupo de usuários (e API)AWS CLI AWS
<a name="cognito-user-pools-specifying-attribute-mapping-cli-api"></a>

O corpo da solicitação a seguir [UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html)mapeia [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html)ou mapeia os atributos `emailaddress` “MyIdP” do provedor SAML e `phone` para os atributos do grupo de usuários e `email` `birthdate``phone_number`, nessa ordem. `birthdate` Esse é um corpo de solicitação completo para um provedor de SAML 2.0. Seu corpo de solicitação pode variar dependendo do tipo de IdP e dos detalhes específicos. O mapeamento de atributos está no parâmetro `AttributeMapping`.

```
{
   "AttributeMapping": { 
      "email" : "emailaddress",
      "birthdate" : "birthdate",
      "phone_number" : "phone"
   },
   "IdpIdentifiers": [ 
      "IdP1",
      "pdxsaml"
   ],
   "ProviderDetails": { 
      "IDPInit": "true", 
      "IDPSignout": "true", 
      "EncryptedResponses" : "true", 
      "MetadataURL": "https://auth.example.com/sso/saml/metadata", 
      "RequestSigningAlgorithm": "rsa-sha256"
   },
   "ProviderName": "MyIdP",
   "ProviderType": "SAML",
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

Use os comandos a seguir para especificar os mapeamentos de atributos do IdP para o grupo de usuários.

**Para especificar mapeamentos de atributos no momento da criação do provedor**
+ AWS CLI: `aws cognito-idp create-identity-provider`

  Exemplo com arquivo de metadados: `aws cognito-idp create-identity-provider --user-pool-id <user_pool_id> --provider-name=SAML_provider_1 --provider-type SAML --provider-details file:///details.json --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`

  Onde `details.json` contém:

  ```
  { 
      "MetadataFile": "<SAML metadata XML>"
  }
  ```
**nota**  
Se *<SAML metadata XML>* contiver alguma citação (`"`), ela deverá ser escapada ()`\"`.

  Exemplo com URL de metadados:

  ```
  aws cognito-idp create-identity-provider \
  --user-pool-id us-east-1_EXAMPLE \
  --provider-name=SAML_provider_1 \
  --provider-type SAML \
  --provider-details MetadataURL=https://myidp.example.com/saml/metadata \
  --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
  ```
+ API/SDK: [CreateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateIdentityProvider.html)

**Para especificar mapeamentos de atributos para um IdP existente**
+ AWS CLI: `aws cognito-idp update-identity-provider`

  Example: `aws cognito-idp update-identity-provider --user-pool-id <user_pool_id> --provider-name <provider_name> --attribute-mapping email=http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress`
+ API/SDK: [UpdateIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateIdentityProvider.html)

**Para obter informações sobre o mapeamento de atributos para determinado IdP**
+ AWS CLI: `aws cognito-idp describe-identity-provider`

  Example: `aws cognito-idp describe-identity-provider --user-pool-id <user_pool_id> --provider-name <provider_name>`
+ API/SDK: [DescribeIdentityProvider](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeIdentityProvider.html)

# Vincular usuários federados a um perfil de usuário existente
<a name="cognito-user-pools-identity-federation-consolidate-users"></a>

Geralmente, o mesmo usuário tem um perfil com vários provedores de identidade (IdPs) que você conectou ao seu grupo de usuários. O Amazon Cognito pode vincular cada ocorrência de um usuário ao mesmo perfil em seu diretório. Dessa forma, uma pessoa com vários usuários de IdP pode ter uma experiência consistente em seu aplicativo. [AdminLinkProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminLinkProviderForUser.html)instrui o Amazon Cognito a reconhecer o ID exclusivo de um usuário em seu diretório federado como um usuário no grupo de usuários. Um usuário em seu grupo de usuários é contabilizado como um usuário ativo mensal (MAU) para fins de [faturamento](https://aws.amazon.com/cognito/pricing/) quando você tem zero ou mais identidades federadas associadas ao perfil do usuário.

Quando um usuário federado faz login no grupo de usuários pela primeira vez, o Amazon Cognito procura um perfil local que você tenha vinculado à identidade dele. Se nenhum perfil vinculado existir, o grupo de usuários cria um perfil. Você pode criar um perfil local e vinculá-lo ao usuário federado a qualquer momento antes do primeiro login, em uma solicitação de API `AdminLinkProviderForUser` ou em uma tarefa preliminar planejada ou em [Acionador do Lambda de pré-cadastro](user-pool-lambda-pre-sign-up.md). Depois que o usuário faz login e o Amazon Cognito detecta um perfil local vinculado, o grupo de usuários lê as reivindicações do usuário e as compara às regras de mapeamento do IdP. Depois, o grupo de usuários atualiza o perfil local vinculado com as reivindicações mapeadas pelo login. Dessa forma, você pode configurar o perfil local com declarações de acesso e manter suas declarações de identidade up-to-date com seu provedor. Depois que o Amazon Cognito associa o usuário federado a um perfil vinculado, ele sempre faz login nesse perfil. Depois, é possível vincular mais identidades de provedores do usuário ao mesmo perfil, oferecendo a um cliente uma experiência consistente na aplicação. Para vincular um usuário federado que já tenha feito login, você deve primeiro excluir o perfil existente. Você pode identificar perfis existentes por seu formato: `[Provider name]_identifier`. Por exemplo, .`LoginWithAmazon_amzn1.account.AFAEXAMPLE` Um usuário que você criou e depois vinculou a uma identidade de usuário de terceiros tem o nome de usuário com o qual ele foi criado e um atributo `identities` que contém os detalhes de suas identidades vinculadas.

**Importante**  
Como `AdminLinkProviderForUser` permite que um usuário com uma identidade federada externa faça login como um usuário existente no grupo de usuários, é fundamental que ela seja usada somente com atributos externos IdPs e de provedor nos quais o proprietário do aplicativo confie.

Por exemplo, se você for um provedor de serviços gerenciados (MSP) com uma aplicação compartilhada com vários clientes. Cada um dos clientes faz login em sua aplicação por meio dos Serviços de Federação do Active Directory (ADFS). Seu administrador de TI, Carlos, tem uma conta nos domínios de cada um de seus clientes. Você quer que Carlos seja reconhecido como administrador da aplicação toda vez em que fizer login, independentemente do IdP.

Seu ADFS IdPs apresenta o endereço de e-mail de Carlos `msp_carlos@example.com` na `email` reivindicação das declarações de SAML de Carlos para o Amazon Cognito. Você cria um usuário em seu grupo de usuários com o nome de usuário `Carlos`. Os comandos a seguir AWS Command Line Interface (AWS CLI) vinculam as identidades de Carlos de IdPs ADFS1, e. ADFS2 ADFS3

**nota**  
É possível vincular um usuário com base em reivindicações de atributo específicas. Essa habilidade é exclusiva do OIDC e do SAML. IdPs Para outros tipos de provedor, é necessário realizar a vinculação com base em um atributo de origem fixo. Para obter mais informações, consulte [AdminLinkProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminLinkProviderForUser.html). É necessário definir `ProviderAttributeName` como `Cognito_Subject` ao vincular um IdP social a um perfil de usuário. `ProviderAttributeValue` precisa ser o identificador exclusivo do usuário com seu IdP.

```
aws cognito-idp admin-link-provider-for-user \
--user-pool-id us-east-1_EXAMPLE \
--destination-user ProviderAttributeValue=Carlos,ProviderName=Cognito \
--source-user ProviderName=ADFS1,ProviderAttributeName=email,ProviderAttributeValue=msp_carlos@example.com

aws cognito-idp admin-link-provider-for-user \
--user-pool-id us-east-1_EXAMPLE \
--destination-user ProviderAttributeValue=Carlos,ProviderName=Cognito \
--source-user ProviderName=ADFS2,ProviderAttributeName=email,ProviderAttributeValue=msp_carlos@example.com

aws cognito-idp admin-link-provider-for-user \
--user-pool-id us-east-1_EXAMPLE \
--destination-user ProviderAttributeValue=Carlos,ProviderName=Cognito \
--source-user ProviderName=ADFS3,ProviderAttributeName=email,ProviderAttributeValue=msp_carlos@example.com
```

O perfil do usuário `Carlos` em seu grupo de usuários agora tem o atributo `identities` a seguir.

```
[{
    "userId": "msp_carlos@example.com",
    "providerName": "ADFS1",
    "providerType": "SAML",
    "issuer": "http://auth.example.com",
    "primary": false,
    "dateCreated": 111111111111111
}, {
    "userId": "msp_carlos@example.com",
    "providerName": "ADFS2",
    "providerType": "SAML",
    "issuer": "http://auth2.example.com",
    "primary": false,
    "dateCreated": 111111111111111
}, {
    "userId": "msp_carlos@example.com",
    "providerName": "ADFS3",
    "providerType": "SAML",
    "issuer": "http://auth3.example.com",
    "primary": false,
    "dateCreated": 111111111111111
}]
```

**Fatos a saber sobre como vincular usuários federados**
+ Você pode vincular até cinco usuários federados a cada perfil de usuário.
+ Você pode vincular usuários a cada IdP a partir de até cinco declarações de atributos do IdP, conforme definido pelo parâmetro `ProviderAttributeName` de `SourceUser` em uma solicitação de API `AdminLinkProviderForUser`. Por exemplo, se você vinculou pelo menos um usuário aos atributos de origem `email`, `phone`, `department`, `given_name` e`location`, você só pode vincular usuários adicionais em um desses cinco atributos.
+ É possível vincular usuários federados a um perfil de usuário federado existente ou a um usuário local.
+ Você não pode vincular provedores a perfis de usuário no Console de gerenciamento da AWS.
+ O token de ID do usuário contém todos os provedores associados na reivindicação `identities`.
+ Você pode definir uma senha para o perfil de usuário federado criado automaticamente em uma solicitação de API. [AdminSetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html) Depois, o status desse usuário é alterado de `EXTERNAL_PROVIDER` para `CONFIRMED`. Um usuário nesse estado pode fazer login como usuário federado e iniciar fluxos de autenticação na API como um usuário local vinculado. Eles também podem modificar suas senhas e atributos em solicitações de API autenticadas por token, como e. [ChangePassword[UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ChangePassword.html) Como prática de segurança recomendada e para manter os usuários sincronizados com seu IdP externo, não defina senhas em perfis de usuário federados. Em vez disso, vincule usuários a perfis locais com `AdminLinkProviderForUser`.
+ O Amazon Cognito preenche os atributos do usuário em um perfil de usuário local vinculado quando o usuário faz login por meio de seu IdP. O Amazon Cognito processa declarações de identidade no token de ID de um IdP do OIDC e também verifica `userInfo` o endpoint dos provedores 2.0 e OIDC. OAuth O Amazon Cognito prioriza as informações em um token de ID em detrimento das informações de `userInfo`.

Ao descobrir que o usuário não está mais usando uma conta de usuário externa vinculada ao perfil dele, você pode desassociar essa conta de usuário do grupo de usuários. Ao vincular o usuário, você forneceu o nome do atributo, o valor do atributo e o nome do provedor do usuário na solicitação. Para remover um perfil que seu usuário não precisa mais, faça uma solicitação de [AdminDisableProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDisableProviderForUser.html)API com parâmetros equivalentes.

Consulte [AdminLinkProviderForUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminLinkProviderForUser.html)para obter mais exemplos e sintaxe de comando no AWS SDKs.

# Login gerenciado do grupo de usuários
<a name="cognito-user-pools-managed-login"></a>

Você pode escolher um domínio da web para hospedar serviços para o grupo de usuários. Um grupo de usuários do Amazon Cognito ganha as funções a seguir quando você adiciona um domínio, coletivamente conhecido como *login gerenciado*.
+ Um [servidor de autorização](https://datatracker.ietf.org/doc/html/rfc6749#section-1.1) que atua como um provedor de identidade (IdP) para aplicativos que funcionam com OAuth 2.0 e OpenID Connect (OIDC). O servidor de autorização [roteia solicitações](authorization-endpoint.md), [emite e gerencia tokens web JSON (JWTs)](token-endpoint.md) e [fornece informações de atributos do usuário](userinfo-endpoint.md).
+ Uma interface de ready-to-use usuário (UI) para operações de autenticação, como login, saída e gerenciamento de senhas. As *páginas de login gerenciado* funcionam como um frontend da web para serviços de autenticação.
+ Um provedor de serviços (SP) ou parte confiável (RP) para SAML 2.0, OIDC IdPs, Facebook, Login with Amazon IdPs, Sign in with Apple e Google.

Uma opção adicional que compartilha alguns recursos com o login gerenciado é a *IU hospedada* clássica. A IU hospedada clássica é uma versão de primeira geração dos serviços de login gerenciado. Os serviços de IdP e RP da IU hospedada geralmente têm as mesmas características do login gerenciado, mas as páginas de login têm um design mais simples e menos recursos. Por exemplo, o login por chave de acesso não está disponível na IU hospedada clássica. No [plano de recursos](cognito-sign-in-feature-plans.md) Lite, a IU hospedada clássica é sua única opção para serviços de domínio do grupo de usuários.

As páginas de login gerenciado são uma coleção de interfaces da web para atividades básicas de cadastro, login, autenticação multifator e redefinição de senha no grupo de usuários. Eles também conectam usuários a um ou mais provedores de identidade terceirizados (IdPs) quando você deseja oferecer aos usuários a opção de login. Sua aplicação pode invocar as páginas de login gerenciado nos navegadores dos usuários quando você quiser autenticar e autorizar usuários.

Você pode personalizar a experiência do usuário do login gerenciado conforme a sua marca com logotipos, planos de fundo e estilos personalizados. Há duas opções de identidade visual que você pode aplicar à IU de login gerenciado: o *editor de identidade visual* para login gerenciado e a *identidade visual da IU hospedada (clássica)* para a IU hospedada.

**Editor de identidade visual**  
Uma experiência de usuário atualizada com a maioria das opções de up-to-date autenticação e um editor visual no console do Amazon Cognito.

**Identidade visual de IU hospedada**  
Uma experiência de usuário familiar para usuários anteriores dos grupos de usuários do Amazon Cognito. A identidade visual da IU hospedada é um sistema baseado em arquivos. Para aplicar a identidade visual às páginas de IU hospedada, você carrega um arquivo de imagem com o logotipo e um arquivo que define os valores de diversas opções de estilo CSS predefinidas.

O editor de identidade visual não está disponível em todos os planos de recursos para grupos de usuários. Para obter mais informações, consulte [Planos de recursos de grupos de usuários](cognito-sign-in-feature-plans.md).

Para obter mais informações sobre a criação de solicitações para login gerenciado e serviços de IU hospedada, consulte [Referência de login gerenciado e endpoints do grupo de usuários](cognito-userpools-server-contract-reference.md).

**nota**  
O login gerenciado do Amazon Cognito não é compatível com a autenticação personalizada com [acionadores do Lambda de desafio de autenticação personalizada](user-pool-lambda-challenge.md).

**Topics**
+ [

## Managed login localization
](#managed-login-localization)
+ [

## Documentos de termos
](#managed-login-terms-documents)
+ [

## Configurando o login gerenciado com AWS Amplify
](#cognito-user-pools-app-integration-amplify)
+ [

## Configurar o login gerenciado com o console do Amazon Cognito
](#set-up-managed-login)
+ [

## Visualizar a página de login
](#view-login-pages)
+ [

## Personalizar páginas de autenticação
](#cognito-user-pools-app-integration-customize-hosted-ui)
+ [

## Informações importantes sobre o login gerenciado e a IU hospedada
](#managed-login-things-to-know)
+ [

# Como configurar um domínio de grupo de usuários
](cognito-user-pools-assign-domain.md)
+ [

# Aplicar a identidade visual às páginas de login gerenciado
](managed-login-branding.md)

## Managed login localization
<a name="managed-login-localization"></a>

O login gerenciado usa como padrão o idioma inglês nas páginas interativas com o usuário. Você pode exibir suas páginas de login gerenciado localizadas para o idioma de sua escolha. Os idiomas disponíveis são aqueles disponíveis no Console de gerenciamento da AWS. No link que você distribui aos usuários, adicione um parâmetro de consulta `lang`, conforme mostrado no exemplo a seguir.

```
https://<your domain>/oauth2/authorize?lang=es&response_type=code&client_id=<your app client id>&redirect_uri=<your relying-party url>
```

O Amazon Cognito define um cookie no navegador dos usuários com sua preferência de idioma após a solicitação inicial com um parâmetro `lang`. Depois que o cookie é definido, a seleção do idioma persiste sem exibir ou exigir que você inclua o parâmetro nas solicitações. Por exemplo, depois que um usuário faz uma solicitação de login com um parâmetro `lang=de`, as páginas de login gerenciado são exibidas em alemão até que ele limpe os cookies ou faça uma nova solicitação com um novo parâmetro de localização, como `lang=en`.

A localização está disponível somente para login gerenciado. Você precisa estar no [plano de recursos](cognito-sign-in-feature-plans.md) Essentials ou Plus e ter atribuído seu domínio para usar a [identidade visual de login gerenciado](managed-login-branding.md).

A seleção que seu usuário faz no login gerenciado não está disponível para [acionadores personalizados de remetente de e-mail ou SMS](user-pool-lambda-custom-sender-triggers.md). Ao implementar esses acionadores, você deve usar outros mecanismos para determinar o idioma preferencial do usuário. Nos fluxos de login, o atributo `locale` pode indicar o idioma preferencial do usuário com base na localização. Nos fluxos de cadastro, a região ou o ID do cliente da aplicação do grupo de usuários pode indicar uma preferência de idioma.

Os idiomas a seguir estão disponíveis.


**Idiomas do login gerenciado**  

| Linguagem | Código | 
| --- | --- | 
| Alemã | de | 
| Inglês | en | 
| Espanhola | es | 
| Francesa | fr | 
| Bahasa Indonésia | id | 
| Italiano | it | 
| Japonês | ja | 
| Coreano | ko | 
| Português (Brasil) | pt-BR | 
| Chinês (simplificado) | zh-CN | 
| Chinês (tradicional) | zh-TW | 

## Documentos de termos
<a name="managed-login-terms-documents"></a>

Você pode configurar suas páginas de login gerenciado para exibir links para seus documentos de **Termos de uso** e **Política de privacidade** quando os usuários se cadastrarem. Ao configurar ambos documentos de termos no cliente da aplicação, os usuários verão o seguinte texto durante o cadastro: **Ao se cadastrar, você concorda com nossos Termos de uso e Política de privacidade**. As frases **Termos de uso** e **Política de privacidade** aparecem na página de login gerenciado, com hiperlinks para os documentos.

Os documentos de termos oferecem suporte a idiomas específicos URLs que se alinham à localização gerenciada de login. Quando os usuários selecionam um idioma com o parâmetro de consulta `lang`, o Amazon Cognito exibe links para seus documentos de termos nesse idioma. Se você não configurou um URL para um idioma específico, o Amazon Cognito usará o URL padrão configurado para o cliente da aplicação.

Para configurar documentos de termos para o cliente da aplicação, navegue até o menu **Login gerenciado** no grupo de usuários. Em **Documentos de termos**, selecione **Criar documento de termos**.

------
#### [ Amazon Cognito console ]

**Como criar um documento de termos**

1. Navegue até o grupo de usuários e clique no menu **Login gerenciado**. Localize **Documentos de termos**.

1. Selecione **Criar documento de termos**.

1. Selecione o cliente da aplicação ao qual deseja atribuir o documento de termos.

1. Insira um **Nome dos termos**. Isso identificará o documento no console.

1. Em **Links**, escolha um **Idioma** e insira o **URL** onde você hospeda seu documento de termos nesse idioma.

1.  URLs Para adicionar outros idiomas, escolha **Adicionar outro**.

1. Escolha **Criar**.

------
#### [ Amazon Cognito user pools API ]

Veja a seguir um exemplo de corpo da solicitação [CreateTerms](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateTerms.html). Ele faz com que a página de cadastro do cliente da aplicação `1example23456789` exiba links para uma versão em francês e uma versão em português (Brasil) da política de privacidade quando o login gerenciado estiver localizado para esse idioma. É necessário definir uma solicitação separada para que URLs o `terms-of-use` login gerenciado renderize os links na página de inscrição.

```
{
   "ClientId": "1example23456789",
   "Enforcement": "NONE",
   "Links": { 
      "cognito:default" : "https://example.com/privacy/",
      "cognito:french" : "https://example.com/fr/privacy/",
      "cognito:portuguese-brazil" : "https://example.com/pt/privacy/"
   },
   "TermsName": "privacy-policy",
   "TermsSource": "LINK",
   "UserPoolId": "us-east-1_EXAMPLE"
}
```

------

**nota**  
Você deve criar um documento de termos de uso e de política de privacidade para o cliente da aplicação antes que o Amazon Cognito exiba os documentos de termos nas páginas de login gerenciado.

## Configurando o login gerenciado com AWS Amplify
<a name="cognito-user-pools-app-integration-amplify"></a>

Se você usa AWS Amplify para adicionar autenticação ao seu aplicativo web ou móvel, você pode configurar suas páginas de login gerenciadas na interface de linha de comando (CLI) do Amplify e bibliotecas na estrutura do Amplify. Para adicionar autenticação à sua aplicação, adicione a categoria `Auth` ao seu projeto. Em seguida, em sua aplicação, autentique os usuários do grupo de usuários com as bibliotecas de cliente do Amplify.

Você pode invocar páginas de login gerenciado para autenticação ou federar usuários por meio de um endpoint de autorização que redireciona para um IdP. Após um usuário se autenticar com êxito com o provedor, o Amplify criará um novo usuário no grupo de usuários e transmitirá os tokens do usuário para a aplicação.

Os exemplos a seguir mostram como usar AWS Amplify para configurar o login gerenciado com provedores sociais em seu aplicativo.
+ [React](https://docs.amplify.aws/react/build-a-backend/auth/concepts/external-identity-providers/)
+ [Swift](https://docs.amplify.aws/swift/build-a-backend/auth/concepts/external-identity-providers/)
+ [Vibração](https://docs.amplify.aws/flutter/build-a-backend/auth/concepts/external-identity-providers/)
+ [Android](https://docs.amplify.aws/android/build-a-backend/auth/concepts/external-identity-providers/)

## Configurar o login gerenciado com o console do Amazon Cognito
<a name="set-up-managed-login"></a>

O primeiro requisito para login gerenciado e IU hospedada é um domínio do grupo de usuários. No console de grupos de usuários, navegue até a guia **Domínio** do grupo de usuários e adicione um **domínio do Cognito** ou um **domínio personalizado**. Você também pode escolher um domínio durante o processo de criação de um novo grupo de usuários. Para obter mais informações, consulte [Como configurar um domínio de grupo de usuários](cognito-user-pools-assign-domain.md). Quando um domínio está ativo no grupo de usuários, todos os clientes da aplicação veiculam páginas públicas de autenticação nesse domínio.

Ao criar ou modificar um domínio do grupo de usuários, você define a **Versão de marca** do seu domínio. Essa versão de marca é uma opção de **login gerenciado** ou **IU hospedada (clássica)**. A versão de marca escolhida se aplica a todos os clientes da aplicação que usam os serviços de login em seu domínio.

A próxima etapa é criar um [cliente da aplicação](user-pool-settings-client-apps.md) na guia **Clientes da aplicação** do grupo de usuários. No processo de criação de um cliente da aplicação, o Amazon Cognito solicitará informações sobre sua aplicação e, em seguida, solicitará que você selecione um **URL de retorno**. O URL de retorno também é chamado de URL de parte confiável (RP), o URI de redirecionamento e o URL de retorno de chamada. Esse é o URL no qual sua aplicação é executada, por exemplo, `https://www.example.com` ou `myapp://example`.

Após configurar um domínio e um cliente da aplicação com um estilo de identidade visual no grupo de usuários, suas páginas de login gerenciado ficarão disponíveis na Internet.

## Visualizar a página de login
<a name="view-login-pages"></a>

No console do Amazon Cognito, clique no botão **Visualizar páginas de login** na guia **Páginas de login** do cliente da aplicação, no menu **Clientes da aplicação**. Esse botão levará você a uma página de login no domínio do grupo de usuários com os parâmetros básicos a seguir.
+ O ID do cliente da aplicação
+ Uma solicitação de concessão de código de autorização
+ Uma solicitação para todos os escopos que você ativou para o cliente da aplicação atual
+ O primeiro URL de retorno de chamada na lista para o cliente da aplicação atual

O botão **Visualizar página de login** é útil quando você deseja testar as funções básicas das páginas de login gerenciado. Suas páginas de login corresponderão à **Versão de marca** que você atribuiu ao [domínio do grupo de usuários](cognito-user-pools-assign-domain.md). Você pode personalizar o URL de login com parâmetros adicionais e modificados. Na maioria dos casos, os parâmetros gerados automaticamente do link **Visualizar página de login** não atendem totalmente às necessidades da aplicação. Nesses casos, você precisa personalizar o URL que a aplicação invoca quando faz login dos usuários. Para obter mais informações sobre chaves e valores de parâmetros de login, consulte [Referência de login gerenciado e endpoints do grupo de usuários](cognito-userpools-server-contract-reference.md).

A página da web de login usa o formato de URL a seguir. Este exemplo solicita uma concessão de código de autorização com o parâmetro `response_type=code`.

```
https://<your domain>/oauth2/authorize?response_type=code&client_id=<your app client id>&redirect_uri=<your relying-party url>
```

É possível pesquisar a string do domínio do grupo de usuários no menu **Domínio** do grupo de usuários. No menu **Clientes do aplicativo**, você pode identificar o cliente do aplicativo IDs, seu retorno de chamada URLs, seus escopos permitidos e outras configurações.

Ao navegar até o endpoint `/oauth2/authorize` com parâmetros personalizados, o Amazon Cognito redireciona você ao endpoint `/oauth2/login` ou, se tiver um parâmetro `identity_provider` ou `idp_identifier`, ele redireciona você silenciosamente para a página de login de seu IdP.

**Exemplo de solicitação para uma concessão implícita**  
Você pode visualizar a página da web de login com o URL a seguir para a concessão de código implícita onde `response_type=token`. Depois de um login bem-sucedido, o Amazon Cognito retorna tokens do grupo de usuários para a barra de endereço do seu navegador da Web.

```
            https://mydomain.auth.us-east-1.amazoncognito.com/authorize?response_type=token&client_id=1example23456789&redirect_uri=https://mydomain.example.com
```

Os tokens de identidade e acesso aparecem como parâmetros anexados ao URL de redirecionamento.

O URL a seguir é um exemplo de resposta de uma solicitação de concessão implícita.

```
            https://auth.example.com/#id_token=eyJraaBcDeF1234567890&access_token=eyJraGhIjKlM1112131415&expires_in=3600&token_type=Bearer  
```

## Personalizar páginas de autenticação
<a name="cognito-user-pools-app-integration-customize-hosted-ui"></a>

No passado, o Amazon Cognito hospedava somente páginas de login com a *IU hospedada* clássica, um design simples que proporciona uma aparência universal às páginas da web de autenticação. Era possível personalizar grupos de usuários do Amazon Cognito com uma imagem de logotipo e ajustar alguns estilos com um arquivo que especificava valores de estilo CSS. Posteriormente, o Amazon Cognito introduziu o *login gerenciado*, um serviço de autenticação hospedado atualizado. O login gerenciado é atualizado look-and-feel com o *editor de marca*. O editor de identidade visual é um editor visual no-code e oferece um conjunto maior de opções do que a experiência de personalização da IU hospedada. O login gerenciado também introduziu imagens de fundo personalizadas e um tema de modo escuro.

É possível alternar entre as experiências de identidade visual do login gerenciado e da IU hospedada nos grupos de usuários. Para saber mais sobre como personalizar suas páginas de login gerenciado, consulte [Aplicar a identidade visual às páginas de login gerenciado](managed-login-branding.md).

## Informações importantes sobre o login gerenciado e a IU hospedada
<a name="managed-login-things-to-know"></a>

**O cookie de sessão de login gerenciado e de IU hospedada com duração de 1 hora**  
Quando um usuário faz login usando suas páginas de login ou um provedor de terceiros, o Amazon Cognito define um cookie no navegador dele. Com esse cookie, os usuários podem fazer login novamente com o mesmo método de autenticação por 1 hora. Ao fazer login com o cookie do navegador, eles recebem novos tokens que duram o período especificado na configuração do cliente da aplicação. Alterações nos atributos do usuário ou nos fatores de autenticação não afetam sua capacidade de fazer login novamente com o cookie do navegador.

A autenticação com o cookie de sessão não redefine a duração do cookie para mais 1 hora. Os usuários precisarão fazer login novamente se tentarem acessar as páginas de login mais de 1 hora após a última autenticação interativa bem-sucedida.

**Confirmar contas de usuário e verificar atributos de usuário**  
Para [usuários locais](cognito-terms.md#terms-localuser) do grupo de usuários, o login gerenciado e a IU hospedada funcionam melhor quando você configura o grupo de usuários para **Permitir que o Cognito envie mensagens automaticamente para verificar e confirmar**. Quando você ativa essa configuração, o Amazon Cognito envia uma mensagem com um código de confirmação para os usuários que se cadastram. Quando você confirma os usuários como administrador do grupo de usuários, as páginas de login exibem uma mensagem de erro após o cadastro. Nesse estado, o Amazon Cognito criou o usuário, mas não conseguiu enviar uma mensagem de verificação. Você ainda pode confirmar os usuários como administradores, mas eles podem entrar em contato com a central de suporte após encontrarem um erro. Para receber mais informações sobre confirmação administrativa, consulte [Permitir que os usuários se inscrevam na aplicação, mas mediante confirmação deles como administradores do grupo de usuários](signing-up-users-in-your-app.md#signing-up-users-in-your-app-and-confirming-them-as-admin).

**Escopo de operações de login gerenciado**  
O login gerenciado e a IU hospedada clássica são compatíveis com o cadastro, o login e o gerenciamento de senhas. Isso inclui concluir o login com autenticação multifator (MFA) e registrar autenticadores WebAuthn. O login gerenciado não é compatível com o gerenciamento de perfil de usuário por meio de autoatendimento, como alterações de atributos e configuração de preferências de MFA. Você deve implementar o gerenciamento de perfil no código da sua própria aplicação. O login gerenciado também não oferece a capacidade de confirmar alterações de atributos quando você atualiza endereços de e-mail e números de telefone como administrador com a operação da [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html)API.

**Visualizar as alterações na configuração**  
Se você fizer alterações de estilo em suas páginas e elas não aparecerem imediatamente, aguarde alguns minutos e atualize a página.

**Decodificar tokens do grupo de usuários**  
Os tokens do grupo de usuários do Amazon Cognito são assinados usando um RS256 algoritmo. Você pode decodificar e verificar os tokens do grupo de usuários usando AWS Lambda. Consulte [Decodificar e verificar os tokens JWT do Amazon Cognito em](https://github.com/awslabs/aws-support-tools/tree/master/Cognito/decode-verify-jwt). GitHub

**Versão do TLS**  
As páginas de login gerenciado e IU hospedada exigem criptografia em trânsito. Os domínios do grupo de usuários fornecidos pelo Amazon Cognito exigem que os navegadores dos usuários negociem uma versão mínima do TLS 1.2. Os domínios personalizados são compatíveis com conexões de navegador com TLS versão 1.2. A IU hospedada (clássica) **não exige** o TLS 1.2 para domínios personalizados, mas o login gerenciado mais recente **exige** o TLS versão 1.2 tanto para domínios personalizados quanto para domínios de prefixo. Como o Amazon Cognito gerencia a configuração dos serviços de domínio, você não pode modificar os requisitos de TLS do domínio do grupo de usuários.

**Políticas de CORS**  
Nem o login gerenciado, nem a IU hospedada são compatíveis com as políticas de origem de compartilhamento de recursos de origem cruzada (CORS). Uma política de CORS impediria os usuários de transmitir parâmetros de autenticação em suas solicitações. Em vez disso, implemente uma política de CORS no frontend da aplicação. O Amazon Cognito retorna um cabeçalho de resposta `Access-Control-Allow-Origin: *` para as solicitações aos endpoints a seguir.

1. [Endpoint de token](token-endpoint.md)

1. [Revogar endpoint](revocation-endpoint.md)

1. [endpoint userinfo](userinfo-endpoint.md)

**Cookies**  
O login gerenciado e a IU hospedada definem cookies nos navegadores dos usuários. Os cookies seguem os requisitos de alguns navegadores de que os sites não definam cookies de terceiros. Eles têm como escopo apenas os endpoints do seu grupo de usuários e incluem o seguinte:
+ Um cookie `XSRF-TOKEN` para cada solicitação.
+ Um cookie `csrf-state` para consistência da sessão quando um usuário é redirecionado.
+ Um cookie `csrf-state-legacy` para consistência da sessão, lido pelo Amazon Cognito como uma alternativa quando seu navegador não é compatível com o atributo `SameSite`.
+ Um cookie de sessão `cognito` que preserva as tentativas de login bem-sucedidas por uma hora.
+ Um cookie `lang` que preserva a escolha de [localização do idioma](#managed-login-localization) do usuário no login gerenciado.
+ Um cookie `page-data` que mantém a persistência dos dados obrigatórios enquanto o usuário navega entre as páginas de login gerenciado.

No iOS, você pode [bloquear todos os cookies](https://support.apple.com/en-us/105082). Essa configuração não é compatível com o login gerenciado ou com a IU hospedada. Para trabalhar com usuários que possam ativar essa configuração, crie a autenticação do grupo de usuários em um aplicativo iOS nativo com um AWS SDK. Nesse cenário, você pode criar seu próprio armazenamento de sessão que não seja baseado em cookies.

**Efeitos da alteração da versão do login gerenciado**  
Considere os efeitos a seguir da adição de domínios e da configuração da versão de login gerenciado.
+ Ao adicionar um domínio de prefixo, seja com identidade visual de login gerenciado ou de IU hospedada (clássica), pode levar até 60 segundos até que as páginas de login estejam disponíveis.
+ Ao adicionar um domínio personalizado, seja com identidade visual de login gerenciado ou de IU hospedada (clássica), pode levar até 5 minutos até que as páginas de login estejam disponíveis.
+ Ao alterar a versão de marca do domínio, pode levar até 4 minutos até que as páginas de login estejam disponíveis na nova versão de marca.
+ Ao alternar entre a identidade visual de login gerenciado e de IU hospedada (clássica), o Amazon Cognito não mantém as sessões de usuário. É necessário fazer login novamente com a nova interface.

**Estilo padrão**  
Quando você cria um cliente de aplicativo no Console de gerenciamento da AWS, o Amazon Cognito atribui automaticamente um estilo de marca ao seu cliente de aplicativo. Quando você cria programaticamente um cliente de aplicativo com a [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html)operação, nenhum estilo de marca é criado. O login gerenciado não está disponível para um cliente de aplicativo criado com um AWS SDK até que você crie um com uma [CreateManagedLoginBranding](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateManagedLoginBranding.html)solicitação.

**Tempo limite do prompt de autenticação de login gerenciado**  
O Amazon Cognito cancela solicitações de autenticação que não são concluídas em 5 minutos e redireciona o usuário para o login gerenciado. A página exibe a mensagem de erro `Something went wrong` (Ocorreu algum problema).

# Como configurar um domínio de grupo de usuários
<a name="cognito-user-pools-assign-domain"></a>

Configurar um domínio é opcional na configuração de um grupo de usuários. Um domínio de grupo de usuários hospeda recursos para autenticação de usuários, federação com provedores terceirizados e fluxos do OpenID Connect (OIDC). Ele tem o *login gerenciado*, uma interface pré-criada para operações importantes, como cadastro, login e recuperação de senha. Ele também hospeda os endpoints padrão do OpenID Connect (OIDC), como authorize[, [userInfo](userinfo-endpoint.md) e [token](token-endpoint.md),](authorization-endpoint.md) para autorização machine-to-machine (M2M) e outros fluxos de autenticação e autorização do OIDC e 2.0. OAuth 

Os usuários são autenticados com páginas de login gerenciado no domínio associado ao seu grupo de usuários. Você tem duas opções para configurar esse domínio: usar o domínio hospedado padrão do Amazon Cognito ou configurar um domínio personalizado de sua propriedade.

A opção de domínio personalizado tem mais opções de flexibilidade, segurança e controle. Por exemplo, um domínio familiar de propriedade da organização pode estimular a confiança do usuário e tornar o processo de login mais intuitivo. No entanto, a abordagem de domínio personalizado exige certa sobrecarga adicional, como gerenciar o certificado SSL e a configuração do DNS.

Os endpoints de descoberta do OIDC, `/.well-known/openid-configuration` para endpoints URLs e `/.well-known/jwks.json` chaves de assinatura de token, não estão hospedados em seu domínio. Para obter mais informações, consulte [Provedor de identidades e endpoints de terceiros confiáveis](federation-endpoints.md).

Entender como configurar e gerenciar o domínio para seu grupo de usuários é uma etapa importante para integrar a autenticação na aplicação. Fazer login com a API de grupos de usuários e um AWS SDK pode ser uma alternativa à configuração de um domínio. O modelo baseado em API fornece tokens diretamente em uma resposta de API, mas para implementações que usam os recursos estendidos dos grupos de usuários, como um IdP do OIDC, você deve configurar um domínio. Para obter mais informações sobre modelos de autenticação disponíveis em grupos de usuários, consulte[Noções básicas sobre a autenticação de API, OIDC e páginas de login gerenciado](authentication-flows-public-server-side.md#user-pools-API-operations).

**Topics**
+ [

## Informações importantes sobre domínios de grupo de usuários
](#cognito-user-pools-assign-domain-things-to-know)
+ [

# Usar o domínio de prefixo do Amazon Cognito para login gerenciado
](cognito-user-pools-assign-domain-prefix.md)
+ [

# Usar o próprio domínio para fazer login gerenciado
](cognito-user-pools-add-custom-domain.md)

## Informações importantes sobre domínios de grupo de usuários
<a name="cognito-user-pools-assign-domain-things-to-know"></a>

Os domínios de grupo de usuários são um ponto de serviço para as partes que dependem do OIDC em aplicações e para os elementos da interface do usuário. Considere os detalhes a seguir ao planejar a implementação de um domínio para o grupo de usuários.

**Termos reservados**  
Não é possível usar o texto `aws`, `amazon` ou `cognito` no nome de um domínio com prefixo do Amazon Cognito.

**Os endpoints de descoberta estão em um domínio diferente**  
Os [endpoints de descoberta](federation-endpoints.md) `.well-known/openid-configuration` e `.well-known/jwks.json` do grupo de usuários não estão no domínio personalizado ou do prefixo do grupo de usuários. O caminho para esses endpoints é o apresentado a seguir.
+ `https://cognito-idp.Region.amazonaws.com/your user pool ID/.well-known/openid-configuration`
+ `https://cognito-idp.Region.amazonaws.com/your user pool ID/.well-known/jwks.json`

**Tempo efetivo de mudanças de domínio**  
O Amazon Cognito pode levar até 1 minuto para iniciar ou atualizar a versão de marca de um domínio de prefixo. As mudanças em um domínio personalizado podem levar até 5 minutos para serem propagadas. Os novos domínios personalizados podem levar até 1 hora para serem propagados.

**Domínios personalizados e do prefixo ao mesmo tempo**  
Você pode configurar um grupo de usuários com um domínio personalizado e um domínio de prefixo de propriedade AWS da. Como os [endpoints de descoberta](federation-endpoints.md) do grupo de usuários estão hospedados em um domínio diferente, eles atendem apenas ao *domínio personalizado*. Por exemplo, o `openid-configuration` fornecerá um valor único para `"authorization_endpoint"` de `"https://auth.example.com/oauth2/authorize"`.

Quando você tem domínios personalizados e do prefixo em um grupo de usuários, pode usar o domínio personalizado com todos os recursos de um provedor OIDC. O domínio de prefixo em um grupo de usuários com essa configuração não tem descoberta nem token-signing-key endpoints e deve ser usado adequadamente.

**Domínios personalizados preferenciais como ID de parte confiável para chave de acesso**  
Ao configurar a autenticação do grupo de usuários com [chaves de acesso](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passkey), você deve definir uma ID de parte confiável (RP). Quando você tem um domínio personalizado e um domínio de prefixo, pode definir o ID de RP somente como seu domínio personalizado. Para definir um domínio de prefixo como o ID de RP no console do Amazon Cognito, exclua seu domínio personalizado ou insira o nome de domínio totalmente qualificado (FQDN) do domínio de prefixo como um **domínio de terceiros**.

**Não use domínios personalizados em diferentes níveis da sua hierarquia de domínios**  
Você pode configurar grupos de usuários separados para ter domínios personalizados no mesmo domínio de primeiro nível (TLD), por exemplo *auth.example.com* e *auth2.example.com*. O cookie de sessão do login gerenciado é válido para um domínio personalizado e todos os subdomínios, por exemplo, *\$1.auth.example.com*. Por esse motivo, nenhum usuário de suas aplicações deve acessar o login gerenciado de qualquer domínio principal *ou* subdomínio. Quando os domínios personalizados usarem o mesmo TLD, mantenha-os no mesmo nível de subdomínio.

Digamos que você tenha um grupo de usuários com o domínio personalizado *auth.example.com*. E então você cria outro grupo de usuários e atribui o domínio personalizado *uk.auth.example.com*. O usuário faz login com *auth.example.com.* e recebe um cookie que seu navegador apresenta a qualquer site no caminho curinga *\$1.auth.example.com*. Em seguida, ele tenta fazer login em *uk.auth.example.com.*. Ele transmite um cookie inválido para o domínio do grupo de usuários e recebe um erro em vez de uma solicitação de login. Por outro lado, um usuário com um cookie para *\$1.auth.example.com* não tem problemas em iniciar uma sessão de login em *auth2.example.com*.

**Versão de marca**  
Ao criar um domínio, você define uma **Versão de marca**. Suas opções são a nova experiência de login gerenciado e a experiência de IU hospedada clássica. Essa opção se aplica a todos os clientes da aplicação que hospedam serviços em seu domínio.

# Usar o domínio de prefixo do Amazon Cognito para login gerenciado
<a name="cognito-user-pools-assign-domain-prefix"></a>

A experiência padrão para login gerenciado é hospedada em um domínio que AWS possui. Essa abordagem é bem simples de usar: basta um nome de prefixo e a ativação estará feita. Porém, esse domínio não tem recursos que inspiram a confiança de um domínio personalizado. Não há diferença de custo entre a opção de domínio do Amazon Cognito e a opção de domínio personalizado. A única diferença é o domínio no endereço da web para o qual você direciona seus usuários. Para casos de redirecionamentos de IdP de terceiros e fluxos de credenciais de clientes, o domínio hospedado tem pouco efeito aparente. Um domínio personalizado é melhor nos casos em que os usuários fazem login com o login gerenciado e interagem com um domínio de autenticação que não corresponde ao domínio da aplicação.

O domínio hospedado do Amazon Cognito tem um prefixo de sua escolha, mas está hospedado no domínio raiz, `amazoncognito.com`. Este é um exemplo:

```
https://cognitoexample.auth.ap-south-1.amazoncognito.com
```

Todos os domínios de prefixo seguem este formato: `prefix`.`auth`.*`Região da AWS code`*.`amazoncognito`.`com`. Grupos de usuários de [domínio personalizado](cognito-user-pools-add-custom-domain.md) podem hospedar as páginas de IU hospedada e login gerenciado em qualquer domínio que seja de sua propriedade.

**nota**  
Para aumentar a segurança das aplicações do Amazon Cognito, os domínios principais dos endpoints do grupo de usuários são registrados na [Public Suffix List (PSL)](https://publicsuffix.org/). O PSL ajuda os navegadores da web dos usuários a estabelecer uma compreensão consistente dos endpoints do grupo de usuários e dos cookies que eles definem.  
Os domínios principais do grupo de usuários usam os formatos a seguir.  

```
auth.Region.amazoncognito.com
auth-fips.Region.amazoncognito.com
```

Para adicionar um cliente de aplicativo e um domínio de grupo de usuários com o. Console de gerenciamento da AWS, consulte[Criar um cliente de aplicação](user-pool-settings-client-apps.md#cognito-user-pools-app-idp-settings-console-create).

**Topics**
+ [

## Pré-requisitos
](#cognito-user-pools-assign-domain-prefix-prereq)
+ [

## Como configurar um prefixo de domínio do Amazon Cognito
](#cognito-user-pools-assign-domain-prefix-step-1)
+ [

## Verificar a página de login
](#cognito-user-pools-assign-domain-prefix-verify)

## Pré-requisitos
<a name="cognito-user-pools-assign-domain-prefix-prereq"></a>

Antes de começar, você precisa de:
+ Um grupo de usuários com um cliente de aplicativo. Para obter mais informações, consulte [Conceitos básicos dos grupos de usuários](getting-started-user-pools.md).

## Como configurar um prefixo de domínio do Amazon Cognito
<a name="cognito-user-pools-assign-domain-prefix-step-1"></a>

Você pode usar a API Console de gerenciamento da AWS ou a AWS CLI ou para configurar um domínio de grupo de usuários.

------
#### [ Amazon Cognito console ]

**Configurar um domínio**

1. Navegue até o menu **Domínio** em **Identidade visual**.

1. Ao lado de **Domínio**, selecione **Ações** e clique em **Criar domínio do Cognito**. Se já tiver configurado um domínio de prefixo de grupo de usuários, selecione **Excluir domínio do Cognito** antes de criar seu novo domínio personalizado.

1. Insira um prefixo de domínio disponível para usar com um **Domínio do Amazon Cognito**. Para obter mais informações sobre como configurar um **Domínio personalizado**, consulte [Usar o próprio domínio para fazer login gerenciado](cognito-user-pools-add-custom-domain.md).

1. Escolha uma **Versão de marca**. Sua versão de marca se aplica a todas as páginas interativas nesse domínio. Seu grupo de usuários pode hospedar a identidade visual do login gerenciado ou da IU hospedada para todos os clientes da aplicação.
**nota**  
Você pode ter um domínio personalizado e um domínio de prefixo, mas o Amazon Cognito só fornece o endpoint `/.well-known/openid-configuration` para o domínio *personalizado*.

1. Escolha **Criar**.

------
#### [ CLI/API ]

Use os comandos a seguir para criar um prefixo de domínio personalizado e atribuí-lo ao grupo de usuários.

**Para configurar um domínio de grupo de usuários**
+ AWS CLI: `aws cognito-idp create-user-pool-domain`

  **Exemplo**: `aws cognito-idp create-user-pool-domain --user-pool-id <user_pool_id> --domain <domain_name> --managed-login-version 2`
+ Operação da API de grupos de usuários: [CreateUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolDomain.html)

**Para obter informações sobre um domínio**
+ AWS CLI: `aws cognito-idp describe-user-pool-domain`

  **Exemplo**: `aws cognito-idp describe-user-pool-domain --domain <domain_name>`
+ Operação da API de grupos de usuários: [DescribeUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolDomain.html)

**Como excluir um domínio**
+ AWS CLI: `aws cognito-idp delete-user-pool-domain`

  **Exemplo**: `aws cognito-idp delete-user-pool-domain --domain <domain_name>`
+ Operação da API de grupos de usuários: [DeleteUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUserPoolDomain.html)

------

## Verificar a página de login
<a name="cognito-user-pools-assign-domain-prefix-verify"></a>
+ Verifique se a página de login está disponível no seu domínio hospedado do Amazon Cognito.

  ```
  https://<your_domain>/login?response_type=code&client_id=<your_app_client_id>&redirect_uri=<your_callback_url>
  ```

O domínio é exibido na página **Domain name** (Nome do domínio) do console do Amazon Cognito. O ID de cliente do aplicativo e o URL de retorno de chamada são exibidos na página **App client settings** (Configurações do cliente do aplicativo).

# Usar o próprio domínio para fazer login gerenciado
<a name="cognito-user-pools-add-custom-domain"></a>

Após configurar um cliente da aplicação, você poderá configurar o grupo de usuários com um domínio personalizado para os serviços de domínio do [login gerenciado](cognito-user-pools-managed-login.md). Com um domínio personalizado, os usuários podem fazer login na aplicação usando seu próprio endereço da web em vez do [domínio de prefixo](cognito-user-pools-assign-domain-prefix.md) `amazoncognito.com`. Domínios personalizados melhoram a confiança do usuário em sua aplicação com um nome de domínio familiar, especialmente quando o domínio raiz corresponde ao domínio que hospeda a aplicação. Os domínios personalizados podem melhorar a conformidade com os requisitos de segurança da organização.

Um domínio personalizado tem alguns pré-requisitos, incluindo um grupo de usuários, um cliente da aplicação e um domínio da web de sua propriedade. Os domínios personalizados também exigem um certificado SSL para o domínio personalizado, gerenciado com AWS Certificate Manager (ACM) no Leste dos EUA (Norte da Virgínia). O Amazon Cognito cria uma CloudFront distribuição da Amazon, protegida em trânsito com seu certificado ACM. Como você é proprietário do domínio, você deve criar um registro DNS que direcione o tráfego para a CloudFront distribuição do seu domínio personalizado.

Com esses elementos prontos, você pode adicionar o domínio personalizado ao grupo de usuários por meio do console ou da API do Amazon Cognito. Isso envolve especificar o nome de domínio e o certificado SSL e, em seguida, atualizar sua configuração de DNS com o destino de alias fornecido. Depois de fazer essas alterações, você pode verificar se a página de login está acessível no seu domínio personalizado.

A maneira mais simples de criar um domínio personalizado é com uma zona hospedada pública no Amazon Route 53. O console do Amazon Cognito pode criar os registros DNS corretos em algumas etapas. Antes de começar, considere [criar uma zona hospedada do Route 53](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) para um domínio ou subdomínio que você possua.

**Topics**
+ [

## Como adicionar um domínio personalizado a um grupo de usuários
](#cognito-user-pools-add-custom-domain-adding)
+ [

## Pré-requisitos
](#cognito-user-pools-add-custom-domain-prereq)
+ [

## Etapa 1: insira o nome de domínio personalizado
](#cognito-user-pools-add-custom-domain-console-step-1)
+ [

## Etapa 2: adicionar um destino do alias e subdomínio
](#cognito-user-pools-add-custom-domain-console-step-2)
+ [

## Etapa 3: verificar a página de acesso
](#cognito-user-pools-add-custom-domain-console-step-3)
+ [

## Como alterar o certificado SSL do seu domínio personalizado
](#cognito-user-pools-add-custom-domain-changing-certificate)

## Como adicionar um domínio personalizado a um grupo de usuários
<a name="cognito-user-pools-add-custom-domain-adding"></a>

Para adicionar um domínio personalizado para seu grupo de usuários, especifique o nome de domínio no console do Amazon Cognito e forneça um certificado que você gerencia com o [AWS Certificate Manager](https://docs.aws.amazon.com/acm/latest/userguide/) (ACM). Depois de adicionar seu domínio, o Amazon Cognito fornece um destino de alias, que você adiciona à sua configuração de DNS.

## Pré-requisitos
<a name="cognito-user-pools-add-custom-domain-prereq"></a>

Antes de começar, você precisa de:
+ Um grupo de usuários com um cliente de aplicativo. Para obter mais informações, consulte [Conceitos básicos dos grupos de usuários](getting-started-user-pools.md).
+ Um domínio da Web do qual você é proprietário. O *domínio superior* deve ter um **registro A** DNS válido. Você pode atribuir qualquer valor a esse registro. O domínio superior pode ser a raiz do domínio ou um domínio inferior que fica um nível acima na hierarquia do domínio. Por exemplo, se o domínio personalizado for *auth.xyz.exemplo.com*, o Amazon Cognito precisará ser capaz de resolver *xyz.exemplo.com* como um endereço IP. Para evitar um impacto acidental na infraestrutura do cliente, o Amazon Cognito não suporta o uso de domínios de primeiro nível TLDs () para domínios personalizados. Para obter mais informações, consulte [Nomes de domínio](https://tools.ietf.org/html/rfc1035).
+ A capacidade de criar um subdomínio para seu domínio personalizado. Recomendamos **auth** para o nome do subdomínio. Por exemplo: *auth.example.com*.
**nota**  
Poderá ser necessário obter um novo certificado para o subdomínio do domínio personalizado se você não tiver um [certificado curinga](https://en.wikipedia.org/wiki/Wildcard_certificate).
+ Um SSL/TLS certificado público gerenciado pela ACM no Leste dos EUA (Norte da Virgínia). O certificado deve estar em us-east-1 porque será associado a uma distribuição CloudFront em, um serviço global.
+ Clientes de navegador compatíveis com Server Name Indication (SNI). A CloudFront distribuição que o Amazon Cognito atribui aos domínios personalizados requer SNI. Você não pode alterar essa configuração. Para obter mais informações sobre o SNI nas CloudFront distribuições, consulte [Usar o SNI para atender solicitações HTTPS](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cnames-https-dedicated-ip-or-sni.html#cnames-https-sni) no *Amazon CloudFront * Developer Guide.
+ Uma aplicação que permite que o servidor de autorização do grupo de usuários adicione cookies às sessões do usuário. O Amazon Cognito define vários cookies obrigatórios para páginas de login gerenciado. Entre eles estão `cognito`, `cognito-fl` e `XSRF-TOKEN`. Embora cada cookie individual respeite os limites de tamanho do navegador, alterações na configuração do grupo de usuários podem fazer com que os cookies do login gerenciado aumentem de tamanho. Um serviço intermediário, como o Application Load Balancer (ALB), na frente do domínio personalizado pode impor um tamanho máximo de cabeçalho ou tamanho total do cookie. Se a aplicação também definir seus próprios cookies, as sessões dos usuários poderão exceder esses limites. Para evitar conflitos de limite de tamanho, recomendamos que a aplicação não defina cookies no subdomínio que hospeda os serviços de domínio do grupo de usuários.
+ Permissão para atualizar as CloudFront distribuições da Amazon. Você pode fazer isso anexando a declaração de política do IAM a seguir a um usuário em sua Conta da AWS:

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
           {
              "Sid": "AllowCloudFrontUpdateDistribution",
              "Effect": "Allow",
              "Action": [
                  "cloudfront:updateDistribution"
              ],
              "Resource": [
                  "*"
              ]
          }
      ]
  }
  ```

------

  Para obter mais informações sobre como autorizar ações em CloudFront, consulte [Usando políticas baseadas em identidade (políticas do IAM)](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/access-control-managing-permissions.html) para. CloudFront

  O Amazon Cognito inicialmente usa suas permissões do IAM para configurar a CloudFront distribuição, mas a distribuição é gerenciada por. AWS Você não pode alterar a configuração da CloudFront distribuição que o Amazon Cognito associou ao seu grupo de usuários. Por exemplo, não é possível atualizar as versões de TLS compatíveis na política de segurança.

## Etapa 1: insira o nome de domínio personalizado
<a name="cognito-user-pools-add-custom-domain-console-step-1"></a>

É possível adicionar seu domínio ao grupo de usuários usando a API ou o console do Amazon Cognito.

------
#### [ Amazon Cognito console ]

**Para adicionar o domínio ao grupo de usuários diretamente do console do Amazon Cognito:**

1. Navegue até o menu **Domínio** em **Identidade visual**.

1. Ao lado de **Domínio**, escolha **Ações** e **Criar domínio personalizado** ou **Criar domínio do Amazon Cognito**. Se já tiver configurado um domínio personalizado de grupo de usuários, clique em **Excluir domínio personalizado** antes de criar seu novo domínio personalizado.

1. Ao lado de **Domínio**, selecione **Ações** e clique em **Criar domínio personalizado**. Se você já configurou um domínio personalizado, clique em **Excluir domínio personalizado** para excluir o domínio existente antes de criar seu novo domínio personalizado.

1. Para o **Custom domain** (Domínio personalizado), insira o URL do domínio que você deseja usar com o Amazon Cognito. Seu nome de domínio pode incluir somente letras minúsculas, números e hífens. Não use um hífen como primeiro ou último caractere. Use pontos para separar nomes de subdomínio.

1. Para o **ACM certificate** (Certificado do ACM), escolha o certificado SSL que você deseja usar para seu domínio. Somente certificados ACM no Leste dos EUA (Norte da Virgínia) estão qualificados para uso com um domínio personalizado do Amazon Cognito, independentemente Região da AWS do seu grupo de usuários.

   Se você não tem um certificado disponível, poderá usar o ACM para implantar um no Leste dos EUA (Norte da Virgínia). Para obter mais informações, consulte [Conceitos básicos](https://docs.aws.amazon.com/acm/latest/userguide/gs.html) no *Guia do usuário do AWS Certificate Manager *.

1. Escolha uma **Versão de marca**. Sua versão de marca se aplica a todas as páginas interativas nesse domínio. Seu grupo de usuários pode hospedar a identidade visual do login gerenciado ou da IU hospedada para todos os clientes da aplicação.
**nota**  
Você pode ter um domínio personalizado e um domínio de prefixo, mas o Amazon Cognito só fornece o endpoint `/.well-known/openid-configuration` para o domínio *personalizado*.

1. Escolha **Criar**.

1. O Amazon Cognito retorna você ao menu **Domínio**. Uma mensagem intitulada **Create an alias record in your domain's DNS** (Criar um registro de alias no DNS do seu domínio) é exibida. Anote o **Domain** (Domínio) e **Alias target** (Destino do alias) exibidos no console. Eles serão usados na próxima etapa para direcionar o tráfego para o seu domínio personalizado.

------
#### [ API ]

O corpo da [CreateUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolDomain.html)solicitação a seguir cria um domínio personalizado.

```
{
   "Domain": "auth.example.com",
   "UserPoolId": "us-east-1_EXAMPLE",
   "ManagedLoginVersion": 2,
   "CustomDomainConfig": {
    "CertificateArn": "arn:aws:acm:us-east-1:111122223333:certificate/a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
   }
}
```

------

## Etapa 2: adicionar um destino do alias e subdomínio
<a name="cognito-user-pools-add-custom-domain-console-step-2"></a>

Nesta etapa, configure um alias por meio do seu provedor de serviços do servidor de nome de domínio (DNS) que aponta para o destino do alias da etapa anterior. Se você estiver usando o Amazon Route 53 para resolução do endereço DNS, escolha a seção **To add an alias target and subdomain using Route 53** (Para adicionar um destino do alias e subdomínio usando o Route 53).

### Para adicionar um destino do alias e subdomínio à sua configuração atual do DNS
<a name="cognito-user-pools-add-custom-domain-console-step-2a"></a>
+ Se não estiver usando o Route 53 para resolução do endereço DNS, é necessário utilizar as ferramentas de configuração do seu provedor de serviço DNS para adicionar o destino do alias da etapa anterior ao registro DNS do domínio. O provedor DNS também precisará configurar o subdomínio para o seu domínio personalizado.

### Para adicionar um destino do alias e subdomínio usando o Route 53
<a name="cognito-user-pools-add-custom-domain-console-step-2b"></a>

1. Faça login no [console do Route 53](https://console.aws.amazon.com/route53/). Se solicitado, insira suas AWS credenciais.

1. Se não tiver uma zona hospedada pública no Route 53, crie uma com uma raiz que seja pai do seu domínio personalizado. Para obter mais informações, consulte [Criar uma zona hospedada pública](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/CreatingHostedZone.html) no *Guia do desenvolvedor do Amazon Route 53*.

   1. Escolha **Criar zona hospedada**.

   1. Insira o domínio principal, por exemplo*auth.example.com*, do seu domínio personalizado, por exemplo*myapp.auth.example.com*, na lista de **nomes de domínio**.

   1. Insira uma **Descrição** para a sua zona hospedada.

   1. Selecione um **Type** (Tipo) de zona hospedada de **Public hosted zone** (Zona hospedada pública) para permitir que clientes públicos resolvam seu domínio personalizado. Não há compatibilidade com a seleção de **Private hosted zone** (Zona hospedada privada).

   1. Aplique **Etiquetas** como desejar.

   1. Escolha **Criar zona hospedada**.
**nota**  
Também é possível criar uma nova zona hospedada para o domínio personalizado com um conjunto de delegação na zona hospedada principal que direciona consultas para a zona hospedada do subdomínio. Caso contrário, crie um registro A. Esse método oferece mais flexibilidade e segurança com suas zonas hospedadas. Para mais informações, consulte [Creating a subdomain for a domain hosted through Amazon Route 53](https://aws.amazon.com/premiumsupport/knowledge-center/create-subdomain-route-53/) (Criar um subdomínio para um domínio hospedado por meio do Amazon Route 53).

1. Na página **Hosted Zones (Zonas hospedadas)**, escolha o nome da sua zona hospedada.

1. Adicione um registro DNS ao domínio pai do seu domínio personalizado, caso ainda não tenha um. Crie um registro DNS para o domínio pai com as propriedades a seguir:
   + **Nome do registro**: deixe em branco.
   + **Tipo de registro**: `A`.
   + **Alias**: não ative.
   + **Valor**: insira o valor desejado. Esse registro deve ser resolvido como *algo*, mas o valor do registro não importa para o Amazon Cognito.
   + **TTL**: defina como seu TTL preferido ou deixe o padrão.
   + **Política de roteamento**: escolha **roteamento simples**.

1. Escolha **Criar registros**. Veja a seguir um exemplo de registro para o domínio*example.com*:

   `example.com. 60 IN A 198.51.100.1`
**nota**  
O Amazon Cognito verifica que há um registro DNS para o domínio pai do seu domínio personalizado para proteger contra o sequestro acidental de domínios de produção. Se você não tiver um registro DNS para o domínio pai, o Amazon Cognito retornará um erro quando você tentar definir o domínio personalizado. Um registro de Início de autoridade (SOA) não é um registro DNS suficiente para fins de verificação do domínio pai.

1. Adicione outro registro DNS para seu domínio personalizado com as seguintes propriedades:
   + **Nome do registro**: prefixo do domínio personalizado, por exemplo, `auth` para criar um registro para `auth.example.com`.
   + **Tipo de registro**: `A`.
   + **Alias**: ative.
   + **Rotear tráfego para**: escolha **Alias para distribuição do CloudFront**. Insira o **Destino do alias** que você registrou anteriormente, por exemplo, `123example.cloudfront.net`.
   + **Política de roteamento**: escolha **roteamento simples**.

1. Escolha **Criar registros**.
**nota**  
A propagação de seus novos registros para todos os servidores de DNS do Route 53 pode levar cerca de 60 segundos. Você pode usar o método da [GetChange](https://docs.aws.amazon.com/Route53/latest/APIReference/API_GetChange.html)API Route 53 para verificar se suas alterações foram propagadas. 

## Etapa 3: verificar a página de acesso
<a name="cognito-user-pools-add-custom-domain-console-step-3"></a>
+ Verifique se a página de login está disponível no seu domínio personalizado.

  Faça login com o domínio e o subdomínio personalizados inserindo esse endereço no navegador. Este é um exemplo de URL de um domínio personalizado *example.com* com o subdomínio: *auth*

  ```
  https://myapp.auth.example.com/login?response_type=code&client_id=<your_app_client_id>&redirect_uri=<your_callback_url>
  ```

## Como alterar o certificado SSL do seu domínio personalizado
<a name="cognito-user-pools-add-custom-domain-changing-certificate"></a>

Quando necessário, você poderá usar o Amazon Cognito para alterar o certificado aplicado ao seu domínio personalizado.

Geralmente, isso é desnecessário ao ser seguida a rotina de renovação do certificado com o ACM. Quando você renovar seu certificado existente no ACM, o ARN do certificado permanecerá o mesmo, e seu domínio personalizado usará o novo certificado automaticamente.

No entanto, se você substituir o certificado existente por um novo, o ACM dará ao novo certificado um novo ARN. Para aplicar o novo certificado ao seu domínio personalizado, você deve fornecer esse ARN ao Amazon Cognito.

Depois de fornecer o novo certificado, o Amazon Cognito precisará de até uma hora para distribuí-lo ao seu domínio personalizado.

**Antes de começar**  
Antes de alterar seu certificado no Amazon Cognito, você deve adicionar o certificado ao ACM. Para obter mais informações, consulte [Conceitos básicos](https://docs.aws.amazon.com/acm/latest/userguide/gs.html) no *Guia do usuário do AWS Certificate Manager *.  
Ao adicionar seu certificado ao ACM, você deve escolher Leste dos EUA (Norte da Virgínia) como região da AWS .

É possível alterar seu certificado usando a API ou o console do Amazon Cognito.

------
#### [ Console de gerenciamento da AWS ]

**Para renovar um certificado no console do Amazon Cognito:**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon Cognito em. [https://console.aws.amazon.com/cognito/home](https://console.aws.amazon.com/cognito/home)

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha o grupo de usuários para o qual deseja atualizar o certificado.

1. Clique no menu **Domínio**.

1. Escolha **Actions** (Ações), **Edit ACM certificate** (Editar certificado do ACM).

1. Selecione o novo certificado que deseja associar ao seu domínio personalizado.

1. Escolha **Salvar alterações**.

------
#### [ API ]

**Para renovar um certificado (API do Amazon Cognito)**
+ Use a ação [UpdateUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolDomain.html).

------

# Aplicar a identidade visual às páginas de login gerenciado
<a name="managed-login-branding"></a>

É recomendável proporcionar uma experiência de usuário consistente entre o serviço de autenticação e a aplicação. Você pode atingir essa meta com formulários personalizados e operações de API de back-end em um AWS SDK ou com login gerenciado. O login gerenciado e a IU hospedada clássica são frontends da web para o componente da sua aplicação que fornece autenticação com grupos de usuários. Para sincronizar os serviços de autenticação gerenciada com a UX da aplicação, existem duas opções de personalização: o editor de identidade visual e a identidade visual de IU hospedada. Escolha a experiência mais indicada para você no console do Amazon Cognito e com as operações de API do grupo de usuários.

**O editor de identidade visual**  
O [editor de identidade visual](managed-login-brandingeditor.md) é a mais nova opção de personalização para a mais nova experiência de IU de grupos de usuários, o [login gerenciado](cognito-user-pools-managed-login.md). O editor de identidade visual é um editor visual no-code para estilos e ativos de login gerenciado e um conjunto de operações de API para configuração programática de inúmeras opções de configuração. Os grupos de usuários configurados com um [domínio](cognito-user-pools-assign-domain.md) e um login gerenciado exibem automaticamente a versão de designer de marcas de suas páginas de login.

**Identidade visual de IU hospedada (clássica)**  
A [experiência de marca da IU (clássica)](hosted-ui-classic-branding.md) tem duas opções: modificar um arquivo Cascading Style Sheets (CSS) com um conjunto fixo de opções de estilo e adicionar uma imagem de logotipo personalizada. Você pode definir essas opções no console do Amazon Cognito ou com a operação [Set UICustomization](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUICustomization.html) API. Quando o serviço foi lançado, o Amazon Cognito tinha somente essa opção. Os grupos de usuários configurados com um [domínio](cognito-user-pools-assign-domain.md) e a versão de marca da IU hospedada exibem automaticamente a versão clássica de suas páginas de login. Seu [plano de recursos](cognito-sign-in-feature-plans.md) também pode ser compatível somente com a interface hospedada.

**nota**  
O editor de identidade visual e a experiência de identidade visual clássica modificam as propriedades visuais do seu serviço de autenticação hospedado. Atualmente, não é possível modificar o texto exibido em suas páginas de login gerenciado, exceto para aplicar a localização em um dos vários idiomas. Para obter mais informações sobre localização, consulte [Managed login localization](cognito-user-pools-managed-login.md#managed-login-localization).

## Escolher uma experiência de identidade visual e atribuir estilos
<a name="managed-login-branding-choose"></a>

No console do Amazon Cognito, novos grupos de usuários usam como padrão a experiência de identidade visual de **login gerenciado**. Os grupos de usuários configurados antes da disponibilização do login gerenciado terão a identidade visual de **IU hospedada (clássica)**. Você pode alternar entre a identidade visual de login gerenciado e de IU hospedada. Quando você altera sua **versão de marca**, o Amazon Cognito aplica imediatamente a alteração às páginas interativas do domínio do seu grupo de usuários. Com o login gerenciado e a IU hospedada, seu grupo de usuários pode ter um estilo para cada cliente de aplicação.

Cada cliente de aplicação pode ter um *estilo* de identidade visual distinto, mas um domínio do grupo de usuários serve tanto para o login gerenciado quanto para a IU hospedada. Um estilo é o conjunto de configurações de personalização aplicadas a um cliente de aplicação. Você pode configurar um [domínio personalizado](cognito-user-pools-add-custom-domain.md) e um [domínio de prefixo](cognito-user-pools-assign-domain-prefix.md) por grupo de usuários. Você pode atribuir diferentes versões de marca aos seus domínios personalizados e de prefixo. No entanto, um domínio de prefixo não é totalmente funcional quando você também tem um domínio personalizado; os endpoints de descoberta `.well-known` do OIDC apresentam *somente* caminhos de domínio personalizados. Você só pode usar o domínio de prefixo para operações que não exijam descoberta de endpoint (`openid-configuration`) em um grupo de usuários com essa configuração. Devido a essas propriedades dos grupos de usuários, é possível escolher efetivamente uma versão de marca por grupo de usuários.

Você pode atribuir estilos aos clientes da aplicação em um grupo de usuários em que um domínio é definido para a versão da marca de login gerenciado. Estilos são um conjunto de configurações visuais composto por arquivos de imagem, opções de exibição e valores CSS. Quando você atribui um estilo a um cliente de aplicação, o Amazon Cognito envia imediatamente suas atualizações para suas páginas de login interativas. O Amazon Cognito exibe suas páginas interativas com a versão de identidade visual escolhida e a personalização que você aplicou a ela.

### Atualizar e excluir estilos
<a name="managed-login-branding-update"></a>

Ao criar um estilo, você o vincula a um cliente de aplicação. Para alterar uma atribuição de estilo para um cliente de aplicação, primeiro exclua o estilo original. No momento, não é possível copiar configurações entre estilos. Isso deve ser feito de maneira programática. Para replicar as configurações entre estilos e clientes de aplicativos, obtenha as configurações de um estilo com a operação da [DescribeManagedLoginBranding](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeManagedLoginBranding.html)API e aplique-as com [CreateManagedLoginBranding](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateManagedLoginBranding.html)ou [UpdateManagedLoginBranding](https://docs.aws.amazon.com/). Você não pode alterar os estilos atribuídos de um cliente de aplicação. Você pode somente excluir o original e definir um novo. Para obter mais informações sobre como gerenciar estilos com operações de API e SDK, consulte [Operações de API e SDK para identidade visual de login gerenciado](managed-login-brandingeditor.md#branding-designer-api).

**nota**  
As solicitações programáticas que criam ou atualizam o estilo de identidade visual devem ter um tamanho de solicitação não superior a 2 MB. Se a solicitação for maior que esse limite, divida-a em várias solicitações `UpdateManagedLoginBranding` para grupos de parâmetros que não excedam o tamanho máximo da solicitação. Essas solicitações não resultam na definição de parâmetros não especificados como padrão, portanto, você pode enviar solicitações parciais sem afetar as configurações existentes.

Para excluir um estilo no console do Amazon Cognito, acesse o menu **Login gerenciado**. Em **Estilos**, escolha o estilo que deseja excluir e clique em **Excluir estilo**.

Em linhas gerais, o processo de atribuição de identidade visual a um domínio consiste nas etapas a seguir.

1. [Crie um domínio e defina a versão da marca](cognito-user-pools-assign-domain.md).

1. Crie um estilo de identidade visual e atribua-o a um cliente de aplicação.

**Como atribuir um estilo a um cliente de aplicação**

1. No menu **Domínio** do grupo de usuários, crie um domínio e defina a **Versão de marca** como **Login gerenciado**.

1. Acesse o menu **Login gerenciado**. Em **Estilos**, selecione **Criar um estilo**.

1. Escolha o cliente de aplicação ao qual deseja atribuir seu estilo ou crie um novo [cliente de aplicação](user-pool-settings-client-apps.md).

1. Para começar a definir suas configurações de marca, selecione **Iniciar editor de identidade visual**.

**Topics**
+ [

## Escolher uma experiência de identidade visual e atribuir estilos
](#managed-login-branding-choose)
+ [

# O editor de identidade visual e a identidade visual de login gerenciado
](managed-login-brandingeditor.md)
+ [

# Personalizar identidade visual de IU hospedada (clássica)
](hosted-ui-classic-branding.md)

# O editor de identidade visual e a identidade visual de login gerenciado
<a name="managed-login-brandingeditor"></a>

O editor de identidade visual é uma ferramenta visual de design e edição para suas páginas da web de login gerenciado. Ele está integrado ao console do Amazon Cognito. No editor de identidade visual, você começa com uma prévia de suas páginas de login e pode prosseguir para uma opção de configuração rápida ou uma visualização detalhada com opções avançadas. É possível modificar e visualizar parâmetros de estilo ou adicionar uma imagem de fundo e um logotipo personalizados. Também é possível configurar o modo claro e o modo escuro.

![\[Uma prévia do editor de identidade visual para grupos de usuários do Amazon Cognito.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/hosted-ui-customization-editor-preview.png)


Para começar, crie um estilo que você possa aplicar ao seu grupo de usuários ou a um cliente de aplicação.

**Como começar a usar o editor de identidade visual**

1. [Crie um domínio](cognito-user-pools-assign-domain.md) na guia **Domínio** ou atualize seu domínio existente. Em **Versão de marca**, defina seu domínio para usar o **Login gerenciado**.

1. Exclua o estilo de cliente de aplicação existente, se houver.

   1. No menu **Clientes da aplicação**, selecione seu cliente de aplicação.

   1. Em **Estilo de login gerenciado**, selecione o estilo atribuído ao seu cliente de aplicação.

   1. Selecione **Excluir estilo**. Confirme a seleção.

1. Acesse o menu **Login gerenciado** no grupo de usuários. Siga as instruções para selecionar um [plano de recursos](cognito-sign-in-feature-plans.md) que inclua login gerenciado, caso ainda não o tenha feito. Você também pode selecionar **Visualizar este recurso** se quiser conferir o editor de identidade visual sem fazer alterações.

1. Em **Estilos**, selecione **Criar um estilo**.

1. Escolha o cliente de aplicação ao qual deseja atribuir seu estilo e selecione **Criar**. Você também pode criar um novo cliente de aplicação.

1. O console do Amazon Cognito inicia o editor de identidade visual.

1. Escolha uma guia na qual deseja começar a editar ou selecione **Iniciar editor** e acesse a [configuração rápida](#branding-designer-quick-setup). As seguintes guias estão disponíveis:  
**Demonstração**  
Veja como suas seleções atuais aparecem em suas páginas de login gerenciado.  
**Fundamentos**  
Defina um tema geral, configure links para provedores de identidades externos e estilize os campos do formulário.  
**Componentes**  
Configure estilos para cabeçalhos, rodapés e elementos individuais da IU.

1. Para definir as configurações iniciais, acesse a configuração rápida. Selecione **Alterar categoria de configurações** e clique em **Configuração rápida**. Ao selecionar **Prosseguir**, o editor de identidade visual será iniciado com um conjunto de opções básicas para você configurar.

## Texto e localização
<a name="branding-designer-loc"></a>

Não é possível modificar nem localizar texto no editor de identidade visual. Em vez disso, adicione um parâmetro de consulta `lang` ao URL que você distribui aos usuários. Esse parâmetro fará com que suas páginas de login gerenciado sejam localizadas em um dos vários idiomas disponíveis. Para obter mais informações, consulte [Managed login localization](cognito-user-pools-managed-login.md#managed-login-localization). 

## Configuração rápida
<a name="branding-designer-quick-setup"></a>

O botão **Iniciar editor de identidade visual** carrega um editor visual para a configuração do login gerenciado, onde você pode selecionar entre diversas opções básicas de personalização. Conforme você faz as seleções, o Amazon Cognito exibe as alterações do login gerenciado em uma janela de pré-visualização. Para retornar ao menu de configurações detalhadas, clique no botão **Alterar categoria de configurações**.

**Qual deve ser a aparência geral?**  
Defina as configurações básicas do tema para o login gerenciado.    
**Modo de exibição**  
Escolha um modo claro, escuro ou uma experiência adaptável para seu login gerenciado. As configurações adaptáveis se referem à preferência do navegador do usuário quando o Amazon Cognito exibe o login gerenciado. Ao escolher um modo adaptável ao navegador, você pode escolher cores e imagens de logotipo diferentes para os modos claro e escuro.  
**Espaçamento**  
Defina o espaçamento padrão entre os elementos na página.  
**Raio da borda**  
Defina a profundidade de arredondamento da borda externa dos elementos.

**Qual deve ser a aparência do plano de fundo da página?**    
**Tipo de plano de fundo**  
A caixa de seleção **Mostrar imagem** indica se você deseja uma imagem de fundo ou definir uma cor de fundo sólida.  

1. Para usar uma imagem, selecione **Mostrar imagem** e escolha uma imagem de fundo para os modos claro e escuro. Você também pode definir uma **Cor do plano de fundo da página** no modo escuro e no modo claro para áreas do plano de fundo que não estão cobertas pela imagem.

1. Para usar somente uma cor para o plano de fundo, desmarque **Mostrar imagem** e escolha a **Cor do plano de fundo da página** no modo claro e no modo escuro.

**Qual deve ser a aparência dos formulários?**  
Defina as configurações dos elementos do formulário do login gerenciado. Exemplos de elementos do formulário incluem solicitações de login e código.    
**Alinhamento horizontal**  
Defina o alinhamento horizontal dos campos do formulário.  
**Logotipo do formulário**  
Defina o posicionamento da imagem do logotipo.  
**Imagem do logotipo**  
Escolha um arquivo de imagem de logotipo para incluir no elemento do formulário nos modos claro e escuro. Para carregar uma imagem, selecione o menu suspenso **Imagem do logotipo**, clique em **Adicionar novo ativo** e adicione um arquivo de logotipo.  
**Cor primária da identidade visual**  
Defina uma cor de tema para os modos claro e escuro. Essa cor será aplicada como cor de fundo a todos os elementos classificados como primários.

**Qual deve ser a aparência dos cabeçalhos?**  
Escolha se você deseja incluir um cabeçalho em suas páginas de login gerenciado. O cabeçalho pode conter uma imagem de logotipo.    
**Logotipo do cabeçalho**  
Defina a posição da imagem do logotipo no cabeçalho.  
**Imagem do logotipo**  
Escolha a posição do logotipo e um arquivo de imagem do logotipo para incluir no cabeçalho. Para carregar uma imagem, selecione o menu suspenso **Imagem do logotipo**, clique em **Adicionar novo ativo** e adicione um arquivo de logotipo.  
**Cor do plano de fundo do cabeçalho**  
Defina as cores dos modos claro e escuro para o plano de fundo do cabeçalho.

## Configurações detalhadas
<a name="branding-designer-advanced"></a>

Na visualização de configurações detalhadas, você pode modificar componentes individuais na **Fundação** e nos **Componentes**. A guia **Pré-visualização** exibe uma prévia do login gerenciado no contexto atual com suas personalizações.

![\[Uma Console de gerenciamento da AWS captura de tela da configuração detalhada dos componentes de login gerenciado.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/hosted-ui-customization-console-preview.png)


Para acessar o editor visual de um componente, selecione o ícone de edição no bloco do componente. No editor do estúdio de temas, é possível alternar entre os componentes com o botão **Alterar categoria de configuração**.

### Fundamentos
<a name="branding-designer-advanced-foundation"></a>

**Estilo da aplicação**  
Configure os aspectos básicos da configuração de login gerenciado. Esta categoria tem configurações para o tema geral, espaçamento de texto e cabeçalho e rodapé da página.

**Modo de exibição**  
Escolha um modo claro, escuro ou uma experiência adaptável para suas páginas de login gerenciado. Ao escolher um modo adaptável ao navegador, você pode escolher cores e imagens de logotipo diferentes para os modos claro e escuro.

**Espaçamento**  
Defina o espaçamento padrão entre os elementos na página.

**Comportamento de autenticação**  
Configure estilos para os botões que conectam seus usuários a provedores de identidade externos (IdPs). Esta seção inclui a opção **Entrada de pesquisa de domínio** para que o login gerenciado solicite aos usuários um endereço de e-mail e os associe ao [identificador do provedor de identidades SAML](cognito-user-pools-managing-saml-idp-naming.md) correspondente.

**Comportamento do formulário**  
Configure estilos para formulários de entrada: posicionamento de entradas, cores e alinhamento de elementos.

### Componentes
<a name="branding-designer-advanced-components"></a>

**Botões**  
Estilos para botões que o Amazon Cognito exibe em páginas de login gerenciado.

**Divisor**  
Estilos para linhas divisórias e limites entre elementos de login gerenciado, como o formulário de entrada e o seletor de login de provedor externo.

**Suspenso**  
Estilos para menus suspensos.

**Favicon**  
Estilos para a imagem que o Amazon Cognito fornece para o ícone de guia e marcador.

**Anéis de foco**  
Estilos para os destaques que indicam uma entrada atualmente selecionada.

**Contêiner de formulário**  
Estilos para os elementos que delimitam um formulário.

**Rodapé global**  
Estilos para o rodapé que o Amazon Cognito exibe na parte inferior das páginas de login gerenciado.

**Cabeçalho global**  
Estilos para o cabeçalho que o Amazon Cognito exibe na parte superior das páginas de login gerenciado.

**Indicações**  
Estilos para mensagens de erro e sucesso.

**Controles de opções**  
Estilos para caixas de seleção, seleções múltiplas e outros prompts de entrada.

**Plano de fundo da página**  
Estilos para o plano de fundo geral do login gerenciado.

**Entradas**  
Estilos para prompts de entrada de campo de formulário.

**Link**  
Estilos para hiperlinks em páginas de login gerenciado.

**Texto para página**  
Estilos para texto na página.

**Texto para campo**  
Estilos para o texto ao redor dos campos de formulário.

## Operações de API e SDK para identidade visual de login gerenciado
<a name="branding-designer-api"></a>

Você também pode aplicar a marca a um estilo de login gerenciado com as operações de API [CreateManagedLoginBranding](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateManagedLoginBranding.html)e. [UpdateManagedLoginBranding](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateManagedLoginBranding.html) Essas operações são ideais para criar versões idênticas ou ligeiramente modificadas de um estilo de identidade visual para outra aplicação, cliente ou grupo de usuários. Consulte a marca de login gerenciado de um estilo existente com a operação da API [DescribeManagedLoginBranding](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeManagedLoginBranding.html), modifique a saída conforme necessário e aplique-a a outro recurso.

A operação `UpdateManagedLoginBranding` não altera o cliente de aplicação ao qual seu estilo é aplicado. Ela somente atualiza o estilo existente atribuído a um cliente de aplicação. Para substituir completamente o estilo de um cliente de aplicativo, exclua o estilo existente com [DeleteManagedLoginBranding](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteManagedLoginBranding.html)e atribua um novo estilo com`CreateManagedLoginBranding`. No console do Amazon Cognito, o mesmo se aplica: você deve excluir o estilo existente e criar um novo.

Configurar a identidade visual de login gerenciado em uma solicitação de API ou SDK exige que suas configurações sejam incorporadas em um arquivo JSON convertido em um tipo de dados `Document`. Veja a seguir uma orientação sobre imagens que você pode adicionar e como gerar solicitações programáticas para configurar um estilo de identidade visual.

### Ativos de imagem
<a name="branding-designer-api-assets"></a>

[CreateManagedLoginBranding](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateManagedLoginBranding.html)e [UpdateManagedLoginBranding](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateManagedLoginBranding.html)inclua um `Assets` parâmetro. Esse parâmetro é uma matriz de arquivos de imagem em formato binário codificado em base64.

**nota**  
As solicitações programáticas que criam ou atualizam o estilo de identidade visual devem ter um tamanho de solicitação não superior a 2 MB. Os ativos em sua solicitação podem fazer com que ela exceda esse limite. Se for o caso, divida sua solicitação em várias solicitações `UpdateManagedLoginBranding` para grupos de parâmetros que não excedam o tamanho máximo da solicitação. Essas solicitações não resultam na definição de parâmetros não especificados como padrão, portanto, você pode enviar solicitações parciais sem afetar as configurações existentes.

Alguns ativos têm limitações quanto aos tipos de arquivo que você pode enviar.


****  

| Ativo | Extensões de arquivo aceitas | 
| --- | --- | 
| FAVICON\$1ICO | ico | 
| FAVICON\$1SVG | svg | 
| EMAIL\$1GRAPHIC | png, svg, jpeg | 
| SMS\$1GRAPHIC | png, svg, jpeg | 
| AUTH\$1APP\$1GRAPHIC | png, svg, jpeg | 
| PASSWORD\$1GRAPHIC | png, svg, jpeg | 
| PASSKEY\$1GRAPHIC | png, svg, jpeg | 
| PAGE\$1HEADER\$1LOGO | png, svg, jpeg | 
| PAGE\$1HEADER\$1BACKGROUND | png, svg, jpeg | 
| PAGE\$1FOOTER\$1LOGO | png, svg, jpeg | 
| PAGE\$1FOOTER\$1BACKGROUND | png, svg, jpeg | 
| PAGE\$1BACKGROUND | png, svg, jpeg | 
| FORM\$1BACKGROUND | png, svg, jpeg | 
| FORM\$1LOGO | png, svg, jpeg | 
| IDP\$1BUTTON\$1ICON | ico, svg | 

Os arquivos do tipo SVG são compatíveis com os atributos e elementos a seguir.

------
#### [ Attributes ]

```
accent-height, accumulate, additivive, alignment-baseline, ascent, attributename, attributetype, azimuth, basefrequency, baseline-shift, begin, bias, by, class, clip, clip-path, clip-rule, color, color-interpolation, color-interpolation-filters, color-profile, color-rendering, cx, cy, d, dx, dy, diffuseconstant, direction, display, divisor, dur, edgemode, elevation, end, fill, fill-opacity, fill-rule, filter, filterunits, flood-color, flood-opacity, font-family, font-size, font-size-adjust, font-stretch, font-style, font-variant, font-weight, fx, fy, g1, g2, glyph-name, glyphref, gradientunits, gradienttransform, height, href, id, image-rendering, in, in2, k, k1, k2, k3, k4, kerning, keypoints, keysplines, keytimes, lang, lengthadjust, letter-spacing, kernelmatrix, kernelunitlength, lighting-color, local, marker-end, marker-mid, marker-start, markerheight, markerunits, markerwidth, maskcontentunits, maskunits, max, mask, media, method, mode, min, name, numoctaves, offset, operator, opacity, order, orient, orientation, origin, overflow, paint-order, path, pathlength, patterncontentunits, patterntransform, patternunits, points, preservealpha, preserveaspectratio, r, rx, ry, radius, refx, refy, repeatcount, repeatdur, restart, result, rotate, scale, seed, shape-rendering, specularconstant, specularexponent, spreadmethod, stddeviation, stitchtiles, stop-color, stop-opacity, stroke-dasharray, stroke-dashoffset, stroke-linecap, stroke-linejoin, stroke-miterlimit, stroke-opacity, stroke, stroke-width, style, surfacescale, tabindex, targetx, targety, transform, text-anchor, text-decoration, text-rendering, textlength, type, u1, u2, unicode, values, viewbox, visibility, vert-adv-y, vert-origin-x, vert-origin-y, width, word-spacing, wrap, writing-mode, xchannelselector, ychannelselector, x, x1, x2, xmlns, y, y1, y2, z, zoomandpan
```

------
#### [ Elements ]

```
svg, a, altglyph, altglyphdef, altglyphitem, animatecolor, animatemotion, animatetransform, audio, canvas, circle, clippath, defs, desc, ellipse, filter, font, g, glyph, glyphref, hkern, image, line, lineargradient, marker, mask, metadata, mpath, path, pattern, polygon, polyline, radialgradient, rect, stop, style, switch, symbol, text, textpath, title, tref, tspan, video, view, vkern, feBlend, feColorMatrix, feComponentTransfer, feComposite, feConvolveMatrix, feDiffuseLighting, feDisplacementMap, feDistantLight, feFlood, feFuncA, feFuncB, feFuncG, feFuncR, feGaussianBlur, feMerge, feMergeNode, feMorphology, feOffset, fePointLight, feSpecularLighting, feSpotLight, feTile, feTurbulence
```

------

### Ferramentas para operações de identidade visual de login gerenciado
<a name="branding-designer-api-tools"></a>

O Amazon Cognito gerencia um arquivo no [formato de esquema JSON](https://json-schema.org/docs) para o objeto de configurações de identidade visual de login gerenciado. Veja a seguir como atualizar programaticamente seu estilo de identidade visual.

**Como atualizar a identidade visual na API de grupos de usuários**

1. No console do Amazon Cognito, crie um estilo padrão de identidade visual de login gerenciado no menu **Login gerenciado** do grupo de usuários. Atribua-o a um cliente de aplicação.

1. Registre o ID do cliente de aplicação para o qual você criou o estilo, por exemplo, `1example23456789`.

1. Recupere as configurações do estilo de marca com uma solicitação de [DescribeManagedLoginBrandingByClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeManagedLoginBrandingByClient.html)API `ReturnMergedResources` definida como. `true` Veja a seguir um exemplo de corpo da solicitação .

   ```
   {
      "ClientId": "1example23456789",
      "ReturnMergedResources": true,
      "UserPoolId": "us-east-1_EXAMPLE"
   }
   ```

1. Modifique a saída `DescribeManagedLoginBrandingByClient` com suas personalizações.

   1. O corpo da resposta está envolvido em um elemento `ManagedLoginBranding` que não faz parte da sintaxe das operações de criação e atualização. Remova esse nível superior do objeto JSON.

   1. Para substituir imagens, substitua o valor `Bytes` pelos dados binários codificados em Base64 de cada arquivo de imagem.

   1. Para atualizar as configurações, modifique a saída do objeto `Settings` e inclua-a em sua próxima solicitação. O Amazon Cognito ignora os valores no objeto `Settings` que não estejam no esquema recebido na resposta da API.

1. Use o corpo de resposta atualizado em uma [UpdateManagedLoginBranding](https://docs.aws.amazon.com/)solicitação [CreateManagedLoginBranding](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateManagedLoginBranding.html)or. Se essa solicitação exceder 2 MB, separe-a em várias solicitações. Essas operações funcionam em um modelo `PATCH` no qual as configurações originais permanecem inalteradas, a menos que você especifique o contrário.

# Personalizar identidade visual de IU hospedada (clássica)
<a name="hosted-ui-classic-branding"></a>

Você pode usar a Console de gerenciamento da AWS, ou a API AWS CLI ou, para especificar as configurações clássicas de personalização para a interface do usuário hospedada. É possível fazer upload de uma imagem de logo personalizada para exibição no aplicativo. Também é possível aplicar algumas opções de Cascading Style Sheets (CSS) à aparência da IU.

Você pode personalizar os padrões da IU e substituir [clientes da aplicação](cognito-terms.md#term-appclient) individuais por configurações específicas. O Amazon Cognito aplica a configuração padrão a cada cliente de aplicação que não tem configurações no nível do cliente.

No console do Amazon Cognito e nas solicitações de API, a solicitação que define a personalização da IU não deve exceder 135 KB. Em casos raros, a soma dos cabeçalhos da solicitação, do arquivo CSS e do logotipo pode exceder 135 KB. O Amazon Cognito codifica o arquivo de imagem em Base64. Isso aumenta o tamanho de uma imagem de 100 KB para 130 KB, mantendo 5 KB para cabeçalhos de solicitação e o CSS. Se a solicitação for muito grande, a solicitação de `SetUICustomization` API Console de gerenciamento da AWS ou sua solicitação retornará um `request parameters too large` erro. Ajuste a imagem do logotipo para não ultrapassar 100 KB e o arquivo CSS para não passar de 3 KB. Você não pode definir o CSS e a personalização do logotipo separadamente.

**nota**  
Para personalizar a interface de usuário, é necessário configurar um domínio para o grupo de usuários.

## Especificar um logotipo personalizado em uma identidade visual clássica
<a name="cognito-user-pools-app-ui-customization-logo"></a>

O Amazon Cognito centraliza o logotipo personalizado acima dos campos de entrada no [Endpoint de login](login-endpoint.md).

Escolha um arquivo PNG, JPG ou JPEG que possa ser dimensionado para 350 por 178 pixels para o logotipo personalizado de interface de usuário hospedado. O arquivo de logotipo não pode ter mais de 100 KB de tamanho, ou 130 KB após a codificação do Amazon Cognito em Base64. Para definir um `ImageFile` [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUICustomization.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUICustomization.html)in na API, converta seu arquivo em uma string de texto codificada em Base64 ou, no AWS CLI, forneça um caminho de arquivo e deixe o Amazon Cognito codificá-lo para você.

## Especificar personalizações de CSS em uma identidade visual clássica
<a name="cognito-user-pools-app-ui-customization-css"></a>

Você pode personalizar o CSS para as páginas hospedadas do aplicativo, considerando as seguintes restrições:
+ Você pode usar qualquer um dos nomes de classe CSS a seguir:
  + `background-customizable`
  + `banner-customizable`
  + `errorMessage-customizable`
  + `idpButton-customizable`
  + `idpButton-customizable:hover`
  + `idpDescription-customizable`
  + `inputField-customizable`
  + `inputField-customizable:focus`
  + `label-customizable`
  + `legalText-customizable`
  + `logo-customizable`
  + `passwordCheck-valid-customizable`
  + `passwordCheck-notValid-customizable`
  + `redirect-customizable`
  + `socialButton-customizable`
  + `submitButton-customizable`
  + `submitButton-customizable:hover`
  + `textDescription-customizable`
+ Os valores de propriedade podem conter HTML, exceto pelos seguintes valores: instruções `@import`, `@supports`, `@page` ou `@media` ou Javascript.

Você pode personalizar as seguintes propriedades do CSS.

**Rótulos**  
+ **font-weight** é um múltiplo de 100, entre 100 e 900.
+ **color** é a cor do texto. Deve ser um [valor de cor CSS válido](https://www.w3schools.com/cssref/css_colors_legal.php).

**Campos de entrada**  
+ **width** é a largura do bloco de contenção em percentual.
+ **height** é a altura do campo de entrada em pixels (px).
+ **color** é a cor do texto. Ele pode ser qualquer valor de cor padrão do CSS.
+ **background-color** é a cor do plano de fundo do campo de entrada. Ele pode ser qualquer valor de cor padrão do CSS.
+ **border** é um valor padrão de borda do CSS que especifica a largura, a transparência e a cor da borda da janela do seu aplicativo. A largura pode apresentar qualquer valor entre 1 e 100 px. A transparência pode ser sólida ou nenhuma. A cor pode assumir qualquer valor de cor padrão.

**Descrições do texto**  
+ **padding-top** é a quantidade de preenchimento acima da descrição do texto.
+ **padding-bottom** é a quantidade de preenchimento abaixo da descrição do texto.
+ **display** pode ser `block` ou `inline`.
+ **font-size** é o tamanho da fonte para as descrições do texto.
+ **color** é a cor do texto. Deve ser um [valor de cor CSS válido](https://www.w3schools.com/cssref/css_colors_legal.php).

**Botão de envio**  
+ **font-size** é o tamanho da fonte para o texto do botão.
+ **font-weight** é a densidade da fonte para o texto do botão: `bold`, `italic` ou `normal`.
+ **margin** é uma string de quatro valores que indica o tamanho das margens superior, inferior, direita e esquerda para o botão.
+ **font-size** é o tamanho da fonte para as descrições do texto.
+ **width** é a largura do texto do botão em porcentagem do bloco.
+ **height** é a altura do botão em pixels (px).
+ **color** é a cor do texto do botão. Ele pode ser qualquer valor de cor padrão do CSS.
+ **background-color** é a cor do plano de fundo do botão. Ele pode ser qualquer valor de cor padrão.

**Banner**  
+ **padding** é uma string de quatro valores que indica o tamanho dos preenchimentos superior, inferior, direito e esquerdo para o banner.
+ **background-color** é a cor do plano de fundo do banner. Ele pode ser qualquer valor de cor padrão do CSS.

**Sobreposição do botão de envio**  
+ **color** é a cor de primeiro plano do botão ao passar por cima dele. Ele pode ser qualquer valor de cor padrão do CSS.
+ **background-color** é a cor do plano de fundo do botão ao passar por cima dele. Ele pode ser qualquer valor de cor padrão do CSS.

**Sobreposição do botão do provedor de identidade**  
+ **color** é a cor de primeiro plano do botão ao passar por cima dele. Ele pode ser qualquer valor de cor padrão do CSS.
+ **background-color** é a cor do plano de fundo do botão ao passar por cima dele. Ele pode ser qualquer valor de cor padrão do CSS.

**Verificação de senha não válida**  
+ **color** é a cor do texto da mensagem `"Password check not valid"`. Ele pode ser qualquer valor de cor padrão do CSS.

**Contexto**  
+ **background-color** é a cor do plano de fundo da janela do aplicativo. Ele pode ser qualquer valor de cor padrão do CSS.

**Mensagens de erro**  
+ **margin** é uma string de quatro valores que indica o tamanho das margens superior, inferior, direita e esquerda.
+ **padding** é o tamanho do preenchimento.
+ **font-size** é o tamanho da fonte.
+ **width** é a largura da mensagem de erro como uma porcentagem do bloco.
+ **background** é a cor do plano de fundo da mensagem de erro. Ele pode ser qualquer valor de cor padrão do CSS.
+ **border** é uma string de três valores que especifica a largura, a transparência e a cor da borda.
+ **color** é a cor do texto da mensagem de erro. Ele pode ser qualquer valor de cor padrão do CSS.
+ **box-sizing** é usado para indicar ao navegador o que as propriedades de dimensionamento (largura e altura) devem incluir.

**Botões do provedor de identidade**  
+ **height** é a altura do botão em pixels (px).
+ **width** é a largura do texto do botão como porcentagem do bloco. 
+ **text-align** é a configuração de alinhamento do texto. Ela pode ser: `left`, `right` ou `center`.
+ **margin-bottom** é a configuração da margem inferior. 
+ **color** é a cor do texto do botão. Ele pode ser qualquer valor de cor padrão do CSS.
+ **background-color** é a cor do plano de fundo do botão. Ele pode ser qualquer valor de cor padrão do CSS.
+ **border-color** é a cor da borda do botão. Ele pode ser qualquer valor de cor padrão do CSS.

**Descrições do provedor de identidade**  
+ **padding-top** é a quantidade de preenchimento acima da descrição.
+ **padding-bottom** é a quantidade de preenchimento abaixo da descrição.
+ **display** pode ser `block` ou `inline`.
+ **font-size** é o tamanho da fonte para as descrições.
+ **color** é a cor do texto para os cabeçalhos das seções do IdP, por exemplo, **Fazer login com seu ID corporativo**. Deve ser um [valor de cor CSS válido](https://www.w3schools.com/cssref/css_colors_legal.php).

**Texto legal**  
+ **color** é a cor do texto. Ele pode ser qualquer valor de cor padrão do CSS.
+ **font-size** é o tamanho da fonte.
Quando você personaliza **Legal text** (Texto legal), você está personalizando a mensagem **We won't post to any of your accounts without asking first** (Não publicaremos em nenhuma de suas contas sem pedir permissão antes) que é exibida na página de acesso em provedores de identidade sociais.

**Logo**  
+ **max-width** é a largura máxima como porcentagem do bloco.
+ **max-height** é a altura máxima como porcentagem do bloco.
+ **background-color** é a cor do plano de fundo para logs com seções transparentes. Deve ser um [valor de cor CSS válido](https://www.w3schools.com/cssref/css_colors_legal.php).

**Foco do campo de entrada**  
+ **border-color** é a cor do campo de entrada. Ele pode ser qualquer valor de cor padrão do CSS.
+ **outline** é a largura da borda do campo de entrada, em pixels.

**Botão social**  
+ **height** é a altura do botão em pixels (px).
+ **text-align** é a configuração de alinhamento do texto. Ela pode ser: `left`, `right` ou `center`.
+ **width** é a largura do texto do botão como porcentagem do bloco.
+ **margin-bottom** é a configuração da margem inferior.

**Verificação de senha válida**  
+ **color** é a cor do texto da mensagem `"Password check valid"`. Ele pode ser qualquer valor de cor padrão do CSS.

## Personalizando a interface de usuário hospedada com a marca clássica no Console de gerenciamento da AWS
<a name="cognito-user-pools-app-ui-customization-console"></a>

Você pode usar o Console de gerenciamento da AWS para especificar as configurações de personalização da interface do usuário para seu aplicativo.

**nota**  
Você pode visualizar a interface do usuário hospedada com as personalizações construindo o URL a seguir, com as especificações para o seu grupo de usuários, e digitando-o em um navegador: ` https://<your_domain>/login?response_type=code&client_id=<your_app_client_id>&redirect_uri=<your_callback_url>` É provável que seja necessário esperar em torno de um minuto para atualizar o navegador antes que as alterações feitas no console apareçam.  
Seu domínio é exibido na guia **App integration** (Integração da aplicação) em **Domain** (Domínio). O ID de cliente da aplicação e o URL de retorno de chamada são exibidos em **App client** (Cliente da aplicação).

**Para especificar as configurações de personalização de interface do usuário do aplicativo**

1. Faça login no [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home).

1. No painel de navegação, escolha **User Pools** (Grupos de usuários) e escolha o grupo de usuários que deseja editar.

1. [Crie um domínio](cognito-user-pools-assign-domain.md) na guia **Domínio** ou atualize seu domínio existente. Na **Versão de marca**, defina seu domínio para usar a **IU hospedada (clássica)**.

1. Clique no menu **Login gerenciado**.

1. Para personalizar as configurações da IU para todos os clientes da aplicação, localize **Estilo** em **Configurações da interface de usuário hospedada** e selecione **Editar**.

1. Para personalizar as configurações da IU para um único cliente de aplicação, acesse o menu **Clientes da aplicação** e selecione o cliente de aplicação que deseja modificar. Depois, localize **Estilo de interface de usuário hospedada (clássico)** e selecione **Substituir**. Selecione **Editar**.

1. Para carregar seu próprio arquivo de imagem de logo, escolha **Choose file** (Escolher arquivo) ou **Replace current file** (Substituir arquivo atual).

1. Para personalizar o CSS da interface do usuário hospedada, baixe **CSS template.css** e modifique o modelo com os valores que deseja personalizar. Somente as chaves incluídas no modelo podem ser usadas com a interface do usuário hospedada. As chaves CSS adicionadas não serão refletidas na interface do usuário. Após personalizar o arquivo CSS, escolha **Choose file** (Escolher arquivo) ou **Replace current file** (Substituir arquivo atual) para carregar seu arquivo CSS personalizado.

## Personalizando a interface de usuário hospedada com a marca clássica na API de grupos de usuários e com o AWS CLI
<a name="cognito-user-pools-app-ui-customization-cli-api"></a>

Use os comandos a seguir para especificar as configurações de personalização da interface do usuário para o seu grupo de usuários.

**Para obter as configurações de personalização da interface do usuário para uma interface do usuário de aplicação integrada do grupo de usuários, use as operações de API a seguir.**
+ AWS CLI: `aws cognito-idp get-ui-customization`
+ AWS API: [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUICustomization.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUICustomization.html)

**Para definir as configurações de personalização da interface do usuário para uma interface do usuário de aplicação integrada do grupo de usuários, use as operações de API a seguir.**
+ AWS CLI do arquivo de imagem: `aws cognito-idp set-ui-customization --user-pool-id <your-user-pool-id> --client-id <your-app-client-id> --image-file fileb://"<path-to-logo-image-file>" --css ".label-customizable{ color: <color>;}"`
+ AWS CLI com imagem codificada como texto binário Base64: `aws cognito-idp set-ui-customization --user-pool-id <your-user-pool-id> --client-id <your-app-client-id> --image-file <base64-encoded-image-file> --css ".label-customizable{ color: <color>;}"`
+ AWS API: [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUICustomization.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUICustomization.html)

# Como personalizar fluxos de trabalho do grupo de usuários com acionadores do Lambda
<a name="cognito-user-pools-working-with-lambda-triggers"></a>

O Amazon Cognito trabalha com AWS Lambda funções para modificar o comportamento de autenticação do seu grupo de usuários. É possível configurar o grupo de usuários para invocar automaticamente as funções do Lambda antes da primeira inscrição, após a conclusão da autenticação e em vários estágios intermediários. Suas funções podem modificar o comportamento padrão do seu fluxo de autenticação, fazer solicitações de API para modificar seu grupo de usuários ou outros AWS recursos e se comunicar com sistemas externos. O código nas funções do Lambda é seu. O Amazon Cognito envia dados de eventos para a função, espera que a função processe os dados e, na maioria dos casos, antecipa um evento de resposta que reflete as alterações que você deseja fazer na sessão.

No sistema de eventos de solicitação e resposta, você pode apresentar seus próprios desafios de autenticação, migrar usuários entre seu grupo de usuários e outro repositório de identidades, personalizar mensagens e modificar tokens web JSON ()JWTs.

Os gatilhos do Lambda podem personalizar a resposta que o Amazon Cognito fornece ao usuário depois que ele inicia uma ação em seu grupo de usuários. Por exemplo, é possível impedir o login de um usuário que, de outra forma, seria bem-sucedido. Eles também podem realizar operações de tempo de execução em seu AWS ambiente externo APIs, bancos de dados ou repositórios de identidade. O gatilho de migração de usuário, por exemplo, pode combinar uma ação externa com uma alteração no Amazon Cognito: você pode pesquisar informações do usuário em um diretório externo e definir atributos em um novo usuário com base nessas informações externas.

Quando você tem um gatilho do Lambda atribuído ao seu grupo de usuários, o Amazon Cognito interrompe seu fluxo padrão para solicitar informações de sua função. O Amazon Cognito gera um *evento* JSON e o transmite para sua função. O evento contém informações sobre a solicitação do usuário para criar uma conta de usuário, fazer login, redefinir uma senha ou atualizar um atributo. Sua função então tem a oportunidade de agir ou enviar o evento de volta sem modificações. Um evento retornado sem modificação notifica seu grupo de usuários para continuar com a ação padrão do evento. Por exemplo, seu acionador de pré-inscrição pode confirmar automaticamente os usuários para a origem do acionador `PreSignUp_SignUp`, mas retornar o evento inalterado para usuários externos e criados pelo administrador.

A tabela a seguir resume algumas das maneiras pelas quais os acionadores do Lambda são usados para personalizar operações do grupo de usuários:


****  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html)

**Topics**
+ [

## O que é importante saber sobre acionadores do Lambda
](#important-lambda-considerations)
+ [

## Adicionar um acionador do Lambda do grupo de usuários
](#triggers-working-with-lambda)
+ [

## Evento de acionador do Lambda do grupo de usuários
](#cognito-user-pools-lambda-trigger-event-parameter-shared)
+ [

## Parâmetros comuns do acionador do Lambda do grupo de usuários
](#cognito-user-pools-lambda-trigger-syntax-shared)
+ [

## Metadados do cliente
](#working-with-lambda-trigger-client-metadata)
+ [

## Conectar operações de API a gatilhos do Lambda
](#lambda-triggers-by-event)
+ [

## Conectar gatilhos do Lambda às operações funcionais do grupo de usuários
](#working-with-lambda-trigger-sources)
+ [

# Acionador do Lambda de pré-cadastro
](user-pool-lambda-pre-sign-up.md)
+ [

# Acionador do Lambda de pós-confirmação
](user-pool-lambda-post-confirmation.md)
+ [

# Acionador do Lambda de pré-autenticação
](user-pool-lambda-pre-authentication.md)
+ [

# Acionador do Lambda de pós-autenticação
](user-pool-lambda-post-authentication.md)
+ [

# Acionador Lambda de federação de entrada
](user-pool-lambda-inbound-federation.md)
+ [

# Acionadores do Lambda de desafio personalizado de autenticação
](user-pool-lambda-challenge.md)
+ [

# Acionador do Lambda antes da geração do token
](user-pool-lambda-pre-token-generation.md)
+ [

# Migrar o acionador do Lambda do usuário
](user-pool-lambda-migrate-user.md)
+ [

# Acionador do Lambda de mensagem personalizada
](user-pool-lambda-custom-message.md)
+ [

# Acionadores do Lambda remetente personalizado
](user-pool-lambda-custom-sender-triggers.md)

## O que é importante saber sobre acionadores do Lambda
<a name="important-lambda-considerations"></a>

Ao preparar os grupos de usuários para as funções do Lambda, considere o seguinte:
+ Os eventos que o Amazon Cognito envia aos gatilhos do Lambda podem mudar com novos atributos. As posições dos elementos de resposta e solicitação na hierarquia JSON podem mudar ou os nomes dos elementos podem ser adicionados. Na função do Lambda, é possível esperar receber os pares de chave-valor do elemento de entrada descritos neste guia, mas uma validação de entrada mais rigorosa pode fazer com que as funções falhem.
+ É possível selecionar uma das várias versões dos eventos que o Amazon Cognito envia a alguns gatilhos. Algumas versões podem exigir que você aceite uma alteração nos preços do Amazon Cognito. Para obter mais informações sobre a definição de preços, consulte [Preço do Amazon Cognito](https://aws.amazon.com/cognito/pricing/). Para personalizar os tokens de acesso em um [Acionador do Lambda antes da geração do token](user-pool-lambda-pre-token-generation.md), é necessário configurar o grupo de usuários com um plano de recursos que não seja o *Lite* e atualizar a configuração do acionador do Lambda para usar a versão 2 do evento.
+ Exceto [Acionadores do Lambda remetente personalizado](user-pool-lambda-custom-sender-triggers.md), o Amazon Cognito invoca funções do Lambda de forma síncrona. Quando o Amazon Cognito chama sua função do Lambda, ela deve responder em até cinco segundos. Se isso não acontecer e se a chamada puder ser repetida, o Amazon Cognito poderá repetir a chamada. Se todas as tentativas de repetição falharem, a função expirará. Não é possível alterar esse valor de tempo limite de cinco segundos. Para obter mais informações, consulte o [modelo de programação Lambda](https://docs.aws.amazon.com/lambda/latest/dg/foundation-progmodel.html) no Guia do AWS Lambda desenvolvedor.

  O Amazon Cognito não repete chamadas de função que retornam um [erro de invocação](https://docs.aws.amazon.com/lambda/latest/dg/API_Invoke.html#API_Invoke_Errors) com um código de status HTTP de 500 a 599. Esses códigos indicam um problema de configuração que faz com que o Lambda não consiga iniciar a função. Para obter mais informações, consulte [Tratamento de erros e novas tentativas automáticas em AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/invocation-retries.html).
+ Você não pode declarar uma versão da função na configuração do acionador do Lambda. Os grupos de usuários do Amazon Cognito invocam a versão mais recente da função por padrão. No entanto, você pode associar uma versão da função a um alias e definir seu gatilho `LambdaArn` para o alias ARN em uma solicitação de API ou de uma [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)solicitação de API. [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html) Essa opção não está disponível no Console de gerenciamento da AWS. Para obter mais informações sobre aliases, consulte [Aliases de função do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/configuration-aliases.html) no *Guia do desenvolvedor do AWS Lambda *.
+ Se você excluir um acionador do Lambda, deverá atualizar o acionador correspondente no grupo de usuários. Por exemplo, se excluir o acionador pós-autenticação, você deverá definir o acionador **Post authentication ** (Pós-autenticação) no grupo de usuários correspondente como **none** (nenhum). 
+ Se a função do Lambda não retornar os parâmetros de solicitação e resposta para o Amazon Cognito ou retornar um erro, o evento de autenticação não será bem-sucedido. Você pode retornar um erro na função para impedir a inscrição, a autenticação, a geração de tokens ou qualquer outro estágio do fluxo de autenticação de um usuário que invoque o acionador do Lambda.

  O login gerenciado retorna erros que os acionadores do Lambda geram como texto de erro acima da solicitação de login. A API de grupos de usuários do Amazon Cognito retorna erros do acionador no formato `[trigger] failed with error [error text from response]`. Como prática recomendada, gerem apenas erros nas funções do Lambda que você deseja que seus usuários vejam. Use métodos de saída, como `print()` registrar qualquer informação confidencial ou de depuração no Logs. CloudWatch Para ver um exemplo, consulte [Exemplo de pré-cadastro: negar cadastro se o nome de usuário tiver menos de cinco caracteres](user-pool-lambda-pre-sign-up.md#aws-lambda-triggers-pre-registration-example-3).
+ Você pode adicionar uma função Lambda em outra Conta da AWS como acionador para seu grupo de usuários. Você deve adicionar gatilhos entre contas com as operações da [UpdateUserPool](https://docs.aws.amazon.com/)API [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)e, ou seus equivalentes em e a. CloudFormation AWS CLI Você não pode adicionar funções de várias contas no Console de gerenciamento da AWS.
+ Quando você inclui um acionador do Lambda no console do Amazon Cognito, o Amazon Cognito adiciona uma política baseada em recursos à sua função que permita que o grupo de usuários a invoque. Quando você cria um acionador do Lambda fora do console do Amazon Cognito, é necessário adicionar permissões à função do Lambda. Suas permissões adicionadas devem permitir que o Amazon Cognito invoque a função em nome do grupo de usuários. Você pode [adicionar permissões do Lambda Console ou usar a operação da](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html) API [AddPermission](https://docs.aws.amazon.com/lambda/latest/dg/API_AddPermission.html)Lambda.

**Exemplo de política baseada em recursos do Lambda**  
O seguinte exemplo de política baseada em recursos do Lambda concede ao Amazon Cognito uma capacidade limitada de invocar uma função do Lambda. O Amazon Cognito só pode invocar a função quando o fizer em nome do grupo de usuários na condição `aws:SourceArn` e da conta na condição `aws:SourceAccount`.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Id": "default",
      "Statement": [
          {
              "Sid": "LambdaCognitoIdpTrust",
              "Effect": "Allow",
              "Principal": {
                  "Service": "cognito-idp.amazonaws.com"
              },
              "Action": "lambda:InvokeFunction",
              "Resource": "arn:aws:lambda:us-east-1:111122223333:function:MyFunction",
              "Condition": {
                  "StringEquals": {
                      "AWS:SourceAccount": "111122223333"
                  },
                  "ArnLike": {
                      "AWS:SourceArn": "arn:aws:cognito-idp:us-east-1:111122223333:userpool/us-east-1_EXAMPLE"
                  }
              }
          }
      ]
  }
  ```

------

## Adicionar um acionador do Lambda do grupo de usuários
<a name="triggers-working-with-lambda"></a>

**Para adicionar um acionador do Lambda do grupo de usuários com o console**

1. Use o [console do Lambda](https://console.aws.amazon.com/lambda/home) para criar uma função do Lambda. Para obter mais informações, sobre funções Lambda, consulte o [Guia do desenvolvedor do AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/).

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home) e escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Selecione o menu **Extensões** e localize os **Acionadores do Lambda**.

1. Selecione **Add a Lambda trigger** (Adicionar um acionador do Lambda).

1. Selecione uma **Category** (Categoria) de acionador do Lambda com base no estágio de autenticação que deseja personalizar.

1. Selecione **Atribuir função Lambda** e selecione uma função no mesmo grupo Região da AWS de usuários.
**nota**  
Se suas credenciais AWS Identity and Access Management (IAM) tiverem permissão para atualizar a função Lambda, o Amazon Cognito adicionará uma política baseada em recursos do Lambda. Com essa política, o Amazon Cognito pode invocar a função selecionada. Se as credenciais conectadas não tiverem permissões suficientes do IAM, você deverá atualizar a política baseada em recursos separadamente. Para obter mais informações, consulte [O que é importante saber sobre acionadores do Lambda](#important-lambda-considerations).

1. Escolha **Salvar alterações**.

1. Você pode usar CloudWatch no console Lambda para registrar sua função do Lambda. Para obter mais informações, consulte [Acessando CloudWatch registros para Lambda](https://docs.aws.amazon.com/lambda/latest/dg/monitoring-functions-logs.html).

## Evento de acionador do Lambda do grupo de usuários
<a name="cognito-user-pools-lambda-trigger-event-parameter-shared"></a>

O Amazon Cognito transmite informações de evento para a função do Lambda. A função do Lambda retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. Se a sua função retornar o evento de entrada sem modificação, o Amazon Cognito continuará com o comportamento padrão. Veja a seguir os parâmetros comuns a todos os eventos de entrada do acionador do Lambda. Para obter a sintaxe de eventos específica do acionador, revise o esquema de eventos na seção deste guia para cada acionador.

------
#### [ JSON ]

```
{
    "version": "string",
    "triggerSource": "string",
    "region": AWSRegion,
    "userPoolId": "string",
    "userName": "string",
    "callerContext": 
        {
            "awsSdkVersion": "string",
            "clientId": "string"
        },
    "request":
        {
            "userAttributes": {
                "string": "string",
                ....
            }
        },
    "response": {}
}
```

------

## Parâmetros comuns do acionador do Lambda do grupo de usuários
<a name="cognito-user-pools-lambda-trigger-syntax-shared"></a>

**versionamento**  
O número da versão da função do Lambda.

**triggerSource**  
O nome do evento que acionou a função do Lambda. Para uma descrição de cada triggerSource, consulte [Conectar gatilhos do Lambda às operações funcionais do grupo de usuários](#working-with-lambda-trigger-sources).

**region**  
O Região da AWS como uma `AWSRegion` instância.

**userPoolId**  
O ID do grupo de usuários.

**userName**  
O nome do usuário atual.

**callerContext**  
Metadados sobre a solicitação e o ambiente de código. Ele contém os campos **awsSdkVersion**e o **ClientID.**    
**awsSdkVersion**  
A versão do AWS SDK que gerou a solicitação.  
****clientId****  
O ID do cliente da aplicação do grupo de usuários.

**request**  
Detalhes da solicitação de API do usuário. Ele inclui os seguintes campos e quaisquer parâmetros de solicitação específicos do gatilho. Por exemplo, um evento que o Amazon Cognito envia a um acionador de pré-autenticação também conterá um parâmetro `userNotFound`. Você pode processar o valor desse parâmetro para realizar uma ação personalizada quando o usuário tentar fazer login com um nome de usuário não registrado.    
**userAttributes**  
Um ou mais pares de chave-valor de nomes e valores de atributos, por exemplo, `"email": "john@example.com"`.

**resposta**  
Esse parâmetro não contém nenhuma informação na solicitação original. Sua função do Lambda deve retornar todo o evento ao Amazon Cognito e adicionar quaisquer parâmetros de retorno à `response`. Para ver quais parâmetros de retorno sua função pode incluir, consulte a documentação do gatilho que você deseja usar.

## Metadados do cliente
<a name="working-with-lambda-trigger-client-metadata"></a>

Você pode enviar parâmetros personalizados para suas funções de acionador do Lambda em operações de API e solicitações de [Endpoint de token](token-endpoint.md). Com os metadados do cliente, sua aplicação pode coletar informações adicionais sobre o ambiente em que as solicitações se originam. Quando você transmite metadados do cliente para suas funções do Lambda, elas podem processar os dados adicionais e usá-los nos logs ou na personalização dos fluxos de autenticação. Os metadados do cliente são pares de strings de sua escolha e design em um formato de valor-chave JSON.

**Exemplos de casos de uso de metadados do cliente**
+ Transmita dados de geolocalização no momento da inscrição para o [acionador de pré-inscrição](user-pool-lambda-pre-sign-up.md) e evite o login de locais indesejados.
+ Transmita dados de identificação do locatário para [acionadores de desafios personalizados](user-pool-lambda-challenge.md) e emita desafios diferentes para clientes de diferentes unidades de negócios.
+ Transmita o token de um usuário para o [acionador de pré-geração de tokens](user-pool-lambda-pre-token-generation.md) e gere um log da entidade principal em nome da qual foi feita uma solicitação M2M. Para ver um exemplo de solicitação, consulte [Credenciais do cliente com autorização básicaCredenciais do cliente com autorização do corpo POST](token-endpoint.md#exchanging-client-credentials-for-an-access-token-in-request-body).

Este é um exemplo de transmissão de metadados do cliente para o acionador de pré-inscrição.

------
#### [ SignUp request ]

Veja a seguir um exemplo de [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html#CognitoUserPools-SignUp-request-ValidationData)solicitação com metadados do cliente que o Amazon Cognito passa para um gatilho de pré-inscrição.

```
POST HTTP/1.1
Host: cognito-idp.us-east-1.amazonaws.com
X-Amz-Date: 20230613T200059Z
Accept-Encoding: gzip, deflate, br
X-Amz-Target: AWSCognitoIdentityProviderService.SignUp
User-Agent: <UserAgentString>
Authorization: AWS4-HMAC-SHA256 Credential=<Credential>, SignedHeaders=<Headers>, Signature=<Signature>
Content-Length: <PayloadSizeBytes>

{
    "ClientId": "1example23456789",
    "Username": "mary_major",
    "Password": "<Password>",
    "SecretHash": "<Secret hash>",
    "ClientMetadata": { 
        "IpAddress" : "192.0.2.252",
        "GeoLocation" : "Netherlands (Kingdom of the) [NL]"
    }
    "UserAttributes": [
        {
            "Name": "name",
            "Value": "Mary"
        },
        {
            "Name": "email",
            "Value": "mary_major@example.com"
        },
        {
            "Name": "phone_number",
            "Value": "+12065551212"
        }
    ],
}
```

------
#### [ Lambda trigger input event ]

A solicitação resulta no corpo de solicitação a seguir para sua função de pré-cadastro.

```
{
    "callerContext": {
        "awsSdkVersion": "aws-sdk-unknown-unknown",
        "clientId": "1example23456789"
    },
    "region": "us-west-2",
    "request": {
        "clientMetadata": {
            "GeoLocation": "Netherlands (Kingdom of the) [NL]",
            "IpAddress": "192.0.2.252"
        },
        "userAttributes": {
            "email": "mary_major@example.com",
            "name": "Mary",
            "phone_number": "+12065551212"
        },
        "validationData": null
    },
    "response": {
        "autoConfirmUser": false,
        "autoVerifyEmail": false,
        "autoVerifyPhone": false
    },
    "triggerSource": "PreSignUp_SignUp",
    "userName": "mary_major2",
    "userPoolId": "us-west-2_EXAMPLE",
    "version": "1"
}
```

------

**Metadados do cliente para credenciais do cliente machine-to-machine (M2M)**  
Você pode transmitir [metadados do cliente](#working-with-lambda-trigger-client-metadata) em solicitações de M2M. Os metadados do cliente são informações adicionais de um usuário ou ambiente de aplicação que podem contribuir para os resultados de um [Acionador do Lambda antes da geração do token](user-pool-lambda-pre-token-generation.md). Nas operações de autenticação com um usuário principal, você pode passar os metadados do cliente para o gatilho de pré-geração do token no corpo das solicitações [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)de [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. Como as aplicações conduzem o fluxo de geração de tokens de acesso para M2M com solicitações diretas ao [Endpoint de token](token-endpoint.md), elas têm um modelo diferente. No corpo POST das solicitações de token para credenciais do cliente, transmita um parâmetro `aws_client_metadata` com o objeto de metadados do cliente codificado em URL (`x-www-form-urlencoded`) para string. Para ver um exemplo de solicitação, consulte [Credenciais do cliente com autorização básicaCredenciais do cliente com autorização do corpo POST](token-endpoint.md#exchanging-client-credentials-for-an-access-token-in-request-body). Veja a seguir um exemplo de parâmetro que transmite os pares de chave-valor `{"environment": "dev", "language": "en-US"}`.

```
aws_client_metadata=%7B%22environment%22%3A%20%22dev%22,%20%22language%22%3A%20%22en-US%22%7D
```

**Atributos temporários do usuário: `validationData`**  
Algumas operações de autenticação também têm um parâmetro `validationData`. Assim como os metadados do cliente, essa é uma oportunidade de transmitir informações externas que o Amazon Cognito não coleta automaticamente para os acionadores do Lambda. O campo de dados de validação tem como objetivo fornecer à sua função Lambda um contexto de usuário adicional nas operações de inscrição e login. [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html#CognitoUserPools-SignUp-request-ValidationData)e [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html#CognitoUserPools-AdminCreateUser-request-ValidationData)passe `validationData` para o [gatilho de pré-inscrição](user-pool-lambda-pre-sign-up.md). [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-ClientMetadata)e [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-request-ClientMetadata)passe `ClientMetadata` o corpo da solicitação da API como `validationData` no evento de entrada para os gatilhos do [usuário de [pré-autenticação](user-pool-lambda-pre-authentication.md) e migração](user-pool-lambda-migrate-user.md).

Para mapear as operações da API para as funções para as quais elas podem transmitir metadados do cliente, consulte as seções de origem do acionador a seguir.

## Conectar operações de API a gatilhos do Lambda
<a name="lambda-triggers-by-event"></a>

As seções a seguir descrevem os gatilhos do Lambda que o Amazon Cognito invoca a partir da atividade em seu grupo de usuários.

Quando a aplicação conecta usuários pela API de grupos de usuários do Amazon Cognito, do login gerenciado ou de endpoints de grupo de usuários, o Amazon Cognito invoca suas funções do Lambda com base no contexto da sessão. Para ter mais informações sobre a API de grupos de usuários do Amazon Cognito e endpoints de grupo de usuários, consulte [Noções básicas sobre a autenticação de API, OIDC e páginas de login gerenciado](authentication-flows-public-server-side.md#user-pools-API-operations). As tabelas nas seções a seguir descrevem eventos que fazem com que o Amazon Cognito invoque uma função e a string `triggerSource` que o Amazon Cognito inclui na solicitação.

**Topics**
+ [

### Gatilhos do Lambda na API do Amazon Cognito
](#lambda-triggers-native-users-native-api)
+ [

### Acionadores do Lambda para usuários locais do Amazon Cognito no login gerenciado
](#lambda-triggers-native-users-hosted-UI)
+ [

### Acionadores do Lambda para usuários federados
](#lambda-triggers-for-federated-users)

### Gatilhos do Lambda na API do Amazon Cognito
<a name="lambda-triggers-native-users-native-api"></a>

A tabela a seguir descreve as strings de origem dos acionadores do Lambda que o Amazon Cognito pode invocar quando a aplicação cria, faz login ou atualiza um usuário local.


**Fontes locais de gatilho de usuário na API do Amazon Cognito**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html)

### Acionadores do Lambda para usuários locais do Amazon Cognito no login gerenciado
<a name="lambda-triggers-native-users-hosted-UI"></a>

A tabela a seguir descreve as strings de origem dos acionadores do Lambda que o Amazon Cognito pode invocar quando um usuário local faz login em seu grupo de usuários com o login gerenciado.


**Fontes locais de acionador de usuário no login gerenciado**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html)

### Acionadores do Lambda para usuários federados
<a name="lambda-triggers-for-federated-users"></a>

Você pode usar os seguintes acionadores do Lambda para personalizar seus fluxos de trabalho do grupo de usuários para usuários que fazem login com um provedor federado. 

**nota**  
Usuários federados podem usar o login gerenciado para fazer login, ou você pode gerar uma solicitação para o [Autorizar endpoint](authorization-endpoint.md) que os redireciona silenciosamente para a página de login do provedor de identidades. Não é possível fazer login de usuários federados com a API de grupos de usuários do Amazon Cognito.


**Fontes de acionador de usuário federado**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html)

O login federado não invoca nenhum [Acionadores do Lambda de desafio personalizado de autenticação](user-pool-lambda-challenge.md), [Migrar o acionador do Lambda do usuário](user-pool-lambda-migrate-user.md), [Acionador do Lambda de mensagem personalizada](user-pool-lambda-custom-message.md) ou [Acionadores do Lambda remetente personalizado](user-pool-lambda-custom-sender-triggers.md) no grupo de usuários.

## Conectar gatilhos do Lambda às operações funcionais do grupo de usuários
<a name="working-with-lambda-trigger-sources"></a>

Cada gatilho do Lambda tem uma função em seu grupo de usuários. Por exemplo, um gatilho pode modificar seu fluxo de inscrição ou adicionar um desafio de autenticação personalizado. O evento que o Amazon Cognito envia para uma função do Lambda pode refletir uma das várias ações que compõem essa função. Por exemplo, o Amazon Cognito invoca um gatilho de pré-inscrição quando o usuário se inscreve e quando você cria um usuário. Cada um desses casos diferentes para a mesma função tem seu próprio valor `triggerSource`. Sua função do Lambda pode processar eventos recebidos de forma diferente com base na operação que a invocou.

O Amazon Cognito também invoca todas as funções atribuídas quando um evento corresponde a uma fonte de gatilhos. Por exemplo, quando um usuário faz login em um grupo de usuários ao qual você atribuiu gatilhos de migração de usuário e pré-autenticação, ele ativa ambos.


**Acionadores de inscrição, confirmação e login (autenticação)**  

| Trigger | Valor de triggerSource | Event | 
| --- | --- | --- | 
| Pré-cadastro | PreSignUp\$1SignUp | Pré-cadastro. | 
| Pré-cadastro | PreSignUp\$1AdminCreateUser | Pré-cadastro quando um administrador cria um novo usuário. | 
| Pré-cadastro | PreSignUp\$1ExternalProvider | Pré-cadastro para provedores de identidade externos. | 
| Confirmação do post | PostConfirmation\$1ConfirmSignUp | Confirmação pós-cadastro. | 
| Confirmação do post | PostConfirmation\$1ConfirmForgotPassword | Confirmação após esquecimento de senha. | 
| Pré-autenticação | PreAuthentication\$1Authentication | Pré-autenticação. | 
| Pós-autenticação | PostAuthentication\$1Authentication | Pós-autenticação. | 


**Acionadores de desafio de autenticação personalizado**  

| Trigger | Valor de triggerSource | Event | 
| --- | --- | --- | 
| Definir o desafio de autenticação | DefineAuthChallenge\$1Authentication | Definir o desafio de autenticação. | 
| Criar desafio de autenticação | CreateAuthChallenge\$1Authentication | Criar desafio de autenticação. | 
| Verificar desafio de autenticação | VerifyAuthChallengeResponse\$1Authentication | Verificar a resposta do desafio de autenticação. | 


**Acionadores da federação**  

| Trigger | Valor de triggerSource | Event | 
| --- | --- | --- | 
| Federação receptiva | InboundFederation\$1ExternalProvider | Federação receptiva. | 


**Acionadores de geração de pré-token**  

| Trigger | Valor de triggerSource | Event | 
| --- | --- | --- | 
| Pré-geração de tokens | TokenGeneration\$1HostedAuth |  O Amazon Cognito autentica o usuário na página de login do login gerenciado. | 
| Pré-geração de tokens | TokenGeneration\$1Authentication | Autenticação do usuário ou atualização do token concluída. | 
| Pré-geração de tokens | TokenGeneration\$1NewPasswordChallenge | O administrador cria o usuário. O Amazon Cognito invoca isso quando o usuário precisa alterar uma senha temporária. | 
| Pré-geração de tokens | TokenGeneration\$1AuthenticateDevice | Final da autenticação do dispositivo de um usuário. | 
| Pré-geração de tokens | TokenGeneration\$1RefreshTokens | O usuário tenta atualizar a identidade e acessar tokens. | 


**Acionadores de migração do usuário**  

| Trigger | Valor de triggerSource | Event | 
| --- | --- | --- | 
| Migração do usuário | UserMigration\$1Authentication | Migração de usuários no momento de fazer login. | 
| Migração do usuário | UserMigration\$1ForgotPassword | Migração de usuários durante o fluxo de esquecimento de senha. | 


**Acionadores de mensagem personalizada**  

| Trigger | Valor de triggerSource | Event | 
| --- | --- | --- | 
| Mensagem personalizada | CustomMessage\$1SignUp | Mensagem personalizada quando um usuário se cadastra no grupo de usuários. | 
| Mensagem personalizada | CustomMessage\$1AdminCreateUser | Mensagem personalizada quando você cria um usuário como administrador e o Amazon Cognito envia uma senha temporária. | 
| Mensagem personalizada | CustomMessage\$1ResendCode | Mensagem personalizada quando o usuário existente solicita um novo código de confirmação. | 
| Mensagem personalizada | CustomMessage\$1ForgotPassword | Mensagem personalizada quando o usuário solicita uma redefinição de senha. | 
| Mensagem personalizada | CustomMessage\$1UpdateUserAttribute | Mensagem personalizada quando um usuário altera o endereço de e-mail ou número de telefone e o Amazon Cognito envia ]um código de verificação. | 
| Mensagem personalizada | CustomMessage\$1VerifyUserAttribute | Mensagem personalizada quando um usuário adiciona um endereço de e-mail ou um número de telefone e o Amazon Cognito envia um código de verificação. | 
| Mensagem personalizada | CustomMessage\$1Authentication | Mensagem personalizada quando um usuário que configurou a MFA SMS faz login. | 


**Acionadores de remetente personalizados**  

| Trigger | Valor de triggerSource | Event | 
| --- | --- | --- | 
| Remetente personalizado |  `CustomEmailSender_SignUp` `CustomSmsSender_SignUp`  | Quando um usuário se cadastra no grupo de usuários. | 
| Remetente personalizado |  `CustomEmailSender_AdminCreateUser` `CustomSmsSender_AdminCreateUser`  | Quando você cria um usuário como administrador e o Amazon Cognito envia uma senha temporária. | 
| Remetente personalizado |  `CustomEmailSender_ForgotPassword` `CustomSmsSender_ForgotPassword`  | Quando o usuário solicita uma redefinição de senha. | 
| Remetente personalizado |  `CustomEmailSender_UpdateUserAttribute` `CustomSmsSender_UpdateUserAttribute`  | Quando um usuário altera o endereço de e-mail ou número de telefone e o Amazon Cognito envia um código de verificação. | 
| Remetente personalizado |  `CustomEmailSender_VerifyUserAttribute` `CustomSmsSender_VerifyUserAttribute`  | Quando um usuário adiciona um endereço de e-mail ou um número de telefone e o Amazon Cognito envia um código de verificação. | 
| Remetente personalizado |  `CustomEmailSender_Authentication` `CustomSmsSender_Authentication`  | Quando um usuário que configurou MFA do SMS ou e-mail, ou OTP faz login. | 
| Remetente personalizado | CustomEmailSender\$1AccountTakeOverNotification | Quando suas configurações de proteção contra ameaças realizam uma ação automática contra a tentativa de login de um usuário e a ação para o nível de risco inclui uma notificação. | 

# Acionador do Lambda de pré-cadastro
<a name="user-pool-lambda-pre-sign-up"></a>

Você pode personalizar o processo de cadastro em grupos de usuários que têm opções por autoatendimento. Alguns usos comuns do acionador pre sign-up são: realizar análises e registros personalizados de novos usuários, aplicar padrões de segurança e governança ou vincular usuários de um IdP de terceiros a um [perfil de usuário consolidado](cognito-user-pools-identity-federation-consolidate-users.md). Você também pode ter usuários confiáveis que não precisam passar por [verificação e confirmação](signing-up-users-in-your-app.md).

Imediatamente antes de o Amazon Cognito concluir a criação de um novo usuário [local](cognito-terms.md#terms-localuser) ou [federado](cognito-terms.md#terms-federateduser), ele ativa a função do Lambda de pré-cadastro. O objeto `userAttributes` de solicitação enviado para essa função contém atributos fornecidos pelo cadastro do usuário local ou que foram mapeados com sucesso com base nos atributos do provedor para um usuário federado. Seu grupo de usuários invoca esse gatilho na inscrição por autoatendimento [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)ou no primeiro login com um [provedor de identidade](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-federated) confiável e na criação de usuários com. [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html) Como parte do processo de cadastro, você pode usar essa função para analisar o evento de login com a lógica personalizada e modificar ou negar o novo usuário.

**Topics**
+ [

## Parâmetros do acionador do Lambda de pré-cadastro
](#cognito-user-pools-lambda-trigger-syntax-pre-signup)
+ [

## Exemplo de pré-cadastro: confirmação automática de usuários em um domínio registrado
](#aws-lambda-triggers-pre-registration-example)
+ [

## Exemplo de pré-cadastro: confirmação e verificação automáticas de todos os usuários
](#aws-lambda-triggers-pre-registration-example-2)
+ [

## Exemplo de pré-cadastro: negar cadastro se o nome de usuário tiver menos de cinco caracteres
](#aws-lambda-triggers-pre-registration-example-3)

## Parâmetros do acionador do Lambda de pré-cadastro
<a name="cognito-user-pools-lambda-trigger-syntax-pre-signup"></a>

A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos [parâmetros comuns](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que o Amazon Cognito adiciona a todas as solicitações.

------
#### [ JSON ]

```
{
    "request": {
        "userAttributes": {
            "string": "string",
            . . .
        },
        "validationData": {
            "string": "string",
            . . .
         },
        "clientMetadata": {
            "string": "string",
            . . .
         }
    },

    "response": {
        "autoConfirmUser": "boolean",
        "autoVerifyPhone": "boolean",
        "autoVerifyEmail": "boolean"
    }
}
```

------

### Parâmetros de solicitação de pré-cadastro
<a name="cognito-user-pools-lambda-trigger-syntax-pre-signup-request"></a>

**userAttributes**  
Um ou mais pares de nome-valor que representam atributos de usuário. Os nomes de atributo são as chaves.

**validationData**  
Um ou mais pares de chave-valor com dados de atributos do usuário que a aplicação passou para o Amazon Cognito na solicitação para criar um usuário. Envie essas informações para sua função Lambda no ValidationData parâmetro da sua solicitação [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html)ou da [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)API.  
O Amazon Cognito não define seus ValidationData dados como atributos do usuário que você cria. ValidationData são informações temporárias do usuário que você fornece para fins de seu gatilho Lambda de pré-inscrição.

**clientMetadata**  
Um ou mais pares de chave-valor que você pode fornecer como entrada personalizada para a função Lambda especificada para o acionamento de pré-cadastro. Você pode passar esses dados para sua função Lambda usando o ClientMetadata parâmetro nas seguintes ações de API: [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html), [AdminRespondToAuthChallenge[ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html), e. [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)

### Parâmetros de resposta de pré-cadastro
<a name="cognito-user-pools-lambda-trigger-syntax-pre-signup-response"></a>

Na resposta, você pode definir `autoConfirmUser` para `true` se quiser confirmar o usuário automaticamente. Você pode definir `autoVerifyEmail` como `true` para verificar o e-mail do usuário automaticamente. Você pode definir `autoVerifyPhone` como `true` para verificar automaticamente o número de telefone do usuário.

**nota**  
Os parâmetros de resposta `autoVerifyPhone`, `autoVerifyEmail` e `autoConfirmUser` são ignorados pelo Amazon Cognito quando a função do Lambda de pré-inscrição é acionada pela API `AdminCreateUser`.

**autoConfirmUser**  
Definido como `true` para confirmar o usuário automaticamente; do contrário, defina-o como `false`.

**autoVerifyEmail**  
Defina como `true` para especificar como verificado o e-mail de um usuário que está se cadastrando ou, do contrário, defina como `false`. Se `autoVerifyEmail` for definido como `true`, o atributo `email` deverá ter um valor válido, não nulo. Caso contrário, ocorrerá um erro e o usuário não poderá concluir o cadastro.  
Se o atributo `email` for selecionado como um alias, será criado um alias para o e-mail do usuário quando `autoVerifyEmail` for definido. Se já houver um alias com esse endereço de e-mail, ele será movido para o novo usuário e o endereço de e-mail do usuário anterior será marcado como não verificado. Para obter mais informações, consulte [Personalização dos atributos de login](user-pool-settings-attributes.md#user-pool-settings-aliases).

**autoVerifyPhone**  
Defina como `true` para definir como verificado o número de telefone de um usuário que está se cadastrando; do contrário, defina-o como `false`. Se `autoVerifyPhone` for definido como `true`, o atributo `phone_number` deverá ter um valor válido, não nulo. Caso contrário, ocorrerá um erro e o usuário não poderá concluir o cadastro.  
Se o atributo `phone_number` for selecionado como um alias, este será criado para o número de telefone do usuário quando `autoVerifyPhone` for definido. Se um alias com esse número de telefone já existir, o alias será movido para o novo usuário e o número de telefone do usuário anterior será marcado como não verificado. Para obter mais informações, consulte [Personalização dos atributos de login](user-pool-settings-attributes.md#user-pool-settings-aliases).

## Exemplo de pré-cadastro: confirmação automática de usuários em um domínio registrado
<a name="aws-lambda-triggers-pre-registration-example"></a>

Este é um exemplo de código de acionador do Lambda. O acionador de pré-inscrição é invocado imediatamente antes que o Amazon Cognito processe a solicitação de inscrição. Ele usa um atributo personalizado **custom:domain** para confirmar automaticamente novos usuários de um determinado domínio de e-mail. Os novos usuários que não estiverem no domínio personalizado serão adicionados ao seu grupo de usuários, mas não automaticamente confirmados.

------
#### [ Node.js ]

```
export const handler = async (event, context, callback) => {
  // Set the user pool autoConfirmUser flag after validating the email domain
  event.response.autoConfirmUser = false;

  // Split the email address so we can compare domains
  var address = event.request.userAttributes.email.split("@");

  // This example uses a custom attribute "custom:domain"
  if (event.request.userAttributes.hasOwnProperty("custom:domain")) {
    if (event.request.userAttributes["custom:domain"] === address[1]) {
      event.response.autoConfirmUser = true;
    }
  }

  // Return to Amazon Cognito
  callback(null, event);
};
```

------
#### [ Python ]

```
def lambda_handler(event, context):
    # It sets the user pool autoConfirmUser flag after validating the email domain
    event['response']['autoConfirmUser'] = False

    # Split the email address so we can compare domains
    address = event['request']['userAttributes']['email'].split('@')

    # This example uses a custom attribute 'custom:domain'
    if 'custom:domain' in event['request']['userAttributes']:
        if event['request']['userAttributes']['custom:domain'] == address[1]:
            event['response']['autoConfirmUser'] = True

    # Return to Amazon Cognito
    return event
```

------

O Amazon Cognito transmite informações de evento para a função Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código:

------
#### [ JSON ]

```
{
    "request": {
        "userAttributes": {
            "email": "testuser@example.com",
            "custom:domain": "example.com"
        }
    },
    "response": {}
}
```

------

## Exemplo de pré-cadastro: confirmação e verificação automáticas de todos os usuários
<a name="aws-lambda-triggers-pre-registration-example-2"></a>

Este exemplo confirma todos os usuários e define os atributos `email` e `phone_number` do usuário como verificados, se o atributo estiver presente. Além disso, se o alias estiver habilitado, eles serão criados para `phone_number` e `email` quando a verificação automática for definida. 

**nota**  
Se um alias com o mesmo número de telefone já existir, o alias será movido para o novo usuário e o `phone_number` do usuário anterior será marcado como não verificado. O mesmo se aplica para endereços de e-mail. Para evitar que isso aconteça, você pode usar a [ListUsers API](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html) de grupos de usuários para ver se há um usuário existente que já está usando o número de telefone ou endereço de e-mail do novo usuário como alias.

------
#### [ Node.js ]

```
exports.handler = (event, context, callback) => {
  // Confirm the user
  event.response.autoConfirmUser = true;

  // Set the email as verified if it is in the request
  if (event.request.userAttributes.hasOwnProperty("email")) {
    event.response.autoVerifyEmail = true;
  }

  // Set the phone number as verified if it is in the request
  if (event.request.userAttributes.hasOwnProperty("phone_number")) {
    event.response.autoVerifyPhone = true;
  }

  // Return to Amazon Cognito
  callback(null, event);
};
```

------
#### [ Python ]

```
def lambda_handler(event, context):
    # Confirm the user
    event['response']['autoConfirmUser'] = True

    # Set the email as verified if it is in the request
    if 'email' in event['request']['userAttributes']:
        event['response']['autoVerifyEmail'] = True

    # Set the phone number as verified if it is in the request
    if 'phone_number' in event['request']['userAttributes']:
        event['response']['autoVerifyPhone'] = True

    # Return to Amazon Cognito
    return event
```

------

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código:

------
#### [ JSON ]

```
{
  "request": {
    "userAttributes": {
      "email": "user@example.com",
      "phone_number": "+12065550100"
    }
  },
  "response": {}
}
```

------

## Exemplo de pré-cadastro: negar cadastro se o nome de usuário tiver menos de cinco caracteres
<a name="aws-lambda-triggers-pre-registration-example-3"></a>

Esse exemplo verifica a extensão do nome de usuário em uma solicitação de cadastro. O exemplo retornará um erro se o usuário tiver inserido um nome com menos de cinco caracteres.

------
#### [ Node.js ]

```
export const handler = (event, context, callback) => {
    // Impose a condition that the minimum length of the username is 5 is imposed on all user pools.
    if (event.userName.length < 5) {
        var error = new Error("Cannot register users with username less than the minimum length of 5");
        // Return error to Amazon Cognito
        callback(error, event);
    }
    // Return to Amazon Cognito
    callback(null, event);
};
```

------
#### [ Python ]

```
def lambda_handler(event, context):
    if len(event['userName']) < 5:
        raise Exception("Cannot register users with username less than the minimum length of 5")
    # Return to Amazon Cognito
    return event
```

------

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código:

------
#### [ JSON ]

```
{
  "userName": "rroe",
  "response": {}
}
```

------

# Acionador do Lambda de pós-confirmação
<a name="user-pool-lambda-post-confirmation"></a>

O Amazon Cognito invoca esse acionador depois que um usuário cadastrado confirma a conta de usuário. Na função do Lambda de pós-confirmação, você pode enviar mensagens personalizadas ou adicionar solicitações de API personalizadas. Por exemplo, é possível consultar um sistema externo e preencher atributos adicionais para o usuário. O Amazon Cognito invoca esse acionador somente para os usuários que se cadastram no grupo de usuários, não para contas de usuário criadas com as credenciais de administrador.

A solicitação contém os atributos atuais do usuário confirmado. Seu grupo de usuários invoca sua função de confirmação de postagem em [ConfirmSignUp[AdminConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminConfirmSignUp.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html), e. [ConfirmForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html) Esse acionador também é executado quando os usuários confirmam a inscrição ou a redefinição de senha no [login gerenciado](cognito-user-pools-managed-login.md).

**Topics**
+ [

## Parâmetros do acionador do Lambda de pós-confirmação
](#cognito-user-pools-lambda-trigger-syntax-post-confirmation)
+ [

## Exemplo de pós-confirmação
](#aws-lambda-triggers-post-confirmation-example)

## Parâmetros do acionador do Lambda de pós-confirmação
<a name="cognito-user-pools-lambda-trigger-syntax-post-confirmation"></a>

A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos [parâmetros comuns](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que o Amazon Cognito adiciona a todas as solicitações.

------
#### [ JSON ]

```
{
    "request": {
            "userAttributes": {
                "string": "string",
                . . .
            },
            "clientMetadata": {
            	"string": "string",
            	. . .
            }
        },
    "response": {}
}
```

------

### Parâmetros de solicitação de pós-confirmação
<a name="cognito-user-pools-lambda-trigger-syntax-post-confirmation-request"></a>

**userAttributes**  
Um ou mais pares de chave-valor que representam atributos de usuário.

**clientMetadata**  
Um ou mais pares de chave-valor que você pode fornecer como entrada personalizada para a função Lambda especificada para o acionador de pós-confirmação. Você pode passar esses dados para sua função Lambda usando o ClientMetadata parâmetro nas seguintes ações de API: [AdminConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminConfirmSignUp.html), [ConfirmForgotPassword[ConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html), e. [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)

### Parâmetros de resposta de pós-confirmação
<a name="cognito-user-pools-lambda-trigger-syntax-post-confirmation-response"></a>

Nenhuma informação de retorno adicional é esperada na resposta.

## Exemplo de pós-confirmação
<a name="aws-lambda-triggers-post-confirmation-example"></a>

Esse exemplo de função Lambda envia um e-mail de confirmação para o usuário usando o Amazon SES. Para obter mais informações, consulte o [Guia do desenvolvedor do Amazon Simple Storage Service](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/). 

------
#### [ Node.js ]

```
// Import required AWS SDK clients and commands for Node.js. Note that this requires
// the `@aws-sdk/client-ses` module to be either bundled with this code or included
// as a Lambda layer.
import { SES, SendEmailCommand } from "@aws-sdk/client-ses";
const ses = new SES();

const handler = async (event) => {
  if (event.request.userAttributes.email) {
    await sendTheEmail(
      event.request.userAttributes.email,
      `Congratulations ${event.userName}, you have been confirmed.`,
    );
  }
  return event;
};

const sendTheEmail = async (to, body) => {
  const eParams = {
    Destination: {
      ToAddresses: [to],
    },
    Message: {
      Body: {
        Text: {
          Data: body,
        },
      },
      Subject: {
        Data: "Cognito Identity Provider registration completed",
      },
    },
    // Replace source_email with your SES validated email address
    Source: "<source_email>",
  };
  try {
    await ses.send(new SendEmailCommand(eParams));
  } catch (err) {
    console.log(err);
  }
};

export { handler };
```

------

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código:

------
#### [ JSON ]

```
{
    "request": {
        "userAttributes": {
            "email": "user@example.com",
            "email_verified": true
        }
    },
    "response": {}
}
```

------

# Acionador do Lambda de pré-autenticação
<a name="user-pool-lambda-pre-authentication"></a>

O Amazon Cognito invoca esse acionador quando um usuário tenta fazer login, de forma que você possa criar uma validação personalizada que realize ações preparatórias. Por exemplo, você pode negar a solicitação de autenticação ou registrar os dados da sessão em um sistema externo.

**nota**  
Esse acionador do Lambda não é ativado quando um usuário não existe, a menos que a configuração `PreventUserExistenceErrors` de um cliente de aplicação do grupo de usuários esteja definida como `ENABLED`. A renovação de uma sessão de autenticação existente também não ativa esse acionador.

**Topics**
+ [

## Visão geral do fluxo
](#user-pool-lambda-pre-authentication-1)
+ [

## Parâmetros do acionador do Lambda de pré-autenticação
](#cognito-user-pools-lambda-trigger-syntax-pre-auth)
+ [

## Exemplo de pré-autenticação
](#aws-lambda-triggers-pre-authentication-example)

## Visão geral do fluxo
<a name="user-pool-lambda-pre-authentication-1"></a>

![\[Acionador do Lambda de pré-autenticação: fluxo de cliente\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/lambda-pre-authentication-1.png)


A solicitação inclui dados de validação do cliente dos valores `ClientMetadata` que a aplicação transmite para as operações de API `InitiateAuth` e `AdminInitiateAuth` do grupo de usuários.

Para obter mais informações, consulte [Um exemplo de sessão de autenticação](authentication.md#amazon-cognito-user-pools-authentication-flow).

## Parâmetros do acionador do Lambda de pré-autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-pre-auth"></a>

A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos [parâmetros comuns](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que o Amazon Cognito adiciona a todas as solicitações.

------
#### [ JSON ]

```
{
    "request": {
        "userAttributes": {
            "string": "string",
            . . .
        },
        "validationData": {
            "string": "string",
            . . .
        },
        "userNotFound": boolean
    },
    "response": {}
}
```

------

### Parâmetros de solicitação de pré-autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-pre-auth-request"></a>

**userAttributes**  
Um ou mais pares de nome-valor que representam atributos de usuário.

**userNotFound**  
Quando você define `PreventUserExistenceErrors` como `ENABLED` para o cliente do grupo de usuários, o Amazon Cognito preenche esse booleano.

**validationData**  
Um ou mais pares de chave-valor que contêm os dados de validação na solicitação de login do usuário. Para passar esses dados para sua função Lambda, use o ClientMetadata parâmetro nas ações [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)e da [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)API.

### Parâmetros de resposta de pré-autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-pre-auth-response"></a>

O Amazon Cognito não processa nenhuma informação adicionada que sua função retorna na resposta. Sua função pode retornar um erro para rejeitar a tentativa de login ou usar operações de API para consultar e modificar seus recursos.

## Exemplo de pré-autenticação
<a name="aws-lambda-triggers-pre-authentication-example"></a>

Essa função de exemplo impede que usuários façam login em seu grupo de usuários com um cliente de aplicação específico. Como a função do Lambda de pré-autenticação não invoca quando o usuário já tem uma sessão, essa função só impede *novas* sessões com o ID do cliente da aplicação que você deseja bloquear.

------
#### [ Node.js ]

```
const handler = async (event) => {
  if (
    event.callerContext.clientId === "user-pool-app-client-id-to-be-blocked"
  ) {
    throw new Error("Cannot authenticate users from this user pool app client");
  }

  return event;
};

export { handler };
```

------
#### [ Python ]

```
def lambda_handler(event, context):
    if event['callerContext']['clientId'] == "<user pool app client id to be blocked>":
        raise Exception("Cannot authenticate users from this user pool app client")

    # Return to Amazon Cognito
    return event
```

------

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código: 

------
#### [ JSON ]

```
{
    "callerContext": {
        "clientId": "<user pool app client id to be blocked>"
    },
    "response": {}
}
```

------

# Acionador do Lambda de pós-autenticação
<a name="user-pool-lambda-post-authentication"></a>

O acionador post authentication não altera o fluxo de autenticação de um usuário. O Amazon Cognito invoca esse Lambda após a conclusão da autenticação, antes que o usuário receba os tokens. Adicione um acionador post authentication quando quiser adicionar um pós-processamento personalizado de eventos de autenticação, por exemplo, registros ou ajustes de perfil de usuário que serão refletidos no próximo login.

Um Lambda post authentication que não retorna o corpo da solicitação ao Amazon Cognito ainda pode gerar falha na autenticação. Para obter mais informações, consulte [O que é importante saber sobre acionadores do Lambda](cognito-user-pools-working-with-lambda-triggers.md#important-lambda-considerations).

**Topics**
+ [

## Visão geral do fluxo de autenticação
](#user-pool-lambda-post-authentication-1)
+ [

## Parâmetros do acionador do Lambda de pós-autenticação
](#cognito-user-pools-lambda-trigger-syntax-post-auth)
+ [

## Exemplo de pós-autenticação
](#aws-lambda-triggers-post-authentication-example)

## Visão geral do fluxo de autenticação
<a name="user-pool-lambda-post-authentication-1"></a>

![\[Fluxo do Lambda de pós-autenticação: fluxo do cliente\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/lambda-post-authentication-1.png)


Para obter mais informações, consulte [Um exemplo de sessão de autenticação](authentication.md#amazon-cognito-user-pools-authentication-flow).

## Parâmetros do acionador do Lambda de pós-autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-post-auth"></a>

A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos [parâmetros comuns](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que o Amazon Cognito adiciona a todas as solicitações.

------
#### [ JSON ]

```
{
    "request": {
        "userAttributes": {
             "string": "string",
             . . .
         },
         "newDeviceUsed": boolean,
         "clientMetadata": {
             "string": "string",
             . . .
            }
        },
    "response": {}
}
```

------

### Parâmetros de solicitação de pós-autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-post-auth-request"></a>

**newDeviceUsed**  
Esse sinalizador indica se o usuário fez login em um novo dispositivo. O Amazon Cognito só definirá esse sinalizador se o valor dos dispositivos memorizados do grupo de usuários for `Always` ou `User Opt-In`.

**userAttributes**  
Um ou mais pares de nome-valor que representam atributos de usuário.

**clientMetadata**  
Um ou mais pares de chave-valor que você pode fornecer como entrada personalizada para a função Lambda especificada para o acionador de pós-autenticação. Para passar esses dados para sua função Lambda, você pode usar o ClientMetadata parâmetro nas ações [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)e da [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. O Amazon Cognito não inclui dados do ClientMetadata parâmetro [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)e operações de [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API na solicitação que ele passa para a função de pós-autenticação.

### Parâmetros de resposta de pós-autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-post-auth-response"></a>

O Amazon Cognito não espera nenhuma outra informação de retorno na resposta. Sua função pode usar operações de API para consultar e modificar seus recursos ou registrar metadados de eventos em um sistema externo.

## Exemplo de pós-autenticação
<a name="aws-lambda-triggers-post-authentication-example"></a>

Este exemplo de função Lambda de pós-autenticação envia dados de um login bem-sucedido para o Logs. CloudWatch 

------
#### [ Node.js ]

```
const handler = async (event) => {
  // Send post authentication data to Amazon CloudWatch logs
  console.log("Authentication successful");
  console.log("Trigger function =", event.triggerSource);
  console.log("User pool = ", event.userPoolId);
  console.log("App client ID = ", event.callerContext.clientId);
  console.log("User ID = ", event.userName);

  return event;
};

export { handler };
```

------
#### [ Python ]

```
import os
def lambda_handler(event, context):

    # Send post authentication data to Cloudwatch logs
    print ("Authentication successful")
    print ("Trigger function =", event['triggerSource'])
    print ("User pool = ", event['userPoolId'])
    print ("App client ID = ", event['callerContext']['clientId'])
    print ("User ID = ", event['userName'])

    # Return to Amazon Cognito
    return event
```

------

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código:

------
#### [ JSON ]

```
{
  "triggerSource": "testTrigger",
  "userPoolId": "testPool",
  "userName": "testName",
  "callerContext": {
      "clientId": "12345"
  },
  "response": {}
}
```

------

# Acionador Lambda de federação de entrada
<a name="user-pool-lambda-inbound-federation"></a>

O gatilho de federação de entrada transforma os atributos do usuário federado durante o processo de autenticação com provedores de identidade externos. Quando os usuários se autenticam por meio de provedores de identidade configurados, esse gatilho permite que você modifique as respostas de provedores externos de SAML e OIDC interceptando e transformando dados no processo de autenticação, fornecendo controle programático sobre como os grupos de usuários do Amazon Cognito lidam com usuários federados e seus atributos.

Use esse gatilho para adicionar, substituir ou suprimir atributos antes de criar novos usuários ou atualizar perfis de usuários federados existentes. Esse gatilho recebe atributos brutos do provedor de identidade como entrada e retorna atributos modificados que o Amazon Cognito aplica ao perfil do usuário.

**Topics**
+ [

## Visão geral do fluxo
](#cognito-user-pools-lambda-trigger-inbound-federation-flow)
+ [

## Parâmetros de gatilho do Lambda de federação de entrada
](#cognito-user-pools-lambda-trigger-syntax-inbound-federation)
+ [

## Exemplo de federação de entrada: gerenciamento de membros de grupos
](#aws-lambda-triggers-inbound-federation-example-groups)
+ [

## Exemplo de federação de entrada: truncar atributos grandes
](#aws-lambda-triggers-inbound-federation-example-truncate)
+ [

## Exemplo de federação de entrada: registro de eventos de federação
](#aws-lambda-triggers-inbound-federation-example-logging)

## Visão geral do fluxo
<a name="cognito-user-pools-lambda-trigger-inbound-federation-flow"></a>

Quando um usuário se autentica com um provedor de identidade externo, o Amazon Cognito invoca o gatilho de federação de entrada antes de criar ou atualizar o perfil do usuário. O gatilho recebe os atributos brutos do provedor de identidade e pode transformá-los antes que o Amazon Cognito os armazene. Esse fluxo ocorre tanto para novos usuários federados quanto para usuários existentes que se conectam novamente por meio da federação.

![\[Fluxo de gatilho Lambda da federação de entrada\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/lambda-inbound-federation.png)


## Parâmetros de gatilho do Lambda de federação de entrada
<a name="cognito-user-pools-lambda-trigger-syntax-inbound-federation"></a>

A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos [parâmetros comuns](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que o Amazon Cognito adiciona a todas as solicitações.

------
#### [ JSON ]

```
{
    "version": "string",
    "triggerSource": "InboundFederation_ExternalProvider",
    "region": AWSRegion,
    "userPoolId": "string",
    "userName": "string",
    "callerContext": {
        "awsSdkVersion": "string",
        "clientId": "string"
    },
    "request": {
        "providerName": "string",
        "providerType": "string",
        "attributes": {
            "tokenResponse": {
                "access_token": "string",
                "token_type": "string",
                "expires_in": "string"
            },
            "idToken": {
                "sub": "string",
                "email": "string",
                "email_verified": "string"
            },
            "userInfo": {
                "email": "string",
                "given_name": "string",
                "family_name": "string"
            },
            "samlResponse": {
                "string": "string"
            }
        }
    },
    "response": {
        "userAttributesToMap": {
            "string": "string"
        }
    }
}
```

------

### Parâmetros de solicitação de federação de entrada
<a name="cognito-user-pools-lambda-trigger-syntax-inbound-federation-request"></a>

**Nome do provedor**  
O nome do provedor de identidade externo.

**Tipo de provedor**  
O tipo do provedor de identidade externo. Valores válidos:`OIDC`,`SAML`,`Facebook`,`Google`,`SignInWithApple`,`LoginWithAmazon`.

**attributes**  
Os atributos brutos recebidos do provedor de identidade antes do processamento. A estrutura varia de acordo com o tipo de provedor.

**Atributos. TokenResponse**  
OAuth dados de resposta do token do `/token` endpoint. Disponível somente para OIDC e provedores sociais. Contém `access_token``id_token`, `refresh_token``token_type`,`expires_in`,, `scope` e.

**Attributes.idToken**  
O token de ID decodificado e validado que a JWT reivindica. Disponível somente para OIDC e provedores sociais. Contém informações verificadas de identidade do usuário, incluindo `sub` (identificador de usuário exclusivo) `email``name`,,, `iss` (emissor), `aud` (público), `exp` (expiração) e `iat` (horário de emissão).

**Atributos. Informações do usuário**  
Informações estendidas do perfil do usuário a partir do UserInfo endpoint. Disponível somente para OIDC e provedores sociais. Contém atributos de perfil detalhados`given_name`, como`family_name`,`picture`,`address`, e outros campos específicos do provedor. Pode estar vazio se o IdP não suportar o UserInfo endpoint ou se a chamada do endpoint falhar.

**Atributos. Resposta SAML**  
Atributos de asserção SAML. Disponível somente para provedores de SAML. Contém atributos da resposta SAML.

### Parâmetros de resposta da federação de entrada
<a name="cognito-user-pools-lambda-trigger-syntax-inbound-federation-response"></a>

**userAttributesToMapa**  
Os atributos do usuário a serem aplicados ao perfil do usuário.

**Importante**  
Você deve incluir TODOS os atributos do usuário que deseja reter na resposta, incluindo os atributos que você não está modificando. Todos os atributos não incluídos na `userAttributesToMap` resposta serão descartados e não serão armazenados no perfil do usuário. Isso se aplica tanto aos atributos modificados quanto aos não modificados.

**Comportamento de resposta vazia**  
Se você retornar um objeto vazio `{}` para`userAttributesToMap`, todos os atributos originais do provedor de identidade serão mantidos inalterados. Isso funciona como um sistema autônomo, como se a função Lambda nunca tivesse sido executada. Isso é diferente de omitir atributos, o que os elimina.

**Atributos específicos do provedor**  
A estrutura do `request.attributes` varia com base no`providerType`. O OIDC e os provedores sociais incluem `tokenResponse``idToken`, e `userInfo` objetos. Os provedores de SAML incluem somente o `samlResponse` objeto.

## Exemplo de federação de entrada: gerenciamento de membros de grupos
<a name="aws-lambda-triggers-inbound-federation-example-groups"></a>

Este exemplo mostra como mapear grupos de provedores de identidade federados para grupos de grupos de usuários do Amazon Cognito. Essa função extrai a associação ao grupo da resposta federada e adiciona automaticamente usuários aos grupos correspondentes do Amazon Cognito, eliminando a necessidade de acionadores de pós-autenticação.

------
#### [ Node.js ]

```
exports.handler = async (event) => {
    const { providerType, attributes } = event.request;
    
    // Extract user attributes based on provider type
    let userAttributesFromIdp = {};
    if (providerType === 'SAML') {
        userAttributesFromIdp = attributes.samlResponse || {};
    } else {
        // For OIDC and Social providers, merge userInfo and idToken
        userAttributesFromIdp = {
            ...(attributes.userInfo || {}),
            ...(attributes.idToken || {})
        };
    }
    
    // Extract groups from federated response
    const federatedGroups = userAttributesFromIdp.groups?.split(',') || [];
    
    // Map federated groups to Cognito groups
    const groupMapping = {
        'Domain Admins': 'Administrators',
        'Engineering': 'Developers',
        'Sales': 'SalesTeam'
    };
    
    // Filter to only in-scope groups
    const mappedGroups = federatedGroups
        .map(group => groupMapping[group.trim()])
        .filter(group => group); // Remove undefined values
    
    // Pass through attributes with mapped groups as custom attribute
    const attributesToMap = {
        ...userAttributesFromIdp,
        'custom:user_groups': mappedGroups.join(',')
    };
    
    // Remove original groups attribute
    delete attributesToMap.groups;
    
    event.response.userAttributesToMap = attributesToMap;
    return event;
};
```

------

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código:

------
#### [ JSON ]

```
{
    "userPoolId": "us-east-1_XXXXXXXXX",
    "request": {
        "providerName": "CorporateAD",
        "providerType": "SAML",
        "attributes": {
            "samlResponse": {
                "email": "jane.smith@company.com",
                "given_name": "Jane",
                "family_name": "Smith",
                "groups": "Engineering,Domain Admins",
                "department": "Engineering"
            }
        }
    },
    "response": {
        "userAttributesToMap": {}
    }
}
```

------

## Exemplo de federação de entrada: truncar atributos grandes
<a name="aws-lambda-triggers-inbound-federation-example-truncate"></a>

Este exemplo mostra como truncar valores de atributos que excedem os limites de armazenamento do Amazon Cognito. Essa função verifica cada atributo do provedor de identidade. Se um valor de atributo exceder 2048 caracteres, ele trunca o valor e adiciona reticências para indicar truncamento. Todos os outros atributos passam inalterados.

------
#### [ Node.js ]

```
exports.handler = async (event) => {
    const MAX_ATTRIBUTE_LENGTH = 2048;
    
    // Get the identity provider attributes based on provider type
    const { providerType, attributes } = event.request;
    let idpAttributes = {};
    
    if (providerType === 'SAML') {
        idpAttributes = attributes.samlResponse || {};
    } else {
        // For OIDC and Social providers, merge userInfo and idToken
        idpAttributes = {
            ...(attributes.userInfo || {}),
            ...(attributes.idToken || {})
        };
    }
    
    const userAttributes = {};
    
    // Process each attribute
    for (const [key, value] of Object.entries(idpAttributes)) {
        if (typeof value === 'string' && value.length > MAX_ATTRIBUTE_LENGTH) {
            // Truncate the value and add ellipsis
            userAttributes[key] = value.substring(0, MAX_ATTRIBUTE_LENGTH - 3) + '...';
            console.log(`Truncated attribute ${key} from ${value.length} to ${userAttributes[key].length} characters`);
        } else {
            // Keep the original value
            userAttributes[key] = value;
        }
    }
    
    // Return the modified attributes
    event.response.userAttributesToMap = userAttributes;
    return event;
};
```

------

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código:

------
#### [ JSON ]

```
{
    "version": "string",
    "triggerSource": "InboundFederation_ExternalProvider",
    "region": "us-east-1",
    "userPoolId": "us-east-1_XXXXXXXXX",
    "userName": "ExampleProvider_12345",
    "callerContext": {
        "awsSdkVersion": "string",
        "clientId": "string"
    },
    "request": {
        "providerName": "ExampleProvider",
        "providerType": "OIDC",
        "attributes": {
            "tokenResponse": {
                "access_token": "abcDE...",
                "token_type": "Bearer",
                "expires_in": "3600"
            },
            "idToken": {
                "sub": "12345",
                "email": "user@example.com"
            },
            "userInfo": {
                "email": "user@example.com",
                "given_name": "Example",
                "family_name": "User",
                "bio": "This is a very long biography that contains more than 2048 characters..."
            }
        }
    },
    "response": {
        "userAttributesToMap": {}
    }
}
```

------

## Exemplo de federação de entrada: registro de eventos de federação
<a name="aws-lambda-triggers-inbound-federation-example-logging"></a>

Este exemplo mostra como registrar eventos de autenticação federada para monitoramento e depuração. Esse exemplo de função captura informações detalhadas sobre usuários federados e seus atributos, fornecendo visibilidade do processo de autenticação.

------
#### [ Node.js ]

```
exports.handler = async (event) => {
    const { providerName, providerType, attributes } = event.request;
    
    // Extract user attributes based on provider type
    let userAttributesFromIdp = {};
    if (providerType === 'SAML') {
        userAttributesFromIdp = attributes.samlResponse || {};
    } else {
        // For OIDC and Social providers, merge userInfo and idToken
        userAttributesFromIdp = {
            ...(attributes.userInfo || {}),
            ...(attributes.idToken || {})
        };
    }
    
    // Log federated authentication details
    console.log(JSON.stringify({
        timestamp: new Date().toISOString(),
        providerName,
        providerType,
        userEmail: userAttributesFromIdp.email,
        attributeCount: Object.keys(userAttributesFromIdp).length,
        attributes: userAttributesFromIdp
    }));
    
    // Pass through all attributes unchanged
    event.response.userAttributesToMap = userAttributesFromIdp;
    return event;
};
```

------

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código:

------
#### [ JSON ]

```
{
    "version": "string",
    "triggerSource": "InboundFederation_ExternalProvider",
    "region": "us-east-1",
    "userPoolId": "us-east-1_XXXXXXXXX",
    "userName": "CorporateAD_john.doe",
    "callerContext": {
        "awsSdkVersion": "string",
        "clientId": "string"
    },
    "request": {
        "providerName": "CorporateAD",
        "providerType": "SAML",
        "attributes": {
            "samlResponse": {
                "email": "john.doe@company.com",
                "given_name": "John",
                "family_name": "Doe",
                "department": "Engineering",
                "employee_id": "EMP12345"
            }
        }
    },
    "response": {
        "userAttributesToMap": {}
    }
}
```

------

Saída CloudWatch de registros esperada:

------
#### [ JSON ]

```
{
    "timestamp": "2025-01-14T21:17:40.153Z",
    "providerName": "CorporateAD",
    "providerType": "SAML",
    "userEmail": "john.doe@company.com",
    "attributeCount": 5,
    "attributes": {
        "email": "john.doe@company.com",
        "given_name": "John",
        "family_name": "Doe",
        "department": "Engineering",
        "employee_id": "EMP12345"
    }
}
```

------

# Acionadores do Lambda de desafio personalizado de autenticação
<a name="user-pool-lambda-challenge"></a>

Ao criar seus fluxos de autenticação para seu grupo de usuários do Amazon Cognito, você pode querer estender seu modelo de autenticação além dos fluxos integrados. Um caso de uso comum dos acionadores de desafio personalizados é implementar verificações de segurança adicionais além do nome de usuário, senha e autenticação multifator (MFA). Desafio personalizado é qualquer pergunta e resposta que você possa gerar em uma linguagem de programação compatível com Lambda. Por exemplo, você pode exigir que os usuários resolvam um CAPTCHA ou respondam a uma pergunta de segurança antes de poderem se autenticar. Outra necessidade potencial é a integração com fatores ou dispositivos de autenticação especializados. Ou talvez você já tenha desenvolvido um software que autentica usuários com uma chave de segurança de hardware ou um dispositivo biométrico. A definição de sucesso na autenticação para um desafio personalizado é qualquer resposta que sua função do Lambda aceite como correta: uma string fixa, por exemplo, ou uma resposta satisfatória de uma API externa.

Você pode iniciar a autenticação com seu desafio personalizado e controlar totalmente o processo de autenticação, ou pode realizar a autenticação por nome de usuário e senha antes que sua aplicação receba seu desafio personalizado.

O acionador do Lambda do desafio de autenticação personalizada:

**[Define](user-pool-lambda-define-auth-challenge.md)**  
Inicia uma sequência de desafios. Determina se você deseja iniciar um novo desafio, marcar a autenticação como concluída ou interromper a tentativa de autenticação.

**[Cria](user-pool-lambda-create-auth-challenge.md)**  
Emite a pergunta para a aplicação para o usuário responder. Essa função pode apresentar uma pergunta de segurança ou um link para um CAPTCHA que sua aplicação deve exibir para o usuário.

**[Verifica](user-pool-lambda-verify-auth-challenge-response.md)**  
Conhece a resposta esperada e a compara com a resposta que sua aplicação fornece na resposta ao desafio. A função pode chamar a API do seu serviço CAPTCHA para recuperar os resultados esperados da tentativa de solução do usuário.

Essas três funções do Lambda se agrupam para apresentar um mecanismo de autenticação que está completamente sob seu controle e sob seu próprio padrão. Como a autenticação personalizada requer lógica de aplicação no seu cliente e nas funções do Lambda, você não pode processar a autenticação personalizada no login gerenciado. Esse sistema de autenticação exige um esforço adicional do desenvolvedor. Sua aplicação deve realizar o fluxo de autenticação com a API de grupos de usuários e lidar com o desafio resultante com uma interface de login personalizada que coloque a pergunta no centro do desafio de autenticação personalizada.

![\[Acionadores do Lambda de desafio\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/lambda-challenges.png)


Para mais informações sobre como implementar uma autenticação personalizada, consulte [Fluxo de autenticação personalizado e desafios](amazon-cognito-user-pools-authentication-flow-methods.md#Custom-authentication-flow-and-challenges).

Autenticação entre as operações da API [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)ou [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html), e [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)ou [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html). Nesse fluxo, um usuário faz a autenticação respondendo desafios sucessivos até que ela falhe ou ele receba os tokens. Uma resposta ao desafio pode ser um novo desafio. Nesse caso, sua aplicação responde quantas vezes forem necessárias aos novos desafios. A autenticação bem-sucedida acontece quando a função define auth analisa os resultados até o momento, determina que todos os desafios foram respondidos e retorna `IssueTokens`.

**Topics**
+ [

## Autenticação SRP em fluxos de desafio personalizados
](#user-pool-lambda-challenge-srp-authentication)
+ [

# Acionador do Lambda para definir desafio de autenticação
](user-pool-lambda-define-auth-challenge.md)
+ [

# Acionador do Lambda de criar desafio de autenticação
](user-pool-lambda-create-auth-challenge.md)
+ [

# Acionador do Lambda de verificar resposta do desafio de autenticação
](user-pool-lambda-verify-auth-challenge-response.md)

## Autenticação SRP em fluxos de desafio personalizados
<a name="user-pool-lambda-challenge-srp-authentication"></a>

Você pode fazer com que o Amazon Cognito verifique senhas de usuário antes que ele emita seus desafios personalizados. Todos os gatilhos do Lambda associados à categoria Autenticação das [cotas de taxa de solicitação](quotas.md#category_operations.title) serão executados quando você realizar a autenticação SRP em um fluxo de desafio personalizado. Veja uma visão geral do processo:

1. Sua aplicação inicia o login chamando `InitiateAuth` ou `AdminInitiateAuth` com o mapa `AuthParameters`. Os parâmetros devem incluir `CHALLENGE_NAME: SRP_A,` e os valores de `SRP_A` e `USERNAME`.

1. O Amazon Cognito invoca o acionador do Lambda de desafio de autenticação com uma sessão inicial que contém `challengeName: SRP_A` e `challengeResult: true`.

1. Depois de receber essas entradas, a função do Lambda responde com `challengeName: PASSWORD_VERIFIER`, `issueTokens: false`, `failAuthentication: false`.

1. Se a verificação de senha for bem-sucedida, o Amazon Cognito invocará sua função do Lambda novamente com uma nova sessão contendo `challengeName: PASSWORD_VERIFIER` e `challengeResult: true`.

1. Para iniciar seus desafios personalizados, sua função do Lambda responde com `challengeName: CUSTOM_CHALLENGE`, `issueTokens: false` e `failAuthentication: false`. Se você não quiser iniciar seu fluxo de autenticação personalizado com a verificação de senha, poderá iniciar o login com o mapa `AuthParameters` incluindo `CHALLENGE_NAME: CUSTOM_CHALLENGE`.

1. O loop de desafios se repetirá até que todos os desafios sejam respondidos.

O exemplo a seguir mostra uma solicitação `InitiateAuth` inicial que precede a autenticação personalizada com um fluxo SRP.

```
{
    "AuthFlow": "CUSTOM_AUTH",
    "ClientId": "1example23456789",
    "AuthParameters": {
        "CHALLENGE_NAME": "SRP_A",
        "USERNAME": "testuser",
        "SRP_A": "[SRP_A]",
        "SECRET_HASH": "[secret hash]"
    }
}
```

### Redefinição de senha no fluxo SRP de autenticação personalizada
<a name="user-pool-lambda-challenge-force-password-change"></a>

Quando os usuários têm status `FORCE_CHANGE_PASSWORD`, seu fluxo de autenticação personalizado deve integrar a etapa de alteração de senha e, ao mesmo tempo, manter a integridade de seus desafios de autenticação. O Amazon Cognito invoca seu acionador do Lambda [desafio de definição de autenticação](user-pool-lambda-define-auth-challenge.md) durante o desafio `NEW_PASSWORD_REQUIRED`. Nesse cenário, um usuário que faz login com um fluxo de desafio personalizado e autenticação SRP pode definir uma nova senha se estiver em um estado de redefinição de senha.

Quando os usuários têm o status `FORCE_CHANGE_PASSWORD` ou `RESET_REQUIRED`, eles devem [responder](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html#API_RespondToAuthChallenge_RequestParameters) a um desafio `NEW_PASSWORD_REQUIRED` com um `NEW_PASSWORD`. Na autenticação personalizada com SRP, o Amazon Cognito retorna um desafio `NEW_PASSWORD_REQUIRED` depois que os usuários concluem o desafio `PASSWORD_VERIFIER` SRP. Seu acionador de desafio de definição de autenticação recebe os dois resultados do desafio na matriz `session` e pode continuar com desafios personalizados adicionais depois que o usuário alterar a senha com sucesso.

Seu acionador do Lambda do desafio de autenticação definido deve gerenciar a sequência de desafios pela autenticação SRP, redefinição de senha e desafios personalizados subsequentes. O acionador recebe uma matriz de desafios concluídos no parâmetro `session`, incluindo os resultados `PASSWORD_VERIFIER` e `NEW_PASSWORD_REQUIRED`. Para obter um exemplo de implementação, consulte [Exemplo de definição do desafio de autenticação](user-pool-lambda-define-auth-challenge.md#aws-lambda-triggers-define-auth-challenge-example).

#### Etapas do fluxo de autenticação
<a name="user-pool-lambda-challenge-password-flow-steps"></a>

Para usuários que precisam verificar a senha antes de desafios personalizados, o processo segue estas etapas:

1. Sua aplicação inicia o login chamando `InitiateAuth` ou `AdminInitiateAuth` com o mapa `AuthParameters`. Os parâmetros devem incluir `CHALLENGE_NAME: SRP_A` e os valores de `SRP_A` e `USERNAME`.

1. O Amazon Cognito invoca o acionador do Lambda de desafio de autenticação com uma sessão inicial que contém `challengeName: SRP_A` e `challengeResult: true`.

1. Depois de receber essas entradas, a função do Lambda responde com `challengeName: PASSWORD_VERIFIER`, `issueTokens: false`, `failAuthentication: false`.

1. Se a verificação da senha for bem-sucedida, uma das duas coisas acontecerá:  
**Para usuários com status normal:**  
O Amazon Cognito invoca sua função do Lambda novamente com uma nova sessão contendo `challengeName: PASSWORD_VERIFIER` e `challengeResult: true`.  
Para iniciar seus desafios personalizados, sua função do Lambda responde com `challengeName: CUSTOM_CHALLENGE`, `issueTokens: false` e `failAuthentication: false`.  
**Para usuários com status `RESET_REQUIRED` ou `FORCE_CHANGE_PASSWORD`:**  
O Amazon Cognito invoca sua função do Lambda com uma sessão contendo `challengeName: PASSWORD_VERIFIER` e `challengeResult: true`.  
Sua função do Lambda deve responder com `challengeName: NEW_PASSWORD_REQUIRED`, `issueTokens: false` e `failAuthentication: false`.  
Após a alteração bem-sucedida da senha, o Amazon Cognito invoca sua função do Lambda com uma sessão contendo os resultados `PASSWORD_VERIFIER` e `NEW_PASSWORD_REQUIRED`.  
Para iniciar seus desafios personalizados, sua função do Lambda responde com `challengeName: CUSTOM_CHALLENGE`, `issueTokens: false` e `failAuthentication: false`.

1. O loop de desafios se repetirá até que todos os desafios sejam respondidos.

Se você não quiser iniciar seu fluxo de autenticação personalizado com a verificação de senha, poderá iniciar o login com o mapa `AuthParameters` incluindo `CHALLENGE_NAME: CUSTOM_CHALLENGE`.

#### Gerenciamento de sessões
<a name="user-pool-lambda-challenge-session-management"></a>

O fluxo de autenticação mantém a continuidade da sessão por meio de uma série de resultados de sessões IDs e desafios. Cada resposta ao desafio gera um novo ID de sessão para evitar erros de reutilização da sessão, o que é importante principalmente para fluxos de autenticação multifator.

Os resultados do desafio são armazenados cronologicamente na matriz de sessões que seus acionadores do Lambda recebem. Para usuários com status `FORCE_CHANGE_PASSWORD`, a matriz da sessão contém:

1. `session[0]` – Desafio `SRP_A` inicial

1. `session[1]` – Resultado `PASSWORD_VERIFIER`

1. `session[2]` – Resultado `NEW_PASSWORD_REQUIRED`

1. Elementos subsequentes – Resultados de desafios personalizados adicionais

#### Exemplo de fluxo de autorização
<a name="user-pool-lambda-challenge-example-flow"></a>

O exemplo a seguir demonstra um fluxo completo de autenticação personalizada para um usuário com status `FORCE_CHANGE_PASSWORD` que precisa concluir a alteração da senha e um desafio CAPTCHA personalizado.

1. **InitiateAuth request**

   ```
   {
       "AuthFlow": "CUSTOM_AUTH",
       "ClientId": "1example23456789",
       "AuthParameters": {
           "CHALLENGE_NAME": "SRP_A",
           "USERNAME": "testuser",
           "SRP_A": "[SRP_A]"
       }
   }
   ```

1. **InitiateAuth resposta**

   ```
   {
       "ChallengeName": "PASSWORD_VERIFIER",
       "ChallengeParameters": {
           "USER_ID_FOR_SRP": "testuser"
       },
       "Session": "[session_id_1]"
   }
   ```

1. **RespondToAuthChallenge solicitação com `PASSWORD_VERIFIER`**

   ```
   {
       "ChallengeName": "PASSWORD_VERIFIER",
       "ClientId": "1example23456789",
       "ChallengeResponses": {
           "PASSWORD_CLAIM_SIGNATURE": "[claim_signature]",
           "PASSWORD_CLAIM_SECRET_BLOCK": "[secret_block]",
           "TIMESTAMP": "[timestamp]",
           "USERNAME": "testuser"
       },
       "Session": "[session_id_1]"
   }
   ```

1. **RespondToAuthChallenge resposta com `NEW_PASSWORD_REQUIRED` desafio**

   ```
   {
       "ChallengeName": "NEW_PASSWORD_REQUIRED",
       "ChallengeParameters": {},
       "Session": "[session_id_2]"
   }
   ```

1. **RespondToAuthChallenge solicitação com `NEW_PASSWORD_REQUIRED`**

   ```
   {
       "ChallengeName": "NEW_PASSWORD_REQUIRED",
       "ClientId": "1example23456789",
       "ChallengeResponses": {
           "NEW_PASSWORD": "[password]",
           "USERNAME": "testuser"
       },
       "Session": "[session_id_2]"
   }
   ```

1. **RespondToAuthChallenge resposta com desafio personalizado de CAPTCHA**

   ```
   {
       "ChallengeName": "CUSTOM_CHALLENGE",
       "ChallengeParameters": {
           "captchaUrl": "url/123.jpg"
       },
       "Session": "[session_id_3]"
   }
   ```

1. **RespondToAuthChallenge solicitação com resposta ao desafio personalizado CAPTCHA**

   ```
   {
       "ChallengeName": "CUSTOM_CHALLENGE",
       "ClientId": "1example23456789",
       "ChallengeResponses": {
           "ANSWER": "123",
           "USERNAME": "testuser"
       },
       "Session": "[session_id_3]"
   }
   ```

**6. Resposta final de sucesso**

```
{
    "AuthenticationResult": {
        "AccessToken": "eyJra456defEXAMPLE",
        "ExpiresIn": 3600,
        "IdToken": "eyJra789ghiEXAMPLE",
        "RefreshToken": "eyJjd123abcEXAMPLE",
        "TokenType": "Bearer"
    },
    "ChallengeParameters": {}
}
```

# Acionador do Lambda para definir desafio de autenticação
<a name="user-pool-lambda-define-auth-challenge"></a>

O gatilho de desafio define auth é uma função do Lambda que mantém a sequência de desafios em um fluxo de autenticação personalizado. Ele declara o sucesso ou o fracasso da sequência de desafios e define o próximo desafio se a sequência ainda não estiver completa.

![\[Acionadores do Lambda de desafio\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/lambda-challenges1.png)


**Definir o desafio de autenticação**  
 O Amazon Cognito invoca esse acionador para iniciar o [fluxo de autenticação personalizado](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html#amazon-cognito-user-pools-custom-authentication-flow).

A solicitação desse acionador do Lambda contém `session`. O parâmetro `session` é uma matriz que contém todos os desafios apresentados ao usuário no processo de autenticação atual. A solicitação também inclui o resultado correspondente. A matriz `session` armazena detalhes do desafio (`ChallengeResult`) em ordem cronológica. O desafio `session[0]` representa o primeiro que o usuário recebe.

**Topics**
+ [

## Parâmetros do acionador do Lambda para definir o desafio de autenticação
](#cognito-user-pools-lambda-trigger-syntax-define-auth-challenge)
+ [

## Exemplo de definição do desafio de autenticação
](#aws-lambda-triggers-define-auth-challenge-example)

## Parâmetros do acionador do Lambda para definir o desafio de autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-define-auth-challenge"></a>

A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos [parâmetros comuns](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que o Amazon Cognito adiciona a todas as solicitações.

------
#### [ JSON ]

```
{
    "request": {
        "userAttributes": {
            "string": "string",
                . . .
        },
        "session": [
            ChallengeResult,
            . . .
        ],
        "clientMetadata": {
            "string": "string",
            . . .
        },
        "userNotFound": boolean
    },
    "response": {
        "challengeName": "string",
        "issueTokens": boolean,
        "failAuthentication": boolean
    }
}
```

------

### Parâmetros de solicitação para definir o desafio de autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-define-auth-challenge-request"></a>

 Quando o Amazon Cognito invoca sua função do Lambda, ele fornece os seguintes parâmetros:

**userAttributes**  
Um ou mais pares de nome-valor que representam atributos de usuário.

**userNotFound**  
Um booleano que é preenchido pelo Amazon Cognito quando `PreventUserExistenceErrors` é definido como `ENABLED` para o cliente de grupo de usuários. Um valor de `true` significa que o ID do usuário (nome de usuário, endereço de e-mail e outros detalhes) não correspondeu a nenhum usuário existente. Quando `PreventUserExistenceErrors` é definido como `ENABLED`, o serviço não informa a aplicação dos usuários inexistentes. Recomendamos que suas funções do Lambda mantenham a mesma experiência do usuário e contabilizem a latência. Dessa forma, o autor da chamada não consegue detectar comportamentos diferentes quando o usuário existe ou não existe.

**sessão**  
Uma matriz de elementos `ChallengeResult`. Cada regra contém os seguintes elementos:    
**challengeName**  
Um dos seguintes tipos de desafio: `CUSTOM_CHALLENGE`, `SRP_A`, `PASSWORD_VERIFIER`, `SMS_MFA`, `EMAIL_OTP`, `SOFTWARE_TOKEN_MFA`, `DEVICE_SRP_AUTH`, `DEVICE_PASSWORD_VERIFIER` ou `ADMIN_NO_SRP_AUTH`.  
Quando sua função define auth challenge emite um desafio `PASSWORD_VERIFIER` para um usuário que configurou a autenticação multifator, o Amazon Cognito prossegue com um desafio `SMS_MFA`, `EMAIL_OTP` ou `SOFTWARE_TOKEN_MFA`. Essas são as instruções para um código de autenticação multifator. Em sua função, inclua o tratamento de eventos de entrada de desafios `SMS_MFA`, `EMAIL_OTP` e `SOFTWARE_TOKEN_MFA`. Você não precisa invocar os desafios de MFA usando sua função de desafio define auth.  
Quando sua função estiver determinando se um usuário fez a autenticação com êxito e você precisar emitir tokens para ele, sempre confira `challengeName` em sua função “define auth challenge” e garantir que corresponda ao valor esperado.  
**challengeResult**  
Defina como `true` se o usuário tiver concluído o desafio com êxito; do contrário, defina-o como `false`.  
**challengeMetadata**  
Seu nome para o desafio personalizado. Usado somente se `challengeName` for `CUSTOM_CHALLENGE`.

**clientMetadata**  
Um ou mais pares de chave/valor que você pode fornecer como entrada personalizada para a função do Lambda especificada para o acionador definir desafio de autenticação. Para passar esses dados para sua função Lambda, você pode usar o `ClientMetadata` parâmetro nas operações [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)e da [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. A solicitação que invoca a função define auth challenge não inclui dados transmitidos no ClientMetadata parâmetro [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)e [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)operações de API.

### Parâmetros de resposta para definir o desafio de autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-define-auth-challenge-response"></a>

Na resposta, você pode retornar o próximo estágio do processo de autenticação.

**challengeName**  
Uma string que contém o nome do próximo desafio. Se você deseja apresentar um novo desafio ao seu usuário, especifique o nome do desafio aqui.

**issueTokens**  
Se você determinar que o usuário concluiu os desafios de autenticação de forma adequada; defina-o como `true`. Se o usuário não cumprir os desafios devidamente, defina como `false`.

**failAuthentication**  
Se quiser encerrar o processo de autenticação atual, defina-o como `true`. Para continuar o processo de autenticação atual, defina-o como `false`.

## Exemplo de definição do desafio de autenticação
<a name="aws-lambda-triggers-define-auth-challenge-example"></a>

Este exemplo definirá uma série de desafios de autenticação e emitirá tokens somente se o usuário concluir todos os desafios com êxito. Quando os usuários concluem a autenticação SRP com os desafios `SRP_A` e `PASSWORD_VERIFIER`, essa função transmite a eles um `CUSTOM_CHALLENGE` que invoca o acionador do desafio de criação de autorização. Em combinação com nosso [exemplo de desafio de criação de autenticação](user-pool-lambda-create-auth-challenge.md#aws-lambda-triggers-create-auth-challenge-example), essa sequência oferece um desafio CAPTCHA para o desafio três e uma pergunta de segurança para o desafio quatro.

Depois que o usuário resolve o CAPTCHA e responde à pergunta de segurança, essa função confirma que seu grupo de usuários pode emitir tokens. A autenticação SRP não é necessária; você também pode definir o CAPTCHA e a pergunta de segurança como desafios um e dois. Caso sua função de definição de desafio de autenticação não declare desafios de SRP, o sucesso de seus usuários será determinado inteiramente pelas respostas deles aos seus prompts personalizados.

------
#### [ Node.js ]

```
const handler = async (event) => {
  if (
    event.request.session.length === 1 &&
    event.request.session[0].challengeName === "SRP_A"
  ) {
    event.response.issueTokens = false;
    event.response.failAuthentication = false;
    event.response.challengeName = "PASSWORD_VERIFIER";
  } else if (
    event.request.session.length === 2 &&
    event.request.session[1].challengeName === "PASSWORD_VERIFIER" &&
    event.request.session[1].challengeResult === true
  ) {
    event.response.issueTokens = false;
    event.response.failAuthentication = false;
    event.response.challengeName = "CUSTOM_CHALLENGE";
  } else if (
    event.request.session.length === 3 &&
    event.request.session[2].challengeName === "CUSTOM_CHALLENGE" &&
    event.request.session[2].challengeResult === true
  ) {
    event.response.issueTokens = false;
    event.response.failAuthentication = false;
    event.response.challengeName = "CUSTOM_CHALLENGE";
  } else if (
    event.request.session.length === 4 &&
    event.request.session[3].challengeName === "CUSTOM_CHALLENGE" &&
    event.request.session[3].challengeResult === true
  ) {
    event.response.issueTokens = true;
    event.response.failAuthentication = false;
  } else {
    event.response.issueTokens = false;
    event.response.failAuthentication = true;
  }

  return event;
};

export { handler };
```

------

# Acionador do Lambda de criar desafio de autenticação
<a name="user-pool-lambda-create-auth-challenge"></a>

O acionador de desafio create auth é uma função do Lambda que tem os detalhes de cada desafio declarado pelo acionador de desafio define auth. Ele processa o nome do desafio declarado pelo acionador de desafio define auth e retorna um `publicChallengeParameters` que sua aplicação deve apresentar ao usuário. Essa função então fornece ao seu grupo de usuários a resposta para o desafio `privateChallengeParameters`, que seu grupo de usuários passa para o acionador do desafio verify auth. Onde seu acionador de desafio define auth gerencia a sequência de desafios, seu acionador de desafio create auth gerencia o conteúdo do desafio.

![\[Acionadores do Lambda de desafio\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/lambda-challenges2.png)


**Criar desafio de autenticação**  
O Amazon Cognito invocará esse acionador depois de **Definir desafio de autenticação** se um desafio personalizado tiver sido especificado como parte do acionador **Definir desafio de autenticação**. Ele cria um [fluxo de autenticação personalizado](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html#amazon-cognito-user-pools-custom-authentication-flow).

Esse acionador do Lambda é invocado para criar um desafio a ser apresentado ao usuário. A solicitação deste acionador do Lambda inclui `challengeName` e `session`. O `challengeName` é uma string que representa o nome do próximo desafio a ser apresentado ao usuário. O valor desse atributo é definido no acionador do Lambda Definir desafio de autenticação.

O loop de desafio será repetido até todos os desafios serem respondidos.

**Topics**
+ [

## Parâmetros do acionador do Lambda de criar desafio de autenticação
](#cognito-user-pools-lambda-trigger-syntax-create-auth-challenge)
+ [

## Exemplo de criar desafio de autenticação
](#aws-lambda-triggers-create-auth-challenge-example)

## Parâmetros do acionador do Lambda de criar desafio de autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-create-auth-challenge"></a>

A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos [parâmetros comuns](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que o Amazon Cognito adiciona a todas as solicitações.

------
#### [ JSON ]

```
{
    "request": {
        "userAttributes": {
            "string": "string",
            . . .
        },
        "challengeName": "string",
        "session": [
            ChallengeResult,
            . . .
        ],
        "clientMetadata": {
            "string": "string",
            . . .
        },
        "userNotFound": boolean
    },
    "response": {
        "publicChallengeParameters": {
            "string": "string",
            . . .
        },
        "privateChallengeParameters": {
            "string": "string",
            . . .
        },
        "challengeMetadata": "string"
    }
}
```

------

### Parâmetros de solicitação de criar desafio de autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-create-auth-challenge-request"></a>

**userAttributes**  
Um ou mais pares de nome-valor que representam atributos de usuário.

**userNotFound**  
Este booleano é preenchido quando `PreventUserExistenceErrors` é configurado como `ENABLED` para o cliente de grupo de usuários.

**challengeName**  
O nome do novo desafio.

**sessão**  
O elemento session é uma matriz de elementos `ChallengeResult`, cada um deles contendo os seguintes elementos:    
**challengeName**  
O tipo de desafio. Um destes: `"CUSTOM_CHALLENGE"`, `"PASSWORD_VERIFIER"`, `"SMS_MFA"`, `"DEVICE_SRP_AUTH"`, `"DEVICE_PASSWORD_VERIFIER"`, `"NEW_PASSWORD_REQUIRED"` ou `"ADMIN_NO_SRP_AUTH"`.   
**challengeResult**  
Defina como `true` se o usuário tiver concluído o desafio com êxito; do contrário, defina-o como `false`.  
**challengeMetadata**  
Seu nome para o desafio personalizado. Usado somente se `challengeName` for `"CUSTOM_CHALLENGE"`.

**clientMetadata**  
Um ou mais pares de chave-valor que você pode fornecer como entrada personalizada para a função Lambda especificada para o acionador de criação do desafio de autenticação. Você pode usar o ClientMetadata parâmetro nas ações [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)e da [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API para passar esses dados para sua função Lambda. A solicitação que invoca a função create auth challenge não inclui dados transmitidos no ClientMetadata parâmetro [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)e [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)nas operações da API.

### Parâmetros de resposta de criar desafio de autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-create-auth-challenge-response"></a>

**publicChallengeParameters**  
Um ou mais pares de chave-valor do aplicativo cliente que serão usados no desafio a ser apresentado ao usuário. Este parâmetro deve conter todas as informações necessárias para apresentar com precisão o desafio ao usuário.

**privateChallengeParameters**  
Esse parâmetro é usado somente pelo acionador do Lambda Verificar resposta do desafio de autenticação. Este parâmetro deve conter todas as informações necessárias para validar a resposta do usuário para o desafio. Em outras palavras, o parâmetro `publicChallengeParameters` contém a pergunta apresentada ao usuário, enquanto `privateChallengeParameters` contém as respostas válidas da pergunta.

**challengeMetadata**  
Seu nome para o desafio personalizado, caso esse seja um desafio personalizado.

## Exemplo de criar desafio de autenticação
<a name="aws-lambda-triggers-create-auth-challenge-example"></a>

Essa função tem dois desafios personalizados que correspondem à sequência de desafios em nosso [exemplo de definição de desafio de autenticação](user-pool-lambda-define-auth-challenge.md#aws-lambda-triggers-define-auth-challenge-example). Os dois primeiros desafios são a autenticação SRP. Para o terceiro desafio, essa função retorna um URL CAPTCHA para sua aplicação na resposta do desafio. Sua aplicação renderiza o CAPTCHA no URL fornecido e retorna a entrada do usuário. O URL da imagem CAPTCHA é adicionado aos parâmetros de desafio público como "`captchaUrl`", e a resposta esperado é adicionada aos parâmetros de desafio privado.

Para o quarto desafio, essa função retorna uma pergunta de segurança. Sua aplicação renderiza a pergunta e solicita que o usuário responda. Depois que os usuários resolverem os dois desafios personalizados, o acionador do de definição de desafio autenticação confirma que seu grupo de usuários pode emitir tokens.

------
#### [ Node.js ]

```
const handler = async (event) => {
  if (event.request.challengeName !== "CUSTOM_CHALLENGE") {
    return event;
  }

  if (event.request.session.length === 2) {
    event.response.publicChallengeParameters = {};
    event.response.privateChallengeParameters = {};
    event.response.publicChallengeParameters.captchaUrl = "url/123.jpg";
    event.response.privateChallengeParameters.answer = "5";
  }

  if (event.request.session.length === 3) {
    event.response.publicChallengeParameters = {};
    event.response.privateChallengeParameters = {};
    event.response.publicChallengeParameters.securityQuestion =
      "Who is your favorite team mascot?";
    event.response.privateChallengeParameters.answer = "Peccy";
  }

  return event;
};

export { handler };
```

------

# Acionador do Lambda de verificar resposta do desafio de autenticação
<a name="user-pool-lambda-verify-auth-challenge-response"></a>

O acionador do desafio verify auth é uma função do Lambda que compara a resposta fornecida pelo usuário com uma resposta conhecida. Essa função informa ao seu grupo de usuários se o usuário respondeu ao desafio corretamente. Quando o gatilho do desafio verify auth responde com um `answerCorrect` of`true`, a sequência de autenticação pode continuar.

![\[Acionadores do Lambda de desafio\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/lambda-challenges3.png)


**Verificar a resposta do desafio de autenticação**  
O Amazon Cognito invoca esse acionador para verificar se a resposta do usuário a um desafio de autenticação personalizado é válida ou não. Ele faz parte de um [fluxo de autenticação personalizado](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html#amazon-cognito-user-pools-custom-authentication-flow) do grupo de usuários.

A solicitação deste trigger contém os parâmetros `privateChallengeParameters` e `challengeAnswer`. O acionador do Lambda de criação de desafio de autenticação retorna valores `privateChallengeParameters` e contém a resposta esperada do usuário. O parâmetro `challengeAnswer` contém a resposta do usuário para o desafio.

A resposta contém o atributo `answerCorrect`. Se o usuário concluir o desafio com êxito, o Amazon Cognito definirá o valor do atributo como `true`. Se o usuário não concluir o desafio com êxito, o Amazon Cognito definirá o valor como `false`.

O loop de desafios se repetirá até que o usuário responda a todos os desafios.

**Topics**
+ [

## Parâmetros do acionador do Lambda de verificar desafio de autenticação
](#cognito-user-pools-lambda-trigger-syntax-verify-auth-challenge)
+ [

## Exemplo de resposta de verificar desafio de autenticação
](#aws-lambda-triggers-verify-auth-challenge-response-example)

## Parâmetros do acionador do Lambda de verificar desafio de autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-verify-auth-challenge"></a>

A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos [parâmetros comuns](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que o Amazon Cognito adiciona a todas as solicitações.

------
#### [ JSON ]

```
{
    "request": {
        "userAttributes": {
            "string": "string",
            . . .
        },
        "privateChallengeParameters": {
            "string": "string",
            . . .
        },
        "challengeAnswer": "string",
        "clientMetadata": {
            "string": "string",
            . . .
        },
        "userNotFound": boolean
    },
    "response": {
        "answerCorrect": boolean
    }
}
```

------

### Parâmetros de solicitação de verificar desafio de autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-verify-auth-challenge-request"></a>

**userAttributes**  
Esse parâmetro contém um ou mais pares de nome-valor que representam atributos de usuário.

**userNotFound**  
Quando o Amazon Cognito define `PreventUserExistenceErrors` como `ENABLED` para o cliente de grupo de usuários, ele preenche esse booleano.

**privateChallengeParameters**  
Esse parâmetro vem do acionador de criação de desafio de autenticação. Para determinar se o usuário passou em um desafio, o Amazon Cognito compara os parâmetros com **challengeAnswer** do usuário.  
Esse parâmetro contém todas as informações necessárias para validar a resposta do usuário para o desafio. Essas informações incluem a pergunta que o Amazon Cognito apresenta ao usuário (`publicChallengeParameters`) e as respostas válidas para a pergunta (`privateChallengeParameters`). Somente o acionador do Lambda de verificação da resposta do desafio de autenticação usa esse parâmetro. 

**challengeAnswer**  
Esse valor de parâmetro é a resposta do usuário para o desafio.

**clientMetadata**  
Esse parâmetro contém um ou mais pares de chave-valor que você pode fornecer como entrada personalizada à função do Lambda para o acionador de verificação do desafio de autenticação. Para passar esses dados para sua função Lambda, use o ClientMetadata parâmetro nas operações [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)e da [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. O Amazon Cognito não inclui dados do ClientMetadata parâmetro [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)e operações de [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API na solicitação que ele passa para a função de desafio de verificação de autenticação.

### Parâmetros de resposta de verificar desafio de autenticação
<a name="cognito-user-pools-lambda-trigger-syntax-verify-auth-challenge-response"></a>

**answerCorrect**  
Se o usuário concluir o desafio com êxito, o Amazon Cognito definirá esse parâmetro como `true`. Se o usuário não concluir o desafio com êxito, o Amazon Cognito definirá o parâmetro como `false`. 

## Exemplo de resposta de verificar desafio de autenticação
<a name="aws-lambda-triggers-verify-auth-challenge-response-example"></a>

A função de verificação do desafio de autorização confere se a resposta do usuário a um desafio corresponde à resposta esperada. A resposta do usuário é definida pela entrada da sua aplicação, e a resposta preferencial é definida por `privateChallengeParameters.answer` na resposta da [resposta do acionador criar desafio de autenticação](user-pool-lambda-create-auth-challenge.md#aws-lambda-triggers-create-auth-challenge-example). Tanto a resposta correta quanto a resposta dada fazem parte do evento de entrada para essa função.

Neste exemplo, se a resposta do usuário corresponder à resposta esperada, o Amazon Cognito definirá o parâmetro `answerCorrect` como `true`.

------
#### [ Node.js ]

```
const handler = async (event) => {
  if (
    event.request.privateChallengeParameters.answer ===
    event.request.challengeAnswer
  ) {
    event.response.answerCorrect = true;
  } else {
    event.response.answerCorrect = false;
  }

  return event;
};

export { handler };
```

------

# Acionador do Lambda antes da geração do token
<a name="user-pool-lambda-pre-token-generation"></a>

Como o Amazon Cognito invoca esse acionador antes da geração do token, é possível personalizar as declarações em tokens do grupo de usuários. Com os **Recursos básicos** da primeira versão ou `V1_0` do evento de acionamento de geração pré-token, é possível personalizar o token de identidade (ID). Em grupos de usuários com o plano de recursos Essentials ou Plus, você pode gerar a versão dois ou o evento `V2_0` acionador com personalização do token de acesso e a versão três ou o evento `V3_0` acionador com personalização do token de acesso para concessões de credenciais de cliente machine-to-machine (M2M).

O Amazon Cognito envia um evento `V1_0` como uma solicitação à sua função com dados que seriam gravados no token do ID. Um evento `V2_0` ou `V3_0` é uma solicitação única com os dados que o Amazon Cognito gravaria nos tokens de identidade e de acesso. Para personalizar os dois tokens é necessário atualizar a função para usar a versão dois ou três do acionador e enviar dados aos dois tokens na mesma resposta.

O Amazon Cognito aplica respostas de eventos da versão dois aos tokens de acesso da autenticação do usuário, em que um usuário humano apresentou credenciais ao seu grupo de usuários. As respostas de eventos da versão três se aplicam aos tokens de acesso da autenticação do usuário e da autenticação da máquina, em que sistemas automatizados autorizam solicitações de token de acesso com segredos do cliente de aplicação. Além das circunstâncias dos tokens de acesso resultantes, os eventos das versões dois e três são idênticos.

Esse acionador do Lambda pode adicionar, remover e modificar algumas declarações em tokens de identidade e de acesso antes que o Amazon Cognito as emita para a aplicação. Para usar esse recurso, associe uma função do Lambda no console de grupos de usuários do Amazon Cognito ou atualize a `LambdaConfig` do grupo de usuários por meio da AWS Command Line Interface (AWS CLI).

## Versões de eventos
<a name="user-pool-lambda-pre-token-generation-event-versions"></a>

Seu grupo de usuários pode fornecer diferentes versões de um evento de acionador de pré-geração de token para sua função do Lambda. Um acionador `V1_0` fornece os parâmetros para modificação dos tokens de ID. Um acionador `V2_0` ou `V3_0` fornece parâmetros para o seguinte:

1. As funções de um acionador `V1_0`.

1. A capacidade de personalizar os tokens de acesso.

1. A capacidade de transmitir tipos de dados complexos para valores de reivindicação de ID e token de acesso:
   + String
   + Número
   + Booleano
   + Conjuntos de strings, números, booleanos ou uma combinação de qualquer um desses
   + JSON

**nota**  
No token de ID, você pode preencher objetos complexos com os valores das reivindicações, exceto para `phone_number_verified`, `email_verified`, `updated_at` e `address`.

Os grupos de usuários entregam eventos `V1_0` por padrão. Para configurar seu grupo de usuários para enviar um evento `V2_0`, escolha uma **versão do evento de acionador** da **personalização de recursos básicos \$1 token de acesso para identidades de usuários** ao configurar seu acionador no console do Amazon Cognito. Para produzir eventos `V3_0`, escolha ****Recursos básicos \$1 personalização de token de acesso para identidades de usuários e máquinas****. Você também pode definir o valor de `LambdaVersion` nos [LambdaConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#CognitoUserPools-UpdateUserPool-request-LambdaConfig)parâmetros em uma solicitação de [CreateUserPool ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)API [UpdateUserPool ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)ou de uma solicitação. As versões um, dois e três do evento estão disponíveis nos planos de recursos **Essentials** e **Plus**. As operações M2M para eventos da versão três têm uma estrutura de preços separada da fórmula de usuários ativos mensais (MAU). Para mais informações, consulte [Preços do Amazon Cognito](https://aws.amazon.com/cognito/pricing/).

**nota**  
Grupos de usuários que estavam operacionais com a opção **Recursos de segurança avançados** em ou antes de 22 de novembro de 2024 às 18:00 GMT e que permanecem no nível de recursos **Lite** têm acesso às versões um e dois do evento do acionador de pré-geração de tokens. Grupos de usuários nesse nível legado *sem* recursos avançados de segurança têm acesso à primeira versão do evento. A versão três está disponível *somente* no Essentials e Plus.

## Referência de reivindicações e escopos
<a name="user-pool-lambda-pre-token-generation-excluded-claims"></a>

O Amazon Cognito limita as declarações e os escopos que você pode adicionar, modificar ou suprimir em tokens de acesso e identidade. A tabela a seguir descreve as declarações que sua função do Lambda pode ou não modificar e os parâmetros do evento de acionamento que afetam a presença ou o valor da reivindicação.


| Reivindicar | Tipo de token padrão | Pode adicionar? | Pode modificar? | Pode suprimir? | Parâmetro do evento: adicionar ou modificar | Parâmetro do evento: suprimir | Tipo de identidade | Versões do evento | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| Qualquer reivindicação que não esteja no esquema de token do grupo de usuários | Nenhum | Sim | Sim | N/D | claimsToAddOrOverride | claimsToSuppress | Usuário, máquina [1](#cognito-pretoken-machine-ids-tier-note) | Tudo [2](#cognito-pretoken-id-access-versions-note) | 
| scope | Acesso | Sim | Sim | Sim | scopesToAdd | scopesToSuppress | Usuário, máquina [1](#cognito-pretoken-machine-ids-tier-note) | v2\$10, v3\$10 | 
| cognito:groups | ID, Acesso | Sim | Sim | Sim | groupsToOverride | claimsToSuppress | Usuário | Tudo [2](#cognito-pretoken-id-access-versions-note) | 
| cognito:preferred\$1role | ID | Sim | Sim | Sim | preferredRole | claimsToSuppress[3](#cognito-pretoken-suppress-groups-note) | Usuário | Todos | 
| cognito:roles | ID | Sim | Sim | Sim | iamRolesToOverride | claimsToSuppress[3](#cognito-pretoken-suppress-groups-note) | Usuário | Todos | 
| cognito:username | ID | Não | Não | Não | N/D | N/D | Usuário | N/D | 
| Qualquer outra reivindicação com um prefixo cognito: | Nenhum | Não | Não | Não | N/D | N/D | N/D | N/D | 
| username | Acesso | Não | Não | Não | N/D | N/D | Usuário | v2\$10, v3\$10 | 
| sub | ID, Acesso | Não | Não | Não | N/D | N/D | Usuário | N/D | 
| Atributo OIDC padrão | ID | Sim | Sim | Sim | claimsToAddOrOverride | claimsToSuppress | Usuário | Todos | 
| Atributo custom: | ID | Sim | Sim | Sim | claimsToAddOrOverride | claimsToSuppress | Usuário | Todos | 
| Atributo dev: | ID | Não | Não | Sim | N/D | claimsToSuppress | Usuário | Todos | 
| identities | ID | Não | Não | Não | N/D | N/D | Usuário | N/D | 
| aud[4](#cognito-pretoken-aud-note) | ID | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| client\$1id | Acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| event\$1id | Acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| device\$1key | Acesso | Não | Não | Não | N/D | N/D | Usuário | N/D | 
| version | Acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| acr | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| amr | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| at\$1hash | ID | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| auth\$1time | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| azp | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| exp | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| iat | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| iss | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| jti | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| nbf | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| nonce | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| origin\$1jti | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 
| token\$1use | ID, acesso | Não | Não | Não | N/D | N/D | Usuário, máquina | N/D | 

 1 Os tokens de acesso para identidades de máquinas só estão disponíveis com o evento de entrada do acionador `v3_0`. A versão três do evento só está disponível nos níveis de recursos **Essentials** e **Plus**. Grupos de usuários no nível **Lite** podem receber eventos `v1_0`. Grupos de usuários no nível **Lite** com recursos avançados de segurança podem receber eventos `v1_0` e `v2_0`.

2 Configure seu acionador de pré-geração de tokens para a versão do evento `v1_0` somente para token de ID, `v2_0` para token de ID e de acesso, `v3_0` para token de ID e de acesso com recursos para identidades de máquina.

3 Para suprimir as reivindicações `cognito:preferred_role` e `cognito:roles`, adicione `cognito:groups` a `claimsToSuppress`.

 4 É possível adicionar uma reivindicação `aud` aos tokens de acesso, mas o valor deve corresponder ao ID do cliente da aplicação da sessão atual. É possível gerar o ID do cliente no evento de solicitação de `event.callerContext.clientId`.

## Personalizar o token de identidade
<a name="user-pool-lambda-pre-token-generation-idtoken"></a>

Com todas as versões de eventos do acionador do Lambda de pré-geração de tokens, é possível personalizar o conteúdo de um token de identidade (ID) do grupo de usuários. O token de ID fornece atributos de usuário de uma fonte de identidade confiável para login em uma aplicação web ou móvel. Para obter mais informações sobre tokens, consulte [Como entender o token de identidade (ID)](amazon-cognito-user-pools-using-the-id-token.md).

Os usos do gatilho do Lambda de pré-geração de tokens com um token de ID incluem os seguintes:
+ Fazer uma alteração em runtime no perfil do IAM que o usuário solicita de um banco de identidades.
+ Adicionar atributos do usuário de uma fonte externa.
+ Adicionar ou substituir valores de atributos de usuário existentes.
+ Suprimir a divulgação de atributos do usuário que, devido aos escopos autorizados do usuário e ao acesso de leitura aos atributos concedido ao cliente da aplicação, seriam transmitidos à aplicação.

## Personalizar o token de acesso
<a name="user-pool-lambda-pre-token-generation-accesstoken"></a>

Com as versões dois e três de eventos do acionador do Lambda de pré-geração de tokens, é possível personalizar o conteúdo de um token de acesso do grupo de usuários. O token de acesso autoriza os usuários a recuperar informações de recursos protegidos por acesso, como operações de API autorizadas por tokens do Amazon Cognito e de terceiros. APIs Para autorização machine-to-machine (M2M) com concessão de credenciais de cliente, o Amazon Cognito só invoca o gatilho de pré-geração de token quando seu grupo de usuários está configurado para um evento da versão três (). `V3_0` Para obter mais informações sobre tokens de acesso, consulte [Como entender o token de acesso](amazon-cognito-user-pools-using-the-access-token.md).

Os usos do gatilho do Lambda de pré-geração de tokens com um token de acesso incluem os seguintes:
+ Adicionar ou suprimir os escopos na reivindicação `scope`. Por exemplo, é possível adicionar escopos a um token de acesso gerado pela autenticação da API de grupos de usuários do Amazon Cognito, que atribui apenas o escopo `aws.cognito.signin.user.admin`.
+ Alterar a associação de um usuário em grupos de usuários.
+ Adicione declarações que ainda não estão presentes em um token de acesso do Amazon Cognito.
+ Suprimir a divulgação de declarações que, de outra forma, seriam transmitidas à aplicação.

Para oferecer compatibilidade com a personalização do acesso no grupo de usuários, é necessário configurar o grupo de usuários para gerar uma versão atualizada da solicitação de gatilho. Atualize o grupo de usuários conforme mostrado no procedimento a seguir.

------
#### [ Console de gerenciamento da AWS ]

**Como oferecer compatibilidade com a personalização do token de acesso em um gatilho do Lambda de pré-geração do tokens**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home) e escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Selecione o menu **Extensões** e localize os **Acionadores do Lambda**.

1. Adicione ou edite um **Acionador de geração de pré-token**.

1. Selecione uma função do Lambda em **Atribuir função do Lambda**. 

1. Escolha uma **Versão do evento do acionador** de **Recursos básicos \$1 personalização do token de acesso para identidades de usuário** ou **Recursos básicos \$1 personalização do token de acesso para identidades de usuário e de máquinas**. Essa configuração atualiza os parâmetros de solicitação que o Amazon Cognito envia à função para incluir campos para personalização do token de acesso.

------
#### [ User pools API ]

**Como oferecer compatibilidade com a personalização do token de acesso em um gatilho do Lambda de pré-geração do tokens**

Gere uma solicitação de [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)ou. Você deve especificar um valor para todos os parâmetros que não deseja definir como padrão. Para obter mais informações, consulte [Como atualizar a configuração do grupo de usuários e do cliente da aplicação](cognito-user-pool-updating.md).

Inclua o conteúdo a seguir no parâmetro `LambdaVersion` da solicitação. Um valor `LambdaVersion` de `V2_0` faz com que o grupo de usuários adicione parâmetros para tokens de acesso, além de aplicar alterações a eles. Um valor `LambdaVersion` de `V3_0` produz o mesmo evento que `V2_0`, mas faz com que seu grupo de usuários *também* aplique alterações aos tokens de acesso M2M. Para invocar uma versão de função específica, use o ARN de uma função do Lambda com uma versão da função como o valor de `LambdaArn`.

```
"PreTokenGenerationConfig": { 
   "LambdaArn": "arn:aws:lambda:us-west-2:123456789012:function:MyFunction",
   "LambdaVersion": "V3_0"
},
```

------

**Metadados do cliente para credenciais do cliente machine-to-machine (M2M)**  
Você pode transmitir [metadados do cliente](cognito-user-pools-working-with-lambda-triggers.md#working-with-lambda-trigger-client-metadata) em solicitações de M2M. Os metadados do cliente são informações adicionais de um usuário ou ambiente de aplicação que podem contribuir para os resultados de um [Acionador do Lambda antes da geração do token](#user-pool-lambda-pre-token-generation). Em operações de autenticação com um usuário principal, você pode passar metadados do cliente para o gatilho de pré-geração de token no corpo das solicitações [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)de [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. Como as aplicações conduzem o fluxo de geração de tokens de acesso para M2M com solicitações diretas ao [Endpoint de token](token-endpoint.md), elas têm um modelo diferente. No corpo POST das solicitações de token para credenciais do cliente, transmita um parâmetro `aws_client_metadata` com o objeto de metadados do cliente codificado em URL (`x-www-form-urlencoded`) para string. Para ver um exemplo de solicitação, consulte [Credenciais do cliente com autorização básicaCredenciais do cliente com autorização do corpo POST](token-endpoint.md#exchanging-client-credentials-for-an-access-token-in-request-body). Veja a seguir um exemplo de parâmetro que transmite os pares de chave-valor `{"environment": "dev", "language": "en-US"}`.

```
aws_client_metadata=%7B%22environment%22%3A%20%22dev%22,%20%22language%22%3A%20%22en-US%22%7D
```

**Mais atributos**
+ [Como personalizar tokens de acesso nos grupos de usuários do Amazon Cognito](https://aws.amazon.com/blogs/security/how-to-customize-access-tokens-in-amazon-cognito-user-pools/)

**Topics**
+ [

## Versões de eventos
](#user-pool-lambda-pre-token-generation-event-versions)
+ [

## Referência de reivindicações e escopos
](#user-pool-lambda-pre-token-generation-excluded-claims)
+ [

## Personalizar o token de identidade
](#user-pool-lambda-pre-token-generation-idtoken)
+ [

## Personalizar o token de acesso
](#user-pool-lambda-pre-token-generation-accesstoken)
+ [

## Fontes do acionador do Lambda antes da geração do token
](#user-pool-lambda-pre-token-generation-trigger-source)
+ [

## Parâmetros do acionador do Lambda antes da geração do token
](#cognito-user-pools-lambda-trigger-syntax-pre-token-generation)
+ [

## Exemplo da segunda versão do evento de acionamento pré-token: adicionar e suprimir declarações, escopos e grupos
](#aws-lambda-triggers-pre-token-generation-example-version-2-overview)
+ [

## Exemplo de evento de geração pré-token da versão dois: adicionar reivindicações com objetos complexos
](#aws-lambda-triggers-pre-token-generation-example-version-2-complex-objects)
+ [

## Exemplo da primeira versão do evento de geração pré-token: adicionar uma nova declaração e suprimir uma declaração existente
](#aws-lambda-triggers-pre-token-generation-version-1-add-claim)
+ [

## Exemplo da primeira versão do evento de geração pré-token: modificar a associação do grupo do usuário
](#aws-lambda-triggers-pre-token-generation-version-1-change-group)

## Fontes do acionador do Lambda antes da geração do token
<a name="user-pool-lambda-pre-token-generation-trigger-source"></a>


| Valor de triggerSource | Event | 
| --- | --- | 
| TokenGeneration\$1HostedAuth | Chamado durante a autenticação na página de login do login gerenciado no Amazon Cognito. | 
| TokenGeneration\$1Authentication | Chamado depois de os fluxos de autenticação de usuário concluírem. | 
| TokenGeneration\$1NewPasswordChallenge | Chamado após o usuário ser criado por um admin. Este fluxo é chamado quando o usuário tiver que alterar uma senha temporária. | 
| TokenGeneration\$1ClientCredentials | Chamado após a concessão de credenciais de um cliente M2M. Seu grupo de usuários só envia esse evento quando sua versão do evento éV3\$10. | 
| TokenGeneration\$1AuthenticateDevice | Chamado no final da autenticação do dispositivo de um usuário. | 
| TokenGeneration\$1RefreshTokens | Chamado quando um usuário tenta atualizar a identidade e acessar tokens. | 

## Parâmetros do acionador do Lambda antes da geração do token
<a name="cognito-user-pools-lambda-trigger-syntax-pre-token-generation"></a>

A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos [parâmetros comuns](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que o Amazon Cognito adiciona a todas as solicitações. Ao adicionar um gatilho do Lambda de pré-geração de tokens ao grupo de usuários, é possível selecionar uma versão do gatilho. Essa versão determina se o Amazon Cognito transmite uma solicitação para a função do Lambda com parâmetros adicionais para personalização do token de acesso.

------
#### [ Version one ]

O token da versão um pode definir a associação ao grupo, perfis do IAM e novas reivindicações em tokens de ID. As substituições de associação ao grupo também se aplicam à reivindicação `cognito:groups` em tokens de acesso.

```
{
    "request": {
        "userAttributes": {"string": "string"},
        "groupConfiguration": {
                "groupsToOverride": [
                    "string",
                    "string"
                ],
                "iamRolesToOverride": [
                    "string",
                    "string"
                ],
                "preferredRole": "string"
        },
        "clientMetadata": {"string": "string"}
    },
    "response": {
        "claimsOverrideDetails": {
            "claimsToAddOrOverride": {"string": "string"},
            "claimsToSuppress": [
                "string",
                "string"
            ],
            "groupOverrideDetails": {
                "groupsToOverride": [
                    "string",
                    "string"
                ],
                "iamRolesToOverride": [
                    "string",
                    "string"
                ],
                "preferredRole": "string"
            }
        }
    }
}
```

------
#### [ Versions two and three ]

Os eventos de solicitação das versões dois e três adicionam campos que personalizam o token de acesso. Os grupos de usuários aplicam alterações dos eventos da versão três aos tokens de acesso para identidades de máquinas. Essas versões também adicionam suporte para tipos de dados `claimsToOverride` complexos no objeto de resposta. Sua função do Lambda pode retornar os seguintes tipos de dados no valor de `claimsToOverride`:
+ String
+ Número
+ Booleano
+ Conjuntos de strings, números, booleanos ou uma combinação de qualquer um desses
+ JSON

```
{
    "request": {
        "userAttributes": {
            "string": "string"
        },
        "scopes": ["string", "string"],
        "groupConfiguration": {
            "groupsToOverride": ["string", "string"],
            "iamRolesToOverride": ["string", "string"],
            "preferredRole": "string"
        },
        "clientMetadata": {
            "string": "string"
        }
    },
    "response": {
        "claimsAndScopeOverrideDetails": {
            "idTokenGeneration": {
                "claimsToAddOrOverride": {
                    "string": [accepted datatype]
                },
                "claimsToSuppress": ["string", "string"]
            },
            "accessTokenGeneration": {
                "claimsToAddOrOverride": {
                    "string": [accepted datatype]
                },
                "claimsToSuppress": ["string", "string"],
                "scopesToAdd": ["string", "string"],
                "scopesToSuppress": ["string", "string"]
            },
            "groupOverrideDetails": {
                "groupsToOverride": ["string", "string"],
                "iamRolesToOverride": ["string", "string"],
                "preferredRole": "string"
            }
        }
    }
}
```

------

### Parâmetros de solicitação antes da geração do token
<a name="cognito-user-pools-lambda-trigger-syntax-pre-token-generation-request"></a>


| Name (Nome) | Description | Versão mínima do evento de gatilho | 
| --- |--- |--- |
| userAttributes |  Os atributos do seu perfil de usuário no grupo de usuários.  | 1 | 
| groupConfiguration |  O objeto de entrada que contém a configuração atual do grupo. O objeto inclui `groupsToOverride`, `iamRolesToOverride` e `preferredRole`.  | 1 | 
| groupsToOverride |  Os [grupos de usuários](cognito-user-pools-user-groups.md#cognito-user-pools-user-groups.title) dos quais seu usuário é membro.  | 1 | 
| iamRolesToSubstituir |  Você pode associar um grupo de grupos de usuários a uma função AWS Identity and Access Management (IAM). Esse elemento é uma lista de todos os perfis do IAM dos grupos dos quais seu usuário é membro.  | 1 | 
| preferredRole |  É possível definir uma [precedência](cognito-user-pools-user-groups.md#assigning-precedence-values-to-groups.title) para grupos de usuários. Esse elemento contém o nome do perfil do IAM do grupo com a maior precedência no elemento `groupsToOverride`.  | 1 | 
| clientMetadata |  Um ou mais pares de chave-valor que você pode especificar e fornecer como entrada personalizada à função do Lambda para o acionador antes da geração do token. Para passar esses dados para sua função Lambda, use o ClientMetadata parâmetro nas operações [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)e da [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. O Amazon Cognito não inclui dados do `ClientMetadata` parâmetro [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)e operações de [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API na solicitação que ele passa para a função de pré-geração de token.  | 1 | 
| escopos |  Escopos de token de acesso. Os escopos presentes em um token de acesso são os escopos padrão e personalizados do grupo de usuários que o usuário solicitou e que você autorizou o cliente da aplicação a emitir.  | 2 | 

### Parâmetros de resposta antes da geração do token
<a name="cognito-user-pools-lambda-trigger-syntax-pre-token-generation-response"></a>


| Name (Nome) | Description | Versão mínima do evento de gatilho | 
| --- |--- |--- |
| claimsOverrideDetails | Um contêiner para todos os elementos em um evento de acionamento V1\$10. | 1 | 
| claimsAndScopeOverrideDetails |  Um contêiner para todos os elementos em um evento de acionamento `V2_0` ou `V3_0`.  | 2 | 
| idTokenGeneration |  As declarações que você deseja substituir, adicionar ou suprimir no token de ID do usuário. Esses valores de personalização do token pai para ID aparecem somente na versão 2 e posteriores do evento, mas os elementos filhos aparecem nos eventos da versão 1.  | 2 | 
| accessTokenGeneration |  As declarações e os escopos que você deseja substituir, adicionar ou suprimir no token de acesso do usuário. Esse pai dos valores de personalização do token de acesso aparece somente na versão 2 e posteriores do evento.  | 2 | 
| claimsToAddOrOverride |  Um mapa de uma ou mais declarações e os respectivos valores que você deseja adicionar ou modificar. Para declarações relacionadas a grupos, use `groupOverrideDetails`. Na versão 2 e posteriores do evento, esse elemento aparece em `accessTokenGeneration` e `idTokenGeneration`.  | 1 [*](#cognito-pretoken-complex-objects-note) | 
| claimsToSuppress |  Uma lista de declarações que o Amazon Cognito deve suprimir. Se sua função suprime e substitui um valor de solicitação, o Amazon Cognito suprime a solicitação. Na versão 2 e posteriores do evento, esse elemento aparece em `accessTokenGeneration` e `idTokenGeneration`.  | 1 | 
| groupOverrideDetails |  O objeto de saída que contém a configuração atual do grupo. O objeto inclui `groupsToOverride`, `iamRolesToOverride` e `preferredRole`. A função substitui o objeto `groupOverrideDetails` pelo objeto fornecido. Se você fornecer um objeto nulo ou vazio na resposta, o Amazon Cognito suprimirá os grupos. Para manter a mesma configuração de grupo existente, copie o valor do objeto `groupConfiguration` da solicitação no objeto `groupOverrideDetails` na resposta. Depois, transmita-o de volta para o serviço. O ID do Amazon Cognito e os tokens de acesso contêm a declaração `cognito:groups`. O objeto `groupOverrideDetails` substitui a declaração `cognito:groups` em tokens de acesso e em tokens de ID. As substituições de grupo são as únicas alterações ao token de acesso que os eventos da versão 1 podem fazer.  | 1 | 
| scopesToAdd |  Uma lista de escopos que você deseja adicionar à reivindicação `scope` no token de acesso do usuário. Não é possível adicionar valores de escopo que contenham um ou mais caracteres de espaço em branco.  | 2 | 
| scopesToSuppress |  Uma lista de escopos que você deseja remover da reivindicação `scope` no token de acesso do usuário.  | 2 | 

 \$1 Objetos de resposta aos eventos da versão um podem retornar strings. Objetos de resposta aos eventos das versões dois e três podem retornar [objetos complexos](#user-pool-lambda-pre-token-generation-event-versions).

## Exemplo da segunda versão do evento de acionamento pré-token: adicionar e suprimir declarações, escopos e grupos
<a name="aws-lambda-triggers-pre-token-generation-example-version-2-overview"></a>

Este exemplo faz as seguintes modificações nos tokens de um usuário.

1. Define `family_name` como `Doe` no token de ID.

1. Impede que as declarações `email` e `phone_number` apareçam no token de ID.

1. Define a declaração `cognito:roles` do token de ID como `"arn:aws:iam::123456789012:role\/sns_callerA","arn:aws:iam::123456789012:role\/sns_callerC","arn:aws:iam::123456789012:role\/sns_callerB"`.

1. Define a declaração `cognito:preferred_role` do token de ID como `arn:aws:iam::123456789012:role/sns_caller`.

1. Adiciona os escopos `openid`, `email` e `solar-system-data/asteroids.add` ao token de acesso.

1. Suprime o escopo `phone_number` e `aws.cognito.signin.user.admin` do token de acesso. A remoção de `phone_number` impede a recuperação do número de telefone do usuário em `userInfo`. A remoção de `aws.cognito.signin.user.admin` impede que as solicitações de API pelo usuário leiam e modifiquem seu próprio perfil com a API de grupos de usuários do Amazon Cognito.
**nota**  
A remoção de `phone_number` dos escopos só impedirá a recuperação do número de telefone de um usuário se os escopos restantes no token de acesso incluírem `openid` e pelo menos mais um escopo padrão. Para obter mais informações, consulte [Sobre escopos](cognito-user-pools-define-resource-servers.md#cognito-user-pools-define-resource-servers-about-scopes).

1. Define a declaração `cognito:groups` do token de ID e de acesso como `"new-group-A","new-group-B","new-group-C"`.

------
#### [ JavaScript ]

```
export const handler = function(event, context) {
  event.response = {
    "claimsAndScopeOverrideDetails": {
      "idTokenGeneration": {
        "claimsToAddOrOverride": {
          "family_name": "Doe"
        },
        "claimsToSuppress": [
          "email",
          "phone_number"
        ]
      },
      "accessTokenGeneration": {
        "scopesToAdd": [
          "openid",
          "email",
          "solar-system-data/asteroids.add"
        ],
        "scopesToSuppress": [
          "phone_number",
          "aws.cognito.signin.user.admin"
        ]
      },
      "groupOverrideDetails": {
        "groupsToOverride": [
          "new-group-A",
          "new-group-B",
          "new-group-C"
        ],
        "iamRolesToOverride": [
          "arn:aws:iam::123456789012:role/new_roleA",
          "arn:aws:iam::123456789012:role/new_roleB",
          "arn:aws:iam::123456789012:role/new_roleC"
        ],
        "preferredRole": "arn:aws:iam::123456789012:role/new_role",
      }
    }
  };
  // Return to Amazon Cognito
  context.done(null, event);
};
```

------

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código:

------
#### [ JSON ]

```
{
    "version": "2",
    "triggerSource": "TokenGeneration_Authentication",
    "region": "us-east-1",
    "userPoolId": "us-east-1_EXAMPLE",
    "userName": "JaneDoe",
    "callerContext": {
        "awsSdkVersion": "aws-sdk-unknown-unknown",
        "clientId": "1example23456789"
    },
    "request": {
        "userAttributes": {
            "sub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
            "cognito:user_status": "CONFIRMED",
            "email_verified": "true",
            "phone_number_verified": "true",
            "phone_number": "+12065551212",
            "family_name": "Zoe",
            "email": "Jane.Doe@example.com"
        },
        "groupConfiguration": {
            "groupsToOverride": ["group-1", "group-2", "group-3"],
            "iamRolesToOverride": ["arn:aws:iam::123456789012:role/sns_caller1", "arn:aws:iam::123456789012:role/sns_caller2", "arn:aws:iam::123456789012:role/sns_caller3"],
            "preferredRole": ["arn:aws:iam::123456789012:role/sns_caller"]
        },
        "scopes": [
            "aws.cognito.signin.user.admin", "openid", "email", "phone"
        ]
    },
    "response": {
        "claimsAndScopeOverrideDetails": []
    }
}
```

------

## Exemplo de evento de geração pré-token da versão dois: adicionar reivindicações com objetos complexos
<a name="aws-lambda-triggers-pre-token-generation-example-version-2-complex-objects"></a>

Este exemplo faz as seguintes modificações nos tokens de um usuário.

1. Adiciona reivindicações dos tipos número, string, booleano e JSON ao token de ID. Essa é a única alteração que os eventos de acionador da versão dois disponibilizam para o token de ID.

1. Adiciona reivindicações dos tipos número, string, booleano e JSON ao token de acesso.

1. Adiciona três escopos ao token de acesso.

1. Suprime a reivindicação `email` nos tokens de ID e acesso.

1. Suprime o escopo `aws.cognito.signin.user.admin` no token de acesso.

------
#### [ JavaScript ]

```
export const handler = function(event, context) {

    var scopes = ["MyAPI.read", "MyAPI.write", "MyAPI.admin"]
    var claims = {}
    claims["aud"]= event.callerContext.clientId;
    claims["booleanTest"] = false;
    claims["longTest"] = 9223372036854775807;
    claims["exponentTest"] = 1.7976931348623157E308;
    claims["ArrayTest"] = ["test", 9223372036854775807, 1.7976931348623157E308, true];
    claims["longStringTest"] = "\{\
        \"first_json_block\": \{\
            \"key_A\": \"value_A\",\
            \"key_B\": \"value_B\"\
        \},\
        \"second_json_block\": \{\
            \"key_C\": \{\
                \"subkey_D\": [\
                    \"value_D\",\
                    \"value_E\"\
                ],\
                \"subkey_F\": \"value_F\"\
            \},\
            \"key_G\": \"value_G\"\
        \}\
    \}";
    claims["jsonTest"] = {
    	"first_json_block": {
    		"key_A": "value_A",
    		"key_B": "value_B"
    	},
    	"second_json_block": {
    		"key_C": {
    			"subkey_D": [
    				"value_D",
    				"value_E"
    			],
    			"subkey_F": "value_F"
    		},
    		"key_G": "value_G"
    	}
    };
    event.response = {
        "claimsAndScopeOverrideDetails": {
            "idTokenGeneration": {
                "claimsToAddOrOverride": claims,
                "claimsToSuppress": ["email"]
            },
            "accessTokenGeneration": {
                "claimsToAddOrOverride": claims,
                "claimsToSuppress": ["email"],
                "scopesToAdd": scopes,
                "scopesToSuppress": ["aws.cognito.signin.user.admin"]
            }
        }
    };
    console.info("EVENT response\n" + JSON.stringify(event, (_, v) => typeof v === 'bigint' ? v.toString() : v, 2))
    console.info("EVENT response size\n" + JSON.stringify(event, (_, v) => typeof v === 'bigint' ? v.toString() : v).length)
    // Return to Amazon Cognito
    context.done(null, event);
};
```

------

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código:

------
#### [ JSON ]

```
{
    "version": "2",
    "triggerSource": "TokenGeneration_HostedAuth",
    "region": "us-west-2",
    "userPoolId": "us-west-2_EXAMPLE",
    "userName": "JaneDoe",
    "callerContext": {
        "awsSdkVersion": "aws-sdk-unknown-unknown",
        "clientId": "1example23456789"
    },
    "request": {
        "userAttributes": {
            "sub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
            "cognito:user_status": "CONFIRMED"
            "email_verified": "true",
            "phone_number_verified": "true",
            "phone_number": "+12065551212",
            "email": "Jane.Doe@example.com"
        },
        "groupConfiguration": {
            "groupsToOverride": ["group-1", "group-2", "group-3"],
            "iamRolesToOverride": ["arn:aws:iam::123456789012:role/sns_caller1"],
            "preferredRole": ["arn:aws:iam::123456789012:role/sns_caller1"]
        },
        "scopes": [
            "aws.cognito.signin.user.admin",
            "phone",
            "openid",
            "profile",
            "email"
        ]
    },
    "response": {
        "claimsAndScopeOverrideDetails": []
    }
}
```

------

## Exemplo da primeira versão do evento de geração pré-token: adicionar uma nova declaração e suprimir uma declaração existente
<a name="aws-lambda-triggers-pre-token-generation-version-1-add-claim"></a>

Esse exemplo usa um evento de gatilho 1 de versão com uma função do Lambda de pré-geração de tokens para adicionar uma nova declaração e suprimir uma existente.

------
#### [ Node.js ]

```
const handler = async (event) => {
  event.response = {
    claimsOverrideDetails: {
      claimsToAddOrOverride: {
        my_first_attribute: "first_value",
        my_second_attribute: "second_value",
      },
      claimsToSuppress: ["email"],
    },
  };

  return event;
};

export { handler };
```

------

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código: como o código de exemplo não processa nenhum parâmetro de solicitação, você pode usar um evento de teste com uma solicitação vazia. Para obter mais informações sobre parâmetros de solicitação comuns, consulte [Evento de acionador do Lambda do grupo de usuários](cognito-user-pools-working-with-lambda-triggers.md#cognito-user-pools-lambda-trigger-event-parameter-shared).

------
#### [ JSON ]

```
{
  "request": {},
  "response": {}
}
```

------

## Exemplo da primeira versão do evento de geração pré-token: modificar a associação do grupo do usuário
<a name="aws-lambda-triggers-pre-token-generation-version-1-change-group"></a>

Esse exemplo usa o evento de gatilho 1 de versão com uma função do Lambda de pré-geração de tokens para modificar a associação do grupo do usuário.

------
#### [ Node.js ]

```
const handler = async (event) => {
  event.response = {
    claimsOverrideDetails: {
      groupOverrideDetails: {
        groupsToOverride: ["group-A", "group-B", "group-C"],
        iamRolesToOverride: [
          "arn:aws:iam::XXXXXXXXXXXX:role/sns_callerA",
          "arn:aws:iam::XXXXXXXXX:role/sns_callerB",
          "arn:aws:iam::XXXXXXXXXX:role/sns_callerC",
        ],
        preferredRole: "arn:aws:iam::XXXXXXXXXXX:role/sns_caller",
      },
    },
  };

  return event;
};

export { handler };
```

------

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código:

------
#### [ JSON ]

```
{
  "request": {},
  "response": {}
}
```

------

# Migrar o acionador do Lambda do usuário
<a name="user-pool-lambda-migrate-user"></a>

Quando um usuário não existir no grupo de usuários no momento de login com senha, ou no fluxo de senha esquecida, o Amazon Cognito invocará esse acionador. Depois que a função Lambda retornar com êxito, o Amazon Cognito criará o usuário no grupo de usuários. Para obter detalhes sobre o fluxo de autenticação com o acionador do Lambda de migração de usuários, consulte [Como importar usuários com um acionador do Lambda de migração de usuários](cognito-user-pools-import-using-lambda.md).

Para migrar os usuários de seu diretório de usuários existente para grupos de usuários do Amazon Cognito no momento do login ou durante o fluxo de senha esquecida, siga esse acionador do Lambda.

**Topics**
+ [

## Fontes do acionador do Lambda de migrar usuário
](#user-pool-lambda-migrate-user-trigger-source)
+ [

## Parâmetros do acionador do Lambda de migrar usuário
](#cognito-user-pools-lambda-trigger-syntax-user-migration)
+ [

## Exemplo: migrar um usuário com uma senha existente
](#aws-lambda-triggers-user-migration-example-1)

## Fontes do acionador do Lambda de migrar usuário
<a name="user-pool-lambda-migrate-user-trigger-source"></a>


| Valor de triggerSource | Event | 
| --- | --- | 
| UserMigration\$1Authentication[1](#cognito-migrate-user-passwordless-note) | Migração de usuários no login. | 
| UserMigration\$1ForgotPassword | Migração de usuários durante o fluxo de esquecimento de senha. | 

1 O Amazon Cognito não invoca esse acionador quando os usuários autenticam com [login sem senha](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless).

## Parâmetros do acionador do Lambda de migrar usuário
<a name="cognito-user-pools-lambda-trigger-syntax-user-migration"></a>

A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos [parâmetros comuns](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que o Amazon Cognito adiciona a todas as solicitações.

------
#### [ JSON ]

```
{
    "userName": "string",
    "request": {
        "password": "string",
        "validationData": {
            "string": "string",
            . . .
        },
        "clientMetadata": {
            "string": "string",
      	. . .
        }
    },
    "response": {
        "userAttributes": {
            "string": "string",
            . . .
        },
        "finalUserStatus": "string",
        "messageAction": "string",
        "desiredDeliveryMediums": [ "string", . . .],
        "forceAliasCreation": boolean,
        "enableSMSMFA": boolean
    }
}
```

------

### Parâmetros de solicitação de migrar usuário
<a name="cognito-user-pools-lambda-trigger-syntax-user-migration-request"></a>

**userName**  
O nome de usuário que o usuário insere no login.

**password**  
A senha que o usuário insere no login. O Amazon Cognito não envia esse valor em uma solicitação iniciada por um fluxo de senha esquecida.

**validationData**  
Um ou mais pares de chave-valor que contêm os dados de validação na solicitação de login do usuário. Para passar esses dados para sua função Lambda, você pode usar o ClientMetadata parâmetro nas ações [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)e da [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)API.

**clientMetadata**  
Um ou mais pares de chave-valor que você pode fornecer como entrada personalizada à função do Lambda para o acionador de migração do usuário. Para passar esses dados para sua função Lambda, você pode usar o ClientMetadata parâmetro nas ações [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)e da [ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html)API.

### Parâmetros de resposta de migrar usuário
<a name="cognito-user-pools-lambda-trigger-syntax-user-migration-response"></a>

**userAttributes**  
Este campo é obrigatório.   
Esse campo deve conter um ou mais pares de nome-valor que o Amazon Cognito armazena no perfil de usuário no grupo de usuários e usa como atributos de usuário. Você pode incluir atributos de usuário padrão e personalizados. Os atributos personalizados exigem o prefixo `custom:` para diferenciá-los dos atributos padrão. Para obter mais informações, consulte [Atributos personalizados](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html#user-pool-settings-custom-attributes.html).  
Para redefinir uma senha no fluxo de senha esquecida, o usuário deverá ter um e-mail verificado ou um número de telefone verificado. O Amazon Cognito envia uma mensagem contendo um código de redefinição de senha para o e-mail ou o número de telefone nos atributos do usuário.     
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/user-pool-lambda-migrate-user.html)

**finalUserStatus**  
Você pode definir esse parâmetro como `CONFIRMED` para confirmar automaticamente seus usuários para que eles possam fazer login com a senha anterior. Quando você define um usuário como `CONFIRMED`, ele não precisa fazer nada além para fazer login. Se você não definir esse atributo como `CONFIRMED`, ele será definido como `RESET_REQUIRED`.  
Um `finalUserStatus` do `RESET_REQUIRED` significa que o usuário deve alterar a senha imediatamente após a migração no login, e sua aplicação cliente deve processar o `PasswordResetRequiredException` durante o fluxo de autenticação.  
O Amazon Cognito não impõe a política de intensidade de senha que você configurou para o grupo de usuários durante a migração usando o acionador do Lambda. Se a senha não atender à respectiva política que você configurou, o Amazon Cognito ainda assim a aceitará para que ela possa continuar a migrar o usuário. Para impor a política de intensidade da senha e rejeitar senhas que não atendam à política, valide a intensidade da senha no seu código. Em seguida, se a senha não atender à política, finalUserStatus defina como`RESET_REQUIRED`.

**messageAction**  
Você pode definir esse parâmetro como `SUPPRESS` para se recusar a enviar a mensagem de boas-vindas que o Amazon Cognito geralmente envia Amazon novos usuários. Se sua função não retornar esse parâmetro, o Amazon Cognito enviará a mensagem de boas-vindas.

**desiredDeliveryMediums**  
Esse parâmetro pode ser definido como `EMAIL` para enviar a mensagem de boas-vindas por e-mail ou como `SMS` para enviar a mensagem de boas-vindas por SMS. Se sua função não retornar esse parâmetro, o Amazon Cognito enviará a mensagem de boas-vindas por SMS.

**forceAliasCreation**  
Se você definir esse parâmetro como `TRUE` e o número de telefone ou endereço de e-mail no UserAttributes parâmetro já existir como um alias com um usuário diferente, a chamada da API migrará o alias do usuário anterior para o usuário recém-criado. O usuário anterior não pode mais fazer login usando esse alias.  
Se você definir esse parâmetro como `FALSE` e o alias existir, o Amazon Cognito não migrará o usuário e retornará um erro para a aplicação cliente.  
Se você não retornar esse parâmetro, o Amazon Cognito assumirá que seu valor é “false”.

**enableSMSMFA**  
Defina esse parâmetro como `true` para exigir que o usuário migrado conclua a autenticação multifator (MFA) por mensagem de texto SMS para fazer login. Seu grupo de usuários deve ter a MFA habilitada. Os atributos do usuário nos parâmetros da solicitação devem incluir um número de telefone; do contrário, a migração desse usuário falhará.

## Exemplo: migrar um usuário com uma senha existente
<a name="aws-lambda-triggers-user-migration-example-1"></a>

Esse exemplo de função Lambda migra o usuário com uma senha existente e suprime a mensagem de boas-vindas do Amazon Cognito.

------
#### [ Node.js ]

```
exports.handler = (event, context, callback) => {
  var user;

  if (event.triggerSource == "UserMigration_Authentication") {
    // authenticate the user with your existing user directory service
    user = authenticateUser(event.userName, event.request.password);
    if (user) {
      event.response.userAttributes = {
        email: user.emailAddress,
        email_verified: "true",
      };
      event.response.finalUserStatus = "CONFIRMED";
      event.response.messageAction = "SUPPRESS";
      context.succeed(event);
    } else {
      // Return error to Amazon Cognito
      callback("Bad password");
    }
  } else if (event.triggerSource == "UserMigration_ForgotPassword") {
    // Lookup the user in your existing user directory service
    user = lookupUser(event.userName);
    if (user) {
      event.response.userAttributes = {
        email: user.emailAddress,
        // required to enable password-reset code to be sent to user
        email_verified: "true",
      };
      event.response.messageAction = "SUPPRESS";
      context.succeed(event);
    } else {
      // Return error to Amazon Cognito
      callback("Bad password");
    }
  } else {
    // Return error to Amazon Cognito
    callback("Bad triggerSource " + event.triggerSource);
  }
};
```

------

# Acionador do Lambda de mensagem personalizada
<a name="user-pool-lambda-custom-message"></a>

Quando você tiver um padrão externo para as mensagens de e-mail e SMS que deseja enviar aos seus usuários, ou quando quiser aplicar sua própria lógica em tempo de execução à formatação das mensagens do usuário, adicione um acionador de mensagem personalizada ao grupo de usuários. A mensagem personalizada do Lambda recebe o conteúdo de todas as mensagens de e-mail e SMS antes que seu grupo de usuários as envie. Sua função do Lambda então tem a oportunidade de modificar o conteúdo e o assunto da mensagem.

O Amazon Cognito invoca esse acionador antes de enviar um e-mail, uma mensagem de verificação de telefone ou um código de autenticação multifator (MFA). Você pode personalizar a mensagem dinamicamente com o acionador de mensagem personalizado.

A solicitação inclui `codeParameter`. Essa string funciona como espaço reservado no código que o Amazon Cognito fornece ao usuário. Insira a string `codeParameter` no corpo da mensagem, na posição em que você deseja que o código de verificação apareça. Quando o Amazon Cognito recebe essa resposta, ele substitui a string `codeParameter` pelo código de verificação real. 

**nota**  
O evento de entrada de uma função do Lambda de mensagem personalizada com o acionador `CustomMessage_AdminCreateUser` retorna um nome de usuário e um código de verificação. Como um usuário criado pelo administrador deve receber tanto o nome de usuário quanto o código, a resposta da função deve incluir ambos variáveis de espaços reservados para o nome de usuário e o código. Os espaços reservados para sua mensagem são os valores de `request.usernameParameter` e `request.codeParameter`. Esses valores são normalmente `{username}` e `{####}`. Como prática recomendada, referenciam os valores de entrada em vez de codificar rigidamente os nomes das variáveis.

**Topics**
+ [

## Fontes do acionador do Lambda de mensagem personalizada
](#cognito-user-pools-lambda-trigger-syntax-custom-message-trigger-source)
+ [

## Parâmetros do acionador do Lambda de mensagem personalizada
](#cognito-user-pools-lambda-trigger-syntax-custom-message)
+ [

## Exemplo de mensagem personalizada de cadastro
](#aws-lambda-triggers-custom-message-example)
+ [

## Exemplo de mensagem personalizada para criação de usuário pelo administrador
](#aws-lambda-triggers-custom-message-admin-example)

## Fontes do acionador do Lambda de mensagem personalizada
<a name="cognito-user-pools-lambda-trigger-syntax-custom-message-trigger-source"></a>


| Valor de triggerSource | Event | 
| --- | --- | 
| CustomMessage\$1SignUp | Custom message – Para enviar o código de confirmação após cadastro. | 
| CustomMessage\$1AdminCreateUser | Custom message – Para enviar a senha temporária a um novo usuário. | 
| CustomMessage\$1ResendCode | Custom message – Para reenviar o código de confirmação a um usuário existente. | 
| CustomMessage\$1ForgotPassword | Custom message – Para enviar o código de confirmação da solicitação de esquecimento de senha. | 
| CustomMessage\$1UpdateUserAttribute | Custom message – Quando um e-mail ou número de telefone de um usuário for alterado, esse trigger enviará um código de verificação automaticamente ao usuário. Não pode ser usado para outros atributos. | 
| CustomMessage\$1VerifyUserAttribute | Mensagem personalizada – Este trigger envia um código de verificação ao usuário quando solicitado manualmente para um novo e-mail ou número de telefone. | 
| CustomMessage\$1Authentication | Custom message – Para enviar o código MFA durante a autenticação. | 

## Parâmetros do acionador do Lambda de mensagem personalizada
<a name="cognito-user-pools-lambda-trigger-syntax-custom-message"></a>

A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos [parâmetros comuns](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que o Amazon Cognito adiciona a todas as solicitações.

------
#### [ JSON ]

```
{
    "request": {
        "userAttributes": {
            "string": "string",
            . . .
        }
        "codeParameter": "####",
        "usernameParameter": "string",
        "clientMetadata": {
            "string": "string",
            . . .
        }
    },
    "response": {
        "smsMessage": "string",
        "emailMessage": "string",
        "emailSubject": "string"
    }
}
```

------

### Parâmetros de solicitação de mensagem personalizada
<a name="cognito-user-pools-lambda-trigger-syntax-custom-message-request"></a>

**userAttributes**  
Um ou mais pares de nome-valor que representam atributos de usuário.

**codeParameter**  
Uma string a ser usada como espaço reservado do código de verificação na mensagem personalizada.

**usernameParameter**  
O nome do usuário. O Amazon Cognito inclui esse parâmetro em solicitações geradas por usuários criados pelo administrador.

**clientMetadata**  
Um ou mais pares de chave-valor que você pode fornecer como entrada personalizada para a função Lambda especificada para o acionador de mensagem personalizada. A solicitação que invoca uma função de mensagem personalizada não inclui dados transmitidos no ClientMetadata parâmetro [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)e operações de [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API. Para passar esses dados para sua função Lambda, você pode usar o ClientMetadata parâmetro nas seguintes ações de API:  
+  [AdminResetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminResetUserPassword.html) 
+  [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html) 
+  [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html)
+  [ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html)
+  [GetUserAttributeVerificationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html)
+  [ResendConfirmationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html)
+  [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)
+  [UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html)

### Parâmetros de resposta de mensagem personalizada
<a name="cognito-user-pools-lambda-trigger-syntax-custom-message-response"></a>

Na resposta, especifique o texto personalizado a ser usado em mensagens para seus usuários. Para as restrições de string que o Amazon Cognito aplica a esses parâmetros, consulte. [MessageTemplateType](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_MessageTemplateType.html)

**smsMessage**  
A mensagem SMS personalizada a ser enviada a seus usuários. Deve incluir o valor de `codeParameter` recebido na solicitação.

**emailMessage**  
A mensagem de e-mail personalizada a ser enviada a seus usuários. Você pode usar a formatação HTML no parâmetro `emailMessage`. Deve incluir o valor de `codeParameter` recebido na solicitação como a variável `{####}`. O Amazon Cognito pode usar o parâmetro `emailMessage` somente se o atributo `EmailSendingAccount` do grupo de usuários for `DEVELOPER`. Se o atributo `EmailSendingAccount` do grupo de usuários não for `DEVELOPER` e um parâmetro `emailMessage` for retornado, o Amazon Cognito vai gerar um código de erro 400 `com.amazonaws.cognito.identity.idp.model.InvalidLambdaResponseException`. Ao escolher o Amazon Simple Email Service (Amazon SES) para enviar mensagens de e-mail, o atributo `EmailSendingAccount` de um grupo de usuários é `DEVELOPER`. Do contrário, o valor será `COGNITO_DEFAULT`.

**emailSubject**  
A linha de assunto da mensagem personalizada. Você só pode usar o `emailSubject` parâmetro se o EmailSendingAccount atributo do grupo de usuários for`DEVELOPER`. Se o atributo `EmailSendingAccount` do grupo de usuários não for `DEVELOPER` e o Amazon Cognito retornar um parâmetro `emailSubject`, o Amazon Cognito vai gerar um código de erro 400 `com.amazonaws.cognito.identity.idp.model.InvalidLambdaResponseException`. O atributo `EmailSendingAccount` de um grupo de usuários é `DEVELOPER` ao escolher o Amazon Simple Email Service (Amazon SES) para enviar mensagens de e-mail. Do contrário, o valor será `COGNITO_DEFAULT`.

## Exemplo de mensagem personalizada de cadastro
<a name="aws-lambda-triggers-custom-message-example"></a>

Esse exemplo de função do Lambda personaliza um e-mail ou mensagem SMS quando o serviço requer que uma aplicação envie um código de verificação ao usuário.

O Amazon Cognito pode invocar um acionador do Lambda em vários eventos: no pós-registro, ao reenviar um código de verificação, ao recuperar uma senha esquecida ou ao verificar um atributo de usuário. A resposta inclui mensagens para SMS e e-mail. A mensagem deve incluir o parâmetro de código `"####"`. Esse parâmetro é o espaço reservado do código de verificação que o usuário recebe.

A mensagem de e-mail tem um comprimento máximo de 20 mil caracteres UTF-8. Esse tamanho inclui o código de verificação. Você pode usar etiquetas HTML nessas mensagens de e-mail.

A mensagem SMS tem um comprimento máximo de 140 caracteres UTF-8. Esse tamanho inclui o código de verificação.

------
#### [ Node.js ]

```
const handler = async (event) => {
  if (event.triggerSource === "CustomMessage_SignUp") {
    const message = `Thank you for signing up. Your confirmation code is ${event.request.codeParameter}.`;
    event.response.smsMessage = message;
    event.response.emailMessage = message;
    event.response.emailSubject = "Welcome to the service.";
  }
  return event;
};

export { handler };
```

------

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código:

------
#### [ JSON ]

```
{
	"version": "1",
	"region": "us-west-2",
	"userPoolId": "us-west-2_EXAMPLE",
	"userName": "test-user",
	"callerContext": {
		"awsSdkVersion": "aws-sdk-unknown-unknown",
		"clientId": "1example23456789"
	},
	"triggerSource": "CustomMessage_SignUp",
	"request": {
		"userAttributes": {
			"sub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
			"cognito:user_status": "CONFIRMED",
			"email_verified": "true",
			"phone_number_verified": "true",
			"phone_number": "+12065551212",
			"email": "test-user@example.com"
		},
		"codeParameter": "{####}",
		"linkParameter": "{##Click Here##}",
		"usernameParameter": "None"
	},
	"response": {
		"smsMessage": "None",
		"emailMessage": "None",
		"emailSubject": "None"
	}
}
```

------

## Exemplo de mensagem personalizada para criação de usuário pelo administrador
<a name="aws-lambda-triggers-custom-message-admin-example"></a>

A solicitação que o Amazon Cognito enviou para este exemplo de mensagem personalizada da função do Lambda tem um valor `triggerSource` e um nome de usuário `CustomMessage_AdminCreateUser` com uma senha temporária. A função é preenchida com `${event.request.codeParameter}` a partir da senha temporária na solicitação e com `${event.request.usernameParameter}` a partir do nome de usuário na solicitação.

Suas mensagens personalizadas devem inserir os valores de `codeParameter` e `usernameParameter` dentro `smsMessage` e `emailMessage` no objeto de resposta. Neste exemplo, a função grava a mesma mensagem nos campos de resposta `event.response.smsMessage` e `event.response.emailMessage`.

A mensagem de e-mail tem um comprimento máximo de 20 mil caracteres UTF-8. Esse tamanho inclui o código de verificação. Você pode usar etiquetas HTML nesses e-mails. A mensagem SMS tem um comprimento máximo de 140 caracteres UTF-8. Esse tamanho inclui o código de verificação.

A resposta inclui mensagens para SMS e e-mail. 

------
#### [ Node.js ]

```
const handler = async (event) => {
  if (event.triggerSource === "CustomMessage_AdminCreateUser") {
    const message = `Welcome to the service. Your user name is ${event.request.usernameParameter}. Your temporary password is ${event.request.codeParameter}`;
    event.response.smsMessage = message;
    event.response.emailMessage = message;
    event.response.emailSubject = "Welcome to the service";
  }
  return event;
};

export { handler };
```

------

O Amazon Cognito transmite informações de evento para a função do Lambda. A função retorna o mesmo objeto de evento para o Amazon Cognito, com as alterações na resposta. No console do Lambda, você pode configurar um evento de teste com dados relevantes para o acionador do Lambda. A seguir, é mostrado um evento de teste para esse exemplo de código:

------
#### [ JSON ]

```
{
  "version": 1,
  "triggerSource": "CustomMessage_AdminCreateUser",
  "region": "<region>",
  "userPoolId": "<userPoolId>",
  "userName": "<userName>",
  "callerContext": {
      "awsSdk": "<calling aws sdk with version>",
      "clientId": "<apps client id>",
      ...
  },
  "request": {
      "userAttributes": {
          "phone_number_verified": false,
          "email_verified": true,
           ...
      },
      "codeParameter": "####",
      "usernameParameter": "username"
  },
  "response": {
      "smsMessage": "<custom message to be sent in the message with code parameter and username parameter>"
      "emailMessage": "<custom message to be sent in the message with code parameter and username parameter>"
      "emailSubject": "<custom email subject>"
  }
}
```

------

# Acionadores do Lambda remetente personalizado
<a name="user-pool-lambda-custom-sender-triggers"></a>

Os acionadores do Lambda `CustomEmailSender` e `CustomSMSSender` permitem notificações por e-mail e SMS de terceiros em grupos de usuários. Você pode escolher provedores de SMS e e-mail para enviar notificações aos usuários de dentro do código de sua função do Lambda. Quando o Amazon Cognito envia convites, códigos de MFA, códigos de confirmação, códigos de verificação e senhas temporárias aos usuários, os eventos ativam suas funções configuradas do Lambda. O Amazon Cognito envia o código e senhas temporárias (segredos) para suas funções ativadas do Lambda. O Amazon Cognito criptografa esses segredos com uma chave gerenciada pelo AWS KMS cliente e o. AWS Encryption SDK AWS Encryption SDK É uma biblioteca de criptografia do lado do cliente que ajuda você a criptografar e descriptografar dados genéricos.

**[CustomEmailSender](user-pool-lambda-custom-email-sender.md)**  
O Amazon Cognito invoca esse acionador para enviar notificações por e-mail aos usuários. 

**[PersonalizadoSMSSender](user-pool-lambda-custom-sms-sender.md)**  
O Amazon Cognito invoca esse acionador para enviar notificações SMS aos usuários.

## Conceitos de criptografia
<a name="user-pool-lambda-custom-sender-triggers-resources"></a>

O Amazon Cognito não envia códigos de usuários em texto simples nos eventos que envia para acionadores personalizados do remetente. As funções do Lambda devem descriptografar códigos nos eventos. Os conceitos a seguir são a arquitetura de criptografia que sua função deve usar para obter códigos que possam ser entregues aos usuários.

**AWS KMS**  
AWS KMS é um serviço gerenciado para criar e controlar AWS KMS chaves. Essas chaves criptografam seus dados. Para obter mais informações, consulte [O que é o AWS Key Management Service?](/kms/latest/developerguide/overview.html).

**Chave KMS**  
Uma chave do KMS é uma representação lógica de uma chave criptográfica. A chave do KMS inclui metadados, como o ID da chave, a data de criação, a descrição e o estado da chave. A chave do KMS também contém o material de chave usado para criptografar e descriptografar dados. Para obter mais informações, consulte, [Chaves do AWS KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms_keys).

**Chaves simétricas do KMS**  
Uma chave simétrica do KMS é uma chave de criptografia de 256 bits que não sai do AWS KMS sem ser criptografada. Para usar uma chave KMS simétrica, você deve ligar. AWS KMS O Amazon Cognito usa chaves simétricas. A mesma chave criptografa e descriptografa. Para obter mais informações, consulte [Chaves simétricas do KMS](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks). 

## O que é importante saber sobre acionadores do Lambda de remetente personalizado
<a name="user-pool-lambda-custom-sender-triggers-things-to-know"></a>
+ Para configurar seus grupos de usuários para usar esses acionadores do Lambda, é possível usar a AWS CLI ou o SDK. Essas configurações não estão disponíveis no console do Amazon Cognito.

  A operação `UpdateUserPool` define a configuração do Lambda. As solicitações para essa operação exige todos os parâmetros do grupo de usuários *e* os parâmetros que você deseja modificar. Se você não fornecer todos os parâmetros relevantes, o Amazon Cognito assumirá os valores padrão para todos os parâmetros ausentes. Conforme demonstrado no exemplo de AWS CLI a seguir, inclua entradas para todas as funções do Lambda que você deseja adicionar ou manter em seu grupo de usuários. Para obter mais informações, consulte [Como atualizar a configuração do grupo de usuários e do cliente da aplicação](cognito-user-pool-updating.md).

  ```
      #Send this parameter in an 'aws cognito-idp update-user-pool' CLI command, including any existing 
      #user pool configurations. This snippet also includes a pre sign-up trigger for syntax reference. The pre sign-up trigger
      #doesn't have a role in custom sender triggers.
                
        --lambda-config "PreSignUp=lambda-arn, \
                         CustomSMSSender={LambdaVersion=V1_0,LambdaArn=lambda-arn}, \
                         CustomEmailSender={LambdaVersion=V1_0,LambdaArn=lambda-arn}, \
                         KMSKeyID=key-id"
  ```

  Para solicitações que usam o corpo JSON do `UpdateUserPool`, o trecho `LambdaConfig` a seguir atribui funções personalizadas de remetente de SMS e e-mail.

  ```
  "LambdaConfig": {
     "KMSKeyID": "arn:aws:kms:us-east-1:111122223333:key/a6c4f8e2-0c45-47db-925f-87854bc9e357",
     "CustomEmailSender": {
        "LambdaArn": "arn:aws:lambda:us-east-1:111122223333:function:MyFunction",
        "LambdaVersion": "V1_0"
     },
     "CustomSMSSender": {
        "LambdaArn": "arn:aws:lambda:us-east-1:111122223333:function:MyFunction",
        "LambdaVersion": "V1_0"
     }
  ```
+ Para remover um gatilho Lambda personalizado do remetente com `update-user-pool` AWS CLI um comando, omita `CustomSMSSender` o parâmetro `CustomEmailSender` `--lambda-config` or e inclua todos os outros gatilhos que você deseja usar com seu grupo de usuários.

  Para remover um acionador do Lambda de remetente personalizado com uma solicitação da API `UpdateUserPool`, omita o parâmetro `CustomSMSSender` ou `CustomEmailSender` do corpo da solicitação que contém o restante da configuração do grupo de usuários.
+ O Amazon Cognito faz escapes de caracteres reservados de HTML `<` (`&lt;`) e `>` (`&gt;`) na senha temporária do usuário. Esses caracteres podem aparecer em senhas temporárias que o Amazon Cognito envia para à função personalizada de remetente de e-mail, mas não aparecem nos códigos de verificação temporários. Para enviar senhas temporárias, a função do Lambda deve liberar esses caracteres depois de decifrar a senha e antes de enviar a mensagem ao usuário.

## Ativar acionadores do Lambda de remetente personalizado
<a name="enable-custom-sender-lambda-trigger"></a>

Para usar lógica personalizada para enviar mensagens de SMS ou e-mail ao grupo de usuários, configure acionadores de remetente personalizado. O procedimento a seguir atribui um acionador de SMS personalizado, um acionador de e-mail personalizado ou ambos ao seu grupo de usuários. Depois de adicionar o acionador de remetente de SMS personalizado, o Amazon Cognito sempre envia atributos do usuário, incluindo o número de telefone e o código único para a função do Lambda, em vez do comportamento padrão que envia uma mensagem SMS ou de e-mail.

1. Crie uma [chave de criptografia simétrica](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#symmetric-cmks) em AWS Key Management Service (AWS KMS). O Amazon Cognito gera segredos (senhas temporárias, códigos de verificação, senhas de autenticação de uso único e códigos de autorização) e usa essa chave do KMS para criptografá-los com [AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html). Em seguida, você pode usar o AWS Encryption SDK em sua função Lambda para descriptografar os segredos e enviá-los ao usuário em texto simples.

1. A entidade principal do IAM que cria ou atualiza seu grupo de usuários cria uma concessão única com base na chave KMS que o Amazon Cognito usa para criptografar o código. Conceda essas permissões `CreateGrant` da entidade principal à sua chave KMS. Para que esse exemplo de política de chaves do KMS seja efetivo, o administrador que atualiza o grupo de usuários deve estar conectado com uma sessão de perfil assumido para o perfil do IAM `arn:aws:iam::111222333444:role/my-example-administrator-role`. 

   Aplique a política baseada em recursos a seguir, modificada para seu ambiente, à chave do KMS.

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
       {
           "Effect": "Allow",
           "Principal": {
               "AWS": "arn:aws:iam::111122223333:role/my-example-administrator-role"
           },
           "Action": "kms:CreateGrant",
           "Resource": "arn:aws:kms:us-west-2:111122223333:key/1example-2222-3333-4444-999example",
           "Condition": {
               "StringEquals": {
                  "kms:EncryptionContext:userpool-id": "us-west-2_EXAMPLE"
               }
           }
       },
       {
           "Sid": "Allow Lambda to decrypt",
           "Effect": "Allow",
           "Principal": {
               "AWS": "arn:aws:iam::111122223333:role/my-lambda-function-role"
           },
           "Action": "kms:Decrypt",
           "Resource": "*"
       }]
   }
   ```

------

1. Crie uma função do Lambda para o acionador de remetente personalizado. O Amazon Cognito usa o [SDK de criptografia da AWS](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/introduction.html) para criptografar os segredos, as senhas temporárias e os códigos que autorizam as solicitações de API dos usuários.

   1. Atribua um [perfil de execução do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) que tenha, no mínimo, as permissões `kms:Decrypt` para a chave do KMS.

   1. Componha o código da função do Lambda para enviar as mensagens. O evento de entrada para sua função contém um segredo. Em sua função, decifre o segredo com o AWS Encryption SDK e processe todos os metadados relevantes. Depois, envie o código, sua própria mensagem personalizada e o número de telefone de destino para a API personalizada que entrega a mensagem.

   1. Adicione o AWS Encryption SDK à sua função Lambda. Para ter mais informações, consulte [Linguagens de programação do AWS  Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/programming-languages.html). Para atualizar o pacote do Lambda, conclua as etapas a seguir.

      1. Exporte a função do Lambda como um arquivo .zip no Console de gerenciamento da AWS.

      1. Abra sua função e adicione AWS Encryption SDK o. Para ter mais informações e links de download, consulte [Linguagens de programação do AWS Encryption SDK](https://docs.aws.amazon.com/encryption-sdk/latest/developer-guide/programming-languages.html) no *Guia do desenvolvedor do AWS Encryption SDK *.

      1. Compacte a função com as dependências do SDK e faça upload da função para o Lambda. Para obter mais informações, consulte [Implantar funções do Lambda como arquivos .zip](https://docs.aws.amazon.com/lambda/latest/dg/configuration-function-zip.html#configuration-function-create) no *Guia do desenvolvedor do AWS Lambda *.

1. Conceda à entidade principal `cognito-idp.amazonaws.com` do serviço do Amazon Cognito acesso para invocar a função do Lambda.

   O AWS CLI comando a seguir concede ao Amazon Cognito permissão para invocar sua função Lambda:

   ```
   aws lambda add-permission --function-name lambda_arn --statement-id "CognitoLambdaInvokeAccess" --action lambda:InvokeFunction --principal cognito-idp.amazonaws.com
   ```

1. Gere uma solicitação de [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API com um `LambdaConfig` parâmetro que adiciona gatilhos Lambda personalizados do remetente. Não é possível adicionar acionadores desse tipo no console do Amazon Cognito. Os acionadores de remetente personalizado exigem parâmetros `LambdaConfig` de `KMSKeyID` e `CustomSMSSender` ou `CustomEmailSender` (ou ambos).

# Acionador do Lambda de remetente de e-mail personalizado
<a name="user-pool-lambda-custom-email-sender"></a>

Quando você atribui um acionador de remetente de e-mail personalizado ao grupo de usuários, o Amazon Cognito invoca uma função do Lambda em vez do comportamento padrão quando um evento do usuário exige que ele envie uma mensagem de e-mail. Com um gatilho de remetente personalizado, sua AWS Lambda função pode enviar notificações por e-mail para seus usuários por meio de um método e provedor de sua escolha. O código personalizado da função deve processar e entregar todas as mensagens de e-mail do grupo de usuários.

Esse acionador serve para cenários em que talvez você queira ter mais controle sobre como seu grupo de usuários envia mensagens de e-mail. Sua função do Lambda pode personalizar a chamada para as operações da API do Amazon SES, por exemplo, quando você deseja gerenciar várias identidades verificadas ou Regiões da AWS cruzadas. Sua função também pode redirecionar mensagens para outro meio de entrega ou serviço de terceiros.

Para saber mais sobre como configurar um acionador de remetente de e-mail personalizado, consulte [Ativar acionadores do Lambda de remetente personalizado](user-pool-lambda-custom-sender-triggers.md#enable-custom-sender-lambda-trigger).

## Fontes do acionador do Lambda de remetente de e-mail personalizado
<a name="trigger-source"></a>

A tabela a seguir mostra o evento de acionamento de fontes de acionadores de e-mail personalizado no código do Lambda.


| `TriggerSource value` | Event | 
| --- | --- | 
| CustomEmailSender\$1SignUp | Um usuário se cadastra e o Amazon Cognito envia uma mensagem de boas-vindas. | 
| CustomEmailSender\$1Authentication | Um usuário faz login e o Amazon Cognito envia um código OTP ou MFA do e-mail. | 
| CustomEmailSender\$1ForgotPassword | Um usuário solicita um código para redefinir a senha. | 
| CustomEmailSender\$1ResendCode | Um usuário solicita um código de confirmação da conta de substituição. | 
| CustomEmailSender\$1UpdateUserAttribute | Um usuário atualiza um endereço de e-mail ou um atributo de número de telefone e o Amazon Cognito envia um código para verificar o atributo. | 
| CustomEmailSender\$1VerifyUserAttribute | Um usuário cria um endereço de e-mail ou um atributo de número de telefone e o Amazon Cognito envia um código para verificar o atributo. | 
| CustomEmailSender\$1AdminCreateUser | Você cria um usuário em seu grupo de usuários e o Amazon Cognito envia uma senha temporária. | 
| CustomEmailSender\$1AccountTakeOverNotification | O Amazon Cognito detecta uma tentativa de tomada de controle de uma conta de usuário e envia uma notificação ao usuário. | 

## Parâmetros do acionador do Lambda de remetente personalizado de e-mail
<a name="custom-email-sender-parameters"></a>

A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos [parâmetros comuns](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que o Amazon Cognito adiciona a todas as solicitações.

------
#### [ JSON ]

```
{
    "request": {
        "type": "customEmailSenderRequestV1",
        "code": "string",
        "clientMetadata": {
            "string": "string",
             . . .
            },
        "userAttributes": {
            "string": "string",
            . . .
         }
}
```

------

### Parâmetros de solicitação do remetente personalizado de e-mail
<a name="custom-email-sender-request-parameters"></a>

**type**  
A versão da solicitação. Para um evento de remetente personalizado de e-mail, o valor dessa string é sempre `customEmailSenderRequestV1`.

**código**  
O código criptografado que sua função pode descriptografar e enviar ao usuário.

**clientMetadata**  
Um ou mais pares de chave-valor que você pode fornecer como entrada personalizada à função do Lambda para o acionador de migração do usuário. Para passar esses dados para sua função Lambda, você pode usar o ClientMetadata parâmetro nas ações [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)e da [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. O Amazon Cognito não inclui dados do ClientMetadata parâmetro [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)e operações de [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API na solicitação que ele passa para a função de pós-autenticação.  
O Amazon Cognito envia `ClientMetadata` para funções personalizadas de acionador de e-mail personalizado em eventos com as seguintes fontes de acionador:  
+ `CustomEmailSender_ForgotPassword`
+ `CustomEmailSender_SignUp`
+ `CustomEmailSender_Authentication`
O Amazon Cognito não envia `ClientMetadata` em eventos de acionador com `CustomEmailSender_AccountTakeOverNotification` de origem.

**userAttributes**  
Um ou mais pares de chave-valor que representam atributos de usuário.

### Parâmetros de resposta do remetente personalizado de e-mail
<a name="custom-email-sender-response-parameters"></a>

O Amazon Cognito não espera nenhuma outra informação de retorno na resposta do remetente personalizado de e-mail. Sua função do Lambda deve interpretar o evento, descriptografar o código e, em seguida, entregar o conteúdo da mensagem. Uma função típica reúne uma mensagem de e-mail e a direciona para um retransmissor SMTP de terceiros.

## Exemplo de código
<a name="custom-email-sender-code-examples"></a>

O exemplo de Node.js a seguir processa um evento de mensagem de e-mail na função do Lambda de remetente personalizado de e-mail. Esse exemplo pressupõe que a função tenha duas variáveis de ambiente definidas.

**`KEY_ID`**  
O ID da chave do KMS que você deseja usar para criptografar e descriptografar os códigos dos usuários.

**`KEY_ARN`**  
O nome do recurso da Amazon (ARN) da chave do KMS que você deseja usar para criptografar e descriptografar os códigos dos usuários.

**Como implantar essa função**

1. Instale a versão mais recente do NodeJS na área de trabalho do desenvolvedor.

1. Crie um novo projeto NodeJS em seu espaço de trabalho.

1. Inicialize o projeto com `npm init -y`.

1. Crie o script da função do Lambda: `touch index.mjs`.

1. Cole o conteúdo do exemplo abaixo em `index.mjs`.

1. Baixe a dependência do projeto, AWS Encryption SDK:`npm install @aws-crypto/client-node`.

1. Compacte o diretório de projeto em um arquivo: `zip -r my_deployment_package.zip .`.

1. [Implante o arquivo ZIP à função](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-package.html).

Essa função de exemplo descriptografa o código e, para eventos de inscrição, simula o envio de uma mensagem de e-mail para o endereço de e-mail do usuário.

```
import { KmsKeyringNode, buildClient, CommitmentPolicy } from '@aws-crypto/client-node';

// Configure the encryption SDK client with the KMS key from the environment variables
const { encrypt, decrypt } = buildClient(
    CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT
);

const generatorKeyId = process.env.KEY_ID;
const keyIds = [process.env.KEY_ARN];
const keyring = new KmsKeyringNode({ generatorKeyId, keyIds });

// Example function to simulate sending email.
// This example logs message details to CloudWatch Logs from your Lambda function.
// Update this function with custom logic that sends an email message to 'emailaddress' with body 'message'.
const sendEmail = async (emailAddress, message) => {
    // Log the destination with the email address masked.
    console.log(`Simulating email send to ${emailAddress.replace(/[^@.]/g, '*')}`);
    // Log the message with the code masked.
    console.log(`Message content: ${message.replace(/\b\d{6,8}\b/g, '********')}`);
    // Simulate API delay
    await new Promise(resolve => setTimeout(resolve, 100));
    console.log('Email sent successfully');
    return true;
};

export const handler = async (event) => {
    try {
        // Decrypt the secret code using encryption SDK
        let plainTextCode;
        if (event.request.code) {
            const { plaintext, messageHeader } = await decrypt(keyring, Buffer.from(event.request.code, 'base64'));
            plainTextCode = Buffer.from(plaintext).toString('utf-8');
        }

        // Handle different trigger sources
        if (event.triggerSource == 'CustomEmailSender_SignUp') {
            const emailAddress = event.request.userAttributes.email;
            const message = `Welcome! Your verification code is: ${plainTextCode}`;
            await sendEmail(emailAddress, message);
        }
        else if (event.triggerSource == 'CustomEmailSender_ResendCode') {
            // Handle resend code
        }
        else if (event.triggerSource == 'CustomEmailSender_ForgotPassword') {
            // Handle forgot password
        }
        else if (event.triggerSource == 'CustomEmailSender_UpdateUserAttribute') {
            // Handle update attribute
        }
        else if (event.triggerSource == 'CustomEmailSender_VerifyUserAttribute') {
            // Handle verify attribute
        }
        else if (event.triggerSource == 'CustomEmailSender_AdminCreateUser') {
            // Handle admin create user
        }
        else if (event.triggerSource == 'CustomEmailSender_Authentication') {
            // Handle authentication
        }
        else if (event.triggerSource == 'CustomEmailSender_AccountTakeOverNotification') {
            // Handle account takeover notification
        }

        return;
    } catch (error) {
        console.error('Error in custom email sender:', error);
        throw error;
    }
};
```

# Acionador do Lambda de remetente personalizado de SMS
<a name="user-pool-lambda-custom-sms-sender"></a>

Quando você atribui um acionador de remetente de SMS personalizado ao grupo de usuários, o Amazon Cognito invoca uma função do Lambda em vez do comportamento padrão quando um evento do usuário exige que ele envie uma mensagem SMS. Com um gatilho de remetente personalizado, sua AWS Lambda função pode enviar notificações por SMS para seus usuários por meio de um método e provedor de sua escolha. O código personalizado da função deve processar e entregar todas as mensagens SMS do grupo de usuários.

Esse acionador serve para cenários em que talvez você queira ter mais controle sobre como seu grupo de usuários envia mensagens SMS. Sua função Lambda pode personalizar a chamada para as operações de API do Amazon SNS, por exemplo, quando você quiser gerenciar várias IDs originações ou cruzamentos. Regiões da AWS Sua função também pode redirecionar mensagens para outro meio de entrega ou serviço de terceiros.

Para saber mais sobre como configurar um acionador de remetente de e-mail personalizado, consulte [Ativar acionadores do Lambda de remetente personalizado](user-pool-lambda-custom-sender-triggers.md#enable-custom-sender-lambda-trigger).

## Fontes de acionador do Lambda remetente personalizado de SMS
<a name="trigger-source"></a>

A tabela a seguir mostra o evento de acionamento de fontes de acionadores de SMS personalizado no código do Lambda.


| `TriggerSource value` | Event | 
| --- | --- | 
| CustomSMSSender\$1SignUp | Um usuário se cadastra e o Amazon Cognito envia uma mensagem de boas-vindas. | 
| CustomSMSSender\$1ForgotPassword | Um usuário solicita um código para redefinir a senha. | 
| CustomSMSSender\$1ResendCode | Um usuário solicita um novo código para confirmar seu registro. | 
| CustomSMSSender\$1VerifyUserAttribute | Um usuário cria um endereço de e-mail ou um atributo de número de telefone e o Amazon Cognito envia um código para verificar o atributo. | 
| CustomSMSSender\$1UpdateUserAttribute | Um usuário atualiza um endereço de e-mail ou um atributo de número de telefone e o Amazon Cognito envia um código para verificar o atributo. | 
| CustomSMSSender\$1Authentication | Um usuário faz login e o Amazon Cognito envia um código OTP ou MFA do SMS. | 
| CustomSMSSender\$1AdminCreateUser | Você cria um usuário em seu grupo de usuários e o Amazon Cognito envia uma senha temporária. | 

## Parâmetros do acionador do Lambda de remetente personalizado de SMS
<a name="custom-sms-sender-parameters"></a>

A solicitação que o Amazon Cognito transmite para essa função do Lambda é uma combinação dos parâmetros abaixo e dos [parâmetros comuns](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared) que o Amazon Cognito adiciona a todas as solicitações.

------
#### [ JSON ]

```
{
    "request": {
        "type": "customSMSSenderRequestV1",
        "code": "string",
        "clientMetadata": {
            "string": "string",
             . . .
            },
        "userAttributes": {
            "string": "string",
            . . .
         }
}
```

------

### Parâmetros de solicitação do remetente personalizado de SMS
<a name="custom-sms-sender-request-parameters"></a>

**type**  
A versão da solicitação. Para um evento de remetente personalizado de SMS, o valor dessa string é sempre `customSMSSenderRequestV1`.

**código**  
O código criptografado que sua função pode descriptografar e enviar ao usuário.

**clientMetadata**  
Um ou mais pares de chave-valor que você pode fornecer como entrada personalizada ao acionador da função do Lambda de remetente personalizado de SMS. Para passar esses dados para sua função Lambda, você pode usar o ClientMetadata parâmetro nas ações [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)e da [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. O Amazon Cognito não inclui dados do ClientMetadata parâmetro [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)e operações de [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API na solicitação que ele passa para a função de pós-autenticação.

**userAttributes**  
Um ou mais pares de chave-valor que representam atributos de usuário.

### Parâmetros de resposta do remetente personalizado de SMS
<a name="custom-sms-sender-response-parameters"></a>

O Amazon Cognito não espera nenhuma outra informação de retorno na resposta. Sua função pode usar operações de API para consultar e modificar seus recursos ou registrar metadados de eventos em um sistema externo.

## Exemplo de código
<a name="custom-sms-sender-code-examples"></a>

O exemplo do Node.js a seguir processar um evento de mensagem SMS na função do Lambda de remetente personalizado de SMS. Esse exemplo pressupõe que a função tenha duas variáveis de ambiente definidas.

**`KEY_ID`**  
O ID da chave do KMS que você deseja usar para criptografar e descriptografar os códigos dos usuários.

**`KEY_ARN`**  
O nome do recurso da Amazon (ARN) da chave do KMS que você deseja usar para criptografar e descriptografar os códigos dos usuários.

**Como implantar essa função**

1. Instale a versão mais recente do NodeJS na área de trabalho do desenvolvedor.

1. Crie um novo projeto NodeJS em seu espaço de trabalho.

1. Inicialize o projeto com `npm init -y`.

1. Crie o script da função do Lambda: `touch index.mjs`.

1. Cole o conteúdo do exemplo abaixo em `index.mjs`.

1. Baixe a dependência do projeto, AWS Encryption SDK:`npm install @aws-crypto/client-node`.

1. Compacte o diretório de projeto em um arquivo: `zip -r my_deployment_package.zip .`.

1. [Implante o arquivo ZIP à função](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-package.html).

```
import { KmsKeyringNode, buildClient, CommitmentPolicy } from '@aws-crypto/client-node';

// Configure the encryption SDK client with the KMS key from the environment variables
const { encrypt, decrypt } = buildClient(
    CommitmentPolicy.REQUIRE_ENCRYPT_ALLOW_DECRYPT
);

const generatorKeyId = process.env.KEY_ID;
const keyIds = [process.env.KEY_ARN];
const keyring = new KmsKeyringNode({ generatorKeyId, keyIds });

// Example function to simulate sending SMS.
// This example logs message details to CloudWatch Logs from your Lambda function.
// Update this function with custom logic that sends an SMS message to 'phoneNumber' with body 'message'.
const sendSMS = async (phoneNumber, message) => {
    // Log the destination with the phone number masked.
    console.log(`Simulating SMS send to ${phoneNumber.replace(/[^+]/g, '*')}`);
    // Log the message with the code masked.
    console.log(`Message content: ${message.replace(/\b\d{6,8}\b/g, '********')}`);    
    // Simulate API delay
    await new Promise(resolve => setTimeout(resolve, 100));
    console.log('SMS sent successfully');
    return true;
};

export const handler = async (event) => {
    try {
        // Decrypt the secret code using encryption SDK
        let plainTextCode;
        if (event.request.code) {
            const { plaintext, messageHeader } = await decrypt(keyring, Buffer.from(event.request.code, 'base64'));
            plainTextCode = Buffer.from(plaintext).toString('utf-8');
        }

        // Handle different trigger sources
        if (event.triggerSource == 'CustomSMSSender_SignUp') {
            const phoneNumber = event.request.userAttributes.phone_number;
            const message = `Welcome! Your verification code is: ${plainTextCode}`;
            await sendSMS(phoneNumber, message);
        }
        else if (event.triggerSource == 'CustomSMSSender_ResendCode') {
            // Handle resend code
        }
        else if (event.triggerSource == 'CustomSMSSender_ForgotPassword') {
            // Handle forgot password
        }
        else if (event.triggerSource == 'CustomSMSSender_UpdateUserAttribute') {
            // Handle update attribute
        }
        else if (event.triggerSource == 'CustomSMSSender_VerifyUserAttribute') {
            // Handle verify attribute
        }
        else if (event.triggerSource == 'CustomSMSSender_AdminCreateUser') {
            // Handle admin create user
        }
        return;
    } catch (error) {
        console.error('Error in custom SMS sender:', error);
        throw error;
    }
};
```

**Topics**
+ [

## Fontes de acionador do Lambda remetente personalizado de SMS
](#trigger-source)
+ [

## Parâmetros do acionador do Lambda de remetente personalizado de SMS
](#custom-sms-sender-parameters)
+ [

## Exemplo de código
](#custom-sms-sender-code-examples)
+ [

## Avaliar os recursos de mensagem SMS com uma função de remetente personalizado de SMS
](#sms-to-email-example)

## Avaliar os recursos de mensagem SMS com uma função de remetente personalizado de SMS
<a name="sms-to-email-example"></a>

Uma função do Lambda de remetente personalizado de SMS aceitará as mensagens SMS que seu grupo de usuários enviar e fornecerá o conteúdo com base em sua lógica personalizada. O Amazon Cognito envia o [Parâmetros do acionador do Lambda de remetente personalizado de SMS](#custom-sms-sender-parameters) para sua função. Sua função pode fazer o que você quiser com essas informações. Por exemplo, você pode enviar o código a um tópico do Amazon Simple Notification Service (Amazon SNS). Um assinante de tópicos do Amazon SNS pode ser uma mensagem SMS, um endpoint HTTPS ou um endereço de e-mail.

[Para criar um ambiente de teste para mensagens SMS do Amazon Cognito com uma função Lambda personalizada do remetente de SMS, [amazon-cognito-user-poolconsulte development-and-testing-with - sms-redirected-to-email - na biblioteca aws-samples](https://github.com/aws-samples/amazon-cognito-user-pool-development-and-testing-with-sms-redirected-to-email) em. GitHub](https://github.com/aws-samples) O repositório contém AWS CloudFormation modelos que podem criar um novo grupo de usuários ou trabalhar com um grupo de usuários que você já tem. Esses modelos criam funções do Lambda e um tópico do Amazon SNS. A função do Lambda que o modelo atribui como um acionador de remetente personalizado de SMS redireciona para o tópico do Amazon SNS as mensagens SMS que você envia aos assinantes. 

Quando você implanta essa solução em um grupo de usuários, todas as mensagens que o Amazon Cognito geralmente envia pelo sistema de mensagens SMS são enviadas pela função do Lambda a um endereço de e-mail central. Use essa solução para personalizar e visualizar mensagens SMS e testar os eventos do grupo de usuários que fazem com que o Amazon Cognito envie uma mensagem SMS. Depois de concluir seus testes, reverta a CloudFormation pilha ou remova a atribuição personalizada da função de remetente de SMS do seu grupo de usuários.

**Importante**  
Não use os modelos em [amazon-cognito-user-pool- development-and-testing-with - sms-redirected-to-email](https://github.com/aws-samples/amazon-cognito-user-pool-development-and-testing-with-sms-redirected-to-email) para criar um ambiente de produção. A função do Lambda de remetente personalizado de SMS na solução *simula* mensagens SMS, mas envia todas elas a um único endereço de e-mail central. Antes de enviar mensagens SMS em um grupo de usuários do Amazon Cognito de produção, você deve preencher os requisito s mostrados em [Configurações de mensagens SMS para grupos de usuários do Amazon Cognito](user-pool-sms-settings.md).

# Como gerenciar usuários em seu grupo de usuários
<a name="managing-users"></a>

Depois de criar um grupo de usuários, você poderá criar, confirmar e gerenciar contas de usuários. Com os grupos de usuários do Amazon Cognito, você pode gerenciar seus usuários e o acesso deles a recursos mapeando funções do IAM para grupos.

O gerenciamento de usuários em seu grupo de usuários do Amazon Cognito envolve várias opções de configuração e tarefas administrativas. Os grupos de usuários podem ser escalados para milhões de usuários. Um diretório de usuários dessa escala requer ferramentas administrativas igualmente escaláveis e reproduzíveis. Você pode querer criar vários perfis de usuário, gerenciar usuários inativos, produzir relatórios de governança e conformidade ou configurar ferramentas de autoatendimento em que os usuários façam a maior parte do trabalho. Depois de criar um grupo de usuários, você pode controlar como os usuários se cadastram e confirmam suas contas, incluindo solicitar verificação de e-mail ou número de telefone. Os administradores também podem criar contas de usuário diretamente e personalizar as mensagens de boas-vindas e os requisitos de senha.

Nos grupos de usuários, você pode gerenciar o acesso aos recursos com base na associação de um usuário ao grupo. Você pode atribuir perfis do IAM a esses grupos para gerenciar o acesso aos Serviços da AWS com bancos de identidades. A associação ao grupo de usuários está presente nos tokens de ID e de acesso. Com essas informações, você pode tomar decisões de controle de acesso em tempo de execução na aplicação ou com um mecanismo de políticas como o Amazon Verified Permissions.

Os grupos de usuários geralmente têm muitos usuários. Você geralmente pesquisará e atualizará contas de usuário. O console e a API do Amazon Cognito oferecem suporte à consulta de usuários com base em atributos padrão, como nome de usuário, e-mail e número de telefone. Os administradores também podem redefinir senhas, desativar contas e visualizar o histórico de eventos do usuário.

Para migrar dados de usuários existentes, o Amazon Cognito tem opções para importar usuários de um arquivo CSV e usar um [acionador do Lambda](user-pool-lambda-migrate-user.md) para migrar automaticamente os usuários quando eles fizerem login pela primeira vez. Essas opções oferecem suporte a transições de usuários de outros diretórios para o seu grupo de usuários.

Você pode usar os recursos de gerenciamento de usuários nos grupos de usuários para ter um controle refinado sobre o ciclo de vida do usuário e a experiência de autenticação. A combinação de cadastro de autoatendimento, contas criadas pelo administrador, grupos e ferramentas de migração faz dos grupos de usuários do Amazon Cognito um diretório flexível.

**Topics**
+ [

# Configurar políticas para a criação de usuários
](user-pool-settings-admin-create-user-policy.md)
+ [

# Como cadastrar e confirmar contas de usuários
](signing-up-users-in-your-app.md)
+ [

# Como criar contas de usuário como administrador
](how-to-create-user-accounts.md)
+ [

# Como adicionar grupos a um grupo de usuários
](cognito-user-pools-user-groups.md)
+ [

# Como gerenciar e pesquisar contas de usuários
](how-to-manage-user-accounts.md)
+ [

# Senhas, recuperação de contas e políticas de senha
](managing-users-passwords.md)
+ [

# Como importar usuários para um grupo de usuários
](cognito-user-pools-import-users.md)
+ [

# Trabalhar com atributos do usuário
](user-pool-settings-attributes.md)

# Configurar políticas para a criação de usuários
<a name="user-pool-settings-admin-create-user-policy"></a>

O grupo de usuários pode permitir que os usuários se inscrevam ou você pode criá-los como administrador. Também é possível controlar quanto do processo de verificação e de confirmação após o cadastro os usuários podem realizar. Por exemplo, talvez você queira revisar os cadastros e aceitá-los com base em um processo de validação externo. Essa configuração ou a *política de criação de usuários do administrador* também define a quantidade de tempo antes da qual um usuário não pode mais confirmar sua conta de usuário.

O Amazon Cognito pode atender às necessidades de seus clientes públicos como a plataforma de gerenciamento de identidade e acesso de clientes (CIAM) para seu software. Um grupo de usuários que aceita se cadastrar e tem um cliente da aplicação, com ou sem login gerenciado, cria um perfil de usuário para qualquer pessoa na Internet que conheça seu ID de cliente da aplicação que pode ser descoberto publicamente e solicite o cadastro. Um perfil de usuário cadastrado pode receber tokens de acesso e identidade e acessar recursos que você autorizou para a aplicação. Antes de ativar o cadastro em seu grupo de usuários, revise suas opções e certifique-se de que sua configuração esteja em conformidade com seus padrões de segurança. Defina **Habilitar autorregistro** e `AllowAdminCreateUserOnly`, descritos nos procedimentos a seguir, com cuidado.

------
#### [ Console de gerenciamento da AWS ]

O menu **Cadastrar-se** do grupo de usuários contém algumas das configurações de cadastro e criação administrativa de usuários no grupo de usuários.

**Como configurar a experiência de cadastro**

1. Em **Verificação e confirmação assistidas pelo Cognito**, escolha se deseja **Permitir que o Cognito envie mensagens automaticamente para verificar e confirmar**. Com essa configuração ativada, o Amazon Cognito envia um e-mail ou mensagem SMS para novos usuários com um código que eles devem apresentar ao grupo de usuários. Isso confirma a propriedade do endereço de e-mail ou do número de telefone, configurando o atributo equivalente como verificado e confirmando a conta do usuário para login. Os **Atributos a serem verificados** escolhidos determinam os métodos de entrega e os destinos das mensagens de verificação.

1. A **Verificação das alterações de atributos** não é significativa quando você está criando usuários, mas está relacionada à verificação dos atributos. É possível permitir que os usuários que alteraram, mas ainda não verificaram, seus [atributos de login](user-pool-settings-attributes.md#user-pool-settings-aliases.title) continuem fazendo login com o novo valor de atributo ou com o original. Para obter mais informações, consulte [Como verificar quando usuários alteram o e-mail ou o número de telefone](signing-up-users-in-your-app.md#verifying-when-users-change-their-email-or-phone-number).

1. A opção **Atributos obrigatórios** exibe os atributos que devem receber um valor antes que um usuário possa se cadastrar ou que você possa criar um usuário. Os atributos obrigatórios só podem ser definidos na criação de um grupo de usuários.

1. Os **Atributos personalizados** são importantes para o processo de criação e cadastro do usuário porque, ao criar um usuário pela primeira vez, você só pode definir um valor para atributos personalizados *imutáveis*. Para obter mais informações sobre atributos personalizados, consulte [Atributos personalizados](user-pool-settings-attributes.md#user-pool-settings-custom-attributes).

1. Em **Cadastro por autoatendimento**, selecione **Habilitar autorregistro** se desejar que os usuários possam gerar uma nova conta com a API `SignUp` [não autenticada](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html#user-pool-apis-auth-unauth). Se você desativar o autorregistro, só poderá criar novos usuários como administrador, no console do Amazon Cognito ou [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html)com solicitações de API. Em um grupo de usuários em que o autorregistro está inativo, as solicitações de [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)API retornam `NotAuthorizedException` e o login gerenciado não exibe um link de **inscrição**.

Para grupos de usuários nos quais você planeja criar usuários como administrador, é possível configurar a duração das senhas temporárias no menu **Métodos de autenticação** em **Senhas temporárias definidas por administradores expiram em**.

Outro elemento importante da criação de usuários como administrador é a mensagem de convite. Ao criar um novo usuário, o Amazon Cognito envia uma mensagem ao usuário com um link para a sua aplicação para que o usuário possa fazer login pela primeira vez. Personalize esse modelo de mensagem no menu **Métodos de autenticação**, em **Modelos de mensagens**.

É possível configurar [clientes de aplicações confidenciais](user-pool-settings-client-apps.md#user-pool-settings-client-app-client-types.title), geralmente aplicações da Web, com um segredo de cliente que impede o cadastro sem o segredo do cliente da aplicação. Como prática recomendada de segurança, não distribua segredos de clientes de aplicações em clientes de aplicações públicas, geralmente aplicativos móveis. É possível criar clientes da aplicação com segredos do cliente no menu **Clientes da aplicação** do console do Amazon Cognito.

------
#### [ Amazon Cognito user pools API ]

Você pode definir programaticamente os parâmetros para a criação de usuários em um grupo de usuários em uma solicitação [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)de [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API.

O [AdminCreateUserConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-AdminCreateUserConfig)elemento define valores para as seguintes propriedades de um grupo de usuários.

1. Habilitar cadastro por autoatendimento

1. A mensagem de convite que você envia aos novos usuários criados por administrador

O exemplo a seguir, quando adicionado ao corpo de uma solicitação completa de API, define um grupo de usuários com cadastro por autoatendimento inativo e um e-mail de convite básico.

```
"AdminCreateUserConfig": { 
      "AllowAdminCreateUserOnly": true,
      "InviteMessageTemplate": { 
         "EmailMessage": "Your username is {username} and temporary password is {####}.",
         "EmailSubject": "Welcome to ExampleApp",
         "SMSMessage": "Your username is {username} and temporary password is {####}."
      }
   }
```

Os seguintes parâmetros adicionais de uma solicitação de [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)ou API governam a criação de novos usuários.

[AutoVerifiedAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-AutoVerifiedAttributes)  
Os atributos, endereços de e-mail ou números de telefone, aos quais você deseja [enviar uma mensagem automaticamente](user-pool-settings-email-phone-verification.md#user-pool-settings-email-phone-verification.title) ao registrar um novo usuário.

[Políticas](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Policies)  
A [política de senha](managing-users-passwords.md#user-pool-settings-policies.title) do grupo de usuários.

[Esquema](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Schema)  
Os [atributos personalizados](user-pool-settings-attributes.md#user-pool-settings-custom-attributes.title) do grupo de usuários. Esses são importantes para o processo de criação e cadastro do usuário porque, ao criar um usuário pela primeira vez, você só pode definir um valor para atributos personalizados *imutáveis*.  
Esse parâmetro também define os atributos necessários para o grupo de usuários. O texto a seguir, quando inserido no elemento `Schema` no corpo completo de uma solicitação da API, define o atributo `email` conforme necessário.  

```
{
            "Name": "email",
            "Required": true
}
```

------

# Como cadastrar e confirmar contas de usuários
<a name="signing-up-users-in-your-app"></a>

Contas de usuários são adicionadas ao grupo de usuários de uma das seguintes formas:
+ O usuário se cadastra aplicação cliente do grupo de usuários. Pode ser um aplicativo móvel ou uma aplicação Web.
+ Você pode importar a conta de usuário para o grupo de usuários. Para obter mais informações, consulte [Como importar usuários para grupos de usuários com base em um arquivo CSV](cognito-user-pools-using-import-tool.md).
+ Você pode criar a conta de usuário em seu grupo e convidá-lo a login. Para obter mais informações, consulte [Como criar contas de usuário como administrador](how-to-create-user-accounts.md).

Os usuários que se inscrevem precisam primeiro ser confirmados para que possam fazer login. Usuários importados e criados já estão confirmados, mas eles precisam criar uma senha própria na primeira vez em que fizerem login. As seções a seguir explicam o processo de confirmação e verificação de e-mail e telefone.

**Senhas no cadastro**  
O Amazon Cognito exige senhas de todos os usuários quando eles se cadastram, exceto sob as condições abaixo. Se *todas* essas condições forem atendidas, você poderá omitir as senhas nas operações de cadastro.

1. O [Login sem senha](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless) está ativo em seu grupo de usuários e cliente de aplicação.

1. Seu aplicativo é personalizado com módulos de autenticação em um AWS SDK. O login gerenciado e a IU hospedada sempre exigem senhas.

1. Os usuários fornecem valores de atributos para os métodos de login sem senha — senhas de uso único por e-mail ou mensagem SMS () — que você permite. OTPs Por exemplo, se você permitir o login com uma OTP enviada por e-mail e telefone, os usuários poderão fornecer um número de telefone ou endereço de e-mail. Porém, se permitir somente o login com e-mail, eles deverão fornecer um endereço de e-mail.

1. Seu grupo de usuários [verifica automaticamente](#allowing-users-to-sign-up-and-confirm-themselves) os atributos que os usuários podem usar com o login sem senha.

1. Para qualquer [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)solicitação, o usuário não fornece um valor para o parâmetro [Password](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html#CognitoUserPools-SignUp-request-Password).

## Visão geral da confirmação de conta de usuário
<a name="signup-confirmation-verification-overview"></a>

O diagrama a seguir ilustra o processo de confirmação:

![\[Quando os usuários inserem o código de confirmação, eles automaticamente verificam o e-mail ou o telefone.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/amazon-cognito-sign-in-confirm-user.png)


Uma conta de usuário pode estar em qualquer um dos seguintes estados:

**Registrado (não confirmado)**  
O usuário foi registrado com êxito, mas não pode fazer login até que a conta seja confirmada. O usuário está habilitado, mas não está confirmado nesse estado.  
Novos usuários que se cadastram começam nesse estado.

**Confirmado**  
A conta de usuário está confirmada e o usuário pode fazer login. Quando um usuário insere um código ou segue um link de e-mail para confirmar sua conta de usuário, o e-mail ou o número de telefone é automaticamente confirmado. O código ou link é válido por 24 horas.  
Se a conta de usuário tiver sido confirmada pelo administrador ou por um acionador de pré-cadastro do Lambda, é possível que não haja um número de telefone ou um e-mail verificado associado à conta.

**É necessário redefinir a senha**  
A conta de usuário está confirmada, mas o usuário deve solicitar um código e redefinir sua senha para poder fazer login.  
As contas de usuários que são importados por um administrador ou desenvolvedor começam nesse estado.

**Forçar alteração de senha**  
A conta de usuário está confirmada e o usuário pode fazer login usando uma senha temporária. No entanto, no primeiro login, ele deve alterar a senha para um novo valor antes de fazer qualquer coisa.  
As contas de usuários que são criadas por um administrador ou desenvolvedor começam nesse estado.

**Desabilitado**  
Antes de excluir uma conta de usuário, você precisa desabilitar o acesso de login para esse usuário.

**Mais atributos**
+ [Detectar e corrigir contas de usuários inativas com o Amazon Cognito](https://aws.amazon.com/blogs/security/detecting-and-remediating-inactive-user-accounts-with-amazon-cognito/)

## Como verificar informações de contato no cadastro
<a name="allowing-users-to-sign-up-and-confirm-themselves"></a>

Quando novos usuários se cadastram no seu aplicativo, você provavelmente deseja que eles forneçam pelo menos um método de contato. Por exemplo, com as informações de contato dos usuários, você pode:
+ Enviar uma senha temporária quando um usuário decide redefinir a senha.
+ Notificar os usuários quando as informações pessoais ou financeiras deles forem atualizadas.
+ Enviar mensagens promocionais, como descontos ou ofertas especiais.
+ Enviar resumos da conta ou lembretes de faturas.

Para casos de uso como esses, é importante que você envie suas mensagens para um destino verificado. Caso contrário, suas mensagens podem ser enviadas para um endereço de e-mail inválido ou para um número de telefone que foi digitado incorretamente. Ou pior, você pode enviar informações confidenciais para agentes maldosos que se passam por seus usuários.

Para ajudar a garantir que você envie mensagens apenas aos indivíduos certos, configure o grupo de usuários do Amazon Cognito de modo que os usuários tenham que fornecer o seguinte, quando se cadastrarem:

1. Um endereço de e-mail ou número de telefone.

1. Um código de verificação que o Amazon Cognito envia para esse endereço de e-mail ou número de telefone. Se tiverem passado 24 horas e o código ou link do seu usuário não for mais válido, chame a operação da [ResendConfirmationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html)API para gerar e enviar um novo código ou link.

Ao fornecer o código de verificação, um usuário comprova que tem acesso à caixa de correio ou ao telefone que recebeu o código. Depois que o usuário fornece o código, o Amazon Cognito atualiza as informações sobre o usuário no grupo de usuários das seguintes maneiras:
+ Definindo o status do usuário como `CONFIRMED`.
+ Atualizando os atributos do usuário para indicar que o endereço de e-mail ou número de telefone é verificado.

Para visualizar essas informações, você pode usar o console do Amazon Cognito. Ou você pode usar a operação de `AdminGetUser` API, o `admin-get-user` comando com AWS CLI o. ou uma ação correspondente em um dos AWS SDKs.

Se um usuário tiver um método de contato verificado, o Amazon Cognito enviará automaticamente uma mensagem ao usuário quando ele solicitar uma redefinição de senha.

### Outras ações que confirmam e verificam os atributos do usuário
<a name="allowing-users-to-sign-up-and-confirm-themselves-other-actions"></a>

A atividade do usuário a seguir verifica os atributos do usuário. Você não precisa definir esses atributos para verificação automática: as ações listadas os marcam como verificados em todos os casos.

**Endereço de e-mail**  

1. Concluir com sucesso a [autenticação sem senha](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless) com uma senha de uso único (OTP) enviada por e-mail.

1. Concluir com sucesso a [autenticação multifator (MFA)](user-pool-settings-mfa.md) com uma OTP enviada por e-mail.

**Número de telefone**  

1. Concluir com sucesso a [autenticação sem senha](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless) com uma OTP por SMS.

1. Concluir com sucesso a [MFA](user-pool-settings-mfa.md) com uma OTP por SMS.

### Para configurar o grupo de usuários para exigir a verificação de e-mail ou telefone
<a name="verification-configure"></a>

Ao confirmar os endereços de e-mail e os números de telefone, você garante que possa entrar em contato com seus usuários. Conclua as etapas a seguir Console de gerenciamento da AWS para configurar seu grupo de usuários para exigir que seus usuários confirmem seus endereços de e-mail ou números de telefone.

**nota**  
Se você ainda não tiver um grupo de usuários em sua conta, consulte [Conceitos básicos dos grupos de usuários](getting-started-user-pools.md).

**Para configurar o grupo de usuários**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. No painel de navegação, escolha **User Pools** (Grupos de usuários). Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Clique no menu **Cadastrar-se** e localize **Verificação de atributo e confirmação da conta do usuário**. Escolha **Editar**.

1. Em **Verificação e confirmação assistidas pelo Cognito**, escolha se deseja **Permitir que o Cognito envie mensagens automaticamente para verificar e confirmar**. Com essa configuração ativada, o Amazon Cognito envia mensagens para os atributos de contato dos usuários que você escolhe quando um usuário se cadastra ou cria um perfil de usuário. Para verificar os atributos e confirmar os perfis de usuários para login, o Amazon Cognito envia um código ou link em mensagens para os usuários. Os usuários devem inserir o código na interface do usuário para que a aplicação possa confirmá-lo em uma solicitação de API `AdminConfirmSignUp` e `ConfirmSignUp`.
**nota**  
Também é possível desabilitar **Cognito-assisted verification and confirmation** (Verificação e confirmação assistidas pelo Cognito) e usar ações de API ou acionadores do Lambda autenticados para verificar atributos e confirmar usuários.  
Se você escolher essa opção, o Amazon Cognito não enviará códigos de verificação quando o usuário se cadastrar. Escolha essa opção se você estiver usando um fluxo de autenticação personalizado que verifica pelo menos um método de contato sem usar os códigos de verificação do Amazon Cognito. Por exemplo, você pode usar um gatilho de pré-cadastro do Lambda que verifica automaticamente endereços de e-mail que pertencem a um domínio específico.  
Se você não verificar as informações de contato dos usuários, talvez eles não consigam usar a aplicação. Lembre-se de que os usuários precisam de informações de contato verificadas para:  
**Redefinir as próprias senhas**: quando um usuário seleciona uma opção na sua aplicação que chama a ação de API `ForgotPassword`, o Amazon Cognito envia uma senha temporária para o endereço de e-mail ou número de telefone do usuário. O Amazon Cognito só enviará essa senha se o usuário tiver pelo menos um método de contato verificado.
**Fazer login usando um endereço de e-mail ou número de telefone como um alias**: se você configurar o grupo de usuários para permitir esses aliases, um usuário só poderá fazer o acesso com um alias se o alias for verificado. Para obter mais informações, consulte [Personalização dos atributos de login](user-pool-settings-attributes.md#user-pool-settings-aliases).

1. Selecione os **Attributes to verify** (Atributos para verificar):  
**Enviar mensagem de SMS, verificar o número de telefone**  
O Amazon Cognito envia um código de verificação em uma mensagem de SMS quando o usuário se cadastra. Selecione essa opção se você normalmente se comunicar com os usuários por SMS. Por exemplo, você precisará usar números de telefone verificados se enviar notificações de entrega, confirmações de compromissos ou alertas. Os números de telefone do usuário serão o atributo verificado quando as contas forem confirmadas; você deve adotar medidas adicionais para verificar e se comunicar com endereços de e-mail do usuário.  
**Enviar mensagem de e-mail, verificar endereço de e-mail**  
O Amazon Cognito envia um código de verificação por meio de uma mensagem de SMS quando o usuário se cadastra. Escolha essa opção se você normalmente se comunica com os usuários por e-mail. Por exemplo, você precisará usar endereços de e-mail verificados se enviar faturas, resumos de pedidos ou ofertas especiais. Os endereços de e-mail do usuário serão o atributo verificado quando as contas forem confirmadas; você deve adotar medidas adicionais para verificar e se comunicar com números de telefone do usuário.  
**Enviar mensagem de SMS se o número de telefone estiver disponível, caso contrário, enviar uma mensagem de e-mail**  
Escolha essa opção se você não exigir que todos os usuários tenham o mesmo método de contato verificado. Nesse caso, a página de cadastro em seu aplicativo pode solicitar que os usuários verifiquem apenas o método de contato que preferirem. Quando o Amazon Cognito envia um código de verificação, ele envia o código para o método de contato fornecido na solicitação de `SignUp` da sua aplicação. Se um usuário fornecer um endereço de e-mail e um número de telefone, e a aplicação fornecer os dois métodos de contato na solicitação de `SignUp`, o Amazon Cognito enviará um código de verificação somente para o número de telefone.  
Se você exige que os usuários verifiquem um endereço de e-mail e um número de telefone, escolha esta opção. O Amazon Cognito verifica um método de contato quando o usuário se cadastra e sua aplicação precisará verificar o outro método de contato depois que o usuário fizer login. Para obter mais informações, consulte [Se você necessitar que os usuários confirmem tanto endereços de e-mail como números de telefone](#verification-email-plus-phone).

1. Escolha **Salvar alterações**.

### Fluxo de autenticação com verificação por e-mail ou telefone
<a name="verification-flow"></a>

Se o grupo de usuários exigir que os usuários verifiquem as informações de contato, seu aplicativo deverá facilitar o seguinte fluxo quando um usuário se cadastrar:

1. Um usuário se inscreve no seu aplicativo inserindo um nome de usuário, número de telefone, endereço de and/or e-mail e possivelmente outros atributos.

1. O serviço do Amazon Cognito recebe a solicitação de cadastro da aplicação. Depois de verificar se a solicitação contém todos os atributos necessários para o cadastro, o serviço conclui o processo de cadastro e envia um código de confirmação para o telefone do usuário (em uma mensagem SMS) ou o e-mail. O código é válido por 24 horas.

1. O serviço retorna para o aplicativo a informação de que o cadastro está concluído e que a conta de usuário está aguardando confirmação. A resposta contém informações sobre o destino para onde o código de confirmação foi enviado. Nesse ponto, a conta de usuário está em um estado não confirmado, e o endereço de e-mail e número de telefone do usuário não estão verificados.

1. O aplicativo agora pode solicitar que o usuário insira o código de confirmação. O usuário não precisa inserir o código imediatamente. No entanto, o usuário não poderá fazer login até que ele insira o código de confirmação.

1. O usuário insere o código de confirmação no aplicativo.

1. A aplicação chama [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html) para enviar o código para o serviço do Amazon Cognito, que verifica o código e, se ele estiver correto, definirá a conta de usuário para o estado confirmado. Depois que a conta de usuário for confirmada com êxito, o serviço do Amazon Cognito marcará automaticamente como verificado o atributo que foi usado para a confirmação (e-mail ou número de telefone). A menos que o valor do atributo seja alterado, o usuário não precisará fazer a verificação novamente.

1. Nesse momento, como a conta de usuário está no estado confirmado, o usuário pode fazer login.

### Se você necessitar que os usuários confirmem tanto endereços de e-mail como números de telefone
<a name="verification-email-plus-phone"></a>

O Amazon Cognito verifica apenas um método de contato quando um usuário se cadastra. Nos casos em que o Amazon Cognito precise escolher entre confirmar um endereço de e-mail ou um número de telefone, ele opta por confirmar o número de telefone enviando um código de confirmação por SMS. Por exemplo, se você configurar o grupo de usuários para permitir que os usuários verifiquem tanto endereços de e-mail como números de telefone, e se a aplicação fornecer ambos os atributos no cadastro, o Amazon Cognito verificará apenas o número de telefone. Depois que um usuário verifica o número de telefone dele, o Amazon Cognito define o respetivo status como `CONFIRMED` e ele tem permissão para fazer login na aplicação.

Depois que o usuário fizer login, o aplicativo poderá fornecer a opção de verificar o método de contato que não foi verificado durante o cadastro. Para verificar esse segundo método, o aplicativo chama a ação de API `VerifyUserAttribute`. Observe que essa ação requer um parâmetro `AccessToken` e o Amazon Cognito só fornece tokens de acesso para usuários autenticados. Portanto, você poderá verificar o segundo método de contato somente depois que o usuário fizer login.

Se você exigir que os usuários verifiquem tanto endereços de e-mail como números de telefone, faça o seguinte:

1. Configure o grupo de usuários para permitir que os usuários verifiquem endereços de e-mail ou números de telefone.

1. No fluxo de cadastro do aplicativo, exija que os usuários forneçam tanto um endereço de e-mail como um número de telefone. Chame a ação de API [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html) e forneça o endereço de e-mail e o número de telefone para o parâmetro `UserAttributes`. Nesse momento, o Amazon Cognito envia um código de verificação para o telefone do usuário.

1. Na interface do aplicativo, é apresentada uma página de confirmação onde o usuário insere o código de verificação. Confirme o usuário chamando a ação de API [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html). Nesse ponto, o status do usuário é `CONFIRMED`, e o número de telefone do usuário é verificado, mas o endereço de e-mail não é verificado.

1. Apresente a página de login e autentique o usuário chamando a ação de API [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html). Depois que o usuário é autenticado, o Amazon Cognito retorna um token de acesso para a aplicação.

1. Chame a ação de API [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html). Especifique os seguintes parâmetros na solicitação:
   + `AccessToken`: o token de acesso retornado pelo Amazon Cognito quando o usuário fez login.
   + `AttributeName`: especifique `"email"` como o valor do atributo.

   O Amazon Cognito envia um código de verificação para o endereço de e-mail do usuário.

1. Apresente uma página de confirmação onde o usuário insere o código de verificação. Quando o usuário enviar o código, chame a ação de API [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html). Especifique os seguintes parâmetros na solicitação:
   + `AccessToken`: o token de acesso retornado pelo Amazon Cognito quando o usuário fez login.
   + `AttributeName`: especifique `"email"` como o valor do atributo.
   + `Code`: o código de verificação que o usuário forneceu.

   Nesse ponto, o endereço de e-mail é verificado.

## Permitir que os usuários se inscrevam na aplicação, mas mediante confirmação deles como administradores do grupo de usuários
<a name="signing-up-users-in-your-app-and-confirming-them-as-admin"></a>

Talvez você não queira que o grupo de usuários envie automaticamente mensagens de verificação no grupo de usuários, mas ainda queira que qualquer pessoa se inscreva em uma conta. Esse modelo deixa espaço, por exemplo, para análise humana de novas solicitações de inscrição e para validação em lote e processamento de inscrições. Você pode confirmar novas contas de usuário no console do Amazon Cognito ou com a operação de API autenticada pelo IAM. [AdminConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminConfirmSignUp.html) Você pode confirmar contas de usuário como administrador, independentemente de o grupo de usuários enviar ou não mensagens de verificação.

Você só pode confirmar a inscrição de autoatendimento de um usuário com essa técnica. Para confirmar um usuário que você criou como administrador, crie uma solicitação de [AdminSetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html)API com `Permanent` definido como`True`.

1. Um usuário se inscreve no seu aplicativo inserindo um nome de usuário, número de telefone, endereço de and/or e-mail e possivelmente outros atributos.

1. O serviço do Amazon Cognito recebe a solicitação de cadastro da aplicação. Após verificar se a solicitação contém todos os atributos necessários para o cadastramento, o serviço conclui o processo e retorna para o aplicativo a informação de que o cadastramento está concluído e aguarda confirmação. Nesse ponto, a conta de usuário está em um estado não confirmado. O usuário não pode fazer login até que a conta esteja confirmada.

1. Confirme a conta do usuário. Você deve fazer login Console de gerenciamento da AWS ou assinar sua solicitação de API com AWS credenciais para confirmar a conta. 

   1. Para confirmar um usuário no console do Amazon Cognito, navegue até o menu **Usuários**, selecione o usuário que deseja confirmar e, no menu **Ações**, clique em **Confirmar**.

   1. Para confirmar um usuário na AWS API ou na CLI, crie uma solicitação de [AdminConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminConfirmSignUp.html)API ou [admin-confirm-sign-up](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/admin-confirm-sign-up.html)no. AWS CLI

1. Nesse momento, como a conta de usuário está no estado confirmado, o usuário pode fazer login.

## Computar valores de hash de segredo
<a name="cognito-user-pools-computing-secret-hash"></a>

Atribua um segredo do cliente ao cliente da aplicação confidencial como prática recomendada. Quando você atribui um segredo de cliente ao cliente da aplicação, as solicitações de API de grupos de usuários do Amazon Cognito devem incluir um hash que inclua o segredo do cliente no corpo da solicitação. Para validar seu conhecimento do segredo do cliente para as operações de API nas listas a seguir, concatene o segredo do cliente com o ID do cliente da aplicação e o nome de usuário; depois, codifique essa string em base64.

Quando a aplicação conecta usuários a um cliente que tem um hash secreto, é possível utilizar o valor de qualquer atributo de login do grupo de usuários como o elemento de nome de usuário do hash secreto. Quando a aplicação solicita novos tokens em uma operação de autenticação com `REFRESH_TOKEN_AUTH`, o valor do elemento de nome de usuário depende dos seus atributos de login. Quando o grupo de usuários não tiver `username` como atributo de login, defina o valor do hash secreto do nome do usuário na declaração `sub` do usuário em seu token de acesso ou ID. Quando `username` é um atributo de login, defina o valor do nome de usuário de hash secreto da declaração `username`.

Os seguintes grupos de usuários do Amazon Cognito APIs aceitam um valor de hash secreto do cliente em um parâmetro. `SecretHash`
+ [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html)
+ [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html)
+ [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html)
+ [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html)
+ [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)

Além disso, os itens a seguir APIs aceitam um valor de hash secreto do cliente em um `SECRET_HASH` parâmetro, seja em parâmetros de autenticação ou em uma resposta de desafio.


| Operação de API | Parâmetro pai para SECRET\$1HASH | 
| --- |--- |
| InitiateAuth | AuthParameters | 
| AdminInitiateAuth | AuthParameters | 
| RespondToAuthChallenge | ChallengeResponses | 
| AdminRespondToAuthChallenge | ChallengeResponses | 

O valor do hash de segredo é um código de autenticação de mensagem baseado em hash (HMAC) de chave codificado em Base64 calculado com o uso da chave secreta de um cliente do grupo de usuários e do nome de usuário mais o ID do cliente na mensagem. O pseudocódigo a seguir mostra como esse valor é calculado. Nesse pseudocódigo, `+` indica concatenação, `HMAC_SHA256` representa uma função que produz um valor HMAC usando Hmac e `Base64` representa uma função que produz uma versão codificada em SHA256 Base-64 da saída de hash.

```
Base64 ( HMAC_SHA256 ( "Client Secret Key", "Username" + "Client Id" ) )
```

Para obter uma visão geral detalhada de como calcular e usar o `SecretHash` parâmetro, consulte [Como soluciono os erros “Não é possível verificar o hash secreto para o cliente” na minha API de grupos de usuários do Amazon Cognito](https://aws.amazon.com/premiumsupport/knowledge-center/cognito-unable-to-verify-secret-hash/)<client-id>? no Centro de AWS Conhecimento.

Você pode usar os exemplos de código a seguir no código da aplicação do lado do servidor.

------
#### [ Shell ]

```
echo -n "[username][app client ID]" | openssl dgst -sha256 -hmac [app client secret] -binary | openssl enc -base64
```

------
#### [ Java ]

```
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
 
public static String calculateSecretHash(String userPoolClientId, String userPoolClientSecret, String userName) {
    final String HMAC_SHA256_ALGORITHM = "HmacSHA256";
    
    SecretKeySpec signingKey = new SecretKeySpec(
            userPoolClientSecret.getBytes(StandardCharsets.UTF_8),
            HMAC_SHA256_ALGORITHM);
    try {
        Mac mac = Mac.getInstance(HMAC_SHA256_ALGORITHM);
        mac.init(signingKey);
        mac.update(userName.getBytes(StandardCharsets.UTF_8));
        byte[] rawHmac = mac.doFinal(userPoolClientId.getBytes(StandardCharsets.UTF_8));
        return Base64.getEncoder().encodeToString(rawHmac);
    } catch (Exception e) {
        throw new RuntimeException("Error while calculating ");
    }
}
```

------
#### [ Python ]

```
import sys
import hmac, hashlib, base64 
username = sys.argv[1] 
app_client_id = sys.argv[2] 
key = sys.argv[3] 
message = bytes(sys.argv[1]+sys.argv[2],'utf-8') 
key = bytes(sys.argv[3],'utf-8') 
secret_hash = base64.b64encode(hmac.new(key, message, digestmod=hashlib.sha256).digest()).decode() 
print("SECRET HASH:",secret_hash)
```

------

## Como confirmar contas de usuários sem verificar e-mail ou número de telefone
<a name="confirming-user-without-verification-of-email-or-phone-number"></a>

O acionador de pré-cadastro do Lambda pode ser usado para confirmar automaticamente as contas de usuário no momento do cadastro sem a necessidade de um código de confirmação nem da verificação do e-mail ou do número de telefone. Usuários que são confirmados dessa maneira podem imediatamente fazer login sem a necessidade de receber um código.

Você também pode marcar um número de telefone ou e-mail do usuário como verificado por meio desse trigger. 

**nota**  
Embora essa abordagem seja conveniente para os usuários quando eles estão dando os primeiros passos, recomendamos a verificação automática de pelo menos um dos dois (e-mail ou número de telefone). Caso contrário, o usuário pode ficar impossibilitado de recuperar a senha caso a esqueça.

Se você não exigir que o usuário receba e insira um código de confirmação no cadastro e não verifique automaticamente o e-mail e o número de telefone no acionador de pré-cadastro do Lambda, você correrá o risco de não ter um endereço de e-mail nem um número de telefone verificado para essa conta de usuário. O usuário pode confirmar o endereço de e-mail ou o número de telefone posteriormente. No entanto, se o usuário esquecer a senha e não tiver um número de telefone nem um endereço de e-mail verificado, ele será bloqueado da conta porque o fluxo de senha esquecida exige um número de telefone ou um e-mail verificado para enviar um código de verificação ao usuário.

## Como verificar quando usuários alteram o e-mail ou o número de telefone
<a name="verifying-when-users-change-their-email-or-phone-number"></a>

Os usuários podem inserir um número de telefone ou endereço de e-mail como nome de usuário no login nos grupos de usuários configurados com vários nomes de login. Quando eles atualizam o endereço de e-mail ou número de telefone na sua aplicação, o Amazon Cognito pode enviar imediatamente uma mensagem com um código que confirma a propriedade do novo valor do atributo. Para habilitar o envio automático desses códigos de verificação, consulte [Como configurar verificação de e-mail ou telefone](user-pool-settings-email-phone-verification.md).

Os usuários que receberem um código de verificação devem devolvê-lo ao Amazon Cognito em uma [VerifyUserAttribute](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html)solicitação. Após fornecerem o código, o atributo será marcado como verificado. Normalmente, quando os usuários atualizam seu endereço de e-mail ou número de telefone, é necessário confirmar que eles são proprietários do novo valor antes que possam usá-lo para fazer login e receber mensagens. Os grupos de usuários têm uma opção configurável que define se os usuários devem verificar as atualizações em seu endereço de e-mail ou número de telefone.

Essa opção é a propriedade do grupo de usuários `AttributesRequireVerificationBeforeUpdate`. Configure-o em uma [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#CognitoUserPools-UpdateUserPool-request-UserAttributeUpdateSettings)solicitação [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-UserAttributeUpdateSettings)or ou com a configuração **Manter o valor do atributo original ativo quando uma atualização estiver pendente** no menu de **inscrição** do console do Amazon Cognito.

A forma como seu grupo de usuários trata as atualizações de endereços de e-mail e números de telefone está conectada à configuração do nome de usuário do grupo de usuários. Os nomes de usuário do grupo de usuários podem estar em uma configuração de *atributos de nome de usuário* em que os nomes de login são endereço de e-mail, número de telefone ou ambos. Eles também podem estar em uma configuração de *atributos de alias* em que o atributo `username` é um nome de login com endereço de e-mail, número de telefone ou nome de usuário preferencial como nomes de login alternativos. Para obter mais informações, consulte [Personalização dos atributos de login](user-pool-settings-attributes.md#user-pool-settings-aliases).

 Você também pode usar um acionador de mensagem personalizada do Lambda para personalizar a mensagem de verificação. Para obter mais informações, consulte [Acionador do Lambda de mensagem personalizada](user-pool-lambda-custom-message.md). Quando o endereço de e-mail ou o número de telefone do usuário não estiver verificado, sua aplicação deverá informar ao usuário que ele precisa verificar o atributo e fornecer um botão ou um link para que ele insira o código de verificação.

A tabela a seguir descreve como `AttributesRequireVerificationBeforeUpdate` e as configurações de alias determinam o resultado quando os usuários alteram o valor de seus atributos de login.


| Configuração do nome de usuário | Comportamento quando os usuários precisam verificar novos atributos | Comportamento quando os usuários não precisam verificar novos atributos | 
| --- | --- | --- | 
| Atributos do nome de usuário | O atributo original permanece verificado, elegível para login e com o valor original. Quando o usuário verifica um novo valor, o Amazon Cognito atualiza o valor do atributo, marca-o como verificado e o torna elegível para login. | O Amazon Cognito atualiza o atributo para um novo valor. O novo valor é elegível para login. Quando o usuário verifica um novo valor, o Amazon Cognito o marca como verificado. | 
| Atributos de alias | O atributo original permanece verificado, elegível para login e com o valor original. Quando o usuário verifica um novo valor, o Amazon Cognito atualiza o valor do atributo, marca-o como verificado e o torna elegível para login. | O Amazon Cognito atualiza o atributo para um novo valor. Nem o valor original nem o novo valor do atributo são elegíveis para login. Quando o usuário verifica um novo valor, o Amazon Cognito atualiza o valor do atributo, marca-o como verificado e o torna elegível para login. | 

**Exemplo 1**  
O usuário 1 faz login na sua aplicação com o endereço de e-mail `user1@example.com` e tem o nome de usuário `user1` (atributos de alias). Seu grupo de usuários está configurado para verificar as atualizações nos atributos de login e enviar mensagens de verificação automaticamente. Ele solicita a atualização do endereço de e-mail para `user1+foo@example.com`. Ele recebe um e-mail de verificação em `user1+foo@example.com` e *só pode fazer login novamente* com o endereço de e-mail `user1@example.com`. Posteriormente, ele insere o código de verificação e só pode fazer login novamente com o endereço de e-mail `user1+foo@example.com`.

**Exemplo 2**  
O usuário 2 faz login na sua aplicação com o endereço de e-mail `user2@example.com` e tem um nome de usuário (atributos de alias). Seu grupo de usuários está configurado para *não* verificar as atualizações nos atributos de login e para enviar mensagens de verificação automaticamente. Ele solicita a atualização do endereço de e-mail para `user2+bar@example.com`. Ele recebe um e-mail de verificação em `user2+bar@example.com` e *não conseguem fazer login novamente*. Posteriormente, ele insere o código de verificação e só pode fazer login novamente com o endereço de e-mail `user2+bar@example.com`.

**Exemplo 3**  
O usuário 3 faz login na sua aplicação com o endereço de e-mail `user3@example.com` e não tem um nome de usuário (atributos de nome de usuário). Seu grupo de usuários está configurado para *não* verificar as atualizações nos atributos de login e para enviar mensagens de verificação automaticamente. Ele solicita a atualização do endereço de e-mail para `user3+baz@example.com`. Ele recebe um e-mail de verificação em `user3+baz@example.com`, mas *pode fazer login imediatamente* sem nenhuma ação adicional com o código de verificação.

## Processos de confirmação e verificação para contas de usuários criadas por administradores ou desenvolvedores
<a name="confirmation-and-verification-of-users-whose-accounts-youve-created"></a>

As contas de usuários que foram criadas por um administrador ou desenvolvedor já ficam no estado confirmado para que os usuários não precisem inserir um código de confirmação. A mensagem de convite que o serviço do Amazon Cognito envia para esses usuários inclui o nome de usuário e uma senha temporária. O usuário precisa alterar a senha antes de fazer login. Para obter mais informações, consulte [Personalizar mensagens de e-mail e de SMS](how-to-create-user-accounts.md#creating-a-new-user-customize-messages) em [Como criar contas de usuário como administrador](how-to-create-user-accounts.md) e o trigger de mensagem personalizada em [Como personalizar fluxos de trabalho do grupo de usuários com acionadores do Lambda](cognito-user-pools-working-with-lambda-triggers.md).

## Processos de confirmação e verificação para contas de usuários importadas
<a name="confirmation-and-verification-of-users-whose-accounts-youve-imported"></a>

As contas de usuário criadas usando o recurso de importação de usuários na Console de gerenciamento da AWS CLI ou na API (consulte[Como importar usuários para grupos de usuários com base em um arquivo CSV](cognito-user-pools-using-import-tool.md)) já estão no estado confirmado, portanto, os usuários não precisam inserir um código de confirmação. Nenhuma mensagem de convite é enviada. No entanto, as contas de usuário importadas exigem que os usuários primeiro solicitem um código chamando a API `ForgotPassword` e, em seguida, criem uma senha usando o código entregue chamando a API `ConfirmForgotPassword` antes de fazer login. Para obter mais informações, consulte [Solicitação de redefinição de senha aos usuários importados](cognito-user-pools-using-import-tool.md#cognito-user-pools-using-import-tool-password-reset).

Quando a conta de usuário é importada, o número de telefone ou o e-mail do usuário deve ser marcado como confirmado de modo que nenhuma verificação seja necessária quando o usuário fizer login.

## Como enviar e-mails enquanto testa sua aplicação
<a name="managing-users-accounts-email-testing"></a>

O Amazon Cognito envia e-mails aos usuários quando eles criam e gerenciam suas contas na aplicação cliente para o grupo de usuários. Se você configurar o grupo de usuários para solicitar verificação por e-mail, o Amazon Cognito enviará um e-mail quando:
+ Um usuário se cadastrar.
+ Um usuário atualizar o endereço de e-mail.
+ Um usuário realizar uma ação que chama a ação de API `ForgotPassword`.
+ Você criar uma conta de usuário como um administrador.

Dependendo da ação que inicia o e-mail, o e-mail contém um código de verificação ou uma senha temporária. Os usuários devem receber esses e-mails e compreender a mensagem. Caso contrário, eles podem não conseguir fazer login e usar seu aplicativo.

Para garantir que os e-mails sejam enviados com êxito e que a mensagem pareça correta, teste na sua aplicação as ações que iniciam entregas de e-mail no Amazon Cognito. Por exemplo, usando a página de cadastro do seu aplicativo, ou usando a ação de API `SignUp`, é possível iniciar um e-mail cadastrando-se com um endereço de e-mail de teste. Ao testar dessa forma, lembre-se do seguinte:

**Importante**  
Ao usar um endereço de e-mail para testar ações que iniciam e-mails no Amazon Cognito, não use um endereço de e-mail falso (um que não tenha caixa de correio). Use um endereço de e-mail real que receberá o e-mail do Amazon Cognito sem criar uma *devolução definitiva*.  
Uma devolução definitiva ocorre quando o Amazon Cognito deixa de entregar o e-mail para a caixa de correio do destinatário, o que sempre ocorre se a caixa de correio não existe.  
O Amazon Cognito limita o número de e-mails que podem ser enviados por AWS contas que incorrem em rejeições difíceis de forma persistente.

Ao testar ações que iniciam e-mails, use um dos seguintes endereços de e-mail para evitar devoluções definitivas:
+ Um endereço para uma conta de e-mail que você possui e usa para testes. Ao usar seu próprio endereço de e-mail, você recebe o e-mail que o Amazon Cognito envia. Com esse e-mail, você pode usar o código de verificação para testar a experiência de cadastro no seu aplicativo. Se você personalizou a mensagem de e-mail para o grupo de usuários, pode verificar se as personalizações estão corretas.
+ O endereço do simulador de caixa postal, *success@simulator.amazonses.com*. Se você usar o endereço do simulador, o Amazon Cognito enviará o e-mail com êxito, mas você não conseguirá visualizá-lo. Essa opção é útil quando você não precisa usar o código de verificação e não precisa verificar a mensagem de e-mail.
+ O endereço do simulador de caixa postal com a adição de um rótulo arbitrário, como *success\$1user1@simulator.amazonses.com* ou *success\$1user2@simulator.amazonses.com*. O Amazon Cognito enviará e-mails para esses endereços com êxito, mas você não conseguirá visualizá-los. Essa opção é útil quando você deseja testar o processo de cadastro adicionando vários usuários de teste ao grupo de usuários, e cada usuário de teste tem um endereço de e-mail exclusivo.

# Como configurar verificação de e-mail ou telefone
<a name="user-pool-settings-email-phone-verification"></a>

Você pode selecionar as configurações para verificação de e-mail ou telefone no menu **Métodos de autenticação**. Para obter mais informações sobre a autenticação multifator (MFA), consulte [MFA de mensagem de texto SMS](user-pool-settings-mfa-sms-email-message.md).

O Amazon Cognito usa o Amazon SNS para enviar mensagens SMS. Se você ainda não enviou uma mensagem SMS do Amazon Cognito ou de qualquer outra AWS service (Serviço da AWS) , o Amazon SNS pode colocar sua conta na sandbox de SMS. Recomendamos que você envie uma mensagem de teste para um número de telefone verificado antes de remover sua conta da sandbox para a produção. Além disso, se você pretende enviar mensagens SMS para números de telefone dos EUA, deve obter um ID de origem ou de remetente do Amazon Pinpoint. Para configurar seu grupo de usuários do Amazon Cognito para mensagens SMS, consulte [Configurações de mensagens SMS para grupos de usuários do Amazon Cognito](user-pool-sms-settings.md).

O Amazon Cognito pode verificar automaticamente os endereços de e-mail ou os números de telefone. Para fazer essa verificação, o Amazon Cognito envia um código de verificação ou um link de verificação. No caso dos endereços de e-mail, o Amazon Cognito envia um código ou um link em uma mensagem de e-mail. Você pode escolher um **Tipo de verificação** de **Código** ou **Link** ao editar seu modelo de **Mensagem de verificação** no menu **Modelos de mensagens** no console do Amazon Cognito. Para obter mais informações, consulte [Personalizar mensagens de verificação de e-mail](cognito-user-pool-settings-message-customizations.md#cognito-user-pool-settings-email-verification-message-customization).

Para números de telefone, o Amazon Cognito envia um código em uma mensagem de texto SMS.

O Amazon Cognito deve verificar um número de telefone ou endereço de e-mail para confirmar os usuários e ajudá-los a recuperar senhas esquecidas. Como alternativa, você pode confirmar automaticamente os usuários com o gatilho Lambda de pré-inscrição ou usar [AdminConfirmSignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminConfirmSignUp.html)a operação da API. Para obter mais informações, consulte [Como cadastrar e confirmar contas de usuários](signing-up-users-in-your-app.md).

O código de verificação ou link tem validade de 24 horas.

Se você optar por exigir verificação de um endereço de e-mail ou número de telefone, o Amazon Cognito enviará automaticamente o código de verificação ou o link quando um usuário se cadastrar. Se o grupo de usuários tiver um [Acionador do Lambda de remetente personalizado de SMS](user-pool-lambda-custom-sms-sender.md) ou [Acionador do Lambda de remetente de e-mail personalizado](user-pool-lambda-custom-email-sender.md) configurado, essa função será invocada.

**Observações**  
O Amazon SNS cobra separadamente por mensagens de texto SMS que ele usa para verificar números de telefone. Não há encargos para envio de mensagens de e-mail. Para obter informações sobre preços do Amazon SNS, consulte [Worldwide SMS pricing](https://aws.amazon.com/sns/sms-pricing/) (Preço global de SMS). Para obter a lista atualizada de países nos quais o sistema de mensagens SMS está disponível, consulte [Supported regions and countries](https://docs.aws.amazon.com/sns/latest/dg/sms_supported-countries.html) (Países e regiões compatíveis). 
Quando você testar ações na aplicação que geram mensagens de e-mail do Amazon Cognito, use um endereço de e-mail real acessível ao Amazon Cognito sem devoluções definitivas. Para obter mais informações, consulte [Como enviar e-mails enquanto testa sua aplicação](signing-up-users-in-your-app.md#managing-users-accounts-email-testing).
O fluxo de senha esquecida requer o e-mail ou o número de telefone do usuário para verificar o usuário.

**Importante**  
Se um usuário se cadastrar com um número de telefone e um endereço de e-mail e suas configurações de grupo de usuários exigirem a verificação dos dois atributos, o Amazon Cognito enviará um código de verificação ao telefone por uma mensagem SMS. O Amazon Cognito ainda não verificou o endereço de e-mail, então seu aplicativo deve ligar [GetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html)para ver se um endereço de e-mail aguarda verificação. Se precisar de verificação, o aplicativo deverá ligar [GetUserAttributeVerificationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html)para iniciar o fluxo de verificação de e-mail. Em seguida, ele deve enviar o código de verificação ligando [VerifyUserAttribute](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html).

Você pode ajustar sua cota de gastos de mensagens SMS para uma Conta da AWS e para mensagens individuais. Os limites se aplicam somente ao custo do envio de mensagens SMS. Para obter mais informações, consulte **O que são cotas de gastos em nível de conta e de mensagem e** como elas funcionam? no [Amazon SNS FAQs](https://aws.amazon.com/sns/faqs/).

O Amazon Cognito envia mensagens SMS usando recursos do Amazon SNS no local em que você criou Região da AWS o grupo de usuários ou em uma região **alternativa legada do Amazon SNS da tabela** a seguir. A exceção são grupos de usuários do Amazon Cognito na região da Ásia-Pacífico (Seul). Esses grupos de usuários usam a configuração do Amazon SNS na região da Ásia-Pacífico (Tóquio). Para obter mais informações, consulte [Escolha o Região da AWS para mensagens SMS](user-pool-sms-settings.md#sms-choose-a-region).


| Região do Amazon Cognito | Região alternativa herdada do Amazon SNS | 
| --- | --- | 
| Leste dos EUA (Ohio) | Leste dos EUA (Norte da Virgínia) | 
| Ásia-Pacífico (Mumbai) | Ásia-Pacífico (Singapura) | 
| Ásia-Pacífico (Seul) | Ásia-Pacífico (Tóquio) | 
| Canadá (Central) | Leste dos EUA (Norte da Virgínia) | 
| Europa (Frankfurt) | Europa (Irlanda) | 
| Europa (Londres) | Europa (Irlanda) | 

**Exemplo:**se o grupo de usuários do Amazon Cognito estiver na Ásia-Pacífico (Mumbai) e você tiver aumentado o limite de gastos em ap-southeast-1, é provável que não queira solicitar um aumento separado em ap-south-1. Em vez disso, você pode usar os recursos do Amazon SNS na Ásia-Pacífico (Singapura). 

## Verificar atualizações de endereços de e-mail e números de telefone
<a name="user-pool-settings-verifications-verify-attribute-updates"></a>

Um atributo de endereço de e-mail ou número de telefone pode se tornar ativo e não verificado imediatamente depois que o usuário alterar o respectivo valor. O Amazon Cognito também pode exigir que seu usuário verifique o novo valor antes que o Amazon Cognito atualize o atributo. Quando você exigir que seus usuários confirmem primeiro o novo valor, eles poderão usar o valor original para fazer login e receber mensagens até confirmarem o novo valor.

Quando os usuários podem usar o endereço de e-mail ou o número de telefone como um alias de login no grupo de usuários, o nome de login para um atributo atualizado é condicionado à exigência de verificação de atributos atualizados. Quando você exigir que os usuários confirmem um atributo atualizado, um usuário poderá fazer login com o valor do atributo original até verificar o novo valor. Quando você não exigir que os usuários confirmem um atributo atualizado, um usuário não poderá fazer login nem receber mensagens no valor do atributo novo nem no original até confirmar o novo valor. 

Por exemplo, seu grupo de usuários permite o login com um alias de endereço de e-mail e exige que os usuários confirmem seu endereço de e-mail quando realizam uma atualização. Sue, que faz login como `sue@example.com`, quer alterar o endereço de e-mail para`sue2@example.com`, mas faz login como `ssue2@example.com` acidentalmente. Sue não recebe o e-mail de confirmação, então não consegue confirmar o e-mail `ssue2@example.com`. Sue faz login como `sue@example.com` e reenvia o formulário em sua aplicação para atualizar o endereço de e-mail para `sue2@example.com`. Ela recebe esse e-mail, fornece o código de verificação à aplicação e começa a fazer login como `sue2@example.com`. 

**Quando o usuário atualiza um atributo e o grupo de usuários verifica novos valores de atributos**
+ É possível fazer login com o valor do atributo original antes de confirmar o código para verificar o novo valor.
+ É possível fazer login somente com o novo valor do atributo depois de confirmar o código para verificar o novo valor.
+ Se você `phone_number_verified` definir `email_verified` `true` ou ativar uma solicitação de [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html)API, eles poderão fazer login antes de confirmarem o código que o Amazon Cognito enviou a eles.

**Quando um usuário atualiza um atributo e o grupo de usuários não verifica novos valores de atributos**
+ Não é possível fazer login nem receber mensagens com o valor do atributo original.
+ Não é possível fazer login nem receber mensagens que não sejam um código de confirmação com o valor do novo atributo antes de confirmar o código para verificar o novo valor.
+ Se você `phone_number_verified` definir `email_verified` `true` ou ativar uma solicitação de [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html)API, eles poderão fazer login antes de confirmarem o código que o Amazon Cognito enviou a eles.

## Para exigir verificação de atributos quando os usuários atualizam o endereço de e-mail ou o número de telefone


1. Faça login no [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. No painel de navegação, escolha **User Pools** (Grupos de usuários) e escolha o grupo de usuários que deseja editar.

1. No menu **Cadastrar-se**, selecione **Editar** em **Verificação de atributo e confirmação da conta do usuário**.

1. Selecione **Keep original attribute value active when an update is pending** (Manter valor do atributo original ativo quando uma atualização estiver pendente).

1. Em **Active attribute values when an update is pending** (Valores de atributos ativos quando uma atualização está pendente), escolha os atributos que você deseja exigir que seus usuários confirmem antes que o Amazon Cognito atualize o valor.

1. Escolha **Salvar alterações**.

Para exigir a verificação da atualização de atributos com a API do Amazon Cognito, você pode definir o `AttributesRequireVerificationBeforeUpdate` parâmetro em uma [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)solicitação.

## Como autorizar o Amazon Cognito a enviar mensagens SMS em seu nome
<a name="user-pool-settings-verifications-iam-role-for-sms"></a>

Para enviar mensagens SMS aos usuários em seu nome, o Amazon Cognito precisa da sua permissão. Para conceder essa permissão, você pode criar uma função AWS Identity and Access Management (IAM). No menu **Métodos de autenticação** do console do Amazon Cognito em SMS, selecione **Editar** para definir uma função.

# Configurar mensagens de MFA, autenticação, verificação e convite
<a name="cognito-user-pool-settings-message-customizations"></a>

Com o Amazon Cognito, você pode personalizar mensagens de autenticação, verificação e convite de usuários por SMS e e-mail para aprimorar a segurança e a experiência do usuário da aplicação. Para algumas mensagens, você pode escolher entre verificações baseadas em código e verificações por link de acesso com um clique. Este tópico aborda como você pode personalizar as comunicações de autenticação e verificação no console do Amazon Cognito. 

No menu **Modelos de mensagens**, você pode personalizar:
+ Seus modelos de e-mail e SMS para autenticação por senha de uso único (OTP) e autenticação multifator (MFA)
+ Mensagens de verificação de SMS e e-mail
+ O tipo de verificação para e-mail: código ou link
**nota**  
O Amazon Cognito envia links com seu modelo baseado em links nas mensagens de verificação quando os usuários se cadastram ou reenviam um código de confirmação. Os e-mails das operações de atualização de atributos e redefinição de senha usam o modelo de código.
+ Mensagens de convite a usuários
+ Endereços de e-mail FROM (Remetente) e REPLY-TO (Responder para) para e-mails que passam pelo seu grupo de usuários

**nota**  
Os modelos de mensagem de verificação por SMS e e-mail só serão exibidos se você tiver optado por exigir a verificação de número de telefone e e-mail. De maneira semelhante, o modelo de mensagem SMS de MFA só aparece se a configuração de MFA for **required** (obrigatória) ou **optional** (opcional).

**Topics**
+ [

## Modelos de mensagens
](#cognito-user-pool-settings-message-templates)
+ [

## Personalizar mensagens de MFA enviadas por e-mail e SMS
](#cognito-user-pool-settings-SMS-message-customization)
+ [

## Personalizar mensagens de verificação de e-mail
](#cognito-user-pool-settings-email-verification-message-customization)
+ [

## Como personalizar mensagens de convite a usuários
](#cognito-user-pool-settings-user-invitation-message-customization)
+ [

## Personalizar o endereço de e-mail
](#cognito-user-pool-settings-email-address-customization)
+ [

## Como autorizar o Amazon Cognito a enviar e-mails do Amazon SES em seu nome (de um endereço de e-mail remetente personalizado)
](#cognito-user-pool-settings-ses-authorization-to-send-email)

## Modelos de mensagens
<a name="cognito-user-pool-settings-message-templates"></a>

É possível usar modelos de mensagens para inserir espaços reservados em suas mensagens. O Amazon Cognito substitui os espaços reservados pelos valores correspondentes. Você pode consultar *Espaços reservados para modelos universais* em modelos de mensagem de qualquer tipo, embora esses valores não estejam presentes em todos os tipos de mensagens.


**Espaços reservados para modelos universais**  

|  Description  |  Token  | Tipo de mensagem | 
| --- | --- | --- | 
| Código de verificação | \$1\$1\$1\$1\$1\$1 | Mensagens de verificação, confirmação e MFA | 
| Senha temporária | \$1\$1\$1\$1\$1\$1 | Mensagens de senha esquecida e de convite | 
| Nome do usuário | \$1username\$1 | Mensagens de convite e de segurança avançada | 

Uma das respostas automatizadas disponíveis com [proteção contra ameaças](cognito-user-pool-settings-threat-protection.md) é notificar o usuário de que o Amazon Cognito detectou atividades possivelmente mal-intencionadas. Você pode usar espaços reservados de modelo de segurança avançada para fazer o seguinte:
+ Inclua detalhes específicos sobre um evento, como endereço IP, cidade, país, hora do login e nome do dispositivo. A proteção contra ameaças do Amazon Cognito pode analisar esses detalhes.
+ Verificar se um link de um clique é válido.
+ Use o ID do evento, o token de feedback e o nome de usuário para seu próprio link de um clique.

**nota**  
Para gerar links com um clique e usar os espaços reservados `{one-click-link-valid}` e `{one-click-link-invalid}` em modelos de e-mail de segurança avançada, será necessário ter um domínio já configurado para o grupo de usuários.

A proteção contra ameaças adiciona os espaços reservados abaixo que você pode inserir nos modelos de mensagem. Esses espaços reservados se aplicam às **Mensagens de autenticação adaptável**, notificações que o Amazon Cognito envia aos usuários cujas sessões foram avaliadas quanto ao nível de risco. Para configurar modelos de mensagens com essas variáveis, atualize a configuração de **função completa** da sua proteção contra ameaças no console do Amazon Cognito ou envie modelos em [SetRiskConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html)uma solicitação.


**Espaços reservados de modelo de segurança avançada**  

|  Description  |  Token  | 
| --- | --- | 
| IP address (endereço de IP) | \$1ip-address\$1 | 
| Cidade | \$1city\$1 | 
| País | \$1country\$1 | 
| Tempo de login | \$1login-time\$1 | 
| Nome do dispositivo | \$1device-name\$1 | 
| O link de um clique é válido | \$1one-click-link-valid\$1 | 
| O link de um clique não é válido | \$1one-click-link-invalid\$1 | 
| ID do evento | \$1event-id\$1 | 
| Token do feedback | \$1feedback-token\$1 | 

## Personalizar mensagens de MFA enviadas por e-mail e SMS
<a name="cognito-user-pool-settings-SMS-message-customization"></a>

Para personalizar as mensagens de [autenticação multifator (MFA)](user-pool-settings-mfa.md) enviadas por SMS e e-mail, edite **Mensagem de MFA** no menu **Modelos de mensagens** no console de grupos de usuários do Amazon Cognito.

**Importante**  
Sua mensagem personalizada deve conter o espaço reservado `{####}`. Esse espaço reservado é substituído pelo código de autenticação antes de a mensagem ser enviada.

O Amazon Cognito define um limite máximo de 140 caracteres UTF-8 para mensagens SMS, incluindo o código de autenticação.

### Como personalizar mensagens SMS de verificação
<a name="cognito-user-pool-settings-SMS-verification-message-customization"></a>

Para personalizar a mensagem SMS para verificação do número de telefone, edite o modelo **Mensagem de verificação** no menu **Modelos de mensagens** do seu grupo de usuários.

**Importante**  
Sua mensagem personalizada deve conter o espaço reservado `{####}`. Esse espaço reservado é substituído pelo código de verificação antes de a mensagem ser enviada.

O comprimento máximo da mensagem, incluindo o código de verificação, é de 140 caracteres em UTF-8.

## Personalizar mensagens de verificação de e-mail
<a name="cognito-user-pool-settings-email-verification-message-customization"></a>

Para verificar o endereço de e-mail de um usuário em seu grupo de usuários com o Amazon Cognito, você pode enviar ao usuário uma mensagem de e-mail com um link que pode ser selecionado ou enviar um código que possa ser inserido.

Para personalizar o assunto do e-mail e o conteúdo das mensagens de verificação de endereço de e-mail, edite o modelo de **Mensagem de verificação** no menu **Modelos de mensagens** de seu grupo de usuários. Você pode selecionar um **Tipo de verificação** de **Código** ou **Link** ao editar o modelo de **Mensagem de verificação**.

Se você escolher **Código** como tipo de verificação, sua mensagem personalizada deverá conter o espaço reservado `{####}`. Ao enviar a mensagem, o código de verificação substitui esse espaço reservado.

Se você escolher **Link** como o tipo de verificação, sua mensagem personalizada deverá conter o espaço reservado no formato `{##Verify Your Email##}`. Você pode alterar a string de texto entre os caracteres do espaço reservado, por exemplo, `{##Click here##}`. Um link de verificação intitulado *Verify Your Email* (Verificar seu e-mail) substitui esse espaço reservado.

O link para uma mensagem de verificação por e-mail direciona o usuário para um URL como no exemplo a seguir.

```
https://<your user pool domain>/confirmUser/?client_id=abcdefg12345678&user_name=emailtest&confirmation_code=123456
```

O comprimento máximo da mensagem, incluindo o código de verificação (se estiver presente), é de 20.000 caracteres em UTF-8. Você pode usar etiquetas HTML nessa mensagem para formatar o conteúdo.

## Como personalizar mensagens de convite a usuários
<a name="cognito-user-pool-settings-user-invitation-message-customization"></a>

É possível personalizar a mensagem de convite a usuários enviada pelo Amazon Cognito aos novos usuários por SMS ou e-mail editando o modelo de **Mensagens de convite** no menu **Modelos de mensagens**.

**Importante**  
Sua mensagem personalizada deve conter os espaços reservados `{username}` e `{####}`. Quando o Amazon Cognito envia a mensagem de convite, ele substitui esses espaços reservados pelo nome de usuário pela senha do usuário.

O comprimento máximo da mensagem SMS, incluindo o código de verificação, é de 140 caracteres em UTF-8. O comprimento máximo da mensagem de e-mail, incluindo o código de verificação, é de 20.000 caracteres em UTF-8. Você pode usar etiquetas HTML nas suas mensagem de e-mail para formatar o conteúdo.

## Personalizar o endereço de e-mail
<a name="cognito-user-pool-settings-email-address-customization"></a>

Por padrão, o Amazon Cognito envia mensagens de e-mail aos usuários dos seus grupos de usuários do endereço **no-reply@verificationemail.com**. É possível escolher especificar endereços de e-mail FROM (Remetente) e REPLY-TO (Responder para) personalizados em vez de **no-reply@verificationemail.com**.

**Como personalizar os endereços de e-mail FROM e REPLY-TO**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home) e escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Clique no menu **Métodos de autenticação**. Em **Email** (E-mail), escolha **Edit** (Editar).

1. Escolha uma **SES Region** (Região do SES).

1. Escolha um **FROM email address** (Endereço de e-mail do remetente) na lista de endereços de e-mail que você verificou com o Amazon SES na **SES Region** (Região do SES) selecionada por você. Para usar um endereço de e-mail de um domínio verificado, defina as configurações de e-mail na AWS Command Line Interface ou na AWS API. Para mais informações, consulte [Verificar endereços de e-mail e domínios no Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-addresses-and-domains.html) no *Guia do desenvolvedor do Amazon Simple Email Service*.

1. Escolha um **Configuration set** (Conjunto de configurações) na lista de conjuntos de configurações na **SES Region** (Região SES) escolhida.

1. Insira um **FROM sender name** (Nome do remetente) amigável para suas mensagens de e-mail, no formato `John Stiles <johnstiles@example.com>`.

1. Para personalizar o endereço de e-mail do destinatário, insira um endereço de e-mail válido no campo **Endereço de e-mail do destinatário**.

## Como autorizar o Amazon Cognito a enviar e-mails do Amazon SES em seu nome (de um endereço de e-mail remetente personalizado)
<a name="cognito-user-pool-settings-ses-authorization-to-send-email"></a>

É possível configurar o Amazon Cognito para enviar e-mails de um endereço de e-mail remetente personalizado ao invés do seu endereço padrão. Para usar um endereço personalizado, você deve conceder permissão para que o Amazon Cognito envie mensagens de e-mail de uma identidade verificada do Amazon SES. Na maioria dos casos, é possível conceder essa permissão criando uma política de autorização de envio. Para mais informações, consulte [Usar autorização de envio com o Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization.html) no *Guia do desenvolvedor do Amazon Simple Email Service*. 

Quando você configura um grupo de usuários para usar o Amazon SES para mensagens de e-mail, o Amazon Cognito cria a função `AWSServiceRoleForAmazonCognitoIdpEmailService` em sua conta para conceder acesso ao Amazon SES. Nenhuma política de autorização de envio é necessária quando a função vinculada ao serviço `AWSServiceRoleForAmazonCognitoIdpEmailService` é usada. Você só precisa adicionar uma política de autorização de envio quando usar a funcionalidade de e-mail padrão em seu grupo de usuários *e* uma identidade verificada do Amazon SES como o endereço remetente.

Para obter mais informações sobre a função vinculada ao serviço criada pelo Amazon Cognito, consulte [Como usar funções vinculadas a serviço para o Amazon Cognito](using-service-linked-roles.md).

O exemplo de política de autorização de envio a seguir concede ao Amazon Cognito uma capacidade limitada de usar uma identidade verificada do Amazon SES. O Amazon Cognito só pode enviar mensagens de e-mail quando o fizer em nome do grupo de usuários na condição `aws:SourceArn` e da conta na condição `aws:SourceAccount`. Para mais exemplos, consulte [Exemplos de política de autorização de envio do Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policy-examples.html) no *Guia do desenvolvedor do Amazon Simple Email Service*.

**nota**  
Neste exemplo, o valor "Sid" é uma string arbitrária que identifica exclusivamente a instrução. Para mais informações sobre sintaxe de políticas, consulte [Políticas de autorização de envio do Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policies.html) no *Guia do desenvolvedor do Amazon Simple Email Service*.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "stmnt1234567891234",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "email.cognito-idp.amazonaws.com"
                ]
            },
            "Action": [
                "SES:SendEmail",
                "SES:SendRawEmail"
            ],
            "Resource": "arn:aws:ses:us-east-1:111122223333:identity/support@example.com",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:cognito-idp:us-east-1:111122223333:userpool/us-east-1_EXAMPLE"
                }
            }
        }
    ]
}
```

------

O console do Amazon Cognito adiciona uma política semelhante para você quando você seleciona uma identidade do Amazon SES do menu suspenso. Se usar a CLI ou a API para configurar o grupo de usuários, você deverá anexar uma política estruturada como o exemplo anterior à sua identidade do Amazon SES.

# Como criar contas de usuário como administrador
<a name="how-to-create-user-accounts"></a>

Os grupos de usuários não são apenas um diretório de usuários do gerenciamento de identidade e acesso do cliente (CIAM), em que qualquer pessoa na Internet pode cadastrar um perfil de usuário na aplicação. Você pode desativar o cadastro por autoatendimento. Talvez você já conheça seus clientes e queira admitir apenas aqueles que foram autorizados com antecedência. Você pode colocar barreiras de proteção na autenticação manual da aplicação com um [provedor de identidades SAML 2.0 ou OIDC privado](cognito-user-pools-identity-federation.md), [importando usuários](cognito-user-pools-import-users.md), [examinando usuários no momento do cadastro](user-pool-lambda-pre-sign-up.md) ou criando usuários com operações administrativas de API. Seu fluxo de trabalho para criação administrativa de usuários pode ser programático, provisionando usuários após o registro em outro sistema, ou pode ser baseado em testes case-by-case ou no console do Amazon Cognito.

Quando você cria usuários como administrador, o Amazon Cognito define uma senha temporária para eles e envia uma mensagem de boas-vindas ou convite. Eles podem seguir o link na mensagem de convite e fazer login pela primeira vez, definindo uma senha e confirmando a conta. A página a seguir descreve como criar usuários e configurar a mensagem de boas-vindas. Para obter mais informações sobre a criação de usuários com a API de grupos de usuários e um AWS SDK ou CDK, consulte. [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html)

Depois de criar seu grupo de usuários, você pode criar usuários usando a Console de gerenciamento da AWS, bem como a API do AWS Command Line Interface Amazon Cognito. Você pode criar um perfil para um novo usuário em um grupo de usuários e enviar uma mensagem de boas-vindas com instruções de cadastro por SMS ou e-mail.

Veja a seguir alguns exemplos de como os administradores podem gerenciar usuários em grupos de usuários.
+ Crie um novo perfil de usuário no console do Amazon Cognito ou com a operação de API `AdminCreateUser`.
+ Disponibilize [fluxos de autenticação](amazon-cognito-user-pools-authentication-flow-methods.md) sem senha username-and-password, chave de acesso e personalizados para seu grupo de usuários e cliente de aplicativos.
+ Defina os valores dos atributos do usuário.
+ Crie atributos personalizados.
+ Defina o valor dos [atributos personalizados](user-pool-settings-attributes.md#user-pool-settings-custom-attributes) imutáveis nas solicitações de API `AdminCreateUser`. Esse recurso não está disponível no console do Amazon Cognito.
+ Especifique uma senha temporária, crie um usuário sem senha ou permita que o Amazon Cognito gere automaticamente uma senha.
+ Crie novos usuários e confirme automaticamente suas contas, verifique seus endereços de e-mail ou verifique seus números de telefone.
+ [Especifique mensagens personalizadas de convite por SMS e e-mail para novos usuários por meio dos acionadores Console de gerenciamento da AWS ou Lambda, como [mensagem personalizada](user-pool-lambda-custom-message.md), remetente de [SMS personalizado e remetente](user-pool-lambda-custom-sms-sender.md) de e-mail personalizado.](user-pool-lambda-custom-email-sender.md)
+ Especifique se as mensagens de convite serão enviadas por SMS, e-mail ou ambos.
+ Reenvie a mensagem de boas-vindas a um usuário existente chamando a API `AdminCreateUser`, especificando `RESEND` para o parâmetro `MessageAction`.
+ [Suprima](#admincreateuserwalkthrough-step-invitationmessage) o envio da mensagem de convite quando o usuário for criado.
+ Especifique um limite de tempo de expiração de até 90 dias para novas contas de usuário.
+ Permita que os usuários se cadastrem ou exija que novos usuários sejam adicionados apenas pelo administrador.

Os administradores também podem conectar usuários com AWS credenciais em um aplicativo do lado do servidor. Para obter mais informações, consulte [Modelos de autorização para autenticação de API e SDK](authentication-flows-public-server-side.md).

## Fluxos de autenticação de usuários e criação de usuários
<a name="how-to-create-user-accounts-flows"></a>

A criação administrativa de usuários tem opções que diferem com base na configuração do seu grupo de usuários. Os *fluxos de autenticação*, ou métodos disponíveis aos usuários para login e MFA, podem alterar a forma como você cria usuários e as mensagens enviadas a eles. Veja a seguir alguns fluxos de autenticação disponíveis em grupos de usuários.
+ Nome de usuário e senha
+ Chaves de acesso
+ Faça login com terceiros IdPs
+ Sem senha com senhas de uso único por e-mail e SMS () OTPs
+ Autenticação multifatorial com e-mail, SMS e aplicativo autenticador OTPs
+ Autenticação personalizada com acionadores do Lambda

Para obter mais informações sobre como configurar esses fatores de login, consulte [Autenticação com grupos de usuários do Amazon Cognito](authentication.md).

## Criar usuários sem senhas
<a name="how-to-create-user-accounts-thingstoknow-passwordless"></a>

Se o login sem senha estiver habilitado para seu grupo de usuários, você poderá criar usuários sem senhas. Forneça valores de atributos para um fator de login sem senha disponível para criar um usuário sem uma senha. Por exemplo, se o login sem senha com OTP enviada por e-mail estiver disponível em seu grupo de usuários, você poderá criar um usuário sem senha e com um atributo de endereço de e-mail. Se os únicos fluxos de autenticação disponíveis para novos usuários exigirem uma senha, por exemplo, chave de acesso ou nome de usuário e senha, você deverá criar ou gerar uma senha temporária para cada novo usuário.

**Como criar um novo usuário sem uma senha**
+ Selecione **Não defina uma senha** no console do Amazon Cognito
+ Omita ou deixe em branco o parâmetro `TemporaryPassword` da solicitação de API `AdminCreateUser`

**Usuários sem senhas são confirmados automaticamente**  
Normalmente, novos usuários recebem uma senha temporária e entram em um status `FORCE_CHANGE_PASSWORD` ao serem criados. Quando você cria usuários sem senhas, eles imediatamente entram em um estado `CONFIRMED`. Você não pode reenviar códigos de confirmação para esses usuários no estado `CONFIRMED`.

**As mensagens de convite mudam para usuários sem senhas.**  
Por padrão, o Amazon Cognito envia uma [mensagem de convite](cognito-user-pool-settings-message-customizations.md#cognito-user-pool-settings-user-invitation-message-customization) para novos usuários que diz: `Your username is {userName} and your password is {####}.` Quando você cria usuários sem senha, a mensagem diz: `Your username is {userName}.` Personalize sua mensagem de convite para refletir se você definirá senhas para os usuários. Omita a variável de senha `{####}` nos modelos de autenticação sem senha.

**Não é possível gerar senhas automaticamente quando fatores sem senha estão disponíveis**  
Se configurou o grupo de usuários para oferecer suporte ao login sem senha com OTP enviada por e-mail ou telefone, você não conseguirá gerar uma senha automaticamente. Para os usuários que terão uma senha, você deverá definir uma senha temporária ao criar os perfis deles.

**Os usuários sem senha devem ter valores para todos os atributos obrigatórios**  
Quando você cria um usuário *sem* uma senha, sua solicitação só é bem-sucedida se o usuário fornecer valores para todos os atributos que você marcou como obrigatórios em seu grupo de usuários. Isso se aplica a qualquer atributo obrigatório, não somente aos atributos de número de telefone e e-mail obrigatórios para a entrega da OTP.

## Criar usuários que fornecerão valores de atributos obrigatórios posteriormente
<a name="how-to-create-user-accounts-thingstoknow-password-restrictions"></a>

É recomendável exigir atributos em seu grupo de usuários. No entanto, colete esses atributos após a criação administrativa de usuários, durante a interação do usuário na aplicação. Os administradores podem omitir valores para os atributos obrigatórios ao criar usuários com *senhas temporárias*. Você não pode omitir valores de atributos obrigatórios para usuários sem senha.

Os usuários com valores ausentes para os atributos obrigatórios e uma senha temporária recebem um desafio [NEW\$1PASSWORD\$1REQUIRED](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html#CognitoUserPools-RespondToAuthChallenge-request-ChallengeResponses) no primeiro login. Em seguida, eles podem informar um valor para os atributos obrigatórios ausentes no parâmetro `requiredAttributes`. Você pode criar usuários com senhas e sem atributos obrigatórios somente se todos os atributos obrigatórios forem [mutáveis](user-pool-settings-attributes.md#user-pool-settings-custom-attributes). Os usuários só podem concluir o login com desafios `NEW_PASSWORD_REQUIRED` e valores de atributos obrigatórios se esses atributos forem [graváveis](user-pool-settings-client-apps.md#cognito-user-pools-app-idp-settings-about) pelo cliente de aplicação que eles usam para fazer login.

Ao definir uma senha permanente para um usuário criado pelo administrador, o status muda para `CONFIRMED` e seu grupo de usuários não solicita uma nova senha *ou* atributos obrigatórios no primeiro login.

## Criando um novo usuário no Console de gerenciamento da AWS
<a name="creating-a-new-user-using-the-console"></a>

É possível definir requisitos de senha de usuário, configurar as mensagens de convite e verificação enviadas aos usuários e adicionar novos usuários com o console do Amazon Cognito.

### Definir uma política de senha e habilitar a autoinscrição
<a name="set-user-password-policy"></a>

Você pode definir as configurações para a complexidade mínima da senha e se os usuários podem se inscrever usando public APIs em seu grupo de usuários.

**Configurar uma política de senhas**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home) e escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Clique no menu **Métodos de autenticação** e localize **Política de senha**. Escolha **Editar**.

1. Selecione o **Password policy mode** (Modo de política de senha) **Custom** (Personalizado).

1. Selecione um **Password minimum length** (Comprimento mínimo da senha). Para os limites do requisito de tamanho da senha, consulte [Cotas de recursos de grupos de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/limits.html#limits-hard).

1. Selecione um requisito de **Password complexity** (Complexidade de senha).

1. Escolha por quanto tempo a senha definida pelos administradores deve ser válida.

1. Escolha **Salvar alterações**.

**Permitir cadastro por autoatendimento**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home) e escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Clique no menu **Cadastrar-se** e localize **Cadastro por autoatendimento**. Selecione **Edit** (Editar).

1. Escolha se deseja **Enable self-registration** (Habilitar a autoinscrição). O autorregistro geralmente é usado com clientes de aplicativos públicos que precisam registrar novos usuários em seu grupo de usuários sem distribuir um segredo de cliente ou credenciais de API AWS Identity and Access Management (IAM).
**Como desabilitar a autoinscrição**  
Se você não habilitar a autoinscrição, os novos usuários deverão ser criados por ações administrativas da API usando credenciais da API do IAM ou mediante login com provedores federados.

1. Escolha **Salvar alterações**.

### Personalizar mensagens de e-mail e de SMS
<a name="creating-a-new-user-customize-messages"></a>

**Personalizar mensagens de usuário**

É possível personalizar as mensagens que o Amazon Cognito envia aos seus usuários quando você os convida para o acesso, eles se cadastram em uma conta de usuário ou acessam e são solicitados a fazer a autenticação multifator (MFA).
**nota**  
Uma **Invitation message** (Mensagem de convite) é enviada quando você cria um usuário em seu grupo de usuários e o convida a acessar. O Amazon Cognito envia informações iniciais de acesso para o endereço de e-mail ou o número de telefone do usuário.  
Uma **Verification message** (Mensagem de verificação) é enviada quando um usuário se cadastra em uma conta no grupo de usuários. O Amazon Cognito envia um código para o usuário. Quando o usuário fornece o código ao Amazon Cognito, ele verifica suas informações de contato e confirma sua conta para acesso. Códigos de verificação são válidos por 24 horas.  
Uma **MFA message** (Mensagem de MFA) é enviada quando você habilita o SMS de MFA em seu grupo de usuários e um usuário que tenha configurado o SMS de MFA faz o acesso e a MFA é solicitada.

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home) e escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Escolha o menu **Modelos de mensagens** e selecione **Mensagem de verificação**, **Mensagem de convite** ou **Mensagem de MFA** e clique em **Editar**.

1. Personalize as mensagens para o tipo de mensagem escolhido.
**nota**  
Todas as variáveis nos modelos de mensagens devem ser incluídas quando você personaliza a mensagem. Se a variável, por exemplo **\$1\$1\$1\$1\$1\$1**, não for incluída, seu usuário não terá informações suficientes para concluir a ação da mensagem.  
Para mais informações, consulte [Modelos de mensagens](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-message-templates.html).

1. 

   1. **Mensagens de verificação**

      1. Selecione um **Verification type** (Tipo de verificação) para mensagens de **Email** (E-mail). Um verificação por **Code** (Código) envia um código numérico que o usuário deve inserir. Uma verificação por **Link** (Link) envia um link no qual o usuário pode clicar para verificar suas informações de contato. O texto na variável para uma mensagem de **Link** é exibido como texto com hiperlink. Por exemplo, um modelo de mensagem usando a variável \$1\$1\$1Clique aqui\$1\$1\$1 é exibido como [Clique aqui]() na mensagem de e-mail.

      1. Insira um **Email subject** (Assunto do e-mail) para mensagens de **Email** (E-mail).

      1. Insira um modelo personalizado de **Email message** (Mensagem de e-mail) para mensagens de **Email** (E-mail). Você pode personalizar esse modelo usando código em HTML.

      1. Insira um modelo personalizado de **SMS message** (Mensagem SMS) para mensagens de **SMS** (SMS).

      1. Escolha **Salvar alterações**.

   1. **Mensagens de convite**

      1. Insira um **Email subject** (Assunto do e-mail) para mensagens de **Email** (E-mail).

      1. Insira um modelo personalizado de **Email message** (Mensagem de e-mail) para mensagens de **Email** (E-mail). Você pode personalizar esse modelo usando código em HTML.

      1. Insira um modelo personalizado de **SMS message** (Mensagem SMS) para mensagens de **SMS** (SMS).

      1. Escolha **Salvar alterações**.

   1. **Mensagens de MFA**

      1. Insira um modelo personalizado de **SMS message** (Mensagem SMS) para mensagens de **SMS** (SMS).

      1. Escolha **Salvar alterações**.

### Criar um usuário
<a name="creating-a-new-user-using-the-users-tab"></a>

**Criar um usuário**

Você pode criar novos usuários para seu grupo de usuários diretamente do console do Amazon Cognito. Normalmente, os usuários podem fazer login depois que eles definem uma senha. Para acesso com um endereço de e-mail, o usuário precisa verificar o atributo `email`. Para fazer login com um número de telefone, o usuário deve verificar o atributo `phone_number`. Para confirmar contas como administrador, você também pode usar a API AWS CLI ou ou criar perfis de usuário com um provedor de identidade federado. Para mais informações, consulte a [Referência de API do Amazon Cognito](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/).

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home) e escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Clique no menu **Usuários** e, em seguida, selecione **Criar um usuário**.

1. Revise os **User pool sign-in and security requirements** (Requisitos de acesso e segurança do grupo de usuários) para obter orientações sobre requisitos de senha, métodos de recuperação de conta disponíveis e atributos de alias para seu grupo de usuários.

1. <a name="admincreateuserwalkthrough-step-invitationmessage"></a>Escolha como você deseja enviar uma **Invitation message** (Mensagem de convite). Escolha mensagem SMS, mensagem de e-mail ou ambos. Para suprimir a mensagem de convite, clique em **Não enviar um convite**.
**nota**  
Para que você possa enviar mensagens de convite, configure um remetente e uma Região da AWS com o Amazon Simple Notification Service e o Amazon Simple Email Service no menu **Métodos de autenticação** do grupo de usuários. Aplicam-se tarifas de mensagens e dados do destinatário da mensagem. A cobrança de mensagens de e-mail pelo Amazon SES e de mensagens SMS pelo Amazon SNS é feita separadamente.

1. Selecione um **Username** (Nome de usuário) para o novo usuário.

1. Escolha **Create a password** (Criar uma senha) ou **Generate a password** (Gerar uma senha) se desejar que o Amazon Cognito gere uma senha para o usuário. A opção de gerar uma senha não estará disponível se o [login sem senha](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless) estiver habilitado no grupo de usuários. Qualquer senha temporária deve aderir à política de senha do grupo de usuários.

1. Escolha **Criar**.

1. Clique no menu **Usuários** e selecione o **Nome de usuário** correspondente. Adicione e edite **User attributes** (Atributos do usuário) e **Group memberships** (Associações de grupo). Examine **User event history** (Histórico de eventos do usuário).

# Como adicionar grupos a um grupo de usuários
<a name="cognito-user-pools-user-groups"></a>

O suporte a grupos de usuários no Amazon Cognito permite que você crie e gerencie grupos, adicione usuários a grupos e remova usuários de grupos. Use grupos a fim de criar coleções de usuários para gerenciar suas permissões ou representar diferentes tipos de usuários. Você pode atribuir uma função AWS Identity and Access Management (IAM) a um grupo para definir as permissões dos membros de um grupo.

Você pode usar grupos para criar um conjunto de usuários em um grupo de usuários, que normalmente é feito para definir as permissões para esses usuários. Por exemplo, você pode criar grupos separados para os usuários que são leitores, colaboradores e editores do seu site e aplicativo. Usando a função do IAM associada a um grupo, você também pode definir permissões diferentes para os diferentes grupos de modo que apenas colaboradores possam colocar conteúdo no Amazon S3 e apenas editores possam publicar conteúdo por meio de uma API no Amazon API Gateway.

O Amazon Cognito cria um grupo de usuários para cada OIDC e [provedor de identidade social (](cognito-user-pools-identity-federation.md#cognito-user-pools-identity-federation-how-it-works)IdP) que você adiciona ao seu grupo de usuários. SAMl O nome do grupo está no formato `[user pool ID]_[IdP name]`, por exemplo, `us-east-1_EXAMPLE_MYSSO` ou `us-east-1_EXAMPLE_Google`. Cada perfil de usuário exclusivo do IdP gerado automaticamente é adicionado automaticamente a esse grupo. Os [usuários vinculados](cognito-user-pools-identity-federation-consolidate-users.md) não são adicionados automaticamente a esse grupo, mas você pode adicionar os perfis ao grupo em outro processo.

Você pode criar e gerenciar grupos em um grupo de usuários a partir da Console de gerenciamento da AWS APIs, da e da CLI. Como desenvolvedor (usando AWS credenciais), você pode criar, ler, atualizar, excluir e listar os grupos de um grupo de usuários. Você também pode adicionar e remover usuários dos grupos.

Não há custo adicional para usar grupos dentro de um grupo de usuários. Para obter mais informações, consulte [Preço do Amazon Cognito](https://aws.amazon.com/cognito/pricing/).

## Como atribuir funções do IAM a grupos
<a name="assigning-iam-roles-to-groups"></a>

É possível usar grupos para controlar permissões aos recursos usando uma função do IAM. As funções do IAM incluem políticas de confiança e políticas de permissão. A política de [confiança](https://docs.aws.amazon.com/cognito/latest/developerguide/role-trust-and-permissions.html) da função especifica quem pode usar a função. As políticas de [permissão](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies) especificam as ações e os recursos que os membros do grupo podem acessar. Ao criar uma função do IAM, configure a política de confiança da função a fim de permitir que os usuários do grupo assumam a função. Nas políticas de permissão da função, especifique as permissões que você deseja que o grupo tenha.

Ao criar um grupo no Amazon Cognito, especifique uma função do IAM fornecendo o [ARN](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns)da função. Quando membros do grupo fazem login usando o Amazon Cognito, eles podem receber credenciais temporárias dos grupos de identidades. Suas permissões são determinadas pela função do IAM associada.

Usuários individuais podem estar em vários grupos. Como desenvolvedor, você tem as seguintes opções para escolher automaticamente a função do IAM quando um usuário estiver em vários grupos:
+ Você pode atribuir valores de precedência para cada grupo. O grupo com a melhor (mais baixa) precedência será escolhido e sua função do IAM associada será aplicada. 
+ Seu aplicativo também pode escolher entre as funções disponíveis ao solicitar AWS credenciais para um usuário por meio de um grupo de identidades, especificando um ARN de função no parâmetro. [GetCredentialsForIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html)`CustomRoleARN` A função do IAM especificada deve corresponder a uma função que esteja disponível para o usuário.

## Como atribuir valores de precedência a grupos
<a name="assigning-precedence-values-to-groups"></a>

Um usuário pode pertencer a mais de um grupo. Nos tokens de ID e acesso do usuário, a afirmação `cognito:groups` contém a lista de todos os grupos aos quais um usuário pertence. A requisição `cognito:roles` contém a lista de funções correspondentes aos grupos.

Como um usuário pode pertencer a mais de um grupo, uma precedência pode ser atribuída a cada grupo. Esse é um valor inteiro não negativo que especifica a precedência desse grupo em relação aos outros grupos aos quais um usuário pertence no grupo de usuários. Zero é o principal valor de precedência. Os grupos com os menores valores precedência prevalecem sobre grupos com valores de precedência nulos ou superiores. Se um usuário pertencer a dois ou mais grupos, o grupo com o menor valor de precedência será o que terá a função do IAM aplicada à declaração `cognito:preferred_role` no token de ID do usuário.

Dois grupos podem ter o mesmo valor de precedência. Se isso acontecer, nenhum dos grupos terá precedência sobre o outro. Se dois grupos com o mesmo valor de precedência tiverem a mesma função ARN, essa função será usada na requisição `cognito:preferred_role` em tokens de ID para os usuários em cada grupo. Se os dois grupos tiverem funções diferentes ARNs, a `cognito:preferred_role` reivindicação não será definida nos tokens de ID dos usuários.

## Como usar grupos para controlar permissões com o Amazon API Gateway
<a name="using-groups-to-control-permission-with-amazon-api-gateway"></a>

Você pode usar grupos em um grupo de usuários para controlar permissões com o Amazon API Gateway. Os grupos dos quais um usuário é membro estão incluídos no token de ID e no token de acesso de um grupo de usuários na declaração `cognito:groups`. É possível enviar tokens de ID ou de acesso com solicitações para o Amazon API Gateway e usar um autorizador de grupo de usuários do Amazon Cognito para uma API REST. Para mais informações, consulte [Controlar o acesso a uma API REST usando um grupo de usuários do Amazon Cognito como autorizador](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html) no [Guia do desenvolvedor do API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/).

Também é possível autorizar o acesso a uma API HTTP do Amazon API Gateway com um autorizador JWT personalizado. Para obter mais informações, consulte [Controle do acesso ao HTTP APIs com autorizadores JWT](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-jwt-authorizer.html) no Guia do [desenvolvedor do API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/).

## Limitações nos grupos
<a name="user-pool-user-groups-limitations"></a>

Grupos de usuários estão sujeitas às seguintes limitações:
+ O número de grupos que você pode criar é limitado pelas [cotas de serviço do Amazon Cognito](quotas.md).
+ Grupos não podem ser aninhados.
+ Você não pode pesquisar usuários em um grupo.
+ Você não pode pesquisar grupos por nome, mas pode listá-los.

## Criando um novo grupo no Console de gerenciamento da AWS
<a name="creating-a-new-group-using-the-console"></a>

Siga o procedimento abaixo para criar um novo grupo.

**Para criar um novo grupo**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente da lista.

1. Clique no menu **Grupos** e selecione **Criar um grupo**.

1. Na página **Create a group** (Criar um grupo), em **Group name** (Nome do grupo), insira um nome para o novo grupo.

1. Opcionalmente, é possível fornecer informações adicionais sobre esse grupo usando qualquer um dos seguintes campos:
   + **Description** (Descrição): insira detalhes sobre o uso planejado para esse novo grupo.
   + **Precedence** (Precedência): o Amazon Cognito avalia e aplica todas as permissões de grupo para um determinado usuário com base nos grupos aos quais eles pertencem que têm um valor de precedência menor. O grupo com a precedência mais baixa será escolhido e sua função do IAM associada será aplicada. Para obter mais informações, consulte [Como atribuir valores de precedência a grupos](#assigning-precedence-values-to-groups).
   + **IAM role** (Função do IAM): é possível atribuir uma função do IAM ao grupo quando precisar controlar permissões aos recursos. Se você estiver integrando um grupo de usuários a um grupo de identidades, a configuração de **IAM role (Função do IAM)** determinará qual função estará atribuída no token de ID do usuário se o grupo de identidades estiver configurado para selecionar a função a partir do token. Para obter mais informações, consulte [Como atribuir funções do IAM a grupos](#assigning-iam-roles-to-groups).
   + **Add users to this group** (Adicionar usuários a esse grupo): adicione usuários existentes como membros desse grupo após sua criação.

1. Selecione **Create** (Criar) para confirmar.

# Como gerenciar e pesquisar contas de usuários
<a name="how-to-manage-user-accounts"></a>

Os grupos de usuários podem conter milhões de usuários. Trabalhar com um conjunto de dados desse porte é um desafio para os administradores. O Amazon Cognito tem ferramentas para encontrar e modificar perfis de usuário. Os principais métodos para encontrar usuários são o menu **Usuários** do console do Amazon Cognito e com. [ListUsers](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html) Dos métodos que recuperam informações sobre usuários, essas são as opções que não têm um impacto nos custos, ao contrário de, por exemplo, [AdminGetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminGetUser.html).

Esta seção do guia contém informações sobre como encontrar e atualizar perfis de usuário em um grupo de usuários.

## Como visualizar atributos do usuário
<a name="manage-user-accounts-viewing-user-attributes"></a>

Siga o procedimento abaixo para visualizar atributos do usuário no console do Amazon Cognito.

**Para visualizar atributos do usuário**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente da lista.

1. Clique no menu **Usuários** e escolha um usuário na lista.

1. Na página de detalhes do usuário, em **User attributes** (Atributos do usuário), você pode ver quais atributos estão associados ao usuário.

## Como redefinir uma senha do usuário
<a name="manage-user-accounts-reset-user-password"></a>

Siga o procedimento abaixo para redefinir uma senha do usuário no console do Amazon Cognito.

**Para redefinir uma senha do usuário**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente da lista.

1. Clique no menu **Usuários** e escolha um usuário na lista.

1. Na página de detalhes do usuário, escolha **Actions** (Ações), **Reset password** (Redefinir senha).

1. Na caixa de diálogo **Reset password** (Redefinir senha), leia as informações e, quando estiver pronto, escolha **Reset** (Redefinir).

   Essa ação resulta imediatamente no envio de um código de confirmação para o usuário e desabilita a senha atual do usuário, ao alterar o estado do usuário para `RESET_REQUIRED`. O código **Reset password** (Redefinir senha) é válido por 1 hora.

## Habilitar, desabilitar e excluir contas de usuário
<a name="manage-user-accounts-enable-disable"></a>

Você pode excluir perfis de usuário não utilizados ou, se quiser impedir temporariamente o acesso, desabilitá-los. Os usuários podem excluir as próprias contas, mas somente os administradores do grupo de usuários podem habilitar e desabilitar contas de usuário.

**Efeito da exclusão**  
Os usuários não podem fazer login com contas de usuário excluídas e, para recuperar o acesso, devem se cadastrar ou criar uma nova conta.

**Efeito da desabilitação de contas**  
Quando você desabilita uma conta de usuário, o Amazon Cognito invalida automaticamente todas as sessões autenticadas, desativa a conta do usuário para login e [revoga os tokens de acesso e atualização](token-revocation.md). O Amazon Cognito retorna um erro `invalid_request` com a mensagem `User is not enabled` quando um usuário tenta fazer login em uma conta que você desabilitou. Esse comportamento não muda com as [configurações de divulgação de existência do usuário](cognito-user-pool-managing-errors.md) para o cliente de aplicação. É possível desabilitar as contas de usuário locais e os perfis locais das contas de usuário federado. Quando os usuários fazem login com o login gerenciado ou com a IU hospedada clássica, você desabilita a conta deles e eles tentam fazer login novamente com o cookie do navegador que mantém a sessão autenticada, o Amazon Cognito os redireciona para a página de login.

**Efeito da habilitação de contas**  
Os usuários podem fazer login imediatamente nas contas após você habilitá-las. As contas de usuário são habilitadas por padrão. Os atributos e senhas dos usuários permanecem os mesmos de antes da desabilitação da conta. Os tokens que sua aplicação revogou, independentemente de você ter desabilitado a conta do usuário ou revogado separadamente o token de atualização, permanecem inválidos depois que você habilita a conta de usuário que tinha o token.

------
#### [ Delete a user account (console) ]

**Como excluir uma conta de usuário**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente da lista.

1. Clique no menu **Usuários** e marque o botão de seleção ao lado do nome de usuário de um usuário na lista.

1. Escolha **Excluir**.

1. Selecione **Desabilitar acesso do usuário**.

1. Escolha **Excluir**.

------
#### [ Delete a user account (API) ]

Os usuários podem excluir suas contas com a operação da access-token-authorized [DeleteUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUser.html)API de autoatendimento. Veja a seguir um exemplo de corpo da solicitação `DeleteUser`.

```
{
   "AccessToken": "eyJra456defEXAMPLE"
}
```

Os administradores podem excluir contas de usuário com a operação de API autorizada pelo IAM [AdminDeleteUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDeleteUser.html). Veja a seguir um exemplo de corpo da solicitação `AdminDeleteUser`.

```
{
   "Username": "testuser",
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

------
#### [ Disable a user account (console) ]

**Como desabilitar uma conta de usuário**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente da lista.

1. Clique no menu **Usuários** e escolha o nome de usuário de um usuário na lista.

1. Na página de detalhes do usuário, selecione **Ações** e **Desabilitar acesso do usuário**.

1. Na caixa de diálogo criada, clique em **Desabilitar**.

------
#### [ Disable a user account (API) ]

Os administradores podem desativar contas de usuário com a operação de API autorizada pelo IAM [AdminDisableUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminDisableUser.html). Veja a seguir um exemplo de corpo da solicitação `AdminDisableUser`.

```
{
   "Username": "testuser",
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

------
#### [ Enable a user account (console) ]

**Como habilitar uma conta de usuário**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente da lista.

1. Clique no menu **Usuários** e escolha o nome de usuário de um usuário na lista.

1. Na página de detalhes do usuário, selecione **Ações** e **Habilitar acesso do usuário**.

1. Na caixa de diálogo criada, clique em **Habilitar**.

------
#### [ Enable a user account (API) ]

Os administradores podem habilitar contas de usuário com a operação de API autorizada pelo IAM [AdminEnableUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminEnableUser.html). Veja a seguir um exemplo de corpo da solicitação `AdminEnableUser`.

```
{
   "Username": "testuser",
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

------

## Como pesquisar atributos de usuários
<a name="manage-user-accounts-searching-user-attributes"></a>

Se você já tiver criado um grupo de usuários, poderá pesquisar no painel **Users (Usuários)** no Console de gerenciamento da AWS. Você também pode usar a [ListUsers API](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html) do Amazon Cognito, que aceita um parâmetro **Filter**.

Você pode pesquisar qualquer um dos seguintes atributos padrão: Atributos personalizados não podem ser pesquisados.
+ username (diferencia maiúsculas de minúsculas)
+ e-mail
+ phone\$1number
+ name
+ given\$1name
+ family\$1name
+ preferred\$1username
+ cognito: user\$1status (chamado **Status** no console) (diferencia maiúsculas de minúsculas)
+ status (chamado **Enabled (Habilitado)** no console) (diferencia maiúsculas de minúsculas)
+ sub

**nota**  
Você também pode listar usuários usando um filtro no lado do cliente. O filtro no lado do servidor não encontra correspondência com mais de um atributo. Para pesquisa avançada, use um filtro no lado do cliente com o parâmetro `--query` da ação `list-users` na AWS Command Line Interface. Quando você usa um filtro do lado do cliente, ListUsers retorna uma lista paginada de zero ou mais usuários. Você pode receber várias páginas consecutivas com zero resultados. Repita a consulta com cada token de paginação retornado até que você receba um valor de token de paginação nulo, em seguida, revise o resultado combinado.  
Para obter mais informações sobre filtragem do lado do servidor e do lado do cliente, consulte [AWS CLI Filtragem](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html) de saída no Guia do usuário. AWS Command Line Interface 

## Pesquisando usuários com o Console de gerenciamento da AWS
<a name="cognito-user-pools-manage-user-accounts-searching-for-users-using-console"></a>

Se você já tiver criado um grupo de usuários, poderá pesquisar no painel **Users (Usuários)** no Console de gerenciamento da AWS.

Console de gerenciamento da AWS as pesquisas são sempre pesquisas com prefixo (“começa com”).

**Para pesquisar um usuário no console do Amazon Cognito**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Você pode ser solicitado a fornecer suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente da lista.

1. Clique no menu **Usuários** e digite o nome de usuário no campo de pesquisa. Observe que alguns valores de atributo diferenciam maiúsculas de minúsculas (por exemplo, **Username**).

   Você também pode encontrar usuários ajustando o filtro de pesquisa para restringir o escopo para outras propriedades do usuário, como **Email** (E-mail), **Phone number** (Número de telefone) ou **Last name** (Sobrenome).

## Pesquisar usuários usando o API `ListUsers`
<a name="cognito-user-pools-searching-for-users-using-listusers-api"></a>

 [Para pesquisar usuários do seu aplicativo, use a API do Amazon CognitoListUsers .](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html) Esta API usa os seguintes parâmetros: 
+  `AttributesToGet`: uma matriz de strings, onde cada string é o nome de um atributo de usuário a ser retornados para cada usuário nos resultados da pesquisa. Para recuperar todos os atributos, não inclua o parâmetro `AttributesToGet` nem a solicitação `AttributesToGet` com um valor da string literal `null`.
+  `Filter`: uma string de filtro do formulário "`AttributeName` `Filter-Type` "`AttributeValue`"". Aspas dentro da string de filtro devem ser evitadas usando o caractere de barra invertida (`\`). Por exemplo, .`"family_name = \"Reddy\""` Se a string de filtro estiver vazia, `ListUsers` retorna todos os usuários no grupo de usuários. 
  +  `AttributeName`: o nome do atributo a ser pesquisado. Você só pode pesquisar um atributo por vez. 
**nota**  
Você só pode pesquisar atributos padrão. Atributos personalizados não podem ser pesquisados. Isso é porque somente atributos indexados são pesquisáveis, e atributos personalizados não podem ser indexados.
  +  `Filter-Type`: para obter uma correspondência exata, use `=`, por exemplo, `given_name = "Jon"`. Para uma correspondência de prefixo ("começa com"), use `^=`, por exemplo, `given_name ^= "Jon"`. 
  +  `AttributeValue`: o valor de atributo que deve ser correspondido por cada usuário.
+  `Limit`: o número máximo de usuários a serem retornados.
+  `PaginationToken`: um token para obter mais resultados de uma pesquisa anterior. O Amazon Cognito encerra a validade do token de paginação após uma hora.
+  `UserPoolId`: a ID de grupo de usuários para o grupo de usuários na qual a pesquisa deve ser realizada.

Todas as pesquisas diferenciam maiúsculas de minúsculas. Os resultados da pesquisa são classificados pelo atributo nomeado pela string `AttributeName`, em ordem ascendente.

## Exemplos de uso da API `ListUsers`
<a name="cognito-user-pools-searching-for-users-listusers-api-examples"></a>

O exemplo a seguir retorna todos os usuários e inclui todos os atributos.

```
{
    "AttributesToGet": null,
    "Filter": "",
    "Limit": 10,
    "UserPoolId": "us-east-1_samplepool"
}
```

O exemplo a seguir retorna todos os usuários cujos números de telefone começam com "\$11312" e inclui todos os atributos.

```
{
    "AttributesToGet": null,
    "Filter": "phone_number ^= \"+1312\"",
    "Limit": 10,
    "UserPoolId": "us-east-1_samplepool"
}
```

O exemplo a seguir retorna os primeiros 10 usuários que têm "Reddy" como sobrenome. Para cada usuário, os resultados da pesquisa incluem nome do usuário, número de telefone e endereço de e-mail. Se houver mais de 10 usuários correspondentes no grupo de usuários, a resposta incluirá um token de paginação.

```
{
    "AttributesToGet": [
        "given_name", 
        "phone_number", 
        "email"
    ],
    "Filter": "family_name = \"Reddy\"",
    "Limit": 10,
    "UserPoolId": "us-east-1_samplepool"
}
```

Se o exemplo anterior retornar um token de paginação, o exemplo a seguir retornará os próximos 10 usuários que correspondam à mesma string de filtro.

```
{
    "AttributesToGet": [
        "given_name", 
        "phone_number", 
        "email"
    ],
    "Filter": "family_name = \"Reddy\"",
    "Limit": 10,
    "PaginationToken": "pagination_token_from_previous_search",
    "UserPoolId": "us-east-1_samplepool"
}
```

# Senhas, recuperação de contas e políticas de senha
<a name="managing-users-passwords"></a>

Todos os usuários que fazem login em um grupo de usuários, até mesmo [usuários federados](cognito-terms.md#terms-federateduser), têm senhas atribuídas aos seus perfis de usuário. [Usuários locais](cognito-terms.md#terms-localuser) e [usuários vinculados](cognito-terms.md#terms-linkeduser) devem inserir uma senha ao fazerem login. Os usuários federados não usam senhas de grupos de usuários, mas fazem login usando o provedor de identidades (IdP). Você pode permitir que os usuários redefinam suas próprias senhas, redefinam ou alterem senhas como administrador e [definam políticas](#user-pool-settings-policies) para complexidade e histórico de senhas.

O Amazon Cognito não armazena senhas de usuários em texto simples. Em vez disso, ele armazena um hash da senha de cada usuário com um salt específico do usuário. Por esse motivo, você não pode recuperar senhas existentes dos perfis de usuário em seus grupos de usuários. Como prática recomendada, não armazene senhas de usuário em texto simples em nenhum lugar. Redefina as senhas quando os usuários as esquecerem.

## Redefinição e recuperação de senha
<a name="user-pool-password-reset-and-recovery"></a>

Os usuários esquecem suas senhas. Você pode permitir que eles mesmos as redefinam, ou exigir que um administrador redefina a senha para eles. Os grupos de usuários do Amazon Cognito têm opções para os dois modelos. Esta parte do guia aborda as configurações do grupo de usuários e as operações de API para redefinição de senha.

A operação [ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html)da API e a opção de login gerenciado **Esqueceu sua senha?** enviam aos usuários um código que, quando eles confirmam que têm o código correto, lhes dá a oportunidade de definir uma nova senha com [ConfirmForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html). Esse é o modelo de recuperação de senha por autoatendimento.

**Recuperação de usuários não verificados**  
É possível enviar mensagens de recuperação para usuários que verificaram seu endereço de e-mail ou número de telefone. Se eles não tiverem um e-mail ou telefone de recuperação confirmado, um administrador do grupo de usuários poderá marcar o endereço de e-mail ou número de telefone como verificado. Edite os **Atributos de usuário** do usuário no console do Amazon Cognito e marque a caixa de seleção ao lado de **Marcar número de telefone como verificado** ou **Marcar endereço de e-mail como verificado**. Você também pode `phone_number_verified` definir `email_verified` ou como verdadeiro em uma [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html)solicitação. Para novos usuários, a operação da [ResendConfirmationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html)API envia um novo código para seu endereço de e-mail ou número de telefone e eles podem concluir a confirmação e a verificação por autoatendimento.

**Redefinir senhas como administrador**  
As operações [AdminSetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html)e a [AdminResetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminResetUserPassword.html)API são os métodos de redefinição de senha iniciados pelo administrador. `AdminSetUserPassword`define uma senha temporária ou permanente e `AdminResetUserPassword` envia aos usuários um código de redefinição de senha da mesma forma que. `ForgotPassword`

### Configurar redefinição e recuperação de senha
<a name="user-pool-password-reset-and-recovery-configure"></a>

O Amazon Cognito seleciona automaticamente suas opções de recuperação de conta com base nos atributos e opções de login obrigatórios escolhidos ao criar um grupo de usuários no console. Você pode modificar essas configurações padrão.

O método de MFA preferido de um usuário influencia os métodos que ele pode usar para recuperar a senha. Os usuários cujo MFA preferencial é por mensagem de e-mail não podem receber um código de redefinição de senha por e-mail. Os usuários cujo MFA preferencial é por mensagem SMS não podem receber um código de redefinição de senha por SMS.

Suas configurações de [recuperação de senha](#user-pool-password-reset-and-recovery) devem fornecer uma opção alternativa quando os usuários não estão qualificados para usar o método de redefinição de senha de sua preferência. Por exemplo, seus mecanismos de recuperação podem ter o e-mail como prioridade e o MFA do e-mail pode ser opcional no seu grupo de usuários. Nesse caso, adicione a recuperação da conta de mensagens SMS como uma segunda opção ou use operações administrativas da API para redefinir as senhas desses usuários.

O Amazon Cognito responde às solicitações de redefinição de senha de usuários que não têm um método de recuperação válido com uma resposta de erro `InvalidParameterException`.

**nota**  
Os usuários não podem receber códigos de redefinição de senha e de MFA no mesmo endereço de e-mail ou número de telefone. Se eles usarem senhas de uso único (OTPs) de mensagens de e-mail para MFA, deverão usar mensagens SMS para recuperação da conta. Se OTPs usarem mensagens SMS para MFA, deverão usar mensagens de e-mail para recuperação da conta. Em grupos de usuários com MFA, talvez os usuários não consigam concluir a recuperação de senha por autoatendimento se tiverem o endereço de e-mail cadastrado, mas não tiverem o número de telefone, ou vice-versa.  
Para evitar que os usuários não consigam redefinir as senhas em grupos de usuários com essa configuração, defina os atributos `email` e `phone_number` [como obrigatórios](user-pool-settings-attributes.md). Como alternativa, é possível configurar processos que sempre coletam e definem esses atributos quando os usuários se cadastram ou quando seus administradores criam perfis de usuário. Quando os usuários têm ambos os atributos, o Amazon Cognito envia automaticamente códigos de redefinição de senha para o destino que *não* é o fator de MFA do usuário.

O procedimento a seguir configura a recuperação de contas de autoatendimento em um grupo de usuários.

------
#### [ Configure self-service password reset (API/SDK) ]

O `AccountRecoverySetting` parâmetro é o parâmetro do grupo de usuários que define os métodos que os usuários podem usar para recuperar sua senha em solicitações de [ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html)API ou quando selecionam **Esqueceu a senha?** no login gerenciado. `ForgotPassword`envia um código de recuperação para um e-mail verificado ou um número de telefone verificado. O código de recuperação é válido por uma hora. Quando você especifica uma [AccountRecoverySetting](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AccountRecoverySettingType.html) para o grupo de usuários, o Amazon Cognito escolhe o destino de entrega de código com base na prioridade definida por você.

Quando você define `AccountRecoverySetting` e um usuário tem o MFA SMS configurado, o SMS não pode ser usado como um mecanismo de recuperação de conta. A prioridade dessa configuração é determinada com `1` sendo da prioridade mais alta. O Amazon Cognito envia uma verificação para apenas um dos métodos especificados. O exemplo de `AccountRecoverySetting` a seguir define endereços de e-mail como o destino principal dos códigos de recuperação de conta, recorrendo à mensagem SMS se o usuário não tiver um endereço de e-mail cadastrado.

```
"AccountRecoverySetting": { 
   "RecoveryMechanisms": [ 
      { 
         "Name": "verified_email",
         "Priority": 1
      },
      { 
         "Name": "verified_phone_number",
         "Priority": 2
      }
   ]
}
```

O valor `admin_only` desativa a recuperação de contas de autoatendimento, exigindo que os usuários entrem em contato com o administrador para redefinir a senha. Você não pode usar `admin_only` com nenhum outro mecanismo de recuperação de conta. O seguinte exemplo…

```
"AccountRecoverySetting": { 
   "RecoveryMechanisms": [ 
      { 
         "Name": "admin_only",
         "Priority": 1
      }
   ]
}
```

Se você não especificar `AccountRecoverySetting`, o Amazon Cognito enviará o código de recuperação primeiro para um número de telefone verificado e, se o usuário não tiver um número de telefone cadastrado, para um endereço de e-mail verificado.

Para obter mais informações sobre a `AccountRecoverySetting`, consulte [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html) e [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html).

------
#### [ Configure self-service password reset (console) ]

Configure as opções de recuperação de conta e redefinição de senha no menu **Fazer login** do seu grupo de usuários.

**Como configurar a recuperação da conta de usuário**

1. Faça login no [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home).

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Clique no menu **Fazer login**. Localize **Recuperação de contas de usuários** e clique em **Editar**

1. Para permitir que os usuários redefinam suas próprias senhas, selecione **Habilitar recuperação de contas de autoatendimento**.

1. Configure o método de entrega dos códigos de recuperação de senha que seu grupo de usuários envia aos usuários. Em **Método de entrega para mensagens de recuperação de conta de usuário**, selecione uma opção disponível. Como prática recomendada, escolha uma opção que tenha um método secundário para enviar mensagens, por exemplo, **E-mail se disponível, ou SMS**. Com um método de entrega secundário, o Amazon Cognito pode enviar códigos aos usuários de forma que eles precisem usar um meio diferente para redefinição de senha e para MFA.

1. Selecione **Salvar alterações**.

------

### Comportamento para esquecimento da senha
<a name="forgot-password"></a>

Em uma determinada hora, permitimos entre 5 e 20 tentativas para que um usuário solicite ou insira um código de redefinição de senha como parte das ações e ações de esquecimento da senha. confirm-forgot-password O valor exato depende dos parâmetros de risco associados às solicitações. Observe que esse comportamento está sujeito a alterações. 

## Como adicionar requisitos de senha do grupo de usuários
<a name="user-pool-settings-policies"></a>

Senhas fortes e complexas são a prática recomendada de segurança para seu grupo de usuários. Especialmente em aplicações abertas à Internet, senhas fracas podem expor as credenciais dos usuários a sistemas que adivinham senhas e tentam acessar seus dados. Quanto mais complexa for uma senha, mais difícil será adivinhá-la. O Amazon Cognito tem ferramentas adicionais para administradores preocupados com a segurança, como [proteção contra ameaças](cognito-user-pool-settings-threat-protection.md#cognito-user-pool-settings-threat-protection.title) e [AWS WAF web ACLs](user-pool-waf.md#user-pool-waf.title), mas sua política de senha é um elemento central da segurança do seu diretório de usuários.

As senhas para usuários locais nos grupos de usuários do Amazon Cognito não expiram automaticamente. Como prática recomendada, registre a hora, a data e os metadados das redefinições de senha do usuário em um sistema externo. Com um log externo de tempo da senha, sua aplicação ou um acionador do Lambda pode pesquisar o tempo da senha de um usuário e exigir uma redefinição após determinado período.

Você pode configurar o grupo de usuários para exigir uma complexidade mínima de senha que esteja de acordo com seus padrões de segurança. Senhas complexas têm no mínimo oito caracteres. Eles também incluem uma combinação de caracteres maiúsculos, numéricos e especiais.

Com os níveis de recursos Essentials ou Plus, é possível definir uma política de reutilização de senha. Você pode impedir que um usuário redefina sua senha para uma nova senha que corresponda à senha atual ou a qualquer uma das 23 senhas anteriores adicionais, totalizando no máximo 24.

**Como definir uma política do grupo de usuários**

1. Crie um grupo de usuários e navegue até a etapa **Configurar requisitos de segurança** ou acesse um grupo de usuários existente e navegue até o menu **Métodos de autenticação**.

1. Navegue até **Política de senha**.

1. Escolha um **Modo de política de senha**. Os **Padrões do Cognito** configuram o grupo de usuários com as configurações mínimas recomendadas. Também é possível escolher uma política de senha **Personalizada**.

1. Defina um **Tamanho mínimo de senha**. Todos os usuários devem se cadastrar ou serem criados com uma senha com tamanho maior ou igual a esse valor. É possível definir esse valor mínimo de até 99, mas os usuários podem definir senhas com até 256 caracteres.

1. Configure as regras de complexidade de senhas em **Requisitos de senha**. Escolha os tipos de caracteres: números, caracteres especiais, letras maiúsculas e minúsculas, dos quais você deseja exigir pelo menos um na senha de cada usuário.

   Você pode exigir que as senhas contenham pelo menos um dos seguintes caracteres: Depois que o Amazon Cognito verificar se as senhas contêm os caracteres mínimos necessários, as senhas de seus usuários podem conter caracteres adicionais de qualquer tipo até atingir o tamanho máximo.
   + Letras maiúsculas e minúsculas do [latim básico](https://en.wikipedia.org/wiki/ISO_basic_Latin_alphabet)
   + Números
   + Os caracteres especiais a seguir.

     ```
     ^ $ * . [ ] { } ( ) ? " ! @ # % & / \ , > < ' : ; | _ ~ ` = + - 
     ```
   + Caracteres de espaço não iniciais e não finais.

1. Defina um valor para **Senhas temporárias definidas por administradores expiram em**. Após esse período, um novo usuário criado no console do Amazon Cognito com `AdminCreateUser` não poderá fazer login e definir uma nova senha. Depois de fazerem login com a senha temporária, as contas de usuário nunca expirarão. Para atualizar a duração da senha na API de grupos de usuários do Amazon Cognito, defina um valor para [TemporaryPasswordValidityDays ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_PasswordPolicyType.html#CognitoUserPools-Type-PasswordPolicyType-TemporaryPasswordValidityDays)a sua solicitação [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)ou para a [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API.

1. Defina um valor para **Impedir o uso de senhas anteriores**, se disponível. Para usar esse recurso, selecione o [nível de recursos](cognito-sign-in-feature-plans.md) Essentials ou Plus em seu grupo de usuários. O valor desse parâmetro é o número de senhas anteriores que uma nova senha é impedida de corresponder quando o usuário redefine a senha.

Para redefinir o acesso de uma conta de usuário expirada, siga um destes procedimentos:
+ Envie uma nova senha temporária e redefina o período de expiração com uma solicitação de [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html)API `MessageAction` definida como`RESEND`.
+ Exclua o perfil de usuário e crie outro.
+ Gere um novo código de confirmação em uma solicitação de [AdminResetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminResetUserPassword.html)API.

# Como importar usuários para um grupo de usuários
<a name="cognito-user-pools-import-users"></a>

Existem duas maneiras de importar ou migrar usuários do seu diretório de usuários ou de um banco de dados de usuários existente para grupos de usuários do Amazon Cognito. Você pode migrar os usuários quando eles fizerem login usando o Amazon Cognito pela primeira vez com um acionador do Lambda de migração de usuários. Com essa abordagem, os usuários podem continuar usando suas senhas existentes e não terão que redefini-las após a migração para o grupo de usuários. Como alternativa, você pode migrar usuários em lote carregando um arquivo CSV que contenha os atributos de perfil do usuário para todos os usuários. As seções a seguir descrevem essas duas abordagens.

**Mais atributos**
+ [Abordagens para migrar usuários para grupos de usuários do Amazon Cognito](https://aws.amazon.com/blogs/security/approaches-for-migrating-users-to-amazon-cognito-user-pools/)
+ [AWS re:inforce 2023 — Migração para o Amazon Cognito](https://www.youtube.com/watch?v=OkDj9uXWwCc)

**Topics**
+ [

# Como importar usuários com um acionador do Lambda de migração de usuários
](cognito-user-pools-import-using-lambda.md)
+ [

# Como importar usuários para grupos de usuários com base em um arquivo CSV
](cognito-user-pools-using-import-tool.md)

# Como importar usuários com um acionador do Lambda de migração de usuários
<a name="cognito-user-pools-import-using-lambda"></a>

Com essa abordagem, você pode migrar perfeitamente os usuários do diretório existente para grupos de usuários quando um usuário fizer login pela primeira vez com sua aplicação ou solicitar uma redefinição de senha. Adicione uma função [Migrar o acionador do Lambda do usuário](user-pool-lambda-migrate-user.md) ao grupo de usuários para que ele receba metadados sobre os usuários que tentam fazer login e retorne informações de perfil de usuário de uma fonte de identidade externa. Para obter detalhes e um código de exemplo para esse acionador do Lambda, bem como parâmetros de solicitação e resposta, consulte [Parâmetros do acionador do Lambda de migrar usuário](user-pool-lambda-migrate-user.md#cognito-user-pools-lambda-trigger-syntax-user-migration).

Antes de iniciar a migração de usuários, crie uma função Lambda de migração de usuários em sua Conta da AWS e, em seu grupo de usuários, configure a função do Lambda como acionador de migração de usuários. Adicione uma política de autorização à sua função do Lambda que permita que somente a entidade principal da conta de serviço do Amazon Cognito, `cognito-idp.amazonaws.com`, invoque a função do Lambda, e apenas no contexto de seu próprio grupo de usuários. Para obter mais informações, consulte [Uso de políticas baseadas em recursos para o AWS Lambda (políticas de função do Lambda)](https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html). 

**Processo de login**

1. O usuário abre sua aplicação e faz login com a API de grupos de usuários do Amazon Cognito ou por meio do login gerenciado. Para obter mais informações sobre como facilitar o login com o Amazon APIs Cognito, consulte. [Integração da autenticação e autorização do Amazon Cognito com aplicações móveis e da web](cognito-integrate-apps.md)

1. Sua aplicação envia o nome de usuário e a senha ao Amazon Cognito. Se seu aplicativo tiver uma interface de usuário de login personalizada que você criou com um AWS SDK, seu aplicativo deverá usar [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)ou [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)com o `USER_PASSWORD_AUTH` fluxo ou. `ADMIN_USER_PASSWORD_AUTH` Quando a aplicação usa um desses fluxos, o SDK envia a senha ao servidor.
**nota**  
Antes de adicionar um acionador de migração de usuários, ative o fluxo `USER_PASSWORD_AUTH` ou `ADMIN_USER_PASSWORD_AUTH` nas configurações do cliente de aplicação. Você deve usar esses fluxos em vez do fluxo `USER_SRP_AUTH` padrão. O Amazon Cognito deve enviar uma senha à sua função do Lambda para que ele possa verificar a autenticação do usuário no outro diretório. Uma SRP obscurece a senha do usuário de sua função do Lambda.

1. O Amazon Cognito verifica se o nome de usuário enviado corresponde a um nome de usuário ou alias no grupo de usuários. Você pode definir o nome de usuário preferido, o endereço de e-mail ou o número de telefone do usuário como um alias no grupo de usuários. Se o usuário não existir, o Amazon Cognito enviará parâmetros, incluindo o nome de usuário e a senha, à função [Migrar o acionador do Lambda do usuário](user-pool-lambda-migrate-user.md).

1. Sua função [Migrar o acionador do Lambda do usuário](user-pool-lambda-migrate-user.md) verifica ou autentica o usuário com seu diretório de usuários existente ou com o banco de dados de usuários. A função retorna atributos do usuário que o Amazon Cognito armazena no perfil do usuário no grupo de usuários. Você pode retornar um parâmetro `username` somente se o nome de usuário enviado corresponder a um atributo de alias. Se você quiser que os usuários continuem usando a senha que eles já têm, sua função definirá o atributo `finalUserStatus` como `CONFIRMED` na resposta do Lambda. Sua aplicação deve retornar todos os parâmetros `"response"` mostrados em [Parâmetros do acionador do Lambda de migrar usuário](user-pool-lambda-migrate-user.md#cognito-user-pools-lambda-trigger-syntax-user-migration).
**Importante**  
Não registre todo o objeto de evento de solicitação em seu código Lambda de migração de usuários. Esse objeto de evento de solicitação inclui a senha do usuário. Se você não limpar os registros, as senhas aparecerão nos Registros. CloudWatch 

1. O Amazon Cognito cria o perfil de usuário no grupo de usuários e retorna tokens para o aplicativo cliente.

1. Sua aplicação executa a entrada de token, aceita a autenticação do usuário e prossegue para o conteúdo solicitado.

Depois de migrar seus usuários, use `USER_SRP_AUTH` para fazer login. O protocolo Secure Remote Password (SRP) não envia a senha pela rede e oferece benefícios de segurança em relação ao fluxo `USER_PASSWORD_AUTH` usado durante a migração.

Em caso de erros durante a migração, incluindo problemas com o dispositivo cliente ou a rede, a aplicação receberá respostas de erro da API de grupos de usuários do Amazon Cognito. Quando isso acontecer, o Amazon Cognito poderá ou não criar a conta de usuário em seu grupo de usuários. Em seguida, o usuário deverá tentar entrar novamente. Se o login falhar repetidamente, tente redefinir a senha do usuário com o fluxo de esquecimento de senha em sua aplicação. 

O fluxo de esquecimento de senha também chama sua função [Migrar o acionador do Lambda do usuário](user-pool-lambda-migrate-user.md) com uma fonte de eventos `UserMigration_ForgotPassword`. Como o usuário não envia uma senha quando solicita uma redefinição de senha, o Amazon Cognito não inclui uma senha no evento que ele envia à sua função do Lambda. Sua função só pode pesquisar o usuário em seu diretório de usuários existente e retornar atributos para adicionar ao perfil do usuário em seu grupo de usuários. Depois que a função conclui a invocação e retorna a resposta ao Amazon Cognito, o grupo de usuários envia um código de redefinição de senha por e-mail ou SMS. Em seu aplicativo, solicite ao usuário o código de confirmação e uma nova senha e, em seguida, envie essas informações para o Amazon Cognito em uma solicitação de [ConfirmForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html)API. Também é possível usar as páginas integradas para o fluxo de esquecimento da senha no login gerenciado.

**Recursos adicionais do**
+ [Abordagens para migrar usuários para grupos de usuários do Amazon Cognito](https://aws.amazon.com/blogs/security/approaches-for-migrating-users-to-amazon-cognito-user-pools/)

# Como importar usuários para grupos de usuários com base em um arquivo CSV
<a name="cognito-user-pools-using-import-tool"></a>

Quando você tem um repositório de identidade externo e tem tempo para preparar seu grupo de usuários para novos usuários locais, a importação em massa de usuários de um arquivo de valores separados por vírgula (CSV) pode ser uma opção simplificada e econômica para a migração para um grupo de usuários do Amazon Cognito. A importação de um arquivo CSV é um processo de baixar e preencher um arquivo de modelo e, em seguida, entregar o arquivo ao seu grupo de usuários em um trabalho de importação. Você pode usar uma importação de CSV para criar rapidamente usuários de teste. Você também pode preencher programaticamente o arquivo com solicitações da API de leitura para seu repositório de identidade externo e, em seguida, analisar seus detalhes e atributos em operações de gravação no arquivo.

O processo de importação define valores para todos os atributos de usuário, exceto **password**. Não há suporte para a importação de senha, pois as melhores práticas de segurança exigem que as senhas não estejam disponíveis como texto sem formatação, e não oferecemos suporte à importação de hashes. Isso significa que os usuários devem alterar suas senhas na primeira vez em que fizerem login. Seus usuários estão em estado `RESET_REQUIRED` quando são importados por esse método.

A maneira mais simples de importar usuários de um CSV é ativar o [login sem senha](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless) no grupo de usuários. Com os atributos de endereço de e-mail e número de telefone e a configuração correta do grupo de usuários, os usuários podem entrar com senhas de uso único por e-mail ou SMS (OTPs) imediatamente após a conclusão do trabalho de importação. Para obter mais informações, consulte [Solicitação de redefinição de senha aos usuários importados](#cognito-user-pools-using-import-tool-password-reset).

Também é possível definir as senhas dos usuários com uma solicitação de API [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html) que define o parâmetro `Permanent` como `true`. A importação de CSV não contribui para a cobrança mensal de usuários ativos (MAUs) em seu grupo de usuários. No entanto, as operações de redefinição de senha são geradas. MAUs Para gerenciar os custos ao importar um grande número de usuários com senhas que podem não estar imediatamente ativos, configure a aplicação para solicitar aos usuários uma nova senha quando eles fizerem login e receberem o desafio `RESET_REQUIRED`.

**nota**  
A data de criação de cada usuário é a hora em que o usuário foi importado para o grupo de usuários. A data de criação não é um dos atributos importados.

**Etapas para criar um trabalho de importação de usuário**

1. Crie uma função do Amazon CloudWatch Logs no console AWS Identity and Access Management (IAM).

1. Crie o arquivo .csv de importação do usuário.

1. Crie e execute o trabalho de importação do usuário.

1. Carregue o arquivo.csv de importação do usuário.

1. Inicie e execute o trabalho de importação do usuário.

1. Use CloudWatch para verificar o registro de eventos.

1. Solicite que os usuários importados redefinam suas senhas.

**Mais atributos**
+ [Arquitetura de referência de exportação de perfis de usuário do Cognito](https://aws.amazon.com/solutions/implementations/cognito-user-profiles-export-reference-architecture/) para exportar contas de usuário entre grupos de usuários

**Topics**
+ [

## Criação da função do CloudWatch Logs IAM
](#cognito-user-pools-using-import-tool-cli-cloudwatch-iam-role)
+ [

## Criar o arquivo CSV de importação do usuário
](#cognito-user-pools-using-import-tool-csv-header)
+ [

## Como criar e executar o trabalho de importação do grupo de usuários do Amazon Cognito
](#cognito-user-pools-creating-import-job)
+ [

## Visualizando os resultados da importação do grupo de usuários no CloudWatch console
](#cognito-user-pools-using-import-tool-cloudwatch)
+ [

## Solicitação de redefinição de senha aos usuários importados
](#cognito-user-pools-using-import-tool-password-reset)

## Criação da função do CloudWatch Logs IAM
<a name="cognito-user-pools-using-import-tool-cli-cloudwatch-iam-role"></a>

Se você estiver usando a CLI ou a API do Amazon Cognito, precisará criar uma função do IAM. CloudWatch O procedimento a seguir descreve como criar uma função do IAM que o Amazon Cognito pode usar para gravar os resultados do seu trabalho de importação no Logs. CloudWatch 

**nota**  
Ao criar um trabalho de importação no console do Amazon Cognito, você pode criar o perfil do IAM ao mesmo tempo. Quando você seleciona **Create a new IAM role** (Criar um perfil do IAM), o Amazon Cognito aplica automaticamente a política de confiança e a política do IAM apropriadas ao perfil.

**Para criar a função do CloudWatch Logs IAM para importação de grupos de usuários (AWS CLI, API)**

1. Faça login no Console de gerenciamento da AWS e abra o console do IAM em [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

1. Crie uma nova função do IAM para um AWS service (Serviço da AWS). Para obter instruções detalhadas, consulte [Criar um perfil para um AWS service (Serviço da AWS)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console) no *Guia do usuário do AWS Identity and Access Management *.

   1. Ao selecionar um **Use case** (Caso de uso) para o **Trusted entity type** (Tipo de entidade confiável), escolha qualquer serviço. Atualmente, o Amazon Cognito não está listado nos casos de uso de serviço.

   1. Na tela **Add permissions** (Adicionar permissões), escolha **Create policy** (Criar política) e insira a instrução de política a seguir. *REGION*Substitua pelo Região da AWS do seu grupo de usuários, por exemplo`us-east-1`. *ACCOUNT*Substitua pelo seu Conta da AWS ID, por exemplo`111122223333`.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "logs:CreateLogGroup",
                      "logs:CreateLogStream",
                      "logs:DescribeLogStreams",
                      "logs:PutLogEvents"
                  ],
                  "Resource": [
                      "arn:aws:logs:us-east-1:111122223333:log-group:/aws/cognito/*"
                  ]
              }
          ]
      }
      ```

------

1. Como você não escolheu o Amazon Cognito como entidade confiável ao criar o perfil, agora é necessário editar manualmente a relação de confiança do perfil. No painel de navegação do console do IAM, selecione **Roles** (Perfis) e escolha o perfil criado.

1. Selecione a guia **Trust relationships (Relações de confiança)**.

1. Selecione **Edit trust policy** (Editar política de confiança).

1. Cole a seguinte instrução de política em **Edit trust policy** (Editar política de confiança), substituindo qualquer texto existente: 

------
#### [ JSON ]

****  

   ```
   {
           "Version":"2012-10-17",		 	 	 
           "Statement": [
               {
                   "Effect": "Allow",
                   "Principal": {
                       "Service": "cognito-idp.amazonaws.com"
                   },
                   "Action": "sts:AssumeRole"
               }
           ]
       }
   ```

------

1. Escolha **Atualizar política**. 

1. Anote o ARN do perfil do . Forneça o ARN ao criar o trabalho de importação.

## Criar o arquivo CSV de importação do usuário
<a name="cognito-user-pools-using-import-tool-csv-header"></a>

Antes de poder importar os usuários existentes para o grupo de usuários, é necessário criar um arquivo de valores separados por vírgula (CSV) que contenha os usuários que você deseja importar e os atributos deles. No grupo de usuários, é possível recuperar um arquivo de importação de usuários com cabeçalhos que refletem o esquema de atributos do grupo de usuários. Depois, você pode inserir informações do usuário que correspondam aos requisitos de formatação em [Formatar o arquivo CSV](#cognito-user-pools-using-import-tool-formatting-csv-file). 

### Baixar o cabeçalho do arquivo CSV (console)
<a name="cognito-user-pools-using-import-tool-downloading-csv-header-console"></a>

Use o procedimento a seguir para baixar o arquivo de cabeçalho CSV.

**Como baixar o cabeçalho do arquivo CSV**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Você pode ser solicitado a fornecer suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente da lista.

1. Clique no menu **Usuários**.

1. Na seção **Import users** (Importar usuários), selecione **Create an import job** (Criar um trabalho de importação).

1. Em **Upload CSV** (Fazer upload do CSV, selecione o link *template.csv* e baixe o arquivo CSV.

### Baixar o cabeçalho do arquivo CSV (AWS CLI)
<a name="cognito-user-pools-using-import-tool-downloading-csv-header-using-cli"></a>

Para obter uma lista dos cabeçalhos corretos, no menu **Usuários**, em **Importar usuários**, selecione **Criar trabalho de importação**. Na caixa de diálogo a seguir, selecione o link `template.csv` para baixar um arquivo de modelo com os atributos do grupo de usuários.

Você também pode executar o seguinte comando da CLI, onde *USER\$1POOL\$1ID* está o identificador do grupo de usuários para o qual você importará usuários:

```
aws cognito-idp get-csv-header --user-pool-id "USER_POOL_ID"
```

Resposta de exemplo:

```
{
    "CSVHeader": [
        "name",
        "given_name",
        "family_name",
        "middle_name",
        "nickname",
        "preferred_username",
        "profile",
        "picture",
        "website",
        "email",
        "email_verified",
        "gender",
        "birthdate",
        "zoneinfo",
        "locale",
        "phone_number",
        "phone_number_verified",
        "address",
        "updated_at",
        "cognito:mfa_enabled",
        "cognito:username"
    ],
    "UserPoolId": "USER_POOL_ID"
}
```

### Formatar o arquivo CSV
<a name="cognito-user-pools-using-import-tool-formatting-csv-file"></a>

 O arquivo de cabeçalho CSV de importação de usuários baixado se parece com a string a seguir. Ele também inclui os atributos personalizados que você adicionou ao grupo de usuários.

```
cognito:username,name,given_name,family_name,middle_name,nickname,preferred_username,profile,picture,website,email,email_verified,gender,birthdate,zoneinfo,locale,phone_number,phone_number_verified,address,updated_at,cognito:mfa_enabled
```

Edite o arquivo CSV para que ele inclua esse cabeçalho e os valores de atributo dos usuários e seja formatado de acordo com as seguintes regras:

**nota**  
Para obter mais informações sobre valores de atributo, como o formato apropriado de números de telefone, consulte [Trabalhar com atributos do usuário](user-pool-settings-attributes.md).
+ A primeira linha no arquivo é a linha de cabeçalho baixada que contém os nomes de atributo de usuário.
+ A ordem das colunas no arquivo CSV não importa.
+ Cada linha após a primeira linha contém os valores de atributo para um usuário.
+ Todas as colunas do cabeçalho devem estar presente, mas você não precisa fornecer valores em cada coluna.
+ Os seguintes atributos são necessários:
  + **cognito:username**
  + **email\$1verified** ou **phone\$1number\$1verified**
    + Pelo menos um dos atributos verificados automaticamente devem ser `true` para todos os usuários. Um atributo verificado automaticamente é um endereço de e-mail ou número de telefone para o qual o Amazon Cognito envia automaticamente um código quando um novo usuário se junta ao grupo de usuários.
    + O grupo de usuários deve ter, pelo menos, um atributo verificado automaticamente, **email\$1verified** ou **phone\$1number\$1verified**. Se o grupo de usuários não tiver atributos verificados automaticamente, o trabalho de importação não será iniciado.
    + Se o grupo de usuários tiver apenas um atributo verificado automaticamente, esse atributo deverá ser verificado para todos os usuários. Por exemplo, se o grupo de usuários tiver apenas **phone\$1number** como atributo verificado automaticamente, o valor de **phone\$1number\$1verified** deverá ser `true` para todos os usuários.
**nota**  
Para que os usuários redefinam suas senhas, eles deverão ter um e-mail ou número de telefone verificado. O Amazon Cognito envia uma mensagem contendo um código de redefinição de senha para o e-mail ou ao número de telefone especificado no arquivo CSV. Se a mensagem for enviada ao número de telefone, ela será enviada por mensagem de SMS. Para obter mais informações, consulte [Como verificar informações de contato no cadastro](signing-up-users-in-your-app.md#allowing-users-to-sign-up-and-confirm-themselves).
  + **email** (se **email\$1verified** for `true`)
  + **phone\$1number** (se **phone\$1number\$1verified** for `true`)
  + Todos os atributos marcados como necessários quando você criou o grupo de usuários
+ Os valores de atributo que são strings *não* devem ser aspas.
+ Se um valor de atributo contiver uma vírgula, você deverá colocar uma barra invertida (\$1) antes da vírgula. Isso acontece porque os campos em um arquivo CSV são separados por vírgulas.
+ O conteúdo do arquivo CSV deve estar no formato UTF-8 sem a marca de ordem de byte.
+ O campo **cognito:username** é obrigatório e deve ser exclusivo no grupo de usuários. Ele pode ser qualquer string Unicode. No entanto, ele não pode conter espaços ou guias.
+ Os valores da **data de nascimento**, se presentes, devem estar no formato **mm/dd/yyyy**. Isso significa, por exemplo, que a data de nascimento 1°. de fevereiro de 1985 deve ser codificada como **02/01/1985**.
+ O campo **cognito:mfa\$1enabled** deve corresponder aos requisitos de MFA do seu grupo de usuários. Se você tiver definido a autenticação multifator (MFA) para ser obrigatória no grupo de usuários, esse campo deverá ser `true` ou estar em branco para todos os usuários. Se você tiver definido a MFA para ser desativada, esse campo deverá ser `false` ou ficar em branco para todos os usuários. Um valor em branco define o status habilitado para MFA dos usuários importados para o estado exigido pelo grupo de usuários. Você pode importar usuários em um grupo de usuários exigido pela MFA sem um fator de MFA válido, independentemente de ter definido um valor `cognito:mfa_enabled`. Os usuários nesse estado têm a MFA ativa, mas não podem fazer login até configurarem um atributo de e-mail, um atributo de número de telefone ou uma TOTP, e essa configuração é um fator de MFA válido em seu grupo de usuários.
+ O comprimento máximo da linha é de 16.000 caracteres.
+ O tamanho máximo do arquivo CSV é 100 MB.
+ O número máximo de linhas (usuários) no arquivo é de 500.000. Esse máximo não inclui a linha de cabeçalho.
+ Espera-se que o valor do campo **updated\$1at** esteja no formato de época em segundos, por exemplo: **1471453471**.
+ Qualquer espaço em branco à esquerda ou à direita em um valor de atributo será aparado.

A lista a seguir é um exemplo de arquivo de importação CSV para um grupo de usuários sem atributos personalizados. Seu esquema do grupo de usuários pode ser diferente deste exemplo. Nesse caso, você deve fornecer valores de teste no modelo CSV baixado do seu grupo de usuários.

```
cognito:username,name,given_name,family_name,middle_name,nickname,preferred_username,profile,picture,website,email,email_verified,gender,birthdate,zoneinfo,locale,phone_number,phone_number_verified,address,updated_at,cognito:mfa_enabled
John,,John,Doe,,,,,,,johndoe@example.com,TRUE,,02/01/1985,,,+12345550100,TRUE,123 Any Street,,FALSE
Jane,,Jane,Roe,,,,,,,janeroe@example.com,TRUE,,01/01/1985,,,+12345550199,TRUE,100 Main Street,,FALSE
```

## Como criar e executar o trabalho de importação do grupo de usuários do Amazon Cognito
<a name="cognito-user-pools-creating-import-job"></a>

Esta seção descreve como criar e executar o trabalho de importação do grupo de usuários usando o console do Amazon Cognito e o AWS Command Line Interface ()AWS CLI.

**Topics**
+ [

### Importar usuários de um arquivo CSV (console)
](#cognito-user-pools-using-import-tool-console)
+ [

### Como importar usuários (AWS CLI)
](#cognito-user-pools-using-import-tool-cli)

### Importar usuários de um arquivo CSV (console)
<a name="cognito-user-pools-using-import-tool-console"></a>

O procedimento a seguir descreve como importar os usuários do arquivo CSV.

**Como importar usuários do arquivo CSV (console)**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Você pode ser solicitado a fornecer suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente da lista.

1. Clique no menu **Usuários**.

1. Na seção **Import users** (Importar usuários), selecione **Create an import job** (Criar um trabalho de importação).

1. Na página **Create import job** (Criar um trabalho de importação), insira um **Job name** (Nome do trabalho).

1. Escolha entre **Create a new IAM role** (Criar um perfil do IAM) ou **Use an existing IAM role** (Usar um perfil do IAM existente).

   1. Se você optou por **Create a new IAM role** (Criar um perfil do IAM), insira um nome para o novo perfil. O Amazon Cognito criará automaticamente uma função com as permissões e a relação de confiança corretas. A entidade principal do IAM que cria o trabalho de importação deve ter permissões para criar perfis do IAM.

   1. Se você optou por **Use an existing IAM role** (Usar um perfil do IAM existente), escolha um perfil na lista em **IAM role selection** (Seleção de perfil do IAM). Esse perfil deve ter as permissões e a política de confiança descritas em [Criação da função do CloudWatch Logs IAM](#cognito-user-pools-using-import-tool-cli-cloudwatch-iam-role).

1. Em **Fazer upload do CSV**, selecione **Escolher arquivo** e anexe o arquivo CSV que você preparou.

1. Selecione **Create job** (Criar trabalho) para enviar seu trabalho, mas iniciá-lo mais tarde. Selecione **Create and start job** (Criar e iniciar trabalho) para enviar seu trabalho e iniciá-lo imediatamente.

1. Se você criou o trabalho, mas não o iniciou, poderá iniciá-lo mais tarde. No menu **Usuários**, em **Importar usuários**, escolha o trabalho de importação e clique em **Iniciar**. Você também pode enviar uma solicitação de [StartUserImportJob](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_StartUserImportJob.html)API a partir de um AWS SDK.

1. Monitore o andamento do trabalho de importação de usuários no menu **Usuários** em **Importar usuários**. Se o trabalho não for bem-sucedido, você poderá selecionar o valor do **Status**. Para obter mais detalhes, selecione **Visualizar os CloudWatch registros para obter mais detalhes** e analisar quaisquer problemas no console de CloudWatch registros.

### Como importar usuários (AWS CLI)
<a name="cognito-user-pools-using-import-tool-cli"></a>

Os comandos da CLI a seguir estão disponíveis para importar usuários para um grupo de usuários:
+ `create-user-import-job`
+ `get-csv-header`
+ `describe-user-import-job`
+ `list-user-import-jobs`
+ `start-user-import-job`
+ `stop-user-import-job`

Para obter a lista de opções de linha de comando desses comandos, use a opção de linha de comando `help`. Por exemplo:

```
aws cognito-idp get-csv-header help
```

#### Como criar um trabalho de importação de usuário
<a name="cognito-user-pools-using-import-tool-cli-creating-user-import-job"></a>

Depois de criar seu arquivo CSV, crie um trabalho de importação de usuários executando o seguinte comando da CLI, *JOB\$1NAME* onde está o nome que você está escolhendo para o trabalho*USER\$1POOL\$1ID*, o ID do grupo de usuários ao qual os novos usuários serão adicionados *ROLE\$1ARN* e o ARN da função que você recebeu em: [Criação da função do CloudWatch Logs IAM](#cognito-user-pools-using-import-tool-cli-cloudwatch-iam-role) 

```
aws cognito-idp create-user-import-job --job-name "JOB_NAME" --user-pool-id "USER_POOL_ID" --cloud-watch-logs-role-arn "ROLE_ARN"
```

O *PRE\$1SIGNED\$1URL* retorno na resposta é válido por 15 minutos. Após esse tempo, ele expirará e você deverá criar um novo trabalho de importação de usuário para obter um novo URL.

**Example Resposta:**  

```
{
    "UserImportJob": {
        "Status": "Created",
        "SkippedUsers": 0,
        "UserPoolId": "USER_POOL_ID",
        "ImportedUsers": 0,
        "JobName": "JOB_NAME",
        "JobId": "JOB_ID",
        "PreSignedUrl": "PRE_SIGNED_URL",
        "CloudWatchLogsRoleArn": "ROLE_ARN",
        "FailedUsers": 0,
        "CreationDate": 1470957431.965
    }
}
```

#### Valores de status de um trabalho de importação de usuário
<a name="cognito-user-pools-using-import-tool-cli-status-values-for-user-import-job"></a>

Nas respostas aos comandos de importação de usuário, você verá um dos seguintes valores de `Status`:
+ `Created`: o trabalho foi criado, mas não foi iniciado.
+ `Pending`: um estado de transição. Você iniciou o trabalho, mas não começou a importação de usuários ainda.
+ `InProgress`: o trabalho foi iniciado e os usuários estão sendo importados.
+ `Stopping`: você interrompeu o trabalho, mas o trabalho ainda não parou de importar usuários.
+ `Stopped`: você interrompeu o trabalho e o trabalho interrompeu a importação de usuários.
+ `Succeeded`: o trabalho foi concluído com êxito.
+ `Failed`: o trabalho foi interrompido devido a um erro.
+ `Expired`: você criou um trabalho, mas não iniciou o trabalho no intervalo de 24 a 48 horas. Todos os dados associados ao trabalho foram excluídos e o trabalho não pode ser iniciado.

#### Fazer upload do arquivo CSV
<a name="cognito-user-pools-using-import-tool-cli-uploading-csv-file"></a>

Use o comando `curl` a seguir para fazer upload do arquivo CSV que contém os dados do usuário no URL pré-assinado que você obteve da resposta do comando `create-user-import-job`.

```
curl -v -T "PATH_TO_CSV_FILE" -H "x-amz-server-side-encryption:aws:kms" "PRE_SIGNED_URL"
```

Na saída deste comando, procure a frase `"We are completely uploaded and fine"`. Essa frase indica que o upload do arquivo foi realizado com êxito. Os grupos de usuários não mantêm as informações nos arquivos de importação depois que você executa os trabalhos de importação. Depois que eles forem concluídos ou expirarem, o Amazon Cognito excluirá seu arquivo CSV carregado.

#### Como descrever um trabalho de importação de usuário
<a name="cognito-user-pools-using-import-tool-cli-describing-user-import-job"></a>

Para obter uma descrição do seu trabalho de importação de usuários, use o comando a seguir, onde *USER\$1POOL\$1ID* está o ID do grupo de usuários e *JOB\$1ID* o ID do trabalho que foi retornado quando você criou o trabalho de importação de usuários. 

```
aws cognito-idp describe-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"
```

**Example Resposta de exemplo:**  

```
{
    "UserImportJob": {
        "Status": "Created",
        "SkippedUsers": 0,
        "UserPoolId": "USER_POOL_ID",
        "ImportedUsers": 0,
        "JobName": "JOB_NAME",
        "JobId": "JOB_ID",
        "PreSignedUrl": "PRE_SIGNED_URL",
        "CloudWatchLogsRoleArn":"ROLE_ARN",
        "FailedUsers": 0,
        "CreationDate": 1470957431.965
    }
}
```

No exemplo de saída anterior, *PRE\$1SIGNED\$1URL* é o URL para o qual você carregou o arquivo CSV. Esse *ROLE\$1ARN* é o ARN da função de CloudWatch registros que você recebeu ao criar a função.

#### Como listar os trabalhos de importação de usuário
<a name="cognito-user-pools-using-import-tool-cli-listing-user-import-jobs"></a>

Para listar os trabalhos de importação de usuário, use o comando a seguir:

```
aws cognito-idp list-user-import-jobs --user-pool-id "USER_POOL_ID" --max-results 2
```

**Example Resposta de exemplo:**  

```
{
    "UserImportJobs": [
        {
            "Status": "Created",
            "SkippedUsers": 0,
            "UserPoolId": "USER_POOL_ID",
            "ImportedUsers": 0,
            "JobName": "JOB_NAME",
            "JobId": "JOB_ID",
            "PreSignedUrl":"PRE_SIGNED_URL",
            "CloudWatchLogsRoleArn":"ROLE_ARN",
            "FailedUsers": 0,
            "CreationDate": 1470957431.965
        },
        {
            "CompletionDate": 1470954227.701,
            "StartDate": 1470954226.086,
            "Status": "Failed",
            "UserPoolId": "USER_POOL_ID",
            "ImportedUsers": 0,
            "SkippedUsers": 0,
            "JobName": "JOB_NAME",
            "CompletionMessage": "Too many users have failed or been skipped during the import.",
            "JobId": "JOB_ID",
            "PreSignedUrl":"PRE_SIGNED_URL",
            "CloudWatchLogsRoleArn":"ROLE_ARN",
            "FailedUsers": 5,
            "CreationDate": 1470953929.313
        }
    ],
    "PaginationToken": "PAGINATION_TOKEN"
}
```

Os trabalhos são listados em ordem cronológica, do último criado ao primeiro. A *PAGINATION\$1TOKEN* string após o segundo trabalho indica que há resultados adicionais para esse comando de lista. Para listar os resultados adicionais, use a opção `--pagination-token` opção da seguinte forma:

```
aws cognito-idp list-user-import-jobs --user-pool-id "USER_POOL_ID" --max-results 10 --pagination-token "PAGINATION_TOKEN"
```

#### Como iniciar um trabalho de importação de usuário
<a name="cognito-user-pools-using-import-tool-cli-starting-user-import-job"></a>

Para iniciar um trabalho de importação de usuário, use o seguinte comando:

```
aws cognito-idp start-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"
```

Somente um trabalho de importação pode ser ativado por vez por conta.

**Example Resposta de exemplo:**  

```
{
    "UserImportJob": {
        "Status": "Pending",
        "StartDate": 1470957851.483,
        "UserPoolId": "USER_POOL_ID",
        "ImportedUsers": 0,
        "SkippedUsers": 0,
        "JobName": "JOB_NAME",
        "JobId": "JOB_ID",
        "PreSignedUrl":"PRE_SIGNED_URL",
        "CloudWatchLogsRoleArn": "ROLE_ARN",
        "FailedUsers": 0,
        "CreationDate": 1470957431.965
    }
}
```

#### Como interromper um trabalho de importação de usuário
<a name="cognito-user-pools-using-import-tool-cli-stopping-user-import-job"></a>

Para interromper um trabalho de importação de usuário em andamento, use o comando a seguir. Após interromper o trabalho, ele não poderá ser reiniciado.

```
aws cognito-idp stop-user-import-job --user-pool-id "USER_POOL_ID" --job-id "JOB_ID"
```

**Example Resposta de exemplo:**  

```
{
    "UserImportJob": {
        "CompletionDate": 1470958050.571,
        "StartDate": 1470958047.797,
        "Status": "Stopped",
        "UserPoolId": "USER_POOL_ID",
        "ImportedUsers": 0,
        "SkippedUsers": 0,
        "JobName": "JOB_NAME",
        "CompletionMessage": "The Import Job was stopped by the developer.",
        "JobId": "JOB_ID",
        "PreSignedUrl":"PRE_SIGNED_URL",
        "CloudWatchLogsRoleArn": "ROLE_ARN",
        "FailedUsers": 0,
        "CreationDate": 1470957972.387
    }
}
```

## Visualizando os resultados da importação do grupo de usuários no CloudWatch console
<a name="cognito-user-pools-using-import-tool-cloudwatch"></a>

Você pode ver os resultados do seu trabalho de importação no CloudWatch console da Amazon.

**Topics**
+ [

### Como visualizar os resultados
](#cognito-user-pools-using-import-tool-viewing-the-results)
+ [

### Como interpretar os resultados
](#cognito-user-pools-using-import-tool-interpreting-the-results)

### Como visualizar os resultados
<a name="cognito-user-pools-using-import-tool-viewing-the-results"></a>

As etapas a seguir descrevem como exibir os resultados de importação de grupo de usuários.

**Para exibir os resultados da importação de grupos de usuários**

1. Faça login no Console de gerenciamento da AWS e abra o CloudWatch console em [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Escolha **Logs**.

1. Escolha o grupo de logs dos trabalhos de importação de grupo de usuários. O nome do grupo de logs está no formato `/aws/cognito/userpools/USER_POOL_ID/USER_POOL_NAME`.

1. Escolha o log do trabalho de importação de usuário que você acabou de executar. O nome do registro está no formato*JOB\$1ID*/*JOB\$1NAME*. Os resultados do registro referem-se aos usuários por número de linha. Nenhum dado de usuário é gravado no log. Para cada usuário, uma linha semelhante à seguinte é exibida:
   + `[SUCCEEDED] Line Number 5956 - The import succeeded.`
   + `[SKIPPED] Line Number 5956 - The user already exists.`
   + `[FAILED] Line Number 5956 - The User Record does not set any of the auto verified attributes to true. (Example: email_verified to true).`

### Como interpretar os resultados
<a name="cognito-user-pools-using-import-tool-interpreting-the-results"></a>

Usuários importados com sucesso têm seu status definido como "PasswordReset”.

Nos casos a seguir, o usuário não será importado, mas o trabalho de importação continuará:
+ Nenhum atributo verificado automaticamente é definido como `true`.
+ Os dados do usuário não correspondem ao esquema.
+ Não é possível importar o usuário devido a um erro interno.

Nos casos a seguir, o trabalho de importação apresentará falha:
+ A função Amazon CloudWatch Logs não pode ser assumida, não tem a política de acesso correta ou foi excluída.
+ O grupo de usuários foi excluído.
+ O Amazon Cognito não pode analisar o arquivo .csv.

## Solicitação de redefinição de senha aos usuários importados
<a name="cognito-user-pools-using-import-tool-password-reset"></a>

Se o grupo de usuários oferecer somente login baseado em senha, os usuários deverão redefinir as senhas após a importação. Na primeira vez que fizerem login, poderão inserir *qualquer* senha. O Amazon Cognito solicita que eles insiram uma nova senha na resposta da API à solicitação de login da sua aplicação.

Se o grupo de usuários tiver fatores de autenticação sem senha, o Amazon Cognito os usará como padrão para usuários importados. Eles não serão solicitados a criar uma nova senha e poderão fazer login imediatamente com uma OTP enviada por e-mail ou SMS, sem senha. Você também poderá solicitar que os usuários definam uma senha para poderem usar outros métodos de login, como nome de usuário e senha ou chave de acesso. As condições a seguir se aplicam ao login sem senha após a importação do usuário.

1. Você deve importar usuários com um atributo que corresponda a um fator de login sem senha disponível. Se os usuários puderem fazer login com um endereço de e-mail, você deverá importar um atributo `email`. Se puderem fazer login com um número de telefone, você deverá importar um atributo `phone_number`. Se puderem fazer login com ambos, importe um valor para qualquer um dos atributos.

1. Normalmente, os usuários são importados em um estado `RESET_REQUIRED` em que precisam redefinir a senha. Se eles forem importados com a capacidade de fazer login com um fator sem senha, o Amazon Cognito definirá seu estado como `CONFIRMED`.

Para saber mais sobre a autenticação sem senha, incluindo como configurá-la e como criar o fluxo de autenticação em sua aplicação, consulte [Autenticação com grupos de usuários do Amazon Cognito](authentication.md).

O procedimento a seguir descreve a experiência do usuário em um mecanismo de login personalizado com usuários locais em um `RESET_REQUIRED` após a importação de um arquivo CSV. Se seus usuários fizerem login com login gerenciado, instrua-os a selecionar a opção **Esqueceu a senha?**, informe o código deles por e-mail ou mensagem de texto e defina uma senha.

**Solicitação de redefinição de senha aos usuários importados**

1. Na aplicação, tente fazer login silenciosamente para o usuário atual com `InitiateAuth` usando uma senha aleatória.

1. O Amazon Cognito retorna uma `NotAuthorizedException` quando `PreventUserExistenceErrors` está habilitado. Caso contrário, retornará `PasswordResetRequiredException`.

1. A aplicação faz uma solicitação da API `ForgotPassword` e redefine a senha do usuário.

   1. A aplicação envia o nome de usuário em uma solicitação de API `ForgotPassword`.

   1. O Amazon Cognito envia um código para o e-mail ou telefone verificado. O destino depende dos valores que você forneceu para `email_verified` e `phone_number_verified` no arquivo CSV. A resposta à solicitação `ForgotPassword` indica o destino do código.
**nota**  
O grupo de usuários deve estar configurado para verificar e-mails ou números de telefone. Para obter mais informações, consulte [Como cadastrar e confirmar contas de usuários](signing-up-users-in-your-app.md).

   1. A aplicação exibe uma mensagem para o usuário verificar o local para onde o código foi enviado e solicita que o usuário insira o código e uma nova senha.

   1. O usuário informa o código e a nova senha no aplicativo.

   1. A aplicação envia o código e a nova senha em uma solicitação da API `ConfirmForgotPassword`.

   1. A aplicação redireciona o usuário para fazer login.

# Trabalhar com atributos do usuário
<a name="user-pool-settings-attributes"></a>

Os atributos são informações que ajudam a identificar usuários específicos, como nome, endereço de e-mail e número de telefone. Um novo grupo de usuários tem um conjunto padrão de *atributos*. Você também pode adicionar atributos personalizados à sua definição de grupo de usuários no Console de gerenciamento da AWS. Este tópico descreve esses atributos detalhadamente e oferece dicas sobre como configurar seu grupo de usuários.

Não armazene todas as informações sobre seus usuários nos atributos. Por exemplo, mantenha os dados do usuário que são alterados com frequência, como estatísticas de uso ou pontuações de jogos, em um repositório de dados separado, como o Amazon Cognito Sync ou o Amazon DynamoDB.

Limpe as entradas dos valores de string de atributos do usuário antes de enviá-los ao grupo de usuários. Um método para analisar os valores de atributos do usuário propostos é utilizando um acionador do Lambda, como o de [pré-cadastro](user-pool-lambda-pre-sign-up.md).

**nota**  
Alguns documentos e padrões se referem a atributos como *membros*.

**Topics**
+ [

## Atributos padrão
](#cognito-user-pools-standard-attributes)
+ [

## Nome de usuário e nome de usuário preferencial
](#user-pool-settings-usernames)
+ [

## Personalização dos atributos de login
](#user-pool-settings-aliases)
+ [

## Atributos personalizados
](#user-pool-settings-custom-attributes)
+ [

## Permissões e escopos do atributo
](#user-pool-settings-attribute-permissions-and-scopes)

## Atributos padrão
<a name="cognito-user-pools-standard-attributes"></a>

O Amazon Cognito atribui a todos os usuários um conjunto de atributos padrão com base na [Especificação do OpenID Connect](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Por padrão, os valores de atributo padrão e personalizados podem ser qualquer string de até 2.048 caracteres, mas alguns valores têm restrições de formato. 

Os atributos padrão são:
+ `name`
+ `family_name`
+ `given_name`
+ `middle_name`
+ `nickname`
+ `preferred_username`
+ `profile`
+ `picture`
+ `website`
+ `gender`
+ `birthdate`
+ `zoneinfo`
+ `locale`
+ `updated_at`
+ `address`
+ `email`
+ `phone_number`
+ `sub`

Exceto `sub`, os atributos padrão são opcionais por padrão para todos os usuários. Para tornar um atributo obrigatório, durante o processo de criação do grupo de usuários, marque a caixa de seleção **Required** (Obrigatório) ao lado do atributo. O Amazon Cognito atribui um valor de identificador de usuário exclusivo ao atributo `sub` de cada usuário. Somente os atributos **email** e **phone\$1number** podem ser verificados.

Os atributos padrão têm propriedades predefinidas que você pode visualizar no `SchemaAttributes` parâmetro de uma [resposta da DescribeUserPool API](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html#API_DescribeUserPool_ResponseSyntax). Você pode definir valores personalizados para essas propriedades de atributos, como restrições de tipo de dados, mutabilidade e comprimento. Para modificar as propriedades do atributo padrão, defina seus valores personalizados no [parâmetro CreateUserPool Esquema](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Schema). O esquema também representa onde você define os atributos necessários. Você não pode modificar propriedades de atributos padrão ao criar grupos de usuários no console do Amazon Cognito.

**nota**  
 Quando você marcar um atributo padrão como **Required** (Obrigatório), o usuário não poderá se inscrever, a menos que forneça um valor para o atributo. Para criar usuários e não fornecer valores para os atributos necessários, os administradores podem usar a [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html)API. Após a criação de um grupo de usuários, não é possível alternar um atributo entre obrigatório e não obrigatório.Detalhes do atributo padrão e restrições de formato

**birthdate**  
O valor deve ser uma data válida de 10 caracteres no formato YYYY-MM-DD.

**email**  
Os usuários e administradores podem verificar valores de endereço de e-mail.  
Um administrador com Conta da AWS as permissões adequadas pode alterar o endereço de e-mail do usuário e também marcá-lo como verificado. Marque um endereço de e-mail como verificado com a [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html)API ou o comando [admin-update-user-attributes](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/admin-update-user-attributes.html) AWS Command Line Interface (AWS CLI). Com esse comando, o administrador pode alterar o atributo `email_verified` para `true`. Você também pode editar um usuário no menu **Usuários** do console do Amazon Cognito para marcar um endereço de e-mail como verificado.  
O valor deve ser uma [string de endereço de e-mail válida](https://datatracker.ietf.org/doc/html/rfc3696#section-3) seguindo o formato de e-mail padrão com o símbolo @ e o domínio, com até 2.048 caracteres.

**phone\$1number**  
O usuário deverá fornecer um número de telefone se a autenticação multifator (MFA) de SMS estiver ativa. Para obter mais informações, consulte [Adicionar MFA a um grupo de usuários](user-pool-settings-mfa.md).  
Os usuários e administradores podem verificar valores de número de telefone.  
Um administrador com Conta da AWS as permissões adequadas pode alterar o número de telefone do usuário e também marcá-lo como verificado. Marque um número de telefone como verificado com a [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html)API ou o [admin-update-user-attributes](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/admin-update-user-attributes.html) AWS CLI comando. Com esse comando, o administrador pode alterar o atributo `phone_number_verified` para `true`. Você também pode editar um usuário no menu **Usuários** do console do Amazon Cognito para marcar um número de telefone como verificado.  
Os números de telefone devem seguir estas regras de formatação: devem começar com um sinal de mais (**\$1**), seguido imediatamente do código do país. Um número de telefone pode conter apenas o sinal **\$1** e os dígitos. Remova quaisquer outros caracteres de um número de telefone, como parênteses, espaços ou traços (**-**) antes de enviar o valor ao serviço. Por exemplo, um número de telefone dos Estados Unidos deve seguir este formato: **\$114325551212**.

**preferred\$1username**  
Você pode selecionar `preferred_username` conforme necessário ou como um alias, mas não ambos. Se `preferred_username` for um alias, você pode fazer uma solicitação para a operação da [UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html)API e adicionar o valor do atributo depois de confirmar o usuário.

**sub**  
Indexe e pesquise seus usuários com base no atributo `sub`. O atributo `sub` é um identificador de usuário exclusivo em cada grupo de usuários. Os usuários podem alterar atributos como `phone_number` e `email`. O atributo `sub` tem um valor fixo. Para ter mais informações sobre como descobrir usuários, consulte [Como gerenciar e pesquisar contas de usuários](how-to-manage-user-accounts.md).

### Exibir atributos obrigatórios
<a name="how-to-edit-standard-attributes"></a>

Siga o procedimento abaixo a fim de exibir atributos obrigatórios para um determinado grupo de usuários.

**nota**  
Não é possível alterar atributos obrigatórios após a criação de um grupo de usuários.

**Para exibir atributos obrigatórios**

1. Acesse o [Amazon Cognito](https://console.aws.amazon.com/cognito/home) no. Console de gerenciamento da AWS Se o console solicitar, insira suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente da lista.

1. Clique no menu **Cadastrar-se**.

1. Na seção **Required attributes** (Atributos obrigatórios), veja os atributos obrigatórios de seu grupo de usuários.

## Nome de usuário e nome de usuário preferencial
<a name="user-pool-settings-usernames"></a>

O valor de `username` é um atributo separado; não equivale ao atributo `name`. Cada usuário tem um atributo `username`. O Amazon Cognito gera automaticamente um nome de usuário para usuários federados. Você deve fornecer um atributo `username` para criar um usuário local no diretório do Amazon Cognito. Após a criação de um usuário, não é possível alterar o valor do atributo `username`.

Os desenvolvedores podem usar o atributo `preferred_username` para atribuir aos usuários nomes de usuário que eles podem alterar. Para obter mais informações, consulte [Personalização dos atributos de login](#user-pool-settings-aliases).

Se sua aplicação não exigir um nome de usuário, não será necessário solicitar que os usuários o forneçam. O aplicativo pode criar um nome de usuário exclusivo para os usuários no plano de fundo. Isso pode ser útil se você desejar que os usuários se inscrevam e façam login com um endereço de e-mail e senha. Para obter mais informações, consulte [Personalização dos atributos de login](#user-pool-settings-aliases).

`username` deve ser exclusivo em um grupo de usuários. `username` pode ser reutilizado, mas somente depois que você o excluir e ele não estiver mais em uso. Para obter informações sobre as restrições de string aos `username` atributos, consulte a propriedade *username* de uma solicitação de [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html#CognitoUserPools-SignUp-request-Username)API.

## Personalização dos atributos de login
<a name="user-pool-settings-aliases"></a>

Ao criar um grupo de usuários, você pode configurar *atributos de nome de usuário* caso queira que os usuários possam se inscrever e fazer login com um endereço de e-mail ou um número de telefone como nome de usuário. Como alternativa, você pode configurar *atributos de alias* para dar aos usuários a seguinte opção: incluir vários atributos ao se inscreverem e, então, fazer login com um nome de usuário, nome de usuário preferencial, endereço de e-mail ou número de telefone.

**Importante**  
Após a criação de um grupo de usuários, não é possível alterar essa configuração.

### Como escolher entre atributos de alias e atributos de nome de usuário
<a name="user-pool-settings-aliases-settings"></a>


| Seu requisito | Atributos de alias | Atributos do nome de usuário | 
| --- |--- |--- |
| Os usuários têm vários atributos de login | Sim¹ | Não² | 
| Os usuários devem verificar o endereço de e-mail ou o número de telefone antes de poderem fazer login com ele | Sim | Não | 
| Inscreva usuários com endereços de e-mail ou números de telefone duplicados e evite erros³ UsernameExistsException | Sim | Não | 
| Pode atribuir o mesmo valor de atributo de endereço de e-mail ou número de telefone a mais de um usuário | Sim⁴ | Não | 

¹ Os atributos de login disponíveis são nome de usuário, endereço de e-mail, número de telefone e nome de usuário de preferência.

² É possível fazer login com o endereço de e-mail ou o número de telefone.

³ O grupo de usuários não gera erros `UsernameExistsException` quando os usuários se registram com endereços de e-mail ou números de telefone possivelmente duplicados, mas sem nome de usuário. Esse comportamento é independente de **Evitar erros de existência de nome de usuário**, que se aplica às operações de login, mas não às operações de inscrição.

⁴ Somente o último usuário que verificou o atributo pode fazer login com ele.

#### Opção 1: vários atributos de login (atributos de alias)
<a name="user-pool-settings-aliases-settings-option-1"></a>

Um atributo é um *alias* quando os usuários têm um nome de usuário, mas também podem fazer login com esse atributo. Configure aliases quando quiser permitir que os usuários optem entre o nome de usuário e outros valores de atributo no campo de nome de usuário do formulário de login. O atributo `username` é um valor fixo que os usuários não podem mudar. Se você marcar um atributo como alias, os usuários poderão fazer login usando esse atributo em vez de o nome de usuário. Você pode marcar os atributos de endereço de e-mail, número de telefone e nome de usuário preferido como aliases. Por exemplo, se você selecionar um endereço de e-mail e número de telefone como aliases para um grupo de usuários, os usuários desse grupo poderão fazer login usando o respectivo nome de usuário, endereço de e-mail ou número de telefone com a senha.

Para escolher atributos de alias, selecione **User name** (Nome de usuário) e pelo menos uma opção de login adicional ao criar o grupo de usuários.

**nota**  
Ao configurar seu grupo de usuários para indistinção de maiúsculas e minúsculas, o usuário poderá usar letras minúsculas ou maiúsculas para se cadastrar ou fazer login com o alias. Para obter mais informações, consulte a Referência [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)da *API de grupos de usuários do Amazon Cognito*.

Se você selecionar o endereço de e-mail como um alias, o Amazon Cognito não aceitará um nome de usuário que corresponda a um formato de endereço de e-mail válido. Da mesma forma, se você selecionar o número de telefone como alias, o Amazon Cognito não aceitará um nome de usuário para esse grupo de usuários que corresponda a um formato de número de telefone válido.

**nota**  
Os valores de alias devem ser exclusivos em um grupo de usuários. Se configurar um alias para um endereço de e-mail ou número de telefone, o valor que você fornecer poderá apresentar o estado verificado em apenas uma conta. Durante o cadastro, se o usuário fornecer um endereço de e-mail ou número de telefone como um valor de alias e outro usuário já tiver usado esse valor, o registro será bem-sucedido. No entanto, quando um usuário tentar confirmar a conta com esse e-mail (ou número de telefone) e inserir o código válido, o Amazon Cognito retornará um erro `AliasExistsException`. Esse erro indica ao usuário que já existe uma conta com esse endereço de e-mail (ou número de telefone). Nesse ponto, o usuário pode abandonar a tentativa de criar a nova conta e, em vez disso, tentar redefinir a senha para a conta antiga. Se o usuário continuar criando a nova conta, sua aplicação deverá chamar a API `ConfirmSignUp` com a opção `forceAliasCreation`. `ConfirmSignUp` com `forceAliasCreation` move o alias da conta anterior para a conta recém-criada e marca o atributo não verificado na conta anterior.

Os números de telefone e os endereços de e-mail só se tornarão aliases ativos para um usuário depois que você os verificar. Recomendamos escolher a verificação automática dos endereços de e-mail e números de telefone se você os usar como aliases.

Escolha atributos de alias para evitar erros `UsernameExistsException` nos atributos de endereço de e-mail e número de telefone quando os usuários se inscreverem.

Ative o atributo `preferred_username` para que o usuário possa alterar o nome que ele usa para fazer login enquanto o valor de atributo `username` não mudar. Se desejar configurar essa experiência de usuário, envie o novo valor de `username` como `preferred_username` e escolha `preferred_username` como alias. Assim, os usuários poderão fazer login com o novo valor que eles inseriram. Se você selecionar `preferred_username` como alias, o usuário só poderá fornecer o valor quando confirmar uma conta. Ele não poderá fornecer o valor durante o registro.

Quando o usuário se inscreve com um nome de usuário, é possível escolher se ele pode fazer login com um ou mais dos aliases a seguir.
+ Um endereço de e-mail verificado
+ Um número de telefone verificado
+ Nome de usuário preferido

Depois que o usuário se cadastra, ele não pode alterar esses aliases.

**Importante**  
Quando seu grupo de usuários é compatível com login com aliases e você deseja autorizar ou pesquisar um usuário, não identifique seu usuário por nenhum de seus atributos de login. O identificador de usuário de valor fixo `sub` é o único indicador consistente da identidade do seu usuário.

Inclua as etapas a seguir quando criar o grupo de usuários para que os usuários possam fazer login com um alias.

------
#### [ Phone number or email address (console) ]

Você deve definir o endereço de e-mail e o número de telefone como atributos de alias ao criar um grupo de usuários.

**Como criar um grupo de usuários com aliases de nome de usuário no console do Amazon Cognito**

1. Acesse o [Amazon Cognito](https://console.aws.amazon.com/cognito/home) no Console de gerenciamento da AWS. Se o console solicitar, insira suas AWS credenciais.

1. Crie um novo grupo de usuários com o botão **Comece a usar** ou **Criar grupo de usuários**.

1. Escolha as configurações da aplicação em **Definir a aplicação**.

1. Em **Configurar opções**, em **Opções para identificadores de login**, marque a caixa de seleção ao lado de **Nome de usuário** e pelo menos uma das outras opções, **E-mail** e **Número de telefone**.

1. Escolha os atributos de alias como **Atributos obrigatórios para a inscrição**. No formulário de cadastro de login gerenciado, o Amazon Cognito solicita que novos usuários forneçam valores para os atributos obrigatórios.

1. Em **Adicionar um URL de retorno**, configure um URL de retorno de chamada da aplicação para redirecionamento após o login de login gerenciado.

1. Escolha **Criar**.

------
#### [ Phone number or email address (API/SDK) ]

Crie um novo grupo de usuários com a operação [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)da API. Configure o parâmetro `AliasAttributes` conforme mostrado. Você pode remover a entrada `email` se quiser somente aliases de números de telefone ou remover a entrada `phone_number` se quiser somente aliases de endereço de e-mail.

```
"AliasAttributes": [
   "email",
   "phone_number"
],
```

------
#### [ Preferred username (API/SDK) ]

O console do Amazon Cognito cria grupos de usuários sem `preferred_username` como um alias. Para criar grupos de usuários com um `preferred_username` alias, configure grupos de usuários com solicitações de [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)API em um AWS SDK. Para oferecer suporte à criação de atributos de nome de usuário preferenciais no cadastro, defina `preferred_username` como um atributo obrigatório. No formulário de cadastro de login gerenciado, o Amazon Cognito solicita que novos usuários forneçam valores para os atributos obrigatórios. Você *pode* definir `preferred_username` como um atributo obrigatório no console do Amazon Cognito, mas isso não o torna disponível como um alias.

**Configurar como um alias**  
Configure `preferred_username` como um alias no parâmetro `AliasAttributes` de uma solicitação `CreateUserPool`, conforme mostrado. Remova todos os valores que você não deseja como atributos de alias da lista.

```
"AliasAttributes": [
   "email",
   "phone_number",
   "preferred_username"
],
```

**Configurar como obrigatório**  
No formulário de cadastro de login gerenciado, o Amazon Cognito solicita que novos usuários forneçam valores para os atributos obrigatórios. Configure `preferred_username` conforme necessário no `SchemaAttributes` parâmetro de uma [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)solicitação.

Para definir o nome de usuário preferencial como um atributo obrigatório, configure-o conforme mostrado. O exemplo a seguir modifica o esquema padrão de `preferred_username` para torná-lo obrigatório. Outros parâmetros do esquema, como `AttributeDataType` (usa `string` como padrão) e `StringAttributeConstraints` (usa de 1 a 99 caracteres como padrão), assumem valores padrão.

```
"Schema": [
   {
      "Name": "preferred_username",
      "Required": true
   }
]
```

------

#### Opção 2: endereço de e-mail ou número de telefone como atributo de login (atributos de nome de usuário)
<a name="user-pool-settings-aliases-settings-option-2"></a>

Quando o usuário se inscreve com um endereço de e-mail ou número de telefone como o respectivo nome de usuário, é possível escolher se ele pode se inscrever apenas com endereços de e-mail, apenas números de telefone ou qualquer um dos dois. 

Para escolher atributos de nome de usuário, não selecione **Nome de usuário** como opção de login ao criar o grupo de usuários.

O endereço de e-mail ou o número de telefone deve ser exclusivo e não deve estar em uso por outro usuário. Ele não precisa ser verificado. Depois que o usuário se cadastra com um endereço de e-mail ou número de telefone, ele não pode criar uma nova conta com o mesmo endereço de e-mail ou número de telefone. O usuário só poderá reutilizar a conta existente e redefinir a respectiva senha, se necessário. No entanto, ele pode alterar o endereço de e-mail ou o número de telefone para um novo endereço de e-mail ou número de telefone. Se o endereço de e-mail ou o número de telefone ainda não estiver em uso, ele se tornará o novo nome de usuário.

Ao selecionar endereço de e-mail e número de telefone como atributos de nome de usuário, os usuários podem fazer login com um ou outro, mesmo que forneçam valores para ambos os atributos. O nome de usuário de login é baseado no valor que você passa no `Username` parâmetro de. [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html#CognitoUserPools-SignUp-request-Username)

**nota**  
Se um usuário se inscrever com um endereço de e-mail como nome de usuário, ele poderá alterar o nome de usuário para outro endereço de e-mail, mas não poderá alterá-lo para um número de telefone. Se os usuários se inscreverem com um número de telefone, eles poderão alterar o nome de usuário para outro número de telefone, mas não poderão alterá-lo para um endereço de e-mail.

Siga as etapas abaixo durante o processo de criação do grupo de usuários para configurar o cadastro e o login com um endereço de e-mail ou número de telefone.

------
#### [ Username attributes (console) ]

O procedimento a seguir cria um grupo de usuários com atributos de nome de usuário de endereço de e-mail ou número de telefone. A diferença no processo de atributos de nome de usuário no console do Amazon Cognito é que você também não define o **Nome de usuário** como um atributo de login.

**Como criar um grupo de usuários com atributos de nome de usuário no console do Amazon Cognito**

1. Acesse o [Amazon Cognito](https://console.aws.amazon.com/cognito/home) no Console de gerenciamento da AWS. Se o console solicitar, insira suas AWS credenciais.

1. Crie um novo grupo de usuários com o botão **Comece a usar** ou **Criar grupo de usuários**.

1. Escolha as configurações da aplicação em **Definir a aplicação**.

1. Em **Configurar opções**, em **Opções para identificadores de login**, selecione os atributos de nome de usuário: **E-mail**, **Número de telefone** ou ambos. Deixe **Nome de usuário** desmarcado.

1. Como prática recomendada, selecione os atributos de nome de usuário como **Atributos obrigatórios para inscrição**. No formulário de cadastro de login gerenciado, o Amazon Cognito solicita que novos usuários forneçam valores para os atributos obrigatórios. Se você não definir os atributos de nome de usuário como obrigatórios, o Amazon Cognito não solicitará que os novos usuários os forneçam. Nesse cenário, você deve configurar sua aplicação para coletar e enviar endereços de e-mail ou números de telefone de cada usuário antes que ele possa fazer login.

1. Em **Adicionar um URL de retorno**, configure um URL de retorno de chamada da aplicação para redirecionamento após o login de login gerenciado.

1. Escolha **Criar**.

------
#### [ Username attributes (API/SDK) ]

Em uma [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)solicitação, configure o `UsernameAttributes` parâmetro conforme mostrado. Para permitir o login somente com nomes de usuário de endereço de e-mail, especifique `email` sozinho nessa lista. Para permitir o login somente com nomes de usuário de números de telefone, especifique `phone_number` sozinho. Esse parâmetro substitui o nome de usuário como opção de login.

```
"UsernameAttributes": [ 
   "email",
   "phone_number"
],
```

------

Ao configurar atributos de nome de usuário, você pode fazer solicitações de [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)API que transmitem um endereço de e-mail ou número de telefone no `username` parâmetro. Veja a seguir o comportamento da operação de API `SignUp` com atributos de nome de usuário.
+ Se a string `username` estiver no formato válido de endereço de e-mail, por exemplo, `user@example.com`, o grupo de usuários preencherá automaticamente o atributo `email` do usuário com o valor `username`.
+ Se a string `username` estiver no formato válido de número de telefone, por exemplo, `+12065551212`, o grupo de usuários ocupa automaticamente o atributo `phone_number` do usuário com o valor `username`.
+ Se a string `username` não estiver no formato de endereço de e-mail ou número de telefone, a API `SignUp` retornará uma exceção.
+ Se a string `username` contiver um endereço de e-mail ou número de telefone já em uso, a API `SignUp` retornará uma exceção.
+ A API `SignUp` preenche o atributo `username` com um [UUID](cognito-terms.md#terms-uuid) para seu usuário. Este UUID possui o mesmo valor reivindicado pelo `sub` no token de identidade do usuário.

Você pode usar um endereço de e-mail ou número de telefone no lugar do nome de usuário em tudo APIs, exceto na [ListUsers](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUsers.html)operação. Nas solicitações de API `ListUsers`, é possível especificar um `Filter` de `email` ou `phone_number`. Se você filtrar por `username`, deverá fornecer o nome de usuário do UUID, não o endereço de e-mail ou número de telefone.

## Atributos personalizados
<a name="user-pool-settings-custom-attributes"></a>

Você pode adicionar até 50 atributos personalizados ao grupo de usuários. Você pode especificar um comprimento mínimo e/ou máximo para os atributos personalizados. No entanto, o comprimento máximo para qualquer atributo personalizado não pode ultrapassar 2.048 caracteres. O nome de um atributo personalizado deve corresponder ao padrão de expressão regular descrito no `Name` parâmetro de [SchemaAttributeType](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SchemaAttributeType.html).

**Todo atributo personalizado tem as seguintes características:**
+ Você pode defini-lo como uma string, número, booleano ou objeto `DateTime`. O Amazon Cognito grava valores de atributo personalizados no token de ID somente como strings.
**nota**  
No console do Amazon Cognito, é possível adicionar atributos personalizados somente dos tipos de dados de string e número. Opções adicionais, como tipos de dados booleanos e de `DateTime` atributos, só estão disponíveis na `SchemaAttributes` propriedade [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)e nas solicitações da [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API.
+ Não é possível exigir que os usuários forneçam um valor para o atributo.
+ Você não poderá removê-lo ou alterá-lo depois de adicioná-lo ao grupo de usuários.
+ A extensão de caracteres do nome do atributo está dentro do limite que o Amazon Cognito aceita. Para obter mais informações, consulte [Cotas no Amazon Cognito](quotas.md).
+ Ele pode ser *mutável* ou *imutável*. É possível gravar um valor em um atributo imutável ao criar um usuário. Você pode alterar o valor de um atributo mutável se o cliente de aplicação tiver permissão de gravação para o atributo. Consulte [Permissões e escopos do atributo](#user-pool-settings-attribute-permissions-and-scopes) para obter mais informações.

**nota**  
No código e nas configurações de regra de [Controle de acesso com base em perfil](role-based-access-control.md), os atributos personalizados requerem o prefixo `custom:` para que sejam diferenciados dos atributos padrão.

Você também pode adicionar *atributos de desenvolvedor* ao criar grupos de usuários, na `SchemaAttributes` propriedade de [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html). Os atributos de desenvolvedor têm um prefixo `dev:`. Você só pode modificar os atributos de desenvolvedor de um usuário com AWS credenciais. Os atributos de desenvolvedor são um recurso herdado que o Amazon Cognito substituiu pelas permissões de leitura e gravação do cliente da aplicação.

Siga o procedimento abaixo para criar um novo atributo personalizado.

**Para adicionar um atributo personalizado usando o console**

1. Acesse o [Amazon Cognito](https://console.aws.amazon.com/cognito/home) no. Console de gerenciamento da AWS Se o console solicitar, insira suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente da lista.

1. Clique no menu **Cadastrar-se** e, na seção **Atributos personalizados**, selecione **Adicionar atributos personalizados**.

1. Na página **Add custom attributes** (Adicionar atributos personalizados), forneça os seguintes detalhes sobre o novo atributo:
   + Insira um **Name** (Nome).
   + Selecione um **Type** (Tipo), que pode ser **String** ou **Number** (Número).
   + Insira um tamanho de string **Min.** (Mínimo) ou um valor numérico.
   + Insira um tamanho de string **Max.** (Máximo) ou um valor numérico.
   + Selecione **Mutable** (Mutável) se quiser conceder permissão aos usuários para alterar o valor de um atributo personalizado depois que eles definirem o valor inicial.

1. Escolha **Salvar alterações**.

## Permissões e escopos do atributo
<a name="user-pool-settings-attribute-permissions-and-scopes"></a>

Para cada aplicação cliente, é possível configurar permissões de leitura e gravação para cada atributo de usuário. Dessa forma, você pode controlar o acesso de leitura que qualquer aplicação tiver e modificar cada atributo armazenado para seus usuários. Por exemplo, você pode ter um atributo personalizado que indique se um usuário é ou não um cliente pagante. Suas aplicações podem ver esse atributo, mas não o alterar diretamente. Em vez disso, você atualizará o atributo usando uma ferramenta administrativa ou um processo em segundo plano. Você pode definir permissões para atributos de usuário no console do Amazon Cognito, na API do Amazon Cognito ou na AWS CLI. Por padrão, todos os novos atributos personalizados só estarão disponíveis depois que você definir permissões de leitura e gravação para eles. Por padrão, quando você cria um cliente de aplicação, concede à aplicação permissões de leitura e gravação para todos os atributos padrão e personalizados. Para limitar a aplicação somente à quantidade de informações necessárias, atribua permissões específicas aos atributos na configuração do cliente da aplicação.

Como prática recomendada, especifique as permissões de leitura e gravação dos atributos ao criar um cliente de aplicação. Conceda ao cliente de aplicação acesso ao conjunto mínimo de atributos de usuário necessários para a operação da aplicação.

**nota**  
[DescribeUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html)retorna somente valores para `ReadAttributes` e `WriteAttributes` quando você configura permissões do cliente do aplicativo que não sejam as padrão.

**Como atualizar as permissões de atributo (Console de gerenciamento da AWS)**

1. Acesse o [Amazon Cognito](https://console.aws.amazon.com/cognito/home) no. Console de gerenciamento da AWS Se o console solicitar, insira suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente da lista.

1. Clique no menu **Clientes da aplicação** e selecione um cliente da aplicação na lista.

1. Na guia **Permissões de atributos**, selecione **Editar**.

1. Na página **Edit attribute read and write permissions** (Editar permissões de leitura e gravação de atributos), configure suas permissões de leitura e gravação e, em seguida, escolha **Save changes** (Salvar alterações).

Repita essas etapas para cada cliente de aplicativo usando o atributo personalizado.

Para cada cliente de aplicação, é possível marcar atributos como legíveis ou graváveis. Isso se aplica aos atributos padrão e aos atributos personalizados. A aplicação pode recuperar o valor dos atributos que você marca como legíveis, bem como definir ou modificar o valor dos atributos marcados como graváveis. Se seu aplicativo tentar definir um valor para um atributo que não está autorizado a escrever, o Amazon Cognito retornará. `NotAuthorizedException` [GetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html)as solicitações incluem um token de acesso com uma reivindicação do cliente do aplicativo; o Amazon Cognito retorna somente valores para atributos que o cliente do aplicativo pode ler. O token de ID do usuário de uma aplicação contém apenas declarações que correspondem aos atributos legíveis. Todos os clientes da aplicação podem gravar os atributos necessários do grupo de usuários. Você só pode definir o valor de um atributo em uma solicitação de API de grupos de usuários do Amazon Cognito quando também fornece um valor para quaisquer atributos obrigatórios que ainda não tenham um valor.

Os atributos personalizados têm recursos distintos para permissões de leitura e gravação. É possível criá-los como mutáveis ou imutáveis para o grupo de usuários e defini-los como atributos de leitura ou gravação para qualquer cliente da aplicação.

Um atributo personalizado imutável pode ser atualizado uma vez durante a criação do usuário. É possível preencher um atributo imutável com os métodos a seguir.
+ `SignUp`: um usuário se inscreve em um cliente da aplicação que tenha acesso de gravação a um atributo personalizado imutável. Ele fornece um valor para esse atributo.
+ Fazer login com um IdP de terceiros: um usuário faz login em um cliente da aplicação que tem acesso de gravação a um atributo personalizado imutável. A configuração do grupo de usuários para o IdP tem uma regra para associar uma declaração fornecida a um atributo imutável. Isso é possível, mas não prático, porque o usuário só poderá fazer login uma vez. O Amazon Cognito rejeita todas as tentativas de login após a primeira, pois existe uma regra de mapeamento para um atributo now-unwriteable.
+ `AdminCreateUser`: você fornece um valor para um atributo imutável.

### Permissões de atributos com escopos
<a name="user-pool-settings-attribute-scope-based-permissions"></a>

Nos grupos de usuários que você configura com um AWS SDK ou CDK, a API REST ou o AWS CLI, você pode configurar o acesso de leitura ou gravação do cliente do aplicativo com o escopo do OIDC. `oidc:profile` O `oidc:profile` concede acesso de leitura ou gravação aos seguintes atributos padrão:
+ `name`
+ `family_name`
+ `given_name`
+ `middle_name`
+ `nickname`
+ `preferred_username`
+ `profile`
+ `picture`
+ `website`
+ `gender`
+ `birthdate`
+ `zoneinfo`
+ `locale`

Essa lista contém os atributos padrão do OIDC menos `email`, `phone_number`, `sub` e `address`, conforme definido na [seção 2.4 da especificação do OIDC](https://openid.net/specs/openid-connect-basic-1_0.html#Scopes). Para receber informações sobre os escopos que você pode atribuir aos clientes da aplicação, consulte [Escopos, M2M e servidores de recursos](cognito-user-pools-define-resource-servers.md).

Para configurar seu cliente de aplicativo para gravar nos atributos sob o `oidc:profile` escopo, defina o valor de [WriteAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html#CognitoUserPools-CreateUserPoolClient-request-WriteAttributes)to`oidc:profile`, além de quaisquer outros atributos que você queira permitir que seu aplicativo modifique, em uma [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html)solicitação de [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)API. Da mesma forma, para conceder acesso de leitura a esses atributos, adicione `oidc:profile` ao valor de [ReadAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html#CognitoUserPools-CreateUserPoolClient-request-ReadAttributes).

Você pode alterar os escopos e as permissões de atributo após ter criado o grupo de usuários.

# Compreendendo os tokens web JSON do grupo de usuários () JWTs
<a name="amazon-cognito-user-pools-using-tokens-with-identity-providers"></a>

Os tokens são artefatos de autenticação que as aplicações podem usar como prova de autenticação OIDC e para solicitar acesso aos recursos. As *reivindicações* em tokens são informações sobre o usuário. O token de ID contém declarações sobre a identidade dele, como nome de usuário, nome de família e endereço de e-mail. O token de acesso contém afirmações como as `scope` que o usuário autenticado pode usar para acessar terceiros APIs, operações de API de autoatendimento para usuários do Amazon Cognito e o. [endpoint userinfo](userinfo-endpoint.md) Tanto o token de acesso quanto o de ID incluem uma declaração `cognito:groups` que contém a associação do usuário ao grupo de usuários. Para obter mais informações sobre grupos de usuários, consulte [Como adicionar grupos a um grupo de usuários](cognito-user-pools-user-groups.md).

O Amazon Cognito também tem tokens de atualização que você pode usar para obter novos tokens ou revogar tokens existentes. [Refresh a token](amazon-cognito-user-pools-using-the-refresh-token.md) (Atualizar um token) para recuperar novos tokens de ID e de acesso. [Revogar um token](amazon-cognito-user-pools-using-the-refresh-token.md#amazon-cognito-identity-user-pools-revoking-all-tokens-for-user) para revogar o acesso de usuário permitido por tokens de atualização.

O Amazon Cognito emite tokens como strings codificadas em [base64url](https://datatracker.ietf.org/doc/html/rfc4648#section-5). Você pode decodificar qualquer token de ID ou acesso do Amazon Cognito de `base64url` para JSON em texto sem formatação. Os tokens de atualização do Amazon Cognito são criptografados, opacos para usuários e administradores de grupos de usuários e só podem ser lidos pelo seu grupo de usuários.

**Autenticação com tokens**  
Quando um usuário faz login na sua aplicação, o Amazon Cognito verifica as informações de login. Se o login for bem-sucedido, o Amazon Cognito criará uma sessão e retornará um token de ID, um de acesso e um de atualização para o usuário autenticado. Você pode usar os tokens para conceder aos seus usuários acesso a recursos downstream, APIs como o Amazon API Gateway. Outra opção é trocá-los por credenciais da AWS temporárias para acessar outros Serviços da AWS.

![\[Visão geral de autenticação\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/scenario-authentication-cup2.png)


**Armazenar tokens**  
Sua aplicação deve ser capaz de armazenar tokens de tamanhos variados. O tamanho do token pode mudar por vários motivos, entre eles, declarações adicionais, alterações nos algoritmos de codificação e alterações nos algoritmos de criptografia. Quando você habilita a revogação de token no grupo de usuários, o Amazon Cognito adiciona declarações de token web JSON, o que aumenta o tamanho deles. As novas declarações `origin_jti` e `jti` são adicionadas aos tokens de acesso e ID. Para obter mais informações sobre revogação de tokens, consulte [Como revogar tokens](https://docs.aws.amazon.com/cognito/latest/developerguide/token-revocation.html).

**Importante**  
Como prática recomendada, proteja todos os tokens em trânsito e no armazenamento no contexto da aplicação. Os tokens podem conter informações de identificação pessoal sobre seus usuários e informações sobre o modelo de segurança que você usa para o grupo de usuários.

**Personalização de tokens**  
É possível personalizar os tokens de acesso e ID transmitidos pelo Amazon Cognito à aplicação. Em um [Acionador do Lambda antes da geração do token](user-pool-lambda-pre-token-generation.md), é possível adicionar, modificar e suprimir declarações de token. O gatilho de pré-geração de tokens é uma função do Lambda para a qual o Amazon Cognito envia um conjunto padrão de declarações. As reivindicações incluem escopos OAuth 2.0, associação a grupos de grupos de usuários, atributos do usuário e outros. A função pode então aproveitar a oportunidade para fazer alterações em runtime e retornar declarações de token atualizadas para o Amazon Cognito.

Custos adicionais se aplicam à personalização do token de acesso com eventos da versão 2. Para mais informações, consulte [Preço do Amazon Cognito](https://aws.amazon.com/cognito/pricing/).

**Topics**
+ [

# Como entender o token de identidade (ID)
](amazon-cognito-user-pools-using-the-id-token.md)
+ [

# Como entender o token de acesso
](amazon-cognito-user-pools-using-the-access-token.md)
+ [

# Tokens de atualização
](amazon-cognito-user-pools-using-the-refresh-token.md)
+ [

# Encerrar sessões de usuário com revogação de token
](token-revocation.md)
+ [

# Como verificar tokens web JSON
](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md)
+ [

# Gerenciar a expiração e o armazenamento em cache do token do grupo de usuários
](amazon-cognito-user-pools-using-tokens-caching-tokens.md)

# Como entender o token de identidade (ID)
<a name="amazon-cognito-user-pools-using-the-id-token"></a>

O token de ID é um [token web JSON (JWT)](https://tools.ietf.org/html/rfc7519) que contém declarações sobre a identidade do usuário autenticado, como `name`, `email` e `phone_number`. Você pode usar essas informações de identidade dentro da aplicação. O token de ID também pode ser usado para autenticar usuários nos seus servidores de recursos ou aplicações de servidor. Você também pode usar um token de ID fora da aplicação com suas operações de API da Web. Nesses casos, é preciso verificar a assinatura do token de ID antes de confiar em qualquer solicitação dentro do token de ID. Consulte [Como verificar tokens web JSON](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md). 

Você pode definir a validade do token de ID para qualquer valor entre cinco minutos e um dia. Esse valor pode ser definido para cada cliente da aplicação.

**Importante**  
Quando o usuário faz login com login gerenciado, o Amazon Cognito define cookies de sessão válidos por 1 hora. Se você usar login gerenciado para autenticação em sua aplicação e especificar uma duração mínima inferior a 1 hora para os tokens de acesso e ID, os usuários ainda terão uma sessão válida até que o cookie expire. Se o usuário tiver tokens que expiram durante a sessão de 1 hora, o usuário poderá atualizar os respectivos tokens sem precisar se autenticar novamente.

## Cabeçalho do token de ID
<a name="user-pool-id-token-header"></a>

O cabeçalho contém duas informações: o ID de chave (`kid`) e o algoritmo (`alg`).

```
{
"kid" : "1234example=",
"alg" : "RS256"
}
```

**`kid`**  
O ID da chave. Seu valor indica a chave usada para proteger a JSON web signature (JWS) do token. Você pode ver a chave de assinatura do grupo de usuários IDs no `jwks_uri` endpoint.  
Para mais informações sobre o parâmetro `kid`, consulte [Key identifier (kid) header parameter](https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41#section-4.5) [Parâmetro de cabeçalho do identificador de chave (kid)].

**`alg`**  
O algoritmo criptográfico que o Amazon Cognito usou para proteger o token de acesso. Os grupos de usuários usam um algoritmo RS256 criptográfico, que é uma assinatura RSA com SHA-256.  
Para obter informações sobre o parâmetro `alg`, consulte [Algorithm (alg) header parameter](https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41#section-4.4) (Parâmetro de cabeçalho algoritmo [alg]).

## Carga útil padrão do token de ID
<a name="user-pool-id-token-payload"></a>

Esta é uma carga útil de exemplo de um token de ID. Ela contém alegações sobre o usuário autenticado. Para obter mais informações sobre solicitações padrão OpenID Connect (OIDC), consulte a lista de [declarações OpenID Connect](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Você pode adicionar declarações de seu próprio padrão com um [Acionador do Lambda antes da geração do token](user-pool-lambda-pre-token-generation.md).

```
<header>.{
    "sub": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "cognito:groups": [
        "test-group-a",
        "test-group-b",
        "test-group-c"
    ],
    "email_verified": true,
    "cognito:preferred_role": "arn:aws:iam::111122223333:role/my-test-role",
    "iss": "https://cognito-idp.us-west-2.amazonaws.com/us-west-2_example",
    "cognito:username": "my-test-user",
    "middle_name": "Jane",
    "nonce": "abcdefg",
    "origin_jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "cognito:roles": [
        "arn:aws:iam::111122223333:role/my-test-role"
    ],
    "aud": "xxxxxxxxxxxxexample",
    "identities": [
        {
            "userId": "amzn1.account.EXAMPLE",
            "providerName": "LoginWithAmazon",
            "providerType": "LoginWithAmazon",
            "issuer": null,
            "primary": "true",
            "dateCreated": "1642699117273"
        }
    ],
    "event_id": "64f513be-32db-42b0-b78e-b02127b4f463",
    "token_use": "id",
    "auth_time": 1676312777,
    "exp": 1676316377,
    "iat": 1676312777,
    "jti": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
    "email": "my-test-user@example.com"
}
.<token signature>
```

**`sub`**  
Um identificador exclusivo ([UUID](cognito-terms.md#terms-uuid)), ou assunto, do usuário autenticado. O nome de usuário pode não ser exclusivo em seu grupo de usuários. A reivindicação `sub` é a melhor maneira de identificar determinado usuário.

**`cognito:groups`**  
Uma matriz dos nomes dos grupos de usuários que têm o usuário como membro. Os grupos podem ser um identificador que você apresenta à aplicação ou podem gerar uma solicitação para um perfil preferencial do IAM a partir de um banco de identidades.

**`cognito:preferred_role`**  
O ARN do perfil do IAM que você associou ao grupo de grupos de usuários de maior prioridade do usuário. Para obter mais informações sobre como o grupo de usuários seleciona essa declaração de perfil, consulte [Como atribuir valores de precedência a grupos](cognito-user-pools-user-groups.md#assigning-precedence-values-to-groups).

**`iss`**  
O provedor de identidades que emitiu o token. A reivindicação tem o formato a seguir.  
`https://cognito-idp.<Region>.amazonaws.com/<your user pool ID>`

**`cognito:username`**  
O nome do usuário no grupo de usuários.

**`nonce`**  
A `nonce` declaração vem de um parâmetro com o mesmo nome que você pode adicionar às solicitações ao seu `authorize` endpoint OAuth 2.0. Quando você adiciona o parâmetro, `nonce` está incluído no token de ID que o Amazon Cognito emite e você pode usá-lo para se proteger contra ataques de repetição. Se você não fornecer um valor para `nonce` em sua solicitação, o Amazon Cognito gera e valida automaticamente um nonce quando você se autentica por meio de um provedor de identidade de terceiros e, em seguida, adiciona-o como uma declaração `nonce` ao token de ID. A implementação da declaração `nonce` no Amazon Cognito é baseada nos [padrões OIDC](https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation).

**`origin_jti`**  
Um identificador de revogação de token associado ao token de atualização do seu usuário. O Amazon Cognito faz referência à `origin_jti` reivindicação quando verifica se você revogou o token do seu usuário com a operação da API [Revogar endpoint](revocation-endpoint.md) ou da [RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html)API. Quando você revoga um token, o Amazon Cognito invalida todos os tokens de acesso e ID com o mesmo valor `origin_jti`.

**`cognito:roles`**  
Uma matriz dos nomes dos perfis do IAM associados aos grupos do usuário. Cada grupo de usuários pode ter um perfil do IAM associado a ele. Essa matriz representa todos os perfis do IAM para os grupos do usuário, independentemente da precedência. Para obter mais informações, consulte [Como adicionar grupos a um grupo de usuários](cognito-user-pools-user-groups.md).

**`aud`**  
O cliente de aplicação do grupo de usuários que autenticou o usuário. O Amazon Cognito renderiza o mesmo valor na reivindicação `client_id` do token de acesso.

**`identities`**  
O conteúdo do atributo `identities` do usuário. O atributo contém informações sobre cada perfil de provedor de identidades de terceiros vinculado a um usuário, seja por login federado ou [vinculando um usuário federado a um perfil local](cognito-user-pools-identity-federation-consolidate-users.md). Essas informações contêm o nome do provedor, o ID exclusivo dele e outros metadados.

**`token_use`**  
A finalidade do token. Em um token de ID, seu valor é `id`.

**`auth_time`**  
A hora de autenticação, no formato de hora Unix, em que o usuário concluiu a autenticação.

**`exp`**  
O tempo de validade, no formato de horário Unix, em que o token do usuário expira.

**`iat`**  
A emissão no momento, no formato de horário Unix, em que o Amazon Cognito emitiu o token do usuário.

**`jti`**  
O identificador exclusivo do JWT.

O token de ID pode conter as declarações do padrão OIDC que estão definidas em [OIDC standard claims](https://openid.net/specs/openid-connect-core-1_0.html#Claims) (Declarações do padrão OIDC). Ele também pode conter atributos personalizados definidos por você no grupo de usuários. O Amazon Cognito grava valores de atributo personalizados no token de ID como strings, independentemente do tipo de atributo.

**nota**  
Os atributos personalizados do grupo de usuários sempre são acompanhados de um prefixo `custom:`. 

## Assinatura do token de ID
<a name="user-pool-id-token-signature"></a>

A assinatura do token de ID é calculada com base no cabeçalho e na carga útil do token JWT. Antes de aceitar as reivindicações em qualquer token de ID recebido pela aplicação, verifique a assinatura do token. Para ter mais informações, consulte Como verificar um token Web JSON. [Como verificar tokens web JSON](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md)

# Como entender o token de acesso
<a name="amazon-cognito-user-pools-using-the-access-token"></a>

O token de acesso ao grupo de usuários contém alegações sobre o usuário autenticado, uma lista dos grupos do usuário e uma lista de escopos. O objetivo do token de acesso é autorizar as operações de API. Seu grupo de usuários aceita tokens de acesso para autorizar as operações de autoatendimento do usuário. Por exemplo, é possível usar o token de acesso para conceder ao usuário acesso para adicionar, alterar ou excluir atributos de usuário.

Com [escopos OAuth 2.0](https://www.rfc-editor.org/rfc/rfc6749#section-3.3) em um token de acesso, derivados dos escopos personalizados que você adiciona ao seu grupo de usuários, você pode autorizar seu usuário a recuperar informações de uma API. Por exemplo, o Amazon API Gateway é compatível com a autorização com tokens de acesso do Amazon Cognito. Você pode preencher um autorizador de API REST com informações do grupo de usuários ou usar o Amazon Cognito como um autorizador do token web JSON (JWT) para uma API HTTP. Para gerar um token de acesso com escopos personalizados, é necessário solicitá-lo por meio dos [endpoints públicos](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-server-contract-reference.html) do grupo de usuários.

Com o [plano de recursos](cognito-sign-in-feature-plans.md) Essentials ou Plus, você também pode implementar um acionador do Lambda de pré-geração de tokens que adiciona escopos aos tokens de acesso em runtime. Para obter mais informações, consulte [Acionador do Lambda antes da geração do token](user-pool-lambda-pre-token-generation.md).

O token de acesso de um usuário com o escopo `openid` é a permissão para solicitar mais informações sobre os atributos do usuário no [endpoint userinfo](userinfo-endpoint.md). A quantidade de informações do endpoint `userInfo` deriva dos escopos adicionais no token de acesso: por exemplo, `profile` para todos os dados do usuário, `email` para seu endereço de e-mail. 

O token de acesso de um usuário com o escopo `aws.cognito.signin.user.admin` é a permissão para ler e gravar atributos do usuário, listar fatores de autenticação, configurar preferências de autenticação multifator (MFA) e gerenciar dispositivos memorizados. O nível de acesso aos atributos que seu token de acesso concede a esse escopo corresponde às read/write permissões de atributo que você atribui ao seu cliente do aplicativo.

O token de acesso é um [JSON Web Token (JWT)](https://www.rfc-editor.org/rfc/rfc7519). O cabeçalho do token de acesso tem a mesma estrutura que o token de ID. O Amazon Cognito assina tokens de acesso com uma chave diferente da chave que assina os tokens de ID. O valor de uma reivindicação de ID de chave de acesso (`kid`) não corresponderá ao valor da reivindicação `kid` em um token de ID da mesma sessão do usuário. No código da aplicação, verifique os tokens de ID e os tokens de acesso de forma independente. Não confie nas reivindicações em um token de acesso até verificar a assinatura. Para obter mais informações, consulte [Como verificar tokens web JSON](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md). Você pode definir a validade do token de acesso para qualquer valor entre cinco minutos e um dia. Esse valor pode ser definido para cada cliente da aplicação.

**Importante**  
Para tokens de acesso e de ID, não especifique um mínimo inferior a 1 hora se você usar o login gerenciado. O login gerenciado define cookies de navegadores que são válidos por 1 hora. Se você configurar uma duração de token de acesso de menos de 1 hora, isso não afetará a validade do cookie de login gerenciado e a capacidade dos usuários de se autenticarem novamente sem credenciais adicionais por 1 hora após o login inicial.

## Cabeçalho do token de acesso
<a name="user-pool-access-token-header"></a>

O cabeçalho contém duas informações: o ID de chave (`kid`) e o algoritmo (`alg`).

```
{
"kid" : "1234example="
"alg" : "RS256",
}
```

**`kid`**  
O ID da chave. Seu valor indica a chave usada para proteger a JSON web signature (JWS) do token. Você pode ver a chave de assinatura do grupo de usuários IDs no `jwks_uri` endpoint.  
Para mais informações sobre o parâmetro `kid`, consulte [Key identifier (kid) header parameter](https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41#section-4.5) [Parâmetro de cabeçalho do identificador de chave (kid)].

**`alg`**  
O algoritmo criptográfico que o Amazon Cognito usou para proteger o token de acesso. Os grupos de usuários usam um algoritmo RS256 criptográfico, que é uma assinatura RSA com SHA-256.  
Para obter informações sobre o parâmetro `alg`, consulte [Algorithm (alg) header parameter](https://tools.ietf.org/html/draft-ietf-jose-json-web-key-41#section-4.4) (Parâmetro de cabeçalho algoritmo [alg]).

## Carga útil padrão do token de acesso
<a name="user-pool-access-token-payload"></a>

Esta é uma carga útil de exemplo de um token de acesso. Para mais informações, consulte [JWT claims](https://tools.ietf.org/html/rfc7519#section-4) (Declarações JWT). Você pode adicionar declarações de seu próprio padrão com um [Acionador do Lambda antes da geração do token](user-pool-lambda-pre-token-generation.md).

```
<header>.
{
   "sub":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
   "device_key": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
   "cognito:groups":[
      "testgroup"
   ],
   "iss":"https://cognito-idp.us-west-2.amazonaws.com/us-west-2_example",
   "version":2,
   "client_id":"xxxxxxxxxxxxexample",
   "aud": "https://api.example.com",
   "origin_jti":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
   "event_id":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
   "token_use":"access",
   "scope":"phone openid profile resourceserver.1/appclient2 email",
   "auth_time":1676313851,
   "exp":1676317451,
   "iat":1676313851,
   "jti":"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
   "username":"my-test-user"
}
.<token signature>
```

**`sub`**  
Um identificador exclusivo ([UUID](cognito-terms.md#terms-uuid)), ou assunto, do usuário autenticado. O nome de usuário pode não ser exclusivo em seu grupo de usuários. A reivindicação `sub` é a melhor maneira de identificar determinado usuário.

**`cognito:groups`**  
Uma matriz dos nomes dos grupos de usuários que têm o usuário como membro.

**`iss`**  
O provedor de identidade que emitiu o token. A reivindicação tem o formato a seguir.  
`https://cognito-idp.us-east-1.amazonaws.com/us-east-1_EXAMPLE`

**`client_id`**  
O cliente de aplicação do grupo de usuários que autenticou o usuário. O Amazon Cognito renderiza o mesmo valor na reivindicação `aud` do token de ID.

**aud**  
O URL da API para a qual o token de acesso se destina a autorizar. Presente somente se a aplicação solicitou uma [vinculação de recursos](cognito-user-pools-define-resource-servers.md#cognito-user-pools-resource-binding) do servidor de autorização.

**`origin_jti`**  
Um identificador de revogação de token associado ao token de atualização do seu usuário. O Amazon Cognito faz referência à `origin_jti` reivindicação quando verifica se você revogou o token do seu usuário com a operação da API [Revogar endpoint](revocation-endpoint.md) ou da [RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html)API. Quando você revoga um token, o Amazon Cognito não valida mais tokens de acesso e ID com o mesmo valor `origin_jti`.

**`token_use`**  
A finalidade do token. Em um token de acesso, seu valor é `access`.

**`scope`**  
Uma lista de escopos OAuth 2.0 emitida para o usuário conectado. Os escopos definem o acesso que o token fornece às operações externas APIs de autoatendimento do usuário e aos dados do usuário no `userInfo` endpoint. Um token do [Endpoint de token](token-endpoint.md) pode conter qualquer escopo compatível com seu cliente de aplicação. Um token do login da API do Amazon Cognito contém somente o escopo `aws.cognito.signin.user.admin`.

**`auth_time`**  
A hora de autenticação, no formato de hora Unix, em que o usuário concluiu a autenticação.

**`exp`**  
O tempo de validade, no formato de horário Unix, em que o token do usuário expira.

**`iat`**  
A emissão no momento, no formato de horário Unix, em que o Amazon Cognito emitiu o token do usuário.

**`jti`**  
O identificador exclusivo do JWT.

**`username`**  
O nome de usuário do usuário no grupo de usuários.

**Mais atributos**
+ [Como personalizar tokens de acesso nos grupos de usuários do Amazon Cognito](https://aws.amazon.com/blogs/security/how-to-customize-access-tokens-in-amazon-cognito-user-pools/)

## Assinatura do token de acesso
<a name="user-pool-access-token-signature"></a>

A assinatura do token de acesso, assinada com a chave anunciada no endpoint `.well-known/jwks.json`, valida a integridade do cabeçalho e da carga útil do token. Ao usar tokens de acesso para autorizar o acesso externo APIs, sempre configure seu autorizador de API para verificar essa assinatura em relação à chave que a assinou. Para obter mais informações, consulte [Como verificar tokens web JSON](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md).

# Tokens de atualização
<a name="amazon-cognito-user-pools-using-the-refresh-token"></a>

Você pode usar o token de atualização para recuperar novos tokens de ID e acesso. Por padrão, o token de atualização expira 30 dias depois que o usuário da aplicação fizer login no seu grupo de usuários. Ao criar uma aplicação para seu grupo de usuários, você pode definir a validade do token de atualização da aplicação em qualquer valor entre 60 minutos e 10 anos. 

## Obter novos tokens de acesso e identidade com um token de atualização
<a name="amazon-cognito-user-pools-using-the-refresh-token_initiate-token"></a>

O Amazon Cognito emite tokens de atualização em resposta à autenticação bem-sucedida com o fluxo do código de autorização de login gerenciado e com operações de API ou métodos de SDK. O token de atualização retorna novos tokens de ID e acesso e, opcionalmente, um novo token de atualização. Você pode usar tokens de atualização das maneiras a seguir.

**GetTokensFromRefreshToken**  
A operação [GetTokensFromRefreshToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetTokensFromRefreshToken.html)da API emite novos tokens de ID e acesso a partir de um token de atualização válido. Você também receberá um novo token de atualização se tiver habilitado a alternância de tokens de atualização.

**InitiateAuth and AdminitiateAuth**  
As operações [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)da API [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)ou incluem o fluxo de `REFRESH_TOKEN_AUTH` autenticação. Nesse fluxo, você transmite um token de atualização e recebe novos tokens de ID e acesso. Não é possível autenticar com `REFRESH_TOKEN_AUTH` em clientes da aplicação com a [alternância de tokens de atualização](#using-the-refresh-token-rotation) habilitada.

**OAuth ponto final do token**  
O [endpoint de token](token-endpoint.md) em grupos de usuários com um [domínio](cognito-user-pools-assign-domain.md) tem um tipo de concessão `refresh_token` que emite novos tokens de ID, tokens de acesso e, opcionalmente (com [alternância de tokens de atualização](#using-the-refresh-token-rotation)), tokens de atualização com base em um token de atualização válido.

## Alternância de tokens de atualização
<a name="using-the-refresh-token-rotation"></a>

Opcionalmente, é possível configurar a alternância de tokens de atualização no cliente da aplicação. Com a alternância de tokens de atualização, o cliente pode invalidar o token de atualização original e emitir um novo token de atualização a cada atualização de token. Quando essa configuração está habilitada, cada solicitação bem-sucedida em todas as formas de atualização de token retorna um novo token de ID, token de acesso *e* token de atualização. Quando essa configuração está desabilitada, as solicitações de atualização de token retornam somente novos tokens de acesso e ID, e o token de atualização original permanece válido. O novo token de atualização é válido pela duração restante do token de atualização original. É possível configurar [clientes da aplicação](user-pool-settings-client-apps.md) para alternar os tokens de atualização ou manter o token de atualização original. Para permitir novas tentativas por um breve período, também é possível configurar um período de carência para o token de atualização original de até 60 segundos.

**O que é importante saber sobre a alternância de tokens de atualização**
+ Após habilitar a alternância de tokens de atualização, novas declarações são adicionadas aos tokens web JSON do grupo de usuários. As solicitações `origin_jti` e `jti` são adicionadas aos tokens de acesso e de ID. Essas reivindicações aumentam o tamanho do JWTs.
+ A alternância de tokens de atualização não é compatível com o fluxo de autenticação `REFRESH_TOKEN_AUTH`. Para implementar a rotação do token de atualização, você deve desativar esse fluxo de autenticação no seu cliente de aplicativo e projetar seu aplicativo para enviar solicitações de atualização de token com a operação de [GetTokensFromRefreshToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetTokensFromRefreshToken.html)API ou o método SDK equivalente.
+ Com a alternância de tokens de atualização inativa, você pode concluir solicitações de atualização do token com `GetTokensFromRefreshToken` ou `REFRESH_TOKEN_AUTH`.
+ Quando a [memorização de dispositivos](amazon-cognito-user-pools-device-tracking.md) está ativa no grupo de usuários, é necessário fornecer a chave do dispositivo nas solicitações `GetTokensFromRefreshToken`. Se o usuário não tiver uma chave de dispositivo confirmada que sua aplicação envia na solicitação de autenticação inicial, o Amazon Cognito emitirá uma nova. Para atualizar os tokens nessa configuração, é necessário fornecer uma chave de dispositivo, independentemente de ter especificado uma em `AuthParameters` ou recebido uma nova na resposta de autenticação.
+ Você pode transmitir `ClientMetadata` para o acionador do Lambda de pré-geração de tokens na solicitação `GetTokensFromRefreshToken`. Esses dados, que são transmitidos para o evento de entrada do acionador, fornecem contexto adicional que você pode usar na lógica personalizada da função do Lambda.

Como prática recomendada de segurança, habilite a alternância de tokens de atualização nos clientes da aplicação.

------
#### [ Enable refresh token rotation (console) ]

O procedimento a seguir ativa ou desativa a alternância de tokens de atualização para o cliente da aplicação. Esse procedimento requer um cliente da aplicação existente. Para saber mais sobre como criar um cliente da aplicação, consulte [Configurações específicas da aplicação com clientes de aplicação](user-pool-settings-client-apps.md).

**Como habilitar a alternância de token de atualização**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente da lista.

1. Navegue até o menu **Clientes da aplicação** e selecione um cliente da aplicação existente.

1. Clique em **Editar** na seção **Informações do cliente de aplicação** da página.

1. Em **Configurações avançadas de segurança**, localize a opção **Habilitar alternância de tokens de atualização**.

1. Para habilitar a alternância, marque a caixa de seleção. Para desabilitar a alternância, desmarque a caixa de seleção.

1. Em **Período de carência de alternância de tokens de atualização**, insira um número de segundos, até 60, que você deseja definir como o atraso antes que o token de atualização alternado seja revogado.

------
#### [ Enable refresh token rotation (API) ]

Configure a rotação do token de atualização em uma solicitação de [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)API [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html)ou de uma solicitação. O corpo parcial da solicitação a seguir ativa a alternância de tokens de atualização e define o período de carência para 10 segundos.

```
"RefreshTokenRotation" : {
   "Feature" : "ENABLED,
   "RetryGracePeriodSeconds" : 10
}
```

------

## Atualização de tokens de API e SDK
<a name="using-the-refresh-token-api"></a>

Há duas maneiras de usar o token de atualização para obter novos tokens de ID e acesso com a API de grupos de usuários, dependendo se a alternância de tokens de atualização está ativa. Em clientes de aplicativos com a rotação do token de atualização ativa, use a operação de [GetTokensFromRefreshToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetTokensFromRefreshToken.html)API. Em clientes de aplicativos sem rotação de token de atualização, use o `REFRESH_TOKEN_AUTH` fluxo das operações [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)ou da [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API.

**nota**  
Os usuários podem se autenticar com grupos de usuários no [login gerenciado](cognito-user-pools-managed-login.md) ou em aplicativos personalizados que você cria com AWS SDKs as operações da API do Amazon Cognito. O fluxo `REFRESH_TOKEN_AUTH` e `GetTokensFromRefreshToken` podem concluir a atualização de token para usuários de login gerenciado. A atualização de token em aplicações personalizadas não afeta as sessões de login gerenciado. Essas sessões são definidas em um cookie do navegador e são válidas por 1 hora. A resposta `GetTokensFromRefreshToken` emite novos tokens de ID, de acesso e, opcionalmente, de atualização, mas não renova o cookie da sessão de login gerenciado.  
`REFRESH_TOKEN_AUTH` não está disponível em clientes da aplicação com a alternância de tokens de atualização habilitada.

------
#### [ GetTokensFromRefreshToken ]

[GetTokensFromRefreshToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetTokensFromRefreshToken.html)retorna novos tokens de ID, acesso e atualização de uma solicitação que você autoriza com um token de atualização. Veja a seguir um exemplo de corpo da solicitação para `GetTokensFromRefreshToken`. Você pode enviar metadados do cliente para acionadores do Lambda em solicitações para essa operação.

```
{
    "RefreshToken": "eyJjd123abcEXAMPLE",
    "ClientId": "1example23456789",
    "ClientSecret": "myappclientsecret123abc",
    "ClientMetadata": { 
      "MyMetadataKey" : "MyMetadataValue" 
   },
}
```

------
#### [ AdminInitiateAuth/InitiateAuth ]

Para usar o token de atualização quando a rotação do token de atualização estiver inativa, use as operações de API [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)ou [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html). Transmita `REFRESH_TOKEN_AUTH` para o parâmetro `AuthFlow`. Na propriedade `AuthParameters` de `AuthFlow`, transmita o token de atualização do usuário como o valor de `"REFRESH_TOKEN"`. O Amazon Cognito retorna novos tokens de ID e acesso depois que sua solicitação à API passar por todos os desafios.

Veja a seguir um exemplo de corpo de solicitação para uma atualização de token com a API `InitiateAuth` ou `AdminInitiateAuth`.

```
{
    "AuthFlow": "REFRESH_TOKEN_AUTH",
    "ClientId": "1example23456789",
    "UserPoolId": "us-west-2_EXAMPLE",
    "AuthParameters": {
        "REFRESH_TOKEN": "eyJjd123abcEXAMPLE",
        "SECRET_HASH": "kT5acwCVrbD6JexhW3EQwnRSe6fLuPTRkEQ50athqv8="
    }
}
```

------

## OAuth atualização de token
<a name="using-the-refresh-token-oauth"></a>

Você também pode enviar tokens de atualização para o [Endpoint de token](token-endpoint.md) em um grupo de usuários em que configurou um domínio. No corpo da solicitação, inclua um valor `grant_type` de `refresh_token` e um valor `refresh_token` do token de atualização do usuário.

As solicitações para o endpoint do token estão disponíveis em clientes da aplicação com a alternância de tokens de atualização ativa e naqueles em que ela está inativa. Quando a alternância de tokens de atualização está ativa, o endpoint do token retorna um novo token de atualização.

Veja a seguir um exemplo de solicitação com um token de atualização.

```
POST /oauth2/token HTTP/1.1
Host: auth.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw
Content-Length: **

client_id=1example23456789&grant_type=refresh_token&refresh_token=eyJjd123abcEXAMPLE
```

## Como revogar tokens de atualização
<a name="amazon-cognito-identity-user-pools-revoking-all-tokens-for-user"></a>

Você pode revogar tokens de atualização que pertencem a um usuário. Para obter mais informações sobre revogação de tokens, consulte [Encerrar sessões de usuário com revogação de token](token-revocation.md). 

**nota**  
A revogação do token de atualização revogará todos os tokens de ID e acesso que o Amazon Cognito emitiu de solicitações de atualização com esse token.

Para desconectar os usuários de toda a sessão atual conectada, revogue todos os seus tokens ou solicitações de API. [GlobalSignOut[AdminUserGlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUserGlobalSignOut.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GlobalSignOut.html) Depois que o usuário é desconectado, os seguintes efeitos acontecem:
+ O token de atualização do usuário não pode obter novos tokens para ele.
+ O token de acesso do usuário não pode fazer solicitações de API autorizadas por token.
+ O usuário precisa se autenticar novamente para obter novos tokens. Como os cookies de sessão de login gerenciado não expiram automaticamente, o usuário pode se autenticar novamente com um cookie de sessão, sem nenhuma solicitação adicional de credenciais. Após desconectar os usuários de login gerenciado, redirecione-os para o [Endpoint de logout](logout-endpoint.md), onde o Amazon Cognito limpará o cookie da sessão.

Com os tokens de atualização, você pode manter as sessões dos usuários na aplicação por um longo tempo. Com o tempo, os usuários podem querer desautorizar algumas aplicações nas quais permaneceram conectados com seus tokens de atualização. Para desconectar o usuário de uma única sessão, revogue o token de atualização. Quando seu usuário quiser sair de todas as sessões autenticadas, gere uma solicitação de [GlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GlobalSignOut.html)API. A aplicação pode oferecer ao usuário uma opção como **Sair de todos os dispositivos**. `GlobalSignOut` aceita o token de acesso válido/inalterado, não expirado e não revogado de um usuário. Como essa API é autorizada por token, um usuário não pode usá-la para iniciar a saída de outro usuário.

No entanto, você pode gerar uma solicitação de [AdminUserGlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUserGlobalSignOut.html)API autorizada com suas AWS credenciais para desconectar qualquer usuário de todos os seus dispositivos. O aplicativo administrador deve chamar essa operação de API com credenciais de AWS desenvolvedor e passar o ID do grupo de usuários e o nome de usuário do usuário como parâmetros. A API `AdminUserGlobalSignOut` pode retirar qualquer usuário no grupo de usuários.

Para obter mais informações sobre solicitações que você pode autorizar com AWS credenciais ou com o token de acesso de um usuário, consulte. [Lista de operações de API agrupadas por modelo de autorização](authentication-flows-public-server-side.md#user-pool-apis-auth-unauth)

# Encerrar sessões de usuário com revogação de token
<a name="token-revocation"></a>

É possível revogar tokens de atualização e encerrar sessões de usuário com os métodos a seguir. Quando você revoga um token de atualização, todos os tokens de acesso que foram emitidos anteriormente por esse token de atualização se tornam inválidos. Os outros tokens de atualização emitidos para o usuário não são afetados.

**RevokeToken operação**  
[RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html)revoga todos os tokens de acesso de um determinado token de atualização, incluindo o token de acesso inicial do login interativo. Essa operação não afeta nenhum dos outros tokens de atualização do usuário nem os filhos de token de ID e acesso desses outros tokens de atualização.

**Endpoint de revogação**  
O [endpoint de revogação](revocation-endpoint.md) revoga um determinado token de atualização e todos os tokens de ID e acesso que o token de atualização gerou. Esse endpoint também revoga o token de acesso inicial do login interativo. As solicitações para esse endpoint não afetam nenhum dos outros tokens de atualização do usuário nem os filhos de token de ID e acesso desses outros tokens de atualização.

**GlobalSignOut operação**  
[GlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GlobalSignOut.html)é uma operação de autoatendimento que um usuário autoriza com seu token de acesso. Essa operação revoga todos os tokens de atualização, ID e acesso do usuário solicitante.

**AdminUserGlobalSignOut operação**  
[AdminUserGlobalSignOut](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUserGlobalSignOut.html)é uma operação do lado do servidor que um administrador autoriza com credenciais do IAM. Essa operação revoga todos os tokens de atualização, ID e acesso do usuário de destino.

**O que é importante saber sobre a revogação de tokens**
+ A solicitação para revogar um token de atualização deve incluir ID do cliente que foi usado para obter o token.
+ O grupo de usuários JWTs é independente, com uma assinatura e um prazo de expiração que foram atribuídos quando o token foi criado. Tokens revogados não podem ser usados com chamadas de API do Amazon Cognito que exijam um token. No entanto, os tokens revogados ainda serão válidos se forem verificados usando qualquer biblioteca JWT que verifique a assinatura e a validade do token.
+ Quando você cria um novo cliente do grupo de usuários, a revogação de token é habilitada por padrão.
+ Você só pode revogar tokens de atualização em clientes da aplicação com a revogação de tokens habilitada. 
+ Após a habilitação da revogação de tokens, novas solicitações são adicionadas aos tokens web JSON do Amazon Cognito. As solicitações `origin_jti` e `jti` são adicionadas aos tokens de acesso e de ID. Essas solicitações aumentam o tamanho do acesso do cliente de aplicação e de tokens de ID.
+ Quando você desabilita a revogação de tokens em um cliente da aplicação onde ela estava habilitada anteriormente, os tokens revogados não se tornam ativos novamente.
+ Quando você [desabilita uma conta de usuário](how-to-manage-user-accounts.md#manage-user-accounts-enable-disable) (que revoga tokens de atualização e acesso), os tokens revogados não se tornam ativos se você habilitar a conta de usuário novamente.
+ Quando você cria um novo cliente de grupo de usuários usando a Console de gerenciamento da AWS, a ou a AWS API AWS CLI, a revogação de token é ativada por padrão.

## Habilitar revogação de token
<a name="enable-token-revocation"></a>

Antes de poder revogar um token para um cliente de grupo de usuários existente, você deve habilitar a revogação de token. Você pode ativar a revogação de token para clientes de grupos de usuários existentes usando a AWS CLI ou a AWS API. Para isso, chame o comando de CLI `aws cognito-idp describe-user-pool-client` ou a operação de API `DescribeUserPoolClient` para recuperar as configurações atuais do cliente de aplicação. Depois, chame o comando de CLI `aws cognito-idp update-user-pool-client` ou a operação de API `UpdateUserPoolClient`. Inclua as configurações atuais do cliente de aplicação e defina o parâmetro `EnableTokenRevocation` como `true`.

Para criar ou modificar um cliente de aplicativo com a revogação de token habilitada com a API do Amazon Cognito ou com AWS um SDK, inclua o seguinte parâmetro na sua solicitação ou na [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html)sua solicitação de API. [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)

```
"EnableTokenRevocation": true
```

Para configurar a revogação do token no console do Amazon Cognito, selecione um cliente da aplicação no menu **Clientes da aplicação** no grupo de usuários. Clique no botão **Editar** em **Informações do cliente de aplicação** e habilite ou desabilite a revogação do token em **Configuração avançada**.

## Revogar um token
<a name="revoke-tokens-api"></a>

Você pode revogar um token de atualização usando uma solicitação de [RevokeToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RevokeToken.html)API, por exemplo, com o comando CLI`[aws cognito-idp revoke-token](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/revoke-token.html)`. Você também pode revogar tokens usando o [Revogar endpoint](revocation-endpoint.md). Esse endpoint fica disponível depois que você adiciona um domínio ao seu grupo de usuários. Você pode usar o endpoint de revogação em um domínio hospedado do Amazon Cognito ou no seu próprio domínio personalizado.

Veja a seguir o corpo de um exemplo de uma solicitação de API `RevokeToken`.

```
{
   "ClientId": "1example23456789",
   "ClientSecret": "abcdef123456789ghijklexample",
   "Token": "eyJjdHkiOiJKV1QiEXAMPLE"
}
```

Veja a seguir um exemplo de solicitação cURL para o endpoint `/oauth2/revoke` de um grupo de usuários com um domínio personalizado.

```
curl --location 'auth.mydomain.com/oauth2/revoke' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Authorization: Basic Base64Encode(client_id:client_secret)' \
--data-urlencode 'token=abcdef123456789ghijklexample' \
--data-urlencode 'client_id=1example23456789'
```

A operação `RevokeToken` e o endpoint `/oauth2/revoke` não precisam de autorização adicional, a menos que o cliente de aplicação tenha um segredo de cliente.

# Como verificar tokens web JSON
<a name="amazon-cognito-user-pools-using-tokens-verifying-a-jwt"></a>

Os tokens web JSON (JWTs) podem ser decodificados, lidos e modificados facilmente. Um token de acesso modificado cria um risco de escalonamento de privilégios. Um token de ID modificado cria um risco de falsificação de identidade. Sua aplicação confia no grupo de usuários como emissor de token, mas e se um usuário interceptar o token em trânsito? Você deve garantir que a aplicação receba o mesmo token emitido pelo Amazon Cognito.

O Amazon Cognito emite tokens que usam alguns dos recursos de integridade e confidencialidade da especificação do OpenID Connect (OIDC). Os tokens do grupo de usuários indicam a validade com objetos como prazo de validade, emissor e assinatura digital. A assinatura, o terceiro e o último segmento do JWT delimitado por `.`, é o principal componente da validação do token. Um usuário mal-intencionado pode modificar um token, mas se sua aplicação recuperar a chave pública e comparar a assinatura, não haverá correspondência. Qualquer aplicativo processado JWTs a partir da autenticação OIDC deve realizar essa operação de verificação a cada login.

Nesta página, fazemos algumas recomendações gerais e específicas para verificação de JWTs. O desenvolvimento de aplicações abrange uma variedade de linguagens de programação e plataformas. Como o Amazon Cognito implementa o OIDC suficientemente próximo da especificação pública, qualquer biblioteca JWT confiável em seu ambiente de desenvolvedor preferencial pode lidar com seus requisitos de verificação.

Essas etapas descrevem como verificar um JSON web token (JWT) do grupo de usuários.

**Topics**
+ [

## Pré-requisitos
](#amazon-cognito-user-pools-using-tokens-prerequisites)
+ [

## Valide tokens com aws-jwt-verify
](#amazon-cognito-user-pools-using-tokens-aws-jwt-verify)
+ [

## Noções básicas e inspeções de tokens
](#amazon-cognito-user-pools-using-tokens-manually-inspect)

## Pré-requisitos
<a name="amazon-cognito-user-pools-using-tokens-prerequisites"></a>

Talvez sua biblioteca, SDK ou estrutura de software já realize as tarefas desta seção. AWS SDKs forneça ferramentas para manipulação e gerenciamento de tokens do grupo de usuários do Amazon Cognito em seu aplicativo. AWS Amplify inclui funções para recuperar e atualizar tokens do Amazon Cognito.

Para obter mais informações, consulte as páginas a seguir.
+ [Integração da autenticação e autorização do Amazon Cognito com aplicações móveis e da web](cognito-integrate-apps.md)
+ [Exemplos de código para o Amazon Cognito Identity Provider usando AWS SDKs](https://docs.aws.amazon.com/cognito/latest/developerguide/service_code_examples.html)
+ [Fluxos de trabalho avançados](https://docs.amplify.aws/lib/auth/advanced/q/platform/js/#retrieve-jwt-tokens) no *Amplify Dev Center*

Muitas bibliotecas estão disponíveis para decodificação e verificação de um JSON Web Token (JWT). Se você precisar processar tokens manualmente para o processamento da API no lado do servidor ou se estiver usando outras linguagens de programação, essas bibliotecas poderão ajudar. Consulte a [OpenID foundation list of libraries for working with JWT tokens](http://openid.net/developers/jwt/) (Lista básica de bibliotecas da OpenID para trabalhar com tokens JWT).

## Valide tokens com aws-jwt-verify
<a name="amazon-cognito-user-pools-using-tokens-aws-jwt-verify"></a>

Em um aplicativo Node.js, AWS recomenda que a [aws-jwt-verifybiblioteca](https://github.com/awslabs/aws-jwt-verify) valide os parâmetros no token que o usuário passa para o seu aplicativo. Com `aws-jwt-verify`, é possível preencher um `CognitoJwtVerifier` com os valores de reivindicação que você deseja verificar para um ou mais grupos de usuários. Alguns dos valores que ele pode verificar incluem o seguinte.
+ Que os tokens de acesso ou ID não estão malformados nem expirados e têm uma assinatura válida.
+ Que os tokens de acesso vieram dos [grupos de usuários e clientes de aplicações corretos](https://github.com/awslabs/aws-jwt-verify#verifying-jwts-from-amazon-cognito).
+ Essas declarações de token de acesso contêm os [escopos OAuth 2.0 corretos](https://github.com/awslabs/aws-jwt-verify#checking-scope).
+ Que as chaves que assinaram os tokens de acesso e ID [correspondem a uma chave de assinatura `kid` do *URI JWKS* dos grupos de usuários](https://github.com/awslabs/aws-jwt-verify#the-jwks-cache).

  O URI do JWKS contém informações públicas sobre a chave privada que assinou o token do usuário. Você pode encontrar o URI do JWKS para seu grupo de usuários em `https://cognito-idp.<Region>.amazonaws.com/<userPoolId>/.well-known/jwks.json`.

Para obter mais informações e exemplos de códigos que você pode usar em um aplicativo Node.js ou em um AWS Lambda autorizador, consulte [https://github.com/awslabs/aws-jwt-verify](https://github.com/awslabs/aws-jwt-verify)em GitHub.

## Noções básicas e inspeções de tokens
<a name="amazon-cognito-user-pools-using-tokens-manually-inspect"></a>

Antes de integrar a inspeção de tokens ao seu aplicativo, considere como o Amazon Cognito é montado. JWTs Recupere exemplos de token do grupo de usuários. Decodifique-os e examine-os detalhadamente para entender suas características e determinar o que você deseja verificar e quando. Por exemplo, talvez você queira examinar a associação de grupo em um cenário e os escopos em outro.

As seções a seguir descrevem um processo para inspecionar manualmente o Amazon JWTs Cognito enquanto você prepara seu aplicativo.

### Confirmar a estrutura do JWT
<a name="amazon-cognito-user-pools-using-tokens-step-1"></a>

Um JSON Web Token (JWT) inclui três seções com um delimitador `.` (ponto) entre elas.

**Cabeçalho**  
O ID da chave, o `kid` e o algoritmo RSA, o `alg`, que o Amazon Cognito usou para assinar o token. O Amazon Cognito assina tokens com um `alg` de `RS256`. `kid` é uma referência truncada a uma chave de assinatura privada RSA de 2.048 bits mantida pelo seu grupo de usuários.

**Carga útil**  
Reivindicações de tokens. Em um token de ID, as reivindicações incluem atributos do usuário e informações sobre o grupo de usuários, o `iss` e o cliente da aplicação, o `aud`. Em um token de acesso, a carga útil inclui escopos, associação ao grupo, o grupo de usuários como `iss` e o cliente de aplicação como `client_id`.

**Signature**  
A assinatura não é decodificável em base64url, como o cabeçalho e a carga útil. É um RSA256 identificador derivado de uma chave de assinatura e de parâmetros que você pode observar no URI do JWKS.

O cabeçalho e a carga útil são JSON codificados em base64url. É possível identificá-los pelos caracteres de abertura `eyJ` que são decodificados para o caractere inicial `{`. Se o usuário apresentar um JWT codificado em base64url para a aplicação e ele não estiver no formato `[JSON Header].[JSON Payload].[Signature]`, ele não é um token válido do Amazon Cognito e você poderá descartá-lo.

A aplicação de exemplo a seguir verifica os tokens do grupo de usuários com `aws-jwt-verify`.

```
// cognito-verify.js
// Usage example: node cognito-verify.js eyJra789ghiEXAMPLE

const { CognitoJwtVerifier } = require('aws-jwt-verify');

// Replace with your Amazon Cognito user pool ID
const userPoolId = 'us-west-2_EXAMPLE';

async function verifyJWT(token) {
  try {
    const verifier = CognitoJwtVerifier.create({
      userPoolId,
      tokenUse: 'access', // or 'id' for ID tokens
      clientId: '1example23456789', // Optional, only if you need to verify the token audience
    });

    const payload = await verifier.verify(token);
    console.log('Decoded JWT:', payload);
  } catch (err) {
    console.error('Error verifying JWT:', err);
  }
}

// Example usage
if (process.argv.length < 3) {
  console.error('Please provide a JWT token as an argument.');
  process.exit(1);
}

const MyToken = process.argv[2];
verifyJWT(MyToken);
```

### Validar o JWT
<a name="amazon-cognito-user-pools-using-tokens-step-2"></a>

A assinatura JWT é uma combinação com hash do cabeçalho e da carga útil. O Amazon Cognito gera dois pares de chaves criptográficas RSA para cada grupo de usuários. Uma chave privada assina tokens de acesso e a outra assina tokens de ID.

**Para verificar a assinatura de um token JWT**

1. Decodifique o token de ID.

   A OpenID Foundation também [mantém uma lista de bibliotecas para trabalhar com tokens JWT](http://openid.net/developers/jwt/).

   Você também pode usar AWS Lambda para decodificar o grupo JWTs de usuários. Para obter mais informações, consulte [Decodificar e verificar os tokens JWT do Amazon Cognito usando](https://github.com/awslabs/aws-support-tools/tree/master/Cognito/decode-verify-jwt). AWS Lambda

1. Compare o ID de chave local (`kid`) com o `kid` público.

   1. Faça download e armazene o JSON Web Key (JWK) público correspondente para seu grupo de usuários. Ele está disponível como parte de um JSON Web Key Set (JWKS). Você pode localizá-lo construindo o seguinte URI `jwks_uri` para seu ambiente:

      ```
      https://cognito-idp.<Region>.amazonaws.com/<userPoolId>/.well-known/jwks.json
      ```

      Para mais informações sobre JWK e conjuntos JWK , consulte [JSON Web Key (JWK)](https://tools.ietf.org/html/rfc7517).
**nota**  
O Amazon Cognito pode alternar a chave de assinatura no grupo de usuários. Como prática recomendada, armazene as chaves públicas na aplicação usando o `kid` como chave de cache, e atualize o cache periodicamente. Compare o `kid` nos tokens que a aplicação recebe com o cache.  
Se você receber um token com o emissor correto, mas um `kid` diferente, o Amazon Cognito pode ter alternado a chave de assinatura. Atualize o cache do endpoint `jwks_uri` do grupo de usuários.

      Este é um exemplo de arquivo `jwks.json`:

      ```
      {
      	"keys": [{
      		"kid": "1234example=",
      		"alg": "RS256",
      		"kty": "RSA",
      		"e": "AQAB",
      		"n": "1234567890",
      		"use": "sig"
      	}, {
      		"kid": "5678example=",
      		"alg": "RS256",
      		"kty": "RSA",
      		"e": "AQAB",
      		"n": "987654321",
      		"use": "sig"
      	}]
      }
      ```  
**ID da chave (`kid`)**  
O `kid` é uma dica que indica qual foi a chave usada para proteger a assinatura web JSON (JWS) do token.  
**Algoritmo (`alg`)**  
O parâmetro de cabeçalho `alg` representa o algoritmo criptográfico usado para proteger o token de ID. Os grupos de usuários usam um algoritmo RS256 criptográfico, que é uma assinatura RSA com SHA-256. Para mais informações sobre RSA, consulte [Criptografia RSA](https://tools.ietf.org/html/rfc3447).   
**Tipo de chave (`kty`)**  
O parâmetro `kty` identifica o algoritmo criptográfico usado pela família com a chave, como “RSA”, neste exemplo.  
**Expoente RSA (`e`)**  
O parâmetro `e` contém o valor de expoente da chave pública RSA. Ele é representado como um valor codificado em Base64URLUInt.  
**Modulus (`n`) RSA**  
O parâmetro `n` contém o valor de modulus da chave pública RSA. Ele é representado como um valor codificado em Base64URLUInt.  
**Usar o `use`**  
O parâmetro `use` descreve o uso pretendido da chave pública. Neste exemplo, o `use` valor `sig` representa assinatura.

   1. Pesquise a chave web JSON pública de um `kid` que corresponda ao `kid` do JWT.

### Verificar as declarações
<a name="amazon-cognito-user-pools-using-tokens-step-3"></a>

**Para verificar alegações JWT**

1. Usando um dos métodos a seguir, verifique se o token não expirou.

   1. Decodifique o token e compare a reivindicação `exp` com a hora atual.

   1. Se seu token de acesso incluir uma `aws.cognito.signin.user.admin` reivindicação, envie uma solicitação para uma API como [GetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html). As solicitações de API que você [autoriza com um token de acesso](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pools-API-operations.html#user-pool-apis-auth-unauth) retornarão um erro se o token tiver expirado.

   1. Apresente seu token de acesso em uma solicitação ao [endpoint userinfo](userinfo-endpoint.md). A solicitação retornará um erro se o token tiver expirado.

1. A declaração `aud` em um token de ID e a declaração `client_id` em um token de acesso devem corresponder ao ID do cliente de aplicação criado no grupo de usuários do Amazon Cognito.

1. A solicitação de emissor (`iss`) deve corresponder ao seu grupo de usuários. Por exemplo, um grupo de usuários criado na região `us-east-1` terá o seguinte valor de `iss`:

   `https://cognito-idp.us-east-1.amazonaws.com/<userpoolID>`.

1. Verifique a alegação `token_use`. 
   + Se você estiver aceitando apenas o token de acesso nas APIs da Web, o valor do token terá de ser `access`.
   + Se estiver usando apenas o token de ID, o valor dele precisa ser `id`.
   + Se estiver usando os tokens de ID e acesso, a alegação `token_use` deverá ser `id` ou `access`.

Você já pode aceitar as alegações dentro do token.

# Gerenciar a expiração e o armazenamento em cache do token do grupo de usuários
<a name="amazon-cognito-user-pools-using-tokens-caching-tokens"></a>

Sua aplicação deve concluir com êxito uma das solicitações a seguir sempre que você quiser obter um novo token web JSON (JWT).
+ Solicite as credenciais do cliente ou a [concessão](https://www.rfc-editor.org/rfc/rfc6749#section-1.3) do código de autorização do [Endpoint de token](token-endpoint.md).
+ Solicite uma concessão implícita de suas páginas de login gerenciado.
+ Autentique um usuário local em uma solicitação da API do Amazon Cognito, como. [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)

Você pode configurar o grupo de usuários para definir que os tokens expirem em minutos, horas ou dias. Para garantir a performance e a disponibilidade da aplicação, use os tokens do Amazon Cognito por cerca 75% da vida útil do token, e só então recupere novos tokens. Uma solução de cache que você cria para a aplicação mantém os tokens disponíveis e evita a rejeição de solicitações do Amazon Cognito quando a taxa de solicitação é muito alta. Uma aplicação do lado do cliente deve armazenar tokens em um cache de memória. Uma aplicação do lado do servidor pode adicionar um mecanismo de cache criptografado para armazenar tokens.

Quando seu grupo de usuários gera um grande volume de usuários ou machine-to-machine atividades, você pode encontrar os limites que o Amazon Cognito define para o número de solicitações de tokens que você pode fazer. Para reduzir o número de solicitações realizadas aos endpoints do Amazon Cognito, você pode armazenar e reutilizar dados de autenticação com segurança ou implementar recuos exponenciais e novas tentativas.

Os dados de autenticação originam-se de duas classes de endpoints. Os [endpoints do Amazon Cognito OAuth 2.0 incluem o endpoint](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-server-contract-reference.html) de token, que atende às credenciais do cliente e às solicitações gerenciadas de código de autorização de login. Os [endpoints de serviço](https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html#cognito_identity_your_user_pools_region) respondem a solicitações da API de grupos de usuários, como `InitiateAuth` e `RespondToAuthChallenge`. Cada tipo de solicitação tem seu próprio limite. Para obter mais informações sobre limites, consulte [Cotas no Amazon Cognito](quotas.md).

## Armazenamento em cache de tokens de machine-to-machine acesso com o Amazon API Gateway
<a name="amazon-cognito-user-pools-using-tokens-caching-tokens-API-gateway"></a>

Com o armazenamento em cache de tokens do API Gateway, seu aplicativo pode ser escalado em resposta a eventos maiores do que a cota padrão da taxa de solicitação dos endpoints do Amazon OAuth Cognito.

![\[Um diagrama de um API Gateway que mantém um cache de tokens de acesso para M2M. O proxy da API processa a solicitação de token e retorna um token em cache se já houver um válido.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/user-pools-m2m-caching.png)


É possível armazenar os tokens de acesso em cache para que a aplicação solicite apenas um novo token de acesso se o token armazenado em cache expirar. Do contrário, o armazenamento do endpoint em cache retornará um token do cache. Isso evita uma chamada adicional para um endpoint da API do Amazon Cognito. Quando você usa o Amazon API Gateway como um proxy para o [Endpoint de token](token-endpoint.md), a API responde à maioria das solicitações que, de outra forma, contribuiriam para sua cota de solicitações, evitando solicitações malsucedidas em decorrência da limitação da taxa.

A solução baseada no API Gateway a seguir oferece uma implementação de cache de tokens de baixa latência e pouco uso de código/nenhum código. O API Gateway APIs é criptografado em trânsito e, opcionalmente, em repouso. Um cache do API Gateway é ideal para a concessão de [credenciais de cliente OAuth 2.0, um tipo de concessão](https://datatracker.ietf.org/doc/html/rfc6749#section-4.4) frequentemente de alto volume que produz tokens de acesso para autorizar machine-to-machine e sessões de microsserviço. Em um evento como um aumento de tráfego que faz com que seus microsserviços sejam escalados horizontalmente, você pode acabar com muitos sistemas usando as mesmas credenciais de cliente em um volume que excede o limite de AWS taxa de solicitação do seu grupo de usuários ou cliente de aplicativo. Para preservar a disponibilidade e a baixa latência da aplicação, uma solução de armazenamento em cache é a prática recomendada nesses cenários.

Nessa solução, você define um cache na sua API para armazenar um token de acesso separado para cada combinação de OAuth escopos e cliente de aplicativo que você deseja solicitar em seu aplicativo. Quando a aplicação faz uma solicitação correspondente à chave de cache, a API responde com um token de acesso que o Amazon Cognito emitiu para a primeira solicitação correspondente à chave de cache. Quando a duração da chave de cache expira, a API encaminha a solicitação ao endpoint do token e armazena em cache um novo token de acesso.

**nota**  
A duração da chave de cache deve ser menor do que a duração do token de acesso do cliente da aplicação.

A chave de cache é uma combinação dos OAuth escopos que você solicita no `scope` parâmetro no corpo da solicitação e no `Authorization` cabeçalho da solicitação. O cabeçalho `Authorization` contém o ID do cliente da aplicação e o respectivo segredo. Você não precisa implementar lógica adicional na aplicação para implementar essa solução. Você só deve atualizar sua configuração para alterar o caminho para o endpoint do token do grupo de usuários.

Você também pode implementar o armazenamento em cache de tokens com [ElastiCache (Redis OSS](https://docs.aws.amazon.com/elasticache/index.html)). Para um controle detalhado com políticas do AWS Identity and Access Management (IAM), considere um cache do [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/authentication-and-access-control.html#authentication).

**nota**  
O armazenamento em cache no API Gateway está sujeito a um custo adicional. [Para obter mais detalhes, consulte a definição de preço.](https://aws.amazon.com/api-gateway/pricing)<a name="amazon-cognito-user-pools-using-tokens-caching-tokens-API-gateway-how-to"></a>

**Como configurar um proxy de armazenamento em cache com o API Gateway**

1. Abra o [console do API Gateway](https://console.aws.amazon.com/apigateway/main/apis) e crie uma API REST.

1. Em **Resources** (Recursos), crie um método POST.

   1. Selecione o **integration type** (tipo de integração) HTTP.

   1. Selecione **Use HTTP proxy integration** (Usar integração de proxy HTTP).

   1. Digite um **Endpoint URL ** (URL de endpoint) do `https://<your user pool domain>/oauth2/token`.

1. Em **Resources** (Recursos), configure a chave de cache.

   1. Edite a **Method request** (Solicitação de método) do método POST.
**nota**  
Essa validação de solicitação de método é para uso com a autorização `client_secret_basic` em solicitações de token, onde o segredo do cliente é codificado no cabeçalho da solicitação `Authorization`. Para validar o corpo da solicitação JSON na autorização `client_secret_post`, crie um [modelo de dados](https://docs.aws.amazon.com/apigateway/latest/developerguide/models-mappings-models.html) que exija que [client\$1secret](token-endpoint.md#post-token-request-parameters-in-body) esteja presente. Nesse modelo, seu **Validador de solicitação** deve **validar o corpo, os parâmetros da string de consulta e os cabeçalhos**.

   1. Configure o método **Validador de solicitação** para **Validar parâmetros de string de consulta e cabeçalhos**. Para obter mais informações sobre validação de solicitações, consulte [Solicitar validação](https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-method-request-validation.html) no *Guia do desenvolvedor do Amazon API Gateway*.

   1. Defina o parâmetro `scope` e o cabeçalho `Authorization` como sua chave de armazenamento em cache.

      1. Adicione uma string de consulta a **Parâmetros de string de consulta de URL**. Insira `scope` no **Nome** da string de consulta e selecione **Obrigatório** e **Armazenamento em cache**.

      1. Adicione um cabeçalho a **Cabeçalhos de solicitação HTTP**. Insira `Authorization` no **Nome** do cabeçalho de solicitação e selecione **Obrigatório** e **Armazenamento em cache**.

1. Em **Stages** (Estágios), configure o armazenamento em cache.

   1. Escolha o estágio que deseja modificar e clique em **Editar** em **Detalhes do estágio**.

   1. Em **Configurações adicionais**, **Configurações de cache**, ative a opção **Provisionar cache de APIs**.

   1. Selecione uma **Cache capacity** (Capacidade de cache). Uma maior capacidade de cache melhora o desempenho, mas tem um custo adicional.

   1. Desmarque a caixa de seleção **Exigir autorização**. Selecione **Continuar**.

   1. O API Gateway aplica políticas de cache somente aos métodos GET do nível do estágio. É necessário aplicar uma substituição de política de cache ao método POST.

      Expanda o estágio configurado e selecione o método `POST`. Para criar configurações de cache para o método, selecione **Criar substituição**.

   1. Ative a opção **Ativar cache de método**.

   1. Insira um ****cache time-to-live (TTL)**** de 3600 segundos. Escolha **Salvar**.

1. Em **Stages** (Estágios), anote o **Invoke URL** (URL de invocação).

1. Atualize a aplicação para solicitações de token POST para o **Invoke URL** (URL de invocação) de sua API em vez do endpoint `/oauth2/token` do grupo de usuários.

# Como acessar recursos após o login bem-sucedido
<a name="accessing-resources"></a>

Os usuários da aplicação podem fazer login diretamente por meio de um grupo de usuários ou federar por meio de um provedor de identidades (IdP) de terceiros. O grupo de usuários gerencia a sobrecarga de lidar com os tokens que são retornados do login social por meio do Facebook, Google, Amazon e Apple, e do OpenID Connect (OIDC) e SAML. IdPs Para obter mais informações, consulte [Compreendendo os tokens web JSON do grupo de usuários () JWTs](amazon-cognito-user-pools-using-tokens-with-identity-providers.md). 

Depois de uma autenticação bem-sucedida no grupo de usuários, sua aplicação receberá tokens do grupo de usuários do Amazon Cognito. Você pode usar tokens do grupo de usuários para:
+ Recupere AWS credenciais que autorizam solicitações de recursos de aplicativos, como Amazon Serviços da AWS DynamoDB e Amazon S3.
+ Fornecer um comprovante de autenticação temporário e revogável.
+ Preencher dados de identidade em um perfil de usuário na aplicação.
+ Autorizar alterações no perfil do usuário conectado no diretório do grupo de usuários.
+ Autorizar solicitações de informações do usuário com um token de acesso.
+ Autorize solicitações de dados que estão por trás do acesso externo protegido APIs com tokens de acesso.
+ Autorizar o acesso aos ativos da aplicação que estão armazenados no cliente ou no servidor com o Amazon Verified Permissions.

Para obter mais informações, consulte [Um exemplo de sessão de autenticação](authentication.md#amazon-cognito-user-pools-authentication-flow) e [Compreendendo os tokens web JSON do grupo de usuários () JWTs](amazon-cognito-user-pools-using-tokens-with-identity-providers.md).

![\[Visão geral de autenticação.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/scenario-authentication-cup.png)


**Topics**
+ [

# Autorizar o acesso aos recursos do cliente ou do servidor com o Amazon Verified Permissions
](scenario-backend.md)
+ [

# Como acessar recursos com o API Gateway após o acesso
](user-pool-accessing-resources-api-gateway-and-lambda.md)
+ [

# Acessando Serviços da AWS usando um pool de identidades após o login
](amazon-cognito-integrating-user-pools-with-identity-pools.md)

# Autorizar o acesso aos recursos do cliente ou do servidor com o Amazon Verified Permissions
<a name="scenario-backend"></a>

Sua aplicação pode passar os tokens de um usuário conectado para o [Amazon Verified Permissions](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/what-is-avp.html). O Verified Permissions é um serviço de autorização e gerenciamento de permissões escaláveis e refinadas para aplicações criadas por você. Um grupo de usuários do Amazon Cognito pode ser uma fonte de identidade para um armazenamento de políticas do Verified Permissions. O Verified Permissions toma decisões de autorização para ações e recursos solicitados, como `GetPhoto` para `premium_badge.png`, da entidade principal e seus atributos nos tokens do grupo de usuários.

O diagrama a seguir mostra como sua aplicação pode passar o token de um usuário para o Verified Permissions em uma solicitação de autorização.

![\[Um diagrama de fluxo de um aplicativo que se autentica com um grupo de usuários do Amazon Cognito e autoriza o acesso a recursos locais com o Amazon Verified Permissions.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/access-services-local-resources.png)


**Comece a usar o Amazon Verified Permissions**  
Depois de integrar seu grupo de usuários com Verified Permissions, você obtém uma fonte central de autorização granular para todas as aplicações do Amazon Cognito. Isso elimina a necessidade de uma lógica de segurança refinada que, de outra forma, você teria que codificar e replicar entre todas as aplicações. Para obter mais informações sobre autorização com o Verified Permissions, consulte [Autorização com o Amazon Verified Permissions](amazon-cognito-authorization-with-avp.md).

As solicitações de autorização de permissões verificadas exigem AWS credenciais. Você pode implementar algumas das técnicas a seguir para aplicar com segurança as credenciais às solicitações de autorização.
+ Opere uma aplicação web que possa armazenar segredos no backend do servidor.
+ Adquira credenciais autenticadas do banco de identidades.
+ Proxy as solicitações do usuário por meio de uma access-token-authorized API e anexe AWS as credenciais à solicitação.

# Como acessar recursos com o API Gateway após o acesso
<a name="user-pool-accessing-resources-api-gateway-and-lambda"></a>

Um uso comum dos tokens de grupos de usuários do Amazon Cognito é autorizar solicitações para uma [API REST do API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html). Os escopos OAuth 2.0 nos tokens de acesso podem autorizar um método e um caminho, como `HTTP GET` for. `/app_assets` Os tokens de ID podem servir como autenticação genérica para uma API e transmitir atributos do usuário para o serviço de backend. O API Gateway tem opções de autorização personalizadas adicionais, como autorizadores [JWT para autorizadores HTTP](https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-jwt-authorizer.html) e APIs [Lambda, que podem aplicar uma lógica](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) mais refinada.

O diagrama a seguir ilustra um aplicativo que está obtendo acesso a uma API REST com os escopos OAuth 2.0 em um token de acesso.

![\[Um diagrama de fluxo de uma aplicação que se autentica com um grupo de usuários do Amazon Cognito e autoriza o acesso a recursos da API com o Amazon API Gateway.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/access-services-api-gateway.png)


Sua aplicação deve coletar os tokens das sessões autenticadas e adicioná-los como tokens portadores a um cabeçalho `Authorization` na solicitação. Configure o autorizador que você configurou para a API, o caminho e o método para avaliar o conteúdo do token. O API Gateway retorna dados somente se a solicitação corresponder às condições que você configurou para seu autorizador. 

Algumas maneiras possíveis pelas quais a API do API Gateway pode aprovar o acesso a partir de uma aplicação são:
+ O token de acesso é válido, não expirou e contém o escopo OAuth 2.0 correto. O [autorizador de grupos de usuários do Amazon Cognito para uma API REST](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html) é uma implementação comum com pouca barreira de entrada. Você também pode avaliar o corpo, os parâmetros da string de consulta e os cabeçalhos de uma solicitação para esse tipo de autorizador.
+ O token de ID é válido e não expirou. Ao passar um token de ID para um autorizador do Amazon Cognito, você pode fazer uma validação adicional do conteúdo do token de ID no seu servidor de aplicações.
+ Um grupo, reivindicação, atributo ou função em um token de acesso ou ID atende aos requisitos que você define em uma função do Lambda. Um [autorizador do Lambda](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html) analisa o token no cabeçalho da solicitação e o avalia para uma decisão de autorização. Você pode criar uma lógica personalizada em sua função ou fazer uma solicitação de API para o [Amazon Verified Permissions](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/what-is-avp.html).

Você também pode autorizar solicitações para uma [API GraphQL do AWS AppSync](https://docs.aws.amazon.com/appsync/latest/devguide/security-authz.html#amazon-cognito-user-pools-authorization) com tokens de um grupo de usuários.

# Acessando Serviços da AWS usando um pool de identidades após o login
<a name="amazon-cognito-integrating-user-pools-with-identity-pools"></a>

Depois que seus usuários entrarem com um grupo de usuários, eles poderão acessar Serviços da AWS com credenciais de API temporárias emitidas de um grupo de identidades.

Sua aplicação web ou móvel recebe tokens de um grupo de usuários. Quando você configura seu grupo de usuários como um provedor de identidade para seu grupo de identidades, o grupo de identidades troca tokens por AWS credenciais temporárias. Essas credenciais podem ser definidas de acordo com as funções do IAM e suas políticas, que dão aos usuários acesso a um conjunto limitado de AWS recursos. Para obter mais informações, consulte [Fluxo de autenticação dos bancos de identidades](authentication-flow.md).

O diagrama a seguir mostra como uma aplicação faz login com um grupo de usuários, recupera as credenciais do banco de identidades e solicita um ativo de um AWS service (Serviço da AWS).

![\[Um diagrama de fluxo de um aplicativo que se autentica com um grupo de usuários do Amazon Cognito e autoriza o acesso AWS a recursos com um grupo de identidades.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/access-services-identity-pool.png)


Você pode usar as credenciais do banco de identidades para:
+ Fazer solicitações de autorização detalhadas para o Amazon Verified Permissions com as próprias credenciais do seu usuário.
+ Conecte-se a uma API REST do Amazon API Gateway ou a uma API AWS AppSync GraphQL que autorize conexões com o IAM.
+ Conectar-se a um backend de banco de dados, como Amazon DynamoDB ou Amazon RDS, que autoriza conexões com o IAM.
+ Recuperar ativos da aplicação de um bucket do Amazon S3.
+ Inicie uma sessão com um desktop WorkSpaces virtual da Amazon.

Os bancos de identidades não operam exclusivamente em uma sessão autenticada com um grupo de usuários. Eles também aceitam autenticação diretamente de provedores de identidades de terceiros e podem gerar credenciais para usuários convidados não autenticados.

Para obter mais informações sobre o uso de grupos de identidades junto com grupos de grupos de usuários para controlar o acesso aos seus AWS recursos, consulte [Como adicionar grupos a um grupo de usuários](cognito-user-pools-user-groups.md) [Controle de acesso com base em perfil](role-based-access-control.md) e. Além disso, para obter mais informações sobre grupos de identidades e AWS Identity and Access Management, consulte[Fluxo de autenticação dos bancos de identidades](authentication-flow.md).

## Configurando um grupo de usuários com o Console de gerenciamento da AWS
<a name="amazon-cognito-integrating-user-pools-with-identity-pools-setting-up"></a>

Crie um grupo de usuários do Amazon Cognito e anote o **ID de grupos de usuários** e o **ID do cliente da aplicação** de cada uma das suas aplicações clientes. Para obter mais informações sobre como criar grupos de usuários, consulte [Conceitos básicos dos grupos de usuários](getting-started-user-pools.md).

## Configurando um pool de identidades com o Console de gerenciamento da AWS
<a name="amazon-cognito-integrating-user-pools-with-identity-pools-configuring"></a>

O procedimento a seguir descreve como usar o Console de gerenciamento da AWS para integrar um grupo de identidades a um ou mais grupos de usuários e aplicativos clientes.

**Como adicionar um provedor de identidades (IdP) de grupos de usuários do Amazon Cognito**

1. Selecione **Bancos de identidades** no [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Selecione um banco de identidades.

1. Selecione a guia **Acesso do usuário**.

1. Selecione **Adicionar provedor de identidade**.

1. Selecione **Grupo de usuários do Amazon Cognito**.

1. Insira um **ID de grupo de usuários** e um **ID de cliente de aplicativo**.

1. Para alterar o perfil que o Amazon Cognito solicita ao emitir credenciais para usuários que se autenticaram com esse provedor, defina **Configurações de perfil**.

   1. Você pode conceder aos usuários desse IdP o **Perfil padrão** que você configurou ao definir seu **Perfil autenticado** ou **Escolher perfil com regras**. Com um IdP de grupo de usuários do Amazon Cognito, você também pode **Escolher perfil com a reivindicação preferred\$1role em tokens**. Para ter mais informações sobre a declaração `cognito:preferred_role`, consulte [Como atribuir valores de precedência a grupos](cognito-user-pools-user-groups.md#assigning-precedence-values-to-groups).

      1. Se você escolheu **Escolher perfil com regras**, insira a **Declaração** de origem da autenticação do usuário, o **Operador** pelo qual você deseja comparar a reivindicação à regra, o **Valor** que gerará uma correspondência com essa opção de perfil e o **Perfil** que você deseja atribuir quando houver correspondência com a **Atribuição de perfil**. Selecione **Adicionar outra** para criar uma regra adicional com base em uma condição diferente.

      1. Se você selecionar **Escolher perfil com a reivindicação preferred\$1role em tokens**, o Amazon Cognito emitirá credenciais para o perfil na reivindicação do usuário `cognito:preferred_role`. Se nenhuma reivindicação de perfil preferencial estiver presente, o Amazon Cognito emitirá credenciais com base na **Resolução de função**.

   1. Selecione uma **Resolução de perfil**. Quando as declarações do usuário não correspondem às suas regras, você pode negar ou emitir credenciais para seu **Perfil autenticado**.

1. Para alterar as tags de identidade principal que o Amazon Cognito atribui ao emitir credenciais para usuários que se autenticaram com esse provedor, configure **Atributos para controle de acesso**.
   + Para não aplicar nenhuma tag de entidade principal, selecione **Inativo**.
   + Para aplicar tags de entidade principal com base em declarações `sub` e `aud`, selecione **Usar mapeamentos padrão**.
   + Para criar seu próprio esquema personalizado de atributos para as tags de entidade principal, selecione **Usar mapeamentos personalizados**. Depois, insira a **Chave de tag** que você deseja obter de cada **declaração** e representar em uma tag.

1. Selecione **Salvar alterações**.

## Como integrar um grupo de usuários com um grupo de identidades
<a name="amazon-cognito-integrating-user-pools-with-identity-pools-using"></a>

Depois que o usuário do aplicativo for autenticado, adicione o token de identidade desse usuário ao mapa de logins no provedor de credenciais. O nome do provedor dependerá do ID do grupo de usuários do Amazon Cognito. Ele terá a seguinte estrutura:

```
cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>
```

Você pode derivar o valor de a *<region>* partir da **ID do grupo de usuários**. Por exemplo, se o ID do grupo de usuários for`us-east-1_EXAMPLE1`, então *<region>* é`us-east-1`. Se o ID do grupo de usuários for`us-west-2_EXAMPLE2`, então *<region>* é`us-west-2`.

------
#### [ JavaScript ]

```
var cognitoUser = userPool.getCurrentUser();

if (cognitoUser != null) {
	cognitoUser.getSession(function(err, result) {
		if (result) {
			console.log('You are now logged in.');

			// Add the User's Id Token to the Cognito credentials login map.
			AWS.config.credentials = new AWS.CognitoIdentityCredentials({
				IdentityPoolId: 'YOUR_IDENTITY_POOL_ID',
				Logins: {
					'cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>': result.getIdToken().getJwtToken()
				}
			});
		}
	});
}
```

------
#### [ Android ]

```
cognitoUser.getSessionInBackground(new AuthenticationHandler() {
	@Override
	public void onSuccess(CognitoUserSession session) {
		String idToken = session.getIdToken().getJWTToken();

		Map<String, String> logins = new HashMap<String, String>();
		logins.put("cognito-idp.<region>.amazonaws.com/<YOUR_USER_POOL_ID>", session.getIdToken().getJWTToken());
		credentialsProvider.setLogins(logins);
	}

});
```

------
#### [ iOS - objective-C ]

```
AWSServiceConfiguration *serviceConfiguration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil];
AWSCognitoIdentityUserPoolConfiguration *userPoolConfiguration = [[AWSCognitoIdentityUserPoolConfiguration alloc] initWithClientId:@"YOUR_CLIENT_ID"  clientSecret:@"YOUR_CLIENT_SECRET" poolId:@"YOUR_USER_POOL_ID"];
[AWSCognitoIdentityUserPool registerCognitoIdentityUserPoolWithConfiguration:serviceConfiguration userPoolConfiguration:userPoolConfiguration forKey:@"UserPool"];
AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"UserPool"];
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1 identityPoolId:@"YOUR_IDENTITY_POOL_ID" identityProviderManager:pool];
```

------
#### [ iOS - swift ]

```
let serviceConfiguration = AWSServiceConfiguration(region: .USEast1, credentialsProvider: nil)
let userPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId: "YOUR_CLIENT_ID", clientSecret: "YOUR_CLIENT_SECRET", poolId: "YOUR_USER_POOL_ID")
AWSCognitoIdentityUserPool.registerCognitoIdentityUserPoolWithConfiguration(serviceConfiguration, userPoolConfiguration: userPoolConfiguration, forKey: "UserPool")
let pool = AWSCognitoIdentityUserPool(forKey: "UserPool")
let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .USEast1, identityPoolId: "YOUR_IDENTITY_POOL_ID", identityProviderManager:pool)
```

------

# Escopos, M2M e servidores de recursos
<a name="cognito-user-pools-define-resource-servers"></a>

Depois de configurar um domínio para seu grupo de usuários, o Amazon Cognito provisiona automaticamente um servidor de autorização OAuth 2.0 e uma interface de usuário web hospedada com páginas de cadastro e login que seu aplicativo pode apresentar aos seus usuários. Para obter mais informações, consulte [Login gerenciado do grupo de usuários](cognito-user-pools-managed-login.md). Você pode escolher os escopos que deseja que o servidor de autorização adicione aos tokens de acesso. Os escopos autorizam o acesso aos servidores de recursos e aos dados de usuário.

Um *servidor de recursos* é um servidor de API OAuth 2.0. Para proteger recursos protegidos por acesso, ele valida se os tokens de acesso do grupo de usuários contêm os escopos que autorizam o método e o caminho solicitados na API que ele protege. Ele confirma o emissor, com base na assinatura do token, a validade, com base no tempo de expiração do token, e o nível de acesso, com base nos escopos das solicitações de token. Os escopos do grupo de usuários estão na reivindicação `scope` do token de acesso. Para obter mais informações sobre as reivindicações nos tokens de acesso do Amazon Cognito, consulte [Como entender o token de acesso](amazon-cognito-user-pools-using-the-access-token.md).

Com o Amazon Cognito, os escopos nos tokens de acesso podem autorizar o acesso a atributos externos APIs ou de usuário. Você pode emitir tokens de acesso para usuários locais, usuários federados ou identidades de máquinas.

**Topics**
+ [

## Autorização da API
](#cognito-user-pools-define-resource-servers-about-api-authz)
+ [

## Machine-to-machine Autorização (M2M)
](#cognito-user-pools-define-resource-servers-about-m2m)
+ [

## Sobre escopos
](#cognito-user-pools-define-resource-servers-about-scopes)
+ [

## Sobre servidores de recursos
](#cognito-user-pools-define-resource-servers-about-resource-servers)
+ [

## Vinculação de recursos
](#cognito-user-pools-resource-binding)

## Autorização da API
<a name="cognito-user-pools-define-resource-servers-about-api-authz"></a>

A seguir estão algumas das maneiras pelas quais você pode autorizar solicitações APIs com tokens do Amazon Cognito:

**Token de acesso**  
Ao adicionar um autorizador do Amazon Cognito a uma configuração de solicitação de método da API REST, adicione **escopos de autorização** à configuração do autorizador. Com essa configuração, sua API aceita tokens de acesso no cabeçalho `Authorization` e analisa os escopos aceitos neles.

**Token de ID**  
Quando você passa um token de ID válido para um autorizador do Amazon Cognito em sua API REST, o API Gateway aceita a solicitação e passa o conteúdo do token de ID para o backend da API.

**Amazon Verified Permissions**  
No Verified Permissions, você tem a opção de criar um [repositório de políticas vinculado à API](https://docs.aws.amazon.com/verifiedpermissions/latest/userguide/policy-stores_api-userpool.html). O Verified Permissions cria e atribui um autorizador Lambda que processa tokens de ID ou de acesso do cabeçalho `Authorization` da sua solicitação. Esse autorizador Lambda passa seu token para o repositório de políticas, onde o Verified Permissions o compara com as políticas e retorna uma decisão de permissão ou negação ao autorizador.

**Mais atributos**
+ [Controlar e gerenciar acesso a uma API REST no API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-control-access-to-api.html)
+ [Autorização com o Amazon Verified Permissions](amazon-cognito-authorization-with-avp.md)

## Machine-to-machine Autorização (M2M)
<a name="cognito-user-pools-define-resource-servers-about-m2m"></a>

O Amazon Cognito aceita aplicações que acessam dados de API com *identidades de máquinas*. As identidades de máquinas em grupos de usuários são [clientes confidenciais](user-pool-settings-client-apps.md#user-pool-settings-client-app-client-types) que são executados em servidores de aplicativos e se conectam remotamente APIs. Sua operação acontece sem a interação do usuário: tarefas agendadas, fluxos de dados ou atualizações de ativos. Quando esses clientes autorizam suas solicitações com um token de acesso, eles realizam a autorização *máquina a máquina*, ou M2M. Na autorização M2M, um segredo compartilhado substitui as credenciais do usuário no controle de acesso.

Uma aplicação que acessa uma API com autorização M2M deve ter um ID do cliente e uma chave secreta do cliente. Em seu grupo de usuários, você deve criar um cliente de aplicação que permita a concessão de credenciais de clientes. Para permitir credenciais de cliente, o cliente de aplicação deve ter um segredo, enquanto você deve ter um domínio de grupo de usuários. Nesse fluxo, a identidade da sua máquina solicita um token de acesso diretamente do [Endpoint de token](token-endpoint.md). Você pode autorizar somente escopos personalizados de [servidores de recursos](#cognito-user-pools-define-resource-servers-about-resource-servers) em tokens de acesso para concessões de credenciais de clientes. Para obter mais informações sobre a configuração de clientes de aplicação, consulte [Configurações específicas da aplicação com clientes de aplicação](user-pool-settings-client-apps.md).

O token de acesso de uma concessão de credenciais do cliente é uma declaração verificável das operações que você deseja permitir que a identidade da sua máquina solicite de uma API. Para saber mais sobre como os tokens de acesso autorizam solicitações de API, leia a seguir. Para ver um exemplo de aplicação, consulte [Autorização máquina a máquina baseada no Amazon Cognito e no API Gateway usando o CDK da AWS](https://github.com/aws-samples/amazon-cognito-and-api-gateway-based-machine-to-machine-authorization-using-aws-cdk).

A autorização M2M tem um modelo de cobrança que difere da forma como os usuários ativos mensais (MAUs) são cobrados. Quando a autenticação do usuário tem um custo por usuário ativo, a cobrança de M2M reflete as credenciais ativas do cliente, os clientes da aplicação e o volume total de solicitações de tokens. Para mais informações, consulte [Preço do Amazon Cognito](https://aws.amazon.com/cognito/pricing). Para controlar os custos da autorização M2M, otimize a duração dos tokens de acesso e o número de solicitações de token que as aplicações fazem. Consulte [Gerenciar a expiração e o armazenamento em cache do token do grupo de usuários](amazon-cognito-user-pools-using-tokens-caching-tokens.md) para saber como usar o cache do API Gateway para reduzir as solicitações de novos tokens na autorização M2M.

Para obter informações sobre como otimizar as operações do Amazon Cognito que adicionam custos à AWS sua fatura, consulte. [Gerenciar custos](tracking-cost.md#tracking-cost-managing)

**Metadados do cliente para credenciais do cliente machine-to-machine (M2M)**  
Você pode transmitir [metadados do cliente](cognito-user-pools-working-with-lambda-triggers.md#working-with-lambda-trigger-client-metadata) em solicitações de M2M. Os metadados do cliente são informações adicionais de um usuário ou ambiente de aplicação que podem contribuir para os resultados de um [Acionador do Lambda antes da geração do token](user-pool-lambda-pre-token-generation.md). Nas operações de autenticação com um usuário principal, você pode passar os metadados do cliente para o gatilho de pré-geração do token no corpo das solicitações [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)de [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API. Como as aplicações conduzem o fluxo de geração de tokens de acesso para M2M com solicitações diretas ao [Endpoint de token](token-endpoint.md), elas têm um modelo diferente. No corpo POST das solicitações de token para credenciais do cliente, transmita um parâmetro `aws_client_metadata` com o objeto de metadados do cliente codificado em URL (`x-www-form-urlencoded`) para string. Para ver um exemplo de solicitação, consulte [Credenciais do cliente com autorização básicaCredenciais do cliente com autorização do corpo POST](token-endpoint.md#exchanging-client-credentials-for-an-access-token-in-request-body). Veja a seguir um exemplo de parâmetro que transmite os pares de chave-valor `{"environment": "dev", "language": "en-US"}`.

```
aws_client_metadata=%7B%22environment%22%3A%20%22dev%22,%20%22language%22%3A%20%22en-US%22%7D
```

## Sobre escopos
<a name="cognito-user-pools-define-resource-servers-about-scopes"></a>

Um *escopo* é um nível de acesso que um aplicativo pode solicitar para um recurso. Em um token de acesso do Amazon Cognito, o escopo é respaldado pela confiança que você configura com o grupo de usuários: um emissor confiável de tokens de acesso com uma assinatura digital conhecida. Os grupos de usuários podem gerar tokens de acesso com escopos que provam que o cliente tem permissão para gerenciar parte ou a totalidade de seu próprio perfil de usuário ou recuperar dados de uma API de back-end. Os grupos de usuários do Amazon Cognito emitem tokens de acesso com *o escopo reservado da API dos grupos de usuários*, *escopos personalizados* e *escopos do OpenID Connect (OIDC)*.

**O escopo reservado da API do grupo de usuários**  
O escopo do `aws.cognito.signin.user.admin` autoriza operações de autoatendimento para o usuário atual na API de grupos de usuários do Amazon Cognito. Ele autoriza o portador de um token de acesso a consultar e atualizar todas as informações sobre o portador com, por exemplo, as operações da API [GetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html). [UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html) Quando você autentica o usuário com a API de grupos de usuários do Amazon Cognito, esse é o único escopo que você recebe no token de acesso. Também é o único escopo necessário para ler e gravar atributos de usuário que você autorizou o cliente da aplicação a ler e gravar. Também é possível solicitar esse escopo em solicitações ao [Autorizar endpoint](authorization-endpoint.md). Esse escopo por si só não é suficiente para solicitar atributos de usuário do [endpoint userinfo](userinfo-endpoint.md). Para tokens de acesso que autorizam a API de grupos de usuários *e* solicitações `userInfo` para os usuários, é necessário solicitar os dois escopos `openid` e `aws.cognito.signin.user.admin` em uma solicitação `/oauth2/authorize`.

**Escopos personalizados**  
Os escopos personalizados autorizam solicitações externas APIs que os servidores de recursos protegem. Você pode solicitar escopos personalizados com outros tipos de escopos. É possível encontrar mais informações sobre escopos personalizados em toda esta página.

**Escopos do OpenID Connect (OIDC)**  
Ao autenticar usuários com o servidor de autorização do grupo de usuários, inclusive com login gerenciado, você deve solicitar escopos. É possível autenticar usuários locais do grupo de usuários e usuários federados de terceiros no servidor de autorização do Amazon Cognito. Os escopos do OIDC autorizam a aplicação a ler as informações de usuário do [endpoint userinfo](userinfo-endpoint.md) do grupo de usuários. O OAuth modelo, em que você consulta os atributos do usuário a partir do `userInfo` endpoint, pode otimizar seu aplicativo para um grande volume de solicitações de atributos do usuário. O endpoint `userInfo` retorna atributos em um nível de permissão que é determinado pelos escopos no token de acesso. Você pode autorizar seu cliente de aplicação a emitir tokens de acesso com os seguintes escopos padrão do OIDC:

OpenID  
Um escopo mínimo para consultas do OpenID Connect (OIDC). Autoriza o token de ID, a reivindicação de identificador exclusivo `sub` e a capacidade de solicitar outros escopos.  
Quando você solicita o escopo `openid` e nenhum outro, o token de ID do grupo de usuários e a resposta `userInfo` incluem declarações para todos os atributos do usuário que o cliente da aplicação pode ler. Quando você solicita `openid` e outros escopos OIDC, como `profile`, `email` e `phone`, o conteúdo do token de ID e a resposta [userInfo](userinfo-endpoint.md#userinfo-endpoint.title) são limitados às restrições dos escopos adicionais.  
Por exemplo, uma solicitação ao [Autorizar endpoint](authorization-endpoint.md) com o parâmetro `scope=openid+email` retorna um token de ID com `sub`, `email` e `email_verified`. O token de acesso dessa solicitação exibe os mesmos atributos de [endpoint userinfo](userinfo-endpoint.md). Uma solicitação com o parâmetro `scope=openid` exibe todos os atributos legíveis pelo cliente no token de ID e de `userInfo`.

perfil  
Autoriza todos os atributos de usuário que o cliente da aplicação pode ler.

email  
Autoriza os atributos do usuário `email` e `email_verified`. O Amazon Cognito vai gerar `email_verified` se tiver um valor definido explicitamente.

phone  
Autoriza os atributos do usuário `phone_number` e `phone_number_verified`.

## Sobre servidores de recursos
<a name="cognito-user-pools-define-resource-servers-about-resource-servers"></a>

Uma API do servidor de recursos pode conceder acesso às informações em um banco de dados ou controlar seus recursos de TI. Um token de acesso do Amazon Cognito pode autorizar o acesso a APIs esse suporte 2.0. OAuth O Amazon API Gateway REST APIs tem [suporte integrado](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html) para autorização com tokens de acesso do Amazon Cognito. A aplicação transmite o token de acesso na chamada de API para o servidor de recursos. O servidor de recursos inspeciona o token de acesso para determinar se o acesso deve ser concedido.

O Amazon Cognito pode fazer futuras atualizações no esquema dos tokens de acesso do grupo de usuários. Se a aplicação analisar o conteúdo do token de acesso antes de passá-lo para uma API, você deverá criar seu código para aceitar atualizações no esquema.

Os escopos personalizados são definidos por você e ampliam os recursos de autorização de um grupo de usuários para incluir propósitos não relacionados à consulta e modificação de usuários e seus atributos. Por exemplo, se você tiver um servidor de recursos para fotos, ele poderá definir dois escopos: `photos.read` para acesso de leitura às fotos e `photos.write` para write/delete acesso. É possível configurar uma API para aceitar tokens de acesso para autorização e conceder solicitações `HTTP GET` para acessar tokens com `photos.read` na reivindicação `scope`, e solicitações `HTTP POST` de tokens com `photos.write`. Estes são *escopos personalizados*.

**nota**  
O servidor de recursos deve verificar a assinatura e a data de expiração do token de acesso antes de processar quaisquer reivindicações dentro do token. Para obter mais informações sobre como verificar tokens, consulte [Como verificar tokens web JSON](amazon-cognito-user-pools-using-tokens-verifying-a-jwt.md). Para obter mais informações sobre como verificar e usar tokens de grupos de usuários no Amazon API Gateway, consulte o blog [Integrating Amazon Cognito User Pools with API Gateway](https://aws.amazon.com/blogs/mobile/integrating-amazon-cognito-user-pools-with-api-gateway/). O API Gateway é uma boa opção para inspecionar os tokens de acesso e proteger seus recursos. Para obter mais informações sobre autorizadores do Lambda do API Gateway, consulte [Usar os autorizadores do Lambda do API Gateway](https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html).

**Visão geral do**  
Com o Amazon Cognito, você pode criar **servidores de recursos OAuth ** 2.0 e associar **escopos personalizados** a eles. Escopos personalizados em um token de acesso autorizam ações específicas na API. Você pode autorizar qualquer cliente de aplicação no grupo de usuários a emitir escopos personalizados de qualquer um dos servidores de recursos. Associe seus escopos personalizados a um cliente de aplicativo e solicite esses escopos em concessões de código de autorização OAuth 2.0, concessões implícitas e concessões de credenciais de cliente do. [Endpoint de token](token-endpoint.md) O Amazon Cognito adiciona escopos personalizados na reivindicação `scope` em um token de acesso. Um cliente pode usar o token de acesso em seu servidor de recursos, o que faz com que a decisão de autorização baseada nos escopos esteja presente no token. Para obter mais informações sobre o escopo do token de acesso, consulte [Usar tokens com grupos de usuários](amazon-cognito-user-pools-using-tokens-with-identity-providers.md).

![\[Uma visão geral do fluxo de um servidor de recursos. O cliente solicita uma concessão com um escopo personalizado, o grupo de usuários retorna um token de acesso com o escopo personalizado e o cliente apresenta o token de acesso a uma API.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/resource-servers.png)


Para obter um token de acesso com escopos personalizados, a aplicação precisa fazer uma solicitação ao [Endpoint de token](token-endpoint.md) para resgatar um código de autorização ou solicitar uma concessão de credenciais de cliente. No login gerenciado, você também pode solicitar escopos personalizados em um token de acesso por meio de uma concessão implícita.

**nota**  
Porque eles foram projetados para autenticação interativa humana com o grupo de usuários como IdP, [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)e as [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)solicitações só produzem uma `scope` declaração no token de acesso com o valor único. `aws.cognito.signin.user.admin`

**Gerenciar o servidor de recursos e os escopos personalizados**

Ao criar um servidor de recursos, é necessário fornecer um nome e um identificador do servidor de recursos. Para cada escopo criado no servidor de recursos, é necessário fornecer o nome e a descrição do escopo.
+ **Nome do servidor de recursos**: um nome fácil de lembrar para o servidor de recursos, como `Solar system object tracker` ou `Photo API`.
+ **Identificador do servidor de recursos**: um identificador exclusivo do servidor de recursos. O identificador é qualquer nome que você deseja associar à API, por exemplo `solar-system-data`. É possível configurar identificadores mais longos, por exemplo `https://solar-system-data-api.example.com`, como uma referência mais direta aos caminhos de URI da API, mas strings mais longas aumentam o tamanho dos tokens de acesso.
+ **Nome do escopo**: o valor que você quer nas reivindicações `scope`. Por exemplo, .`sunproximity.read`
+ **Descrição**: uma descrição simples do escopo. Por exemplo, .`Check current proximity to sun`

O Amazon Cognito pode incluir escopos personalizados nos tokens de acesso para qualquer usuário, seja local para o grupo de usuários ou federado com um provedor de identidade de terceiros. Você pode escolher escopos para os tokens de acesso de seus usuários durante os fluxos de autenticação com o servidor de autorização OAuth 2.0 que inclui login gerenciado. A autenticação do usuário deve começar no [Autorizar endpoint](authorization-endpoint.md) com `scope` como um dos parâmetros da solicitação. O formato a seguir é recomendado para servidores de recursos. Para um identificador, use um nome fácil para a API. Para um escopo personalizado, use a ação autorizada.

```
resourceServerIdentifier/scopeName
```

Por exemplo, você descobriu um novo asteroide no cinturão de Kuiper e deseja registrá-lo por meio da API `solar-system-data`. O escopo que autoriza operações de gravação no banco de dados de asteroides é `asteroids.add`. Ao solicitar o token de acesso que autorizará você a registrar sua descoberta, formate o parâmetro de solicitação HTTPS `scope` como `scope=solar-system-data/asteroids.add`.

Excluir um escopo de um servidor de recursos não exclui a sua associação com todos os clientes. Em vez disso, o escopo é marcado como *inativo*. O Amazon Cognito não adiciona escopos inativos aos tokens de acesso, mas continua normalmente caso a aplicação solicite um. Se você adicionar o escopo ao servidor de recursos novamente mais tarde, o Amazon Cognito o gravará novamente no token de acesso. Se você solicitar um escopo que não tenha associado ao cliente de aplicação, independentemente de tê-lo excluído do servidor de recursos do grupo de usuários, a autenticação falhará.

Você pode usar a Console de gerenciamento da AWS API ou a CLI para definir servidores de recursos e escopos para seu grupo de usuários.

### Como definir um servidor de recurso para o grupo de usuários (Console de gerenciamento da AWS)
<a name="cognito-user-pools-define-resource-servers-console"></a>

Você pode usar o Console de gerenciamento da AWS para definir um servidor de recursos para seu grupo de usuários.

**Para definir um servidor de recursos**

1. Faça login no [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home).

1. No painel de navegação, escolha **User Pools** (Grupos de usuários) e escolha o grupo de usuários que deseja editar.

1. Clique no menu **Domínio** em **Identidade visual** e localize **Servidores de recursos**.

1. Escolha **Create a resource server** (Criar um servidor de recursos).

1. Insira um **Resource server name** (Nome do servidor de recursos). Por exemplo, .`Photo Server`

1. Insira um **Resource server identifier** (Identificador do servidor de recursos). Por exemplo, .`com.example.photos`

1. Insira os **Custom scopes** (Escopos personalizados) para seus recursos, como `read` e `write`.

1. Para cada **Scope name** (Nome de escopo), insira uma **Description** (Descrição), como `view your photos` e `update your photos`.

1. Escolha **Criar**.

Seus escopos personalizados podem ser revisados no menu **Domínio** em **Servidores de recursos**, na coluna **Escopos personalizados**. É possível habilitar escopos personalizados para clientes da aplicação no menu **Clientes da aplicação** em **Aplicações**. Selecione um cliente da aplicação, localize **Páginas de login** e clique em **Editar**. Adicione **Custom scopes** (Escopos personalizados) e escolha **Save changes** (Salvar alterações).

### Definindo um servidor de recursos para seu grupo de usuários (AWS CLI e AWS API)
<a name="cognito-user-pools-define-resource-servers-cli-api"></a>

Use os comandos a seguir para especificar as configurações do servidor de recursos para o seu grupo de usuários.

**Para criar um servidor de recursos**
+ AWS CLI: `aws cognito-idp create-resource-server`
+ AWS API: [CreateResourceServer](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateResourceServer.html)

**Para obter informações sobre as configurações do servidor de recursos**
+ AWS CLI: `aws cognito-idp describe-resource-server`
+ AWS API: [DescribeResourceServer](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeResourceServer.html)

**Para listar informações sobre todos os servidores de recursos do seu grupo de usuários**
+ AWS CLI: `aws cognito-idp list-resource-servers`
+ AWS API: [ListResourceServers](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListResourceServers.html)

**Para excluir um servidor de recursos**
+ AWS CLI: `aws cognito-idp delete-resource-server`
+ AWS API: [DeleteResourceServer](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteResourceServer.html)

**Para atualizar as configurações de um servidor de recursos**
+ AWS CLI: `aws cognito-idp update-resource-server`
+ AWS API: [UpdateResourceServer](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateResourceServer.html)

## Vinculação de recursos
<a name="cognito-user-pools-resource-binding"></a>

Com a vinculação de recursos, também conhecida como indicadores de recursos, é possível solicitar concessões específicas da API ao servidor de autorização do grupo de usuários. A vinculação de recursos é uma extensão OAuth 2.0 definida na [RFC 8707](https://www.rfc-editor.org/rfc/rfc8707.html) que permite que os clientes especifiquem explicitamente qual servidor de recursos eles pretendem acessar durante as solicitações de autorização. Com a vinculação de recursos, as configurações de API podem negar o acesso a tokens que não são especificamente destinados a eles.

**nota**  
Só é possível vincular tokens de acesso a recursos para usuários. Não é possível solicitar a vinculação de recursos com concessões M2M de credenciais de cliente.

Ao usar a vinculação de recursos com grupos de usuários do Amazon Cognito, os clientes podem incluir um parâmetro `resource` em suas solicitações de autenticação para o servidor de autorização do grupo de usuários. Seu grupo de usuários valida que o valor do recurso solicitado é uma URL, seguindo as mesmas regras de esquema do [app client](user-pool-settings-client-apps.md#cognito-user-pools-app-idp-settings-about) callback URLs:`https://`, `http://` with `localhost` only, ou um esquema personalizado, como. `myapp://` O Amazon Cognito define o URI solicitado como o público-alvo na declaração `aud` do [token de acesso](amazon-cognito-user-pools-using-the-access-token.md). Se o recurso solicitado for um servidor de recursos do grupo de usuários, o identificador do servidor de recursos deverá estar no formato de URL. É possível solicitar um recurso por solicitação de autenticação.

Esse recurso é exclusivo para [autenticação de login gerenciada](authentication-flows-selection-managedlogin.md) com seu servidor de autorização de grupo de usuários OAuth 2.0. Você pode solicitar a vinculação de recursos em concessões implícitas e de código de autorização por meio do [Autorizar endpoint](authorization-endpoint.md). As concessões de atualização de token no [Endpoint de token](token-endpoint.md) mantêm a declaração `aud` da solicitação original. No momento, isso não está disponível nos [modelos de autenticação do SDK](authentication-flows-selection-sdk.md).

**Implementar a vinculação de recursos com o grupo de usuários do Amazon Cognito**

1. Configure um ou mais servidores de recursos no grupo de usuários com identificadores exclusivos.

1. Na solicitação de autorização para `/oauth2/authorize`, solicite um código de autorização ou concessão implícita e inclua o parâmetro `resource`. O valor de `resource` deve ser um identificador de servidor de recursos formatado em URL ou um URL. Por exemplo, .`&resource=https://solar-system-data-api.example.com`

1. O servidor de autorização valida a solicitação do recurso, conclui a autenticação e define a declaração `aud` do token de acesso para o URL do recurso solicitado.

1. Para validar se os tokens foram emitidos especificamente para ele, o recurso que consome o token de acesso do usuário verifica a declaração `aud`.

# Configurar recursos do grupo de usuários
<a name="user-pools-configure-features"></a>

Nos capítulos anteriores, você provavelmente configurou alguns recursos com a orientação do console do Amazon Cognito. As páginas desta seção exploram em mais detalhes os requisitos de configuração detalhados de alguns dos principais recursos dos grupos de usuários. Há informações de referência importantes sobre suas opções com clientes da aplicação, configuração de e-mail e SMS, memorização de dispositivos de usuários e muito mais.

**Topics**
+ [

# Como atualizar a configuração do grupo de usuários e do cliente da aplicação
](cognito-user-pool-updating.md)
+ [

# Configurações específicas da aplicação com clientes de aplicação
](user-pool-settings-client-apps.md)
+ [

# Trabalhar com dispositivos de usuários no grupo de usuários
](amazon-cognito-user-pools-device-tracking.md)
+ [

# Como usar o Amazon Pinpoint para análise de grupos de usuários
](cognito-user-pools-pinpoint-integration.md)
+ [

# Configurações de e-mail para grupos de usuários do Amazon Cognito
](user-pool-email.md)
+ [

# Configurações de mensagens SMS para grupos de usuários do Amazon Cognito
](user-pool-sms-settings.md)

# Como atualizar a configuração do grupo de usuários e do cliente da aplicação
<a name="cognito-user-pool-updating"></a>

Para alterar uma configuração em um grupo de usuários ou cliente da aplicação, você pode aplicar a atualização no console do Amazon Cognito com alguns cliques. Navegue pelas guias baseadas em recursos nas configurações do grupo de usuários e atualize os campos conforme descrito em outras áreas deste guia.

Muitas organizações gerenciam seus recursos de forma programática em AWS CloudFormation aplicativos desenvolvidos no AWS SDKs ou CDK e em outros softwares de automação. Se esse for seu modelo de gerenciamento de recursos, tome cuidado extra ao fazer alterações nos recursos.

A API opera [ UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)e [ UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)faz atualizações em um grupo de usuários ou cliente de aplicativo existente. Cada um acompanha um aviso na Referência da API: *Se você não fornecer um valor para um atributo, o Amazon Cognito usará seu valor padrão*. Quando você envia uma solicitação de atualização com apenas um parâmetro, o Amazon Cognito define esse parâmetro com o valor de sua escolha, depois define todos os outros como um valor padrão. Isso pode redefinir configurações, incluindo seu esquema de atributos, seus acionadores do Lambda e a configuração de e-mail e mensagens SMS.

Além disso, algumas configurações são bloqueadas após a criação do grupo de usuários ou do cliente da aplicação, e você não pode alterá-las a menos que crie um recurso.

**Topics**
+ [

## Configurações que não podem ser alteradas
](#cognito-user-pool-updating-fixed-settings)
+ [

## Configuração de SMS
](#cognito-user-pool-updating-sms)
+ [

## Atualização de um grupo de usuários com um AWS SDK ou AWS CDK API REST
](#cognito-user-pool-updating-api-cli)

## Configurações que não podem ser alteradas
<a name="cognito-user-pool-updating-fixed-settings"></a>

Após a criação de um grupo de usuários, não é possível alterar algumas configurações. Se quiser alterar as configurações a seguir, crie um grupo de usuários ou um cliente da aplicação.

**nota**  
Anteriormente, não era possível alterar o nome de um grupo de usuários. Isso mudou. Agora você pode atribuir novos nomes amigáveis aos seus grupos de usuários.

**ID do grupo de usuários**  
Nome do parâmetro da API: [Id/ UserPoolId](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserPoolType.html#CognitoUserPools-Type-UserPoolType-ID)  
O ID do grupo de usuários, por exemplo, `us-east-1_EXAMPLE`, é gerado automaticamente pelo Amazon Cognito e não pode ser alterado.

**Opções de login do grupo de usuários do Amazon Cognito**  
Nomes dos parâmetros da API: [AliasAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-AliasAttributes)e [UsernameAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-UsernameAttributes)  
Os atributos que seus usuários podem transmitir como nome de usuário ao fazerem login. Ao criar um grupo de usuários, você pode optar por permitir o login com nome de usuário, endereço de e-mail, número de telefone ou nome de usuário preferido. Para alterar as opções de login do grupo de usuários, crie outro grupo de usuários.

**Make user name case sensitive (Diferenciar maiúsculas e minúsculas no nome de usuário)**  
Nome do parâmetro da API: [UsernameConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-UsernameConfiguration)  
Quando você cria um nome de usuário que corresponde a outro nome de usuário, exceto pelo uso de maiúsculas/minúsculas, o Amazon Cognito pode tratá-lo como o mesmo usuário ou como usuários únicos. Para obter mais informações, consulte [Sensibilidade entre maiúsculas e minúsculas do grupo de usuários](user-pool-case-sensitivity.md). Para alterar a distinção entre maiúsculas e minúsculas, crie outro grupo de usuários.

**Segredo do cliente**  
Nome do parâmetro da API: [GenerateSecret](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html#CognitoUserPools-CreateUserPoolClient-request-GenerateSecret)  
Ao criar um cliente da aplicação, você pode gerar um segredo de cliente para que somente fontes confiáveis possam fazer solicitações ao grupo de usuários. Para obter mais informações, consulte [Configurações específicas da aplicação com clientes de aplicação](user-pool-settings-client-apps.md). Para alterar um segredo de cliente, crie outro cliente da aplicação no mesmo grupo de usuários.

**Atributos obrigatórios**  
Nome do parâmetro da API: [Schema](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Schema)  
Os atributos aos quais seus usuários devem fornecer valores no cadastro ou quando você os cria. Para obter mais informações, consulte [Trabalhar com atributos do usuário](user-pool-settings-attributes.md). Para alterar os atributos necessários, crie outro grupo de usuários.

**Atributos personalizados (exclusão)**  
Nome do parâmetro da API: [Schema](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Schema)  
Atributos com nomes personalizados. Você pode alterar o valor do atributo personalizado de um usuário, mas não é possível excluir um atributo personalizado do grupo de usuários. Para obter mais informações, consulte [Trabalhar com atributos do usuário](user-pool-settings-attributes.md). Se você atingir o número máximo de atributos personalizados e quiser modificar a lista, crie outro grupo de usuários.

## Configuração de SMS
<a name="cognito-user-pool-updating-sms"></a>

Depois de ativar mensagens de SMS no grupo de usuários, não é possível desativá-las.
+ Se você optar por configurar mensagens de SMS ao criar um grupo de usuários, não conseguirá desativar o SMS depois que concluir a configuração.
+ Você pode ativar mensagens de SMS em um grupo de usuários que você criou, mas depois disso, não poderá desativar o SMS.
+ O Amazon Cognito pode usar mensagens de SMS para convite e recuperação de contas de usuários, verificação de atributos e autenticação multifator (MFA). Depois de ativar as mensagens de SMS, você pode ativá-las ou desativá-las a qualquer momento para essas funções.
+ A configuração de mensagens de SMS inclui um perfil do IAM que você delega ao Amazon Cognito para enviar mensagens com o Amazon SNS. É possível alterar o perfil atribuído a qualquer momento.

## Atualização de um grupo de usuários com um AWS SDK ou AWS CDK API REST
<a name="cognito-user-pool-updating-api-cli"></a>

No console do Amazon Cognito é possível alterar as configurações do grupo de usuários, um parâmetro por vez. Por exemplo, para adicionar um acionador do Lambda, você escolhe **Adicionar acionador do Lambda** e escolhe a função e o tipo de acionador. A API de grupos de usuários do Amazon Cognito é estruturada de forma que as operações de atualização para grupos de usuários e clientes de aplicações exijam o conjunto completo de parâmetros para o grupo de usuários. No entanto, o console automatiza de forma transparente essa operação de atualização com suas outras configurações do grupo de usuários.

Às vezes, você pode descobrir que uma alteração em outro lugar Conta da AWS pode fazer com que as atualizações gerem um erro quando não estão relacionadas à configuração que você deseja alterar. Uma identidade excluída do Amazon SES ou uma alteração em uma permissão do IAM para AWS WAF, por exemplo. Se um dos parâmetros atuais não for mais válido, você não poderá atualizar as configurações até corrigi-lo. Ao encontrar esse erro, analise a resposta do erro e valide a configuração mencionada.

A [AWS Cloud Development Kit (AWS CDK)](https://aws.amazon.com/cdk)[API REST de grupos de usuários do Amazon Cognito [AWS SDKs](https://aws.amazon.com/developer/tools/)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html)é uma ferramenta para automação e configuração programática dos recursos do Amazon Cognito. As solicitações com essas ferramentas também devem, assim como no console do Amazon Cognito, atualizar uma definição com uma configuração completa de recursos no corpo da solicitação. Em um nível mais alto, é necessário realizar o seguinte processo.

1. Capture o resultado de uma operação que descreve a configuração do recurso existente.

1. Modifique o resultado com a alteração das configurações.

1. Envie a configuração modificada em uma operação que atualiza seu recurso.

O procedimento a seguir atualiza sua configuração com a operação [ UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)da API. A mesma abordagem, com campos de entrada diferentes, se aplica [ UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)a.

**Importante**  
Se você não fornecer valores para os parâmetros existentes, o Amazon Cognito os definirá como valores padrão. Por exemplo, quando você já tiver uma `LambdaConfig` e enviar um `UpdateUserPool` com uma `LambdaConfig` em branco, exclua a atribuição de todas as funções do Lambda para acionadores do grupo de usuários. Planeje adequadamente quando quiser automatizar as alterações na configuração do grupo de usuários.

1. Capture o estado existente do seu grupo de usuários com [ DescribeUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html).

1. Formate a saída do `DescribeUserPool` de forma que corresponda aos [parâmetros da solicitação](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#API_UpdateUserPool_RequestSyntax) do `UpdateUserPool`. Remova os campos de nível superior a seguir e seus objetos secundários da saída JSON.
   + `Arn`
   + `CreationDate`
   + `CustomDomain`
     + Atualize esse campo com a operação [UpdateUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolDomain.html)da API.
   + `Domain`
     + Atualize esse campo com a operação [UpdateUserPoolDomain](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolDomain.html)da API.
   + `EmailConfigurationFailure`
   + `EstimatedNumberOfUsers`
   + `Id`
   + `LastModifiedDate`
   + `Name`
   + `SchemaAttributes`
   + `SmsConfigurationFailure`
   + `Status`

1. Confirme se o JSON resultante corresponde aos [parâmetros da solicitação](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#API_UpdateUserPool_RequestSyntax) do `UpdateUserPool`.

1. Modifique todos os parâmetros que você deseja alterar no JSON resultante.

1. Envie uma solicitação de API `UpdateUserPool` com seu JSON modificado como entrada da solicitação.

Você também pode usar essa saída modificada do `DescribeUserPool` no parâmetro `--cli-input-json` do `update-user-pool` na AWS CLI.

Como alternativa, execute o AWS CLI comando a seguir para gerar JSON com valores em branco para os campos de entrada aceitos para. `update-user-pool` Depois, você pode preencher esses campos com os valores de seu grupo de usuários.

```
aws cognito-idp update-user-pool --generate-cli-skeleton --output json
```

Use o comando a seguir para gerar o mesmo objeto JSON para um cliente da aplicação.

```
aws cognito-idp update-user-pool-client --generate-cli-skeleton --output json
```

# Configurações específicas da aplicação com clientes de aplicação
<a name="user-pool-settings-client-apps"></a>

Um cliente de aplicação de grupo de usuários é uma configuração dentro de um grupo de usuários que interage com um aplicativo móvel ou uma aplicação web que se autentica no Amazon Cognito. Os clientes da aplicação podem chamar operações de API autenticadas e não autenticadas e ler ou modificar alguns ou todos os atributos dos usuários. A aplicação deve se identificar com o respectivo cliente nas operações de registro, login e tratamento de senhas esquecidas. Essas solicitações de API devem incluir autoidentificação com um ID do cliente da aplicação e autorização com um segredo opcional do cliente. Você deve proteger qualquer cliente de aplicativo IDs ou segredos para que somente aplicativos clientes autorizados possam chamar essas operações não autenticadas. Além disso, se você configurar seu aplicativo para assinar solicitações de API autenticadas com AWS credenciais, deverá protegê-las contra a inspeção do usuário.

É possível criar várias aplicações para um grupo de usuários. Um cliente da aplicação pode estar vinculado à plataforma de código de uma aplicação ou a um locatário separado no grupo de usuários. Por exemplo, você pode criar uma aplicação para uma aplicação do lado do servidor e uma aplicação Android diferente. Cada aplicativo possui o seu próprio ID de cliente do aplicativo.

Você pode aplicar configurações para os seguintes recursos do grupo de usuários no nível do cliente de aplicação:

1. [Analytics](cognito-user-pools-pinpoint-integration.md)

1. [Login gerenciado](cognito-user-pools-managed-login.md) IdPs, tipos de concessão URLs, retorno de chamada e personalização

1. [Servidores de recursos e escopos personalizados](cognito-user-pools-define-resource-servers.md)

1. [Proteção contra ameaças](cognito-user-pool-settings-threat-protection.md)

1. [Atribuir permissões de leitura e gravação](user-pool-settings-attributes.md#user-pool-settings-attribute-permissions-and-scopes)

1. [Expiração e revogação do token](amazon-cognito-user-pools-using-tokens-with-identity-providers.md)

1. [Fluxos de autenticação](authentication.md#amazon-cognito-user-pools-authentication-flow)

## Tipos de cliente de aplicação
<a name="user-pool-settings-client-app-client-types"></a>

**Ao criar um cliente de aplicativo no Amazon Cognito, você pode pré-preencher as opções com base nos tipos de OAuth cliente padrão: cliente **público e cliente confidencial**.** Configure um **cliente confidencial** com um **segredo do cliente**. Para obter mais informações sobre os tipos de clientes, consulte [IETF RFC 6749 \$12.1](https://datatracker.ietf.org/doc/html/rfc6749#section-2.1).

**Cliente público**  
Um cliente público é executado em um navegador ou em um dispositivo móvel. Como ele não tem recursos confiáveis no lado do servidor, não tem um segredo do cliente.

**Cliente confidencial**  
Um cliente confidencial tem recursos no lado do servidor que podem ser confiáveis com um **segredo do cliente** para operações de API não autenticadas. A aplicação pode ser executada como um daemon ou script shell no servidor de backend.

**Segredo do cliente**  
Um segredo do cliente, ou senha do cliente, é uma string fixa que a aplicação deve usar em todas as solicitações de API para o cliente da aplicação. O cliente da aplicação deve ter um segredo de cliente para realizar concessões `client_credentials`. Para obter mais informações, consulte [IETF RFC 6749 \$12.3.1](https://datatracker.ietf.org/doc/html/rfc6749#section-2.3.1).  
Cada cliente de aplicativo pode ter até dois segredos por vez, permitindo a rotação de segredos sem tempo de inatividade. Ao criar um cliente de aplicativo, você pode permitir que o Amazon Cognito gere um valor secreto ou forneça seu próprio valor secreto personalizado. Você não pode alterar os segredos depois de criar uma aplicação. Você pode adicionar um segundo segredo com a operação da [AddUserPoolClientSecret](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AddUserPoolClientSecret.html)API para alternar os segredos. Ao adicionar um segredo, você pode deixar o Amazon Cognito gerar um valor secreto ou fornecer seu próprio valor secreto personalizado. Para excluir um segredo, use a operação [DeleteUserPoolClientSecret](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUserPoolClientSecret.html)da API. Você não pode excluir o único segredo associado a um cliente de aplicativo. Também é possível excluir um aplicativo para bloquear o acesso de aplicativos que usam esse ID de cliente de aplicativo.  
O console do Amazon Cognito cria clientes de aplicativos com segredos de clientes quando você seleciona as opções de **aplicativo web tradicional e achine-to-machine aplicativo** **M** para o tipo de aplicativo. Escolha uma dessas opções para gerar um segredo do cliente ou crie o cliente programaticamente com [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html)e `GenerateSecret` defina como. `true`

Você pode usar um cliente confidencial e um segredo do cliente com uma aplicação pública. Use um CloudFront proxy da Amazon para adicionar um `SECRET_HASH` em trânsito. Para obter mais informações, consulte [Proteger clientes públicos do Amazon Cognito usando um CloudFront proxy da Amazon](https://aws.amazon.com/blogs/security/protect-public-clients-for-amazon-cognito-by-using-an-amazon-cloudfront-proxy/) no AWS blog.

## Token JSON da web
<a name="user-pool-settings-client-app-token-types"></a>

Os clientes do aplicativo Amazon Cognito podem emitir tokens web JSON (JWTs) dos seguintes tipos.

**Token de identidade (ID)**  
Uma declaração verificável de que o usuário está autenticado no grupo de usuários. O OpenID Connect (OIDC) adicionou a [especificação do token de ID aos padrões de token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) de acesso e atualização definidos pela versão 2.0. OAuth O token de ID contém informações de identidade, como atributos do usuário, que a aplicação pode usar para criar um perfil de usuário e provisionar recursos. Consulte [Como entender o token de identidade (ID)](amazon-cognito-user-pools-using-the-id-token.md) para obter mais informações.

**Token de acesso**  
Uma declaração verificável dos direitos de acesso do usuário. O token de acesso contém [escopos](https://datatracker.ietf.org/doc/html/rfc6749#section-3.3), um recurso do OIDC e 2.0. OAuth A aplicação pode apresentar escopos para recursos de back-end e provar que o grupo de usuários autorizou um usuário ou uma máquina a acessar dados de uma API ou seus próprios dados de usuário. Um token de acesso com *escopos personalizados*, geralmente de uma concessão de credenciais de cliente M2M, autoriza o acesso a um servidor de recursos. Consulte [Como entender o token de acesso](amazon-cognito-user-pools-using-the-access-token.md) para obter mais informações.

**Token de atualização**  
Uma declaração criptografada da autenticação inicial que a aplicação pode apresentar ao grupo de usuários quando os tokens do usuário expirarem. Uma solicitação de token de atualização retorna tokens de acesso e ID novos e não expirados. Consulte [Tokens de atualização](amazon-cognito-user-pools-using-the-refresh-token.md) para obter mais informações.

É possível definir a expiração desses tokens para cada cliente da aplicação no menu **Clientes da aplicação** do grupo de usuários no console do [Amazon Cognito](https://console.aws.amazon.com/cognito/v2/idp/user-pools).

## Termos do cliente da aplicação
<a name="cognito-user-pools-app-idp-settings-about"></a>

Os seguintes termos são propriedades disponíveis para clientes da aplicação no console do Amazon Cognito.

**Retorno de chamada permitido URLs**  
Um URL de retorno de chamada indica para onde o usuário será redirecionado após um acesso bem-sucedido. Escolha pelo menos um URL de retorno de chamada. O URL de retorno de chamada deve:  
+ Ser um URI absoluto.
+ Estar pré-registrado com um cliente.
+ Não incluir um componente de fragmento.
Consulte [OAuth 2.0 - endpoint de redirecionamento](https://tools.ietf.org/html/rfc6749#section-3.1.2).  
O Amazon Cognito exige `HTTPS` em vez de `HTTP`, exceto `http://localhost` somente para fins de teste.  
Também há suporte para retornos de chamadas de aplicativos, URLs como `myapp://example` os do tipo.

**Sair permitido URLs**  
Um URL de saída indica para onde o usuário deve ser redirecionado após fazer logoff.

**Atribuir permissões de leitura e gravação**  
Seu grupo de usuários pode ter muitos clientes, cada um com seu próprio cliente de aplicativo IdPs e. Você pode configurar o cliente da aplicação para ter acesso de leitura e gravação somente aos atributos de usuário relevantes para a aplicação. Em casos como autorização machine-to-machine (M2M), você não pode conceder acesso a nenhum dos seus atributos de usuário.  

**Considerações sobre a configuração de permissões de leitura e gravação de atributos**
+ Quando você cria um cliente de aplicação e não personaliza as permissões de leitura e gravação de atributos, o Amazon Cognito concede permissões de leitura e gravação a todos os atributos do grupo de usuários.
+ É possível conceder acesso de gravação a [atributos personalizados](user-pool-settings-attributes.md#user-pool-settings-custom-attributes.title) imutáveis. O cliente da aplicação pode gravar valores em um atributo imutável quando você cria ou cadastra um usuário. Depois disso, não é possível gravar valores em nenhum atributo personalizado imutável para o usuário.
+ Os clientes da aplicação devem ter acesso de gravação aos atributos necessários em seu grupo de usuários. O console do Amazon Cognito define automaticamente os atributos necessários como graváveis.
+ Não é possível permitir que um cliente de aplicação tenha acesso de gravação a `email_verified` ou `phone_number_verified`. O administrador do grupo de usuários pode modificar esses valores. Um usuário só pode alterar o valor desses atributos por meio da [verificação de atributos](signing-up-users-in-your-app.md#allowing-users-to-sign-up-and-confirm-themselves.title).

**Fluxos de autenticação**  
Os métodos que o cliente da aplicação permite para fazer login. Seu aplicativo pode oferecer suporte à autenticação com nome de usuário e senha, e-mail e mensagem SMS OTPs, autenticadores de chave de acesso, autenticação personalizada com acionadores Lambda e atualização de token. Como prática recomendada de segurança, use a autenticação SRP para autenticação de nome de usuário e senha em aplicações personalizadas.

**Escopos personalizados**  
Um escopo personalizado é aquele definido para o seu próprio servidor de recursos em **Resource Servers (Servidores de recursos)**. O formato é*resource-server-identifier*/*scope*. Consulte [Escopos, M2M e servidores de recursos](cognito-user-pools-define-resource-servers.md).

**URI de redirecionamento padrão**  
Substitui o `redirect_uri` parâmetro nas solicitações de autenticação de usuários por terceiros IdPs. Defina essa configuração do cliente do aplicativo com o `DefaultRedirectURI` parâmetro de uma solicitação de [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)API [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html)ou. Esse URL também deve ser membro de `CallbackURLs` para seu cliente de aplicação. O Amazon Cognito redireciona as sessões autenticadas para esse URL quando:  

1. Seu cliente de aplicativo tem um [provedor de identidade](#app-client-terms-identity-provider) atribuído e vários [retornos de chamada URLs](#app-client-terms-callback-urls) definidos. Seu grupo de usuários redireciona as solicitações de autenticação para o [servidor de autorização](authorization-endpoint.md) para o URI de redirecionamento padrão quando elas não incluem um parâmetro `redirect_uri`.

1. Seu cliente de aplicativo tem um [provedor de identidade](#app-client-terms-identity-provider) atribuído e um [retorno de chamada URLs](#app-client-terms-callback-urls) definido. Nesse cenário, não é necessário definir um URL de retorno de chamada padrão. Solicitações que não incluem um parâmetro `redirect_uri` redirecionam para o único URL de retorno de chamada disponível.

**Provedores de identidade**  
Você pode escolher alguns ou todos os provedores de identidade externos (IdPs) do seu grupo de usuários para autenticar seus usuários. O cliente da aplicação também pode autenticar apenas usuários locais no grupo de usuários. Ao adicionar um IdP ao cliente da aplicação, é possível gerar links de autorização para o IdP e exibi-los na página de login do login gerenciado. Você pode atribuir vários IdPs, mas deve atribuir pelo menos um. Para obter mais informações sobre o uso externo IdPs, consulte[Login do grupo de usuários com provedores de identidades de terceiros](cognito-user-pools-identity-federation.md).

**Escopos do OpenID Connect**  
Selecione um ou mais dos seguintes escopos `OAuth` para especificar os privilégios de acesso que podem ser solicitados para tokens de acesso.  
+ O escopo `openid` declara que você deseja recuperar um token de ID e um ID exclusivo do usuário. Ele também solicita todos ou alguns atributos do usuário, dependendo dos escopos adicionais na solicitação. O Amazon Cognito não retorna um token de ID, a menos que você solicite o escopo `openid`. O escopo `openid` autoriza declarações de token de ID estrutural, como expiração e ID da chave, e determina os atributos do usuário que você recebe em uma resposta do [endpoint userinfo](userinfo-endpoint.md).
  + Quando `openid` é o único escopo que você solicita, o Amazon Cognito preenche o token de ID com todos os atributos do usuário que o cliente atual da aplicação pode ler. A resposta `userInfo` a um token de acesso somente com esse escopo exibe todos os atributos do usuário.
  + Quando você solicita `openid` com outros escopos, como `phone`, `email` ou `profile`, o token de ID e `userInfo` exibem o ID exclusivo do usuário e os atributos definidos pelos escopos adicionais.
+ O escopo `phone` concede acesso às requisições `phone_number` e `phone_number_verified`. Esse escopo só pode ser solicitado com o escopo `openid`.
+ O escopo `email` concede acesso às requisições `email` e `email_verified`. Esse escopo só pode ser solicitado com o escopo `openid`.
+ O `aws.cognito.signin.user.admin` escopo concede acesso às [operações de API dos grupos de usuários do Amazon Cognito](authentication-flows-public-server-side.md#user-pools-API-operations) que exigem tokens de acesso, como e. [UpdateUserAttributes[VerifyUserAttribute](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html)
+ O escopo `profile` concede acesso a todos os atributos do usuário que são legíveis pelo cliente. Esse escopo só pode ser solicitado com o escopo `openid`.
Para obter mais informações sobre os escopos, consulte a lista de [escopos OIDC padrão](http://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims).

**OAuth tipos de subsídios**  
Uma OAuth concessão é um método de autenticação que recupera tokens do grupo de usuários. O Amazon Cognito agora é compatível com seguintes tipos de concessões. Para integrar essas OAuth concessões ao seu aplicativo, você deve adicionar um domínio ao seu grupo de usuários.  
**Concessão de código de autorização**  
A concessão do código de autorização gera um código que a aplicação pode trocar por tokens do grupo de usuários com o [Endpoint de token](token-endpoint.md). Quando você troca um código de autorização, a aplicação recebe tokens de ID, acesso e atualização. Esse OAuth fluxo, como a concessão implícita, acontece nos navegadores dos seus usuários. Uma concessão de código de autorização é a concessão mais segura que o Amazon Cognito oferece, porque os tokens não são visíveis nas sessões dos usuários. Em vez disso, a aplicação gera a solicitação que retorna tokens e pode armazená-los em cache no armazenamento protegido. Para obter mais informações, consulte *Authorization code* no [IETF RFC 6749 \$11.3.1](https://datatracker.ietf.org/doc/html/rfc6749#section-1.3.1).
Como melhor prática de segurança em aplicativos de clientes públicos, ative somente o OAuth fluxo de concessão do código de autorização e implemente o Proof Key for Code Exchange (PKCE) para restringir a troca de tokens. Com o PKCE, um cliente só pode trocar um código de autorização depois de fornecer ao endpoint do token o mesmo segredo apresentado na solicitação de autenticação original. Para obter mais informações sobre PKCE, consulte [IETF RFC 7636](https://datatracker.ietf.org/doc/html/rfc7636).
**Concessão implícita**  
A concessão implícita fornece um token de acesso e ID, mas não um token de atualização, à sessão do navegador do usuário diretamente do [Autorizar endpoint](authorization-endpoint.md). Uma concessão implícita remove a exigência de uma solicitação separada para o endpoint do token, mas não é compatível com o PKCE e não retorna tokens de atualização. Essa concessão acomoda cenários de teste e arquitetura de aplicação que não podem concluir concessões de código de autorização. Para obter mais informações, consulte *Implicit grant* em [IETF RFC 6749 \$11.3.2](https://datatracker.ietf.org/doc/html/rfc6749#section-1.3.2). É possível ativar tanto a concessão de código de autorização como a concessão implícita em um cliente da aplicação e usar cada concessão conforme necessário.
**Concessão de credenciais do cliente**  
A concessão de credenciais do cliente é para comunicações machine-to-machine (M2M). O código de autorização e as concessões implícitas emitem tokens para usuários humanos autenticados. As credenciais do cliente concedem autorização baseada em escopo de um sistema não interativo para uma API. A aplicação pode solicitar credenciais do cliente diretamente do endpoint do token e receber um token de acesso. Para obter mais informações, consulte *Client Credentials* em [IETF RFC 6749 \$11.3.4](https://datatracker.ietf.org/doc/html/rfc6749#section-1.3.4). Você só pode ativar concessões de credenciais de cliente em clientes de aplicações que tenham um segredo de cliente e que não permitam códigos de autorização ou concessões implícitas.
Como você não invoca o fluxo de credenciais do cliente como usuário, essa concessão só pode adicionar escopos *personalizados* a tokens de acesso. Um escopo personalizado é aquele definido para o seu próprio servidor de recursos. Os escopos-padrão, como `openid` e `profile`, não se aplicam a usuários não humanos.  
Como os tokens de ID são uma validação dos atributos do usuário, eles não são relevantes para a comunicação M2M, e as concessões de credenciais de um cliente não os emitem. Consulte [Escopos, M2M e servidores de recursos](cognito-user-pools-define-resource-servers.md).
As concessões de credenciais do cliente adicionam custos à sua AWS fatura. Para mais informações, consulte [Preço do Amazon Cognito](https://aws.amazon.com/cognito/pricing).

## Criar um cliente de aplicação
<a name="cognito-user-pools-app-idp-settings-console-create"></a>

------
#### [ Console de gerenciamento da AWS ]

**Para criar um cliente de aplicação (console)**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou crie um grupo de usuários. Ambas as opções solicitam que você configure um cliente da aplicação com configurações específicas da aplicação.

1. Selecione um **Tipo de aplicação** que reflita a arquitetura da aplicação.

1. **Dê um nome para sua aplicação** com um identificador amigável.

1. Insira um **URL de retorno**.

1. Escolha **Criar cliente da aplicação**. Você pode alterar as opções avançadas após criar o cliente da aplicação.

1. O Amazon Cognito retorna você aos detalhes do cliente da aplicação. Para acessar o código de exemplo da sua aplicação, selecione uma plataforma na guia **Guia de configuração rápida**.

------
#### [ AWS CLI ]

```
aws cognito-idp create-user-pool-client --user-pool-id MyUserPoolID --client-name myApp
```

**nota**  
Use o formato JSON para retorno de chamada e saída para evitar que URLs a CLI os trate como arquivos de parâmetros remotos:  

```
--callback-urls "["https://example.com"]"
--logout-urls "["https://example.com"]"
```

Consulte a referência do AWS CLI comando para obter mais informações: [create-user-pool-client](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/create-user-pool-client.html)

------
#### [ Amazon Cognito user pools API ]

Gere uma solicitação de [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html)API. Você deve especificar um valor para todos os parâmetros que não deseja definir como padrão.

------

## Atualização de um cliente de aplicativo de grupo de usuários (AWS CLI e AWS API)
<a name="cognito-user-pools-app-idp-settings-cli-api-update-user-pool-client"></a>

No AWS CLI, digite o seguinte comando:

```
aws cognito-idp update-user-pool-client --user-pool-id  "MyUserPoolID" --client-id "MyAppClientID" --allowed-o-auth-flows-user-pool-client --allowed-o-auth-flows "code" "implicit" --allowed-o-auth-scopes "openid" --callback-urls "["https://example.com"]" --supported-identity-providers "["MySAMLIdP", "LoginWithAmazon"]"
```

Se o comando for bem-sucedido, ele AWS CLI retornará uma confirmação:

```
{
    "UserPoolClient": {
        "ClientId": "MyClientID",
        "SupportedIdentityProviders": [
            "LoginWithAmazon",
            "MySAMLIdP"
        ],
        "CallbackURLs": [
            "https://example.com"
        ],
        "AllowedOAuthScopes": [
            "openid"
        ],
        "ClientName": "Example",
        "AllowedOAuthFlows": [
            "implicit",
            "code"
        ],
        "RefreshTokenValidity": 30,
        "AuthSessionValidity": 3,
        "CreationDate": 1524628110.29,
        "AllowedOAuthFlowsUserPoolClient": true,
        "UserPoolId": "MyUserPoolID",
        "LastModifiedDate": 1530055177.553
    }
}
```

Consulte a referência do AWS CLI comando para obter mais informações: [update-user-pool-client](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/update-user-pool-client.html).

AWS API: [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)

## Obter informações sobre um cliente de aplicativo de grupo de usuários (AWS CLI e AWS API)
<a name="cognito-user-pools-app-idp-settings-cli-api-describe-user-pool-client"></a>

```
aws cognito-idp describe-user-pool-client --user-pool-id MyUserPoolID --client-id MyClientID
```

Consulte a referência do AWS CLI comando para obter mais informações: [describe-user-pool-client](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/describe-user-pool-client.html).

AWS API: [DescribeUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPoolClient.html)

## Listar todas as informações do cliente do aplicativo em um grupo de usuários (AWS CLI e AWS API)
<a name="cognito-user-pools-app-idp-settings-cli-api-list-user-pool-clients"></a>

```
aws cognito-idp list-user-pool-clients --user-pool-id "MyUserPoolID" --max-results 3
```

Consulte a referência do AWS CLI comando para obter mais informações: [list-user-pool-clients](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/list-user-pool-clients.html).

AWS API: [ListUserPoolClients](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListUserPoolClients.html)

## Excluindo um cliente de aplicativo de grupo de usuários (AWS CLI e AWS API)
<a name="cognito-user-pools-app-idp-settings-cli-api-delete-user-pool-client"></a>

```
aws cognito-idp delete-user-pool-client --user-pool-id "MyUserPoolID" --client-id "MyAppClientID"
```

Consulte a referência do AWS CLI comando para obter mais informações: [delete-user-pool-client](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/delete-user-pool-client.html)

AWS API: [DeleteUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUserPoolClient.html)

# Trabalhar com dispositivos de usuários no grupo de usuários
<a name="amazon-cognito-user-pools-device-tracking"></a>

Ao fazer login de usuários de grupos de usuários locais com a API de grupos de usuários do Amazon Cognito, é possível associar os logs de atividades dos usuários, provenientes da [proteção contra ameaças](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-settings-threat-protection.html), a cada um dos dispositivos e, opcionalmente, permitir que os usuários ignorem a autenticação multifator (MFA) se estiverem em um dispositivo confiável. O Amazon Cognito inclui uma chave de dispositivo na resposta a qualquer login que ainda não inclua informações do dispositivo. A chave do dispositivo está no formato `Region_UUID`. Com uma chave de dispositivo, uma biblioteca de senha remota segura (SRP) e um grupo de usuários que permita a autenticação do dispositivo, é possível solicitar que os usuários da aplicação confiem no dispositivo atual e não solicitem mais um código de MFA no login.

**Topics**
+ [

## Como configurar dispositivos memorizados
](#amazon-cognito-user-pools-setting-up-remembered-devices)
+ [

## Obter uma chave do dispositivo
](#user-pools-remembered-devices-getting-a-device-key)
+ [

## Fazer login com um dispositivo
](#user-pools-remembered-devices-signing-in-with-a-device)
+ [

## Visualizar, atualizar e esquecer dispositivos
](#user-pools-remembered-devices-viewing-updating-forgetting)

## Como configurar dispositivos memorizados
<a name="amazon-cognito-user-pools-setting-up-remembered-devices"></a>

Com os grupos de usuários do Amazon Cognito, é possível associar cada um dos dispositivos dos usuários a um identificador de dispositivo exclusivo: uma chave de dispositivo. Ao apresentar a chave do dispositivo e realizar a autenticação do dispositivo no login, é possível configurar a aplicação com um fluxo de autenticação de *dispositivo confiável*. Nesse fluxo, a aplicação pode apresentar aos usuários a opção de fazer login sem MFA em outro momento, conforme os requisitos de segurança da aplicação ou as preferências dos usuários. Ao final desse período, a aplicação deve alterar o status do dispositivo para *não memorizado* e o usuário deve fazer login com MFA até confirmar que deseja memorizar um dispositivo. Por exemplo, a aplicação pode solicitar que seus usuários confiem em um dispositivo por 30, 60 ou 90 dias. Você pode armazenar essa data em um atributo personalizado e, nessa data, alterar o status de memorização do dispositivo. Em seguida, é necessário solicitar novamente ao usuário que envie um código de MFA e configure o dispositivo para que seja novamente memorizado após a autenticação bem-sucedida.

1. Os dispositivos memorizados podem substituir a MFA somente em grupos de usuários com a MFA ativa.

Quando o usuário faz login com um dispositivo memorizado, é necessário realizar uma autenticação adicional do dispositivo durante o fluxo de autenticação. Para obter mais informações, consulte [Fazer login com um dispositivo](#user-pools-remembered-devices-signing-in-with-a-device).

Configure o grupo de usuários para memorizar os dispositivos no menu **Fazer login** do grupo de usuários, em **Monitoramento de dispositivos**. Ao configurar a funcionalidade de dispositivos memorizados por meio do console do Amazon Cognito, você terá três opções: **Always** (Sempre), **User Opt-In** (Usuário opta por) e **No** (Não).

**Não memorizar**  
O grupo de usuários não solicita que os usuários se lembrem dos dispositivos ao fazerem login.

**Sempre memorizar**  
Quando a aplicação confirma o dispositivo de um usuário, o grupo de usuários sempre se lembra do dispositivo e não retorna desafios de MFA em futuros logins bem-sucedidos do dispositivo.

**Opção do usuário**  
Quando a aplicação confirma o dispositivo de um usuário, o grupo de usuários não suprime automaticamente os desafios de MFA. É necessário solicitar que o usuário escolha se deseja memorizar o dispositivo.

Ao selecionar **Sempre memorizar** ou **Opção do usuário**, o Amazon Cognito gera uma chave e um segredo de identificação do dispositivo toda vez que um usuário faz login em um dispositivo não identificado. A chave do dispositivo é o identificador inicial que a aplicação envia ao grupo de usuários quando o usuário realiza a autenticação do dispositivo.

Com cada dispositivo de usuário confirmado, seja lembrado automaticamente ou por opção, é possível usar a chave e o segredo do identificador do dispositivo para autenticar um dispositivo em cada login de usuário. 

Você também pode definir as configurações de dispositivos memorizados para seu grupo de usuários em uma solicitação de [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)ou API. Para obter mais informações, consulte a [DeviceConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#CognitoUserPools-UpdateUserPool-request-DeviceConfiguration)propriedade.

A API de grupos de usuários do Amazon Cognito tem operações adicionais para dispositivos memorizados.

1. [ListDevices](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListDevices.html)e [AdminListDevices](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListDevices.html)retorne uma lista das chaves do dispositivo e seus metadados para um usuário.

1. [GetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetDevice.html)e [AdminGetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminGetDevice.html)retorne a chave do dispositivo e os metadados de um único dispositivo.

1. [UpdateDeviceStatus](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateDeviceStatus.html)e [AdminUpdateDeviceStatus](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateDeviceStatus.html)defina o dispositivo do usuário como lembrado ou não lembrado.

1. [ForgetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgetDevice.html)e [AdminForgetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminForgetDevice.html)remova o dispositivo confirmado de um usuário do perfil dele.

As operações de API com nomes que começam com `Admin` são para uso em aplicações do lado do servidor e devem ser autorizadas com credenciais do IAM. Para obter mais informações, consulte [Noções básicas sobre a autenticação de API, OIDC e páginas de login gerenciado](authentication-flows-public-server-side.md#user-pools-API-operations).

## Obter uma chave do dispositivo
<a name="user-pools-remembered-devices-getting-a-device-key"></a>

Sempre que o usuário faz login com a API de grupos de usuários e não inclui uma chave do dispositivo nos parâmetros de autenticação como `DEVICE_KEY`, o Amazon Cognito gera uma nova chave do dispositivo na resposta. Na aplicação pública do lado do cliente, coloque a chave do dispositivo no armazenamento da aplicação para que você possa incluí-la em futuras solicitações. Na aplicação confidencial do lado do servidor, defina um cookie do navegador ou outro token do lado do cliente com a chave do dispositivo do usuário.

Para que o usuário possa fazer login com o dispositivo confiável, a aplicação deve confirmar a chave do dispositivo e fornecer informações adicionais. Gere uma [ConfirmDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmDevice.html)solicitação para o Amazon Cognito que confirme o dispositivo do seu usuário com a chave do dispositivo, um nome amigável, um verificador de senha e um sal. Se você configurou o grupo de usuários para autenticação opcional de dispositivos, o Amazon Cognito responderá à solicitação `ConfirmDevice` pedindo que o usuário escolha se deseja memorizar o dispositivo atual. Responda com a seleção do seu usuário em uma [UpdateDeviceStatus](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateDeviceStatus.html)solicitação. 

Ao confirmar o dispositivo do usuário, mas não o configurar como memorizado, o Amazon Cognito armazena a associação, mas prossegue com o login que não é do dispositivo quando você fornece a respectiva chave. Os dispositivos podem gerar logs úteis para a segurança e solução de problemas do usuário. Um dispositivo confirmado, mas não memorizado, não utiliza o recurso de login, e sim o de logs de monitoramento de segurança. Ao ativar a proteção contra ameaças para o cliente da aplicação e codificar uma impressão digital do dispositivo na solicitação, o Amazon Cognito associa os eventos do usuário ao dispositivo confirmado. 

**Como obter uma nova chave do dispositivo**

1. Inicie a sessão de login do seu usuário com uma solicitação de [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API.

1. Responda a todos os desafios de autenticação [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)até receber tokens web JSON (JWTs) que marquem a sessão de login do usuário como concluída.

1. Na aplicação, registre os valores que o Amazon Cognito gera em `NewDeviceMetadata` na resposta `RespondToAuthChallenge` ou `InitiateAuth`: `DeviceGroupKey` e `DeviceKey`.

1. Gere um novo segredo de SRP para o usuário: um salt e um verificador de senha. Essa função está disponível em SDKs que fornecem bibliotecas SRP.

1. Solicite ao usuário um nome de dispositivo ou gere um com base nas características do dispositivo do usuário.

1. Forneça o token de acesso, a chave do dispositivo, o nome do dispositivo e o segredo SRP do usuário em uma solicitação de [ConfirmDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmDevice.html)API. Se o grupo de usuários estiver definido como **Sempre memorizar** os dispositivos, o registro do usuário estará concluído.

1. Se o Amazon Cognito respondeu a `ConfirmDevice` com `"UserConfirmationNecessary": true`, solicite que o usuário escolha se gostaria de memorizar o dispositivo. Se eles afirmarem que querem se lembrar do dispositivo, gere uma solicitação de [UpdateDeviceStatus](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateDeviceStatus.html)API com o token de acesso, a chave do dispositivo e. `"DeviceRememberedStatus": "remembered"`

1. Se você instruiu o Amazon Cognito a memorizar o dispositivo, na próxima vez em que ele fizer login, em vez de um desafio de MFA, será apresentado um desafio `DEVICE_SRP_AUTH`.

## Fazer login com um dispositivo
<a name="user-pools-remembered-devices-signing-in-with-a-device"></a>

Depois que o dispositivo de um usuário é configurado para ser memorizado, o Amazon Cognito não exige mais que ele envie um código de MFA ao fazer login com a mesma chave do dispositivo. A autenticação do dispositivo substitui apenas o desafio da autenticação MFA por um desafio de autenticação do dispositivo. Não é possível conectar os usuários somente com a autenticação do dispositivo. O usuário deve primeiro concluir a autenticação com a senha ou um desafio personalizado. Veja a seguir o processo de autenticação de um usuário em um dispositivo memorizado.

Para realizar a autenticação do dispositivo em um fluxo que usa [gatilhos Lambda do desafio de autenticação personalizada](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-challenge.html), passe um `DEVICE_KEY` parâmetro na sua solicitação de API. [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) Depois que o usuário passar por todos os desafios e o desafio `CUSTOM_CHALLENGE` gerar um valor `issueTokens` de `true`, o Amazon Cognito vai gerar um desafio `DEVICE_SRP_AUTH` final.

**Como fazer login com um dispositivo**

1. Recupere a chave do dispositivo do usuário do armazenamento do cliente.

1. Inicie a sessão de login do seu usuário com uma solicitação de [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)API. Selecione um `AuthFlow` de `USER_SRP_AUTH`, `REFRESH_TOKEN_AUTH`, `USER_PASSWORD_AUTH` ou `CUSTOM_AUTH`. Em `AuthParameters`, adicione a chave do dispositivo do usuário ao parâmetro `DEVICE_KEY` e inclua os outros parâmetros necessários para o fluxo de login selecionado.

   1. Também é possível transmitir `DEVICE_KEY` nos parâmetros de uma resposta `PASSWORD_VERIFIER` a um desafio de autenticação.

1. Forneça as respostas do desafio até receber um desafio `DEVICE_SRP_AUTH` na resposta.

1. Em uma solicitação de [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)API, envie um `ChallengeName` de `DEVICE_SRP_AUTH` e parâmetros para `USERNAME``DEVICE_KEY`, `SRP_A` e.

1. O Amazon Cognito responde com um desafio `DEVICE_PASSWORD_VERIFIER`. Essa resposta ao desafio inclui valores para `SECRET_BLOCK` e `SRP_B`.

1. Com a biblioteca de SRP, gere e envie os parâmetros `PASSWORD_CLAIM_SIGNATURE`, `PASSWORD_CLAIM_SECRET_BLOCK`, `TIMESTAMP`, `USERNAME` e `DEVICE_KEY`. Envie-os em uma solicitação `RespondToAuthChallenge` adicional.

1. Complete desafios adicionais até receber os do usuário JWTs.

O pseudocódigo a seguir demonstra como calcular valores para a resposta `DEVICE_PASSWORD_VERIFIER` ao desafio. Para autenticação SRP com um dispositivo, gere um *novo* segredo de SRP para o usuário: uma nova senha de alta entropia `DeviceSecret`, um salt e o verificador de senha associado. Esses valores são distintos da senha, do salt e do verificador usados para a autenticação SRP do usuário. Eles são usados somente para autenticação do dispositivo e são armazenados somente no dispositivo. As funções para gerar os segredos SRP para os dispositivos dos usuários estão disponíveis em [bibliotecas SRP](https://github.com/secure-remote-password/implementations) que estão disponíveis em várias. SDKs

```
PASSWORD_CLAIM_SECRET_BLOCK = SECRET_BLOCK
TIMESTAMP = "Tue May 7 00:09:40 UTC 2025"
k = SHA256(N || g) as a non-negative integer in big-endian
u = SHA256(SRP_A || SRP_B) as a non-negative integer in big-endian
x = SHA256(salt || SHA256(DeviceGroupKey || DeviceKey || ":" || DeviceSecret)) as a non-negative integer in big-endian
S_USER = (SRP_B - k * g^x)^(a + u * x) % N
K_USER = HKDF_HMAC_SHA256(salt=u, ikm=S_USER, info="Caldera Derived Key", length=16 bytes)
PASSWORD_CLAIM_SIGNATURE = Base64(HMAC_SHA256(key=K_USER, message=(DeviceGroupKey || DeviceKey || PASSWORD_CLAIM_SECRET_BLOCK || TIMESTAMP)))
```

## Visualizar, atualizar e esquecer dispositivos
<a name="user-pools-remembered-devices-viewing-updating-forgetting"></a>

Com a API do Amazon Cognito, é possível implementar os recursos a seguir na aplicação.

1. Exibir informações sobre o dispositivo atual do usuário.

1. Exiba uma lista de todos os dispositivos do usuário.

1. Esqueça um dispositivo.

1. Atualize o estado memorizado do dispositivo.

Os tokens de acesso que autorizam as solicitações de API nas descrições a seguir devem incluir o escopo `aws.cognito.signin.user.admin`. O Amazon Cognito adiciona uma reivindicação desse escopo a todos os tokens de acesso que você gera com a API de grupos de usuários do Amazon Cognito. IdPs Os terceiros devem gerenciar separadamente os dispositivos e o MFA para seus usuários que se autenticam no Amazon Cognito. No login gerenciado, é possível solicitar o escopo `aws.cognito.signin.user.admin`, mas o login gerenciado adiciona automaticamente as informações do dispositivo a logs de usuário de segurança avançados e não oferece a possibilidade de memorizar os dispositivos.

**Exibir informações sobre um dispositivo**  
É possível consultar informações sobre o dispositivo de um usuário para determinar se ele ainda está em uso. Por exemplo, convém desativar dispositivos memorizados depois que eles não tiverem feito login por 90 dias. 
+ Para exibir as informações do dispositivo do usuário em um aplicativo cliente público, envie a chave de acesso e a chave do dispositivo do usuário em uma solicitação de [GetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetDevice.html)API.
+ Para exibir as informações do dispositivo do usuário em um aplicativo cliente confidencial, assine uma solicitação de [AdminGetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminGetDevice.html)API com AWS credenciais e envie o nome de usuário, a chave do dispositivo e o grupo de usuários do usuário.

**Exibir uma lista de todos os dispositivos do usuário.**  
É possível exibir uma lista de todos os dispositivos do usuário e as respectivas propriedades. Por exemplo, convém verificar se o dispositivo atual corresponde a um dispositivo memorizado. 
+ Em um aplicativo de cliente público, envie o token de acesso do usuário em uma solicitação de [ListDevices](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ListDevices.html)API.
+ Em um aplicativo de cliente confidencial, assine uma solicitação de [AdminListDevices](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListDevices.html)API com AWS credenciais e envie o nome de usuário e o grupo de usuários do seu usuário.

**Esquecer um dispositivo**  
É possível excluir a chave do dispositivo de um usuário. Convém fazer isso ao constatar que o usuário não usa mais um dispositivo ou ao detectar atividades incomuns e solicitar que um usuário conclua a MFA novamente. Para registrar novamente o dispositivo em um momento posterior, é necessário gerar e armazenar uma nova chave do dispositivo.
+ Em um aplicativo de cliente público, envie a chave do dispositivo e o token de acesso do usuário na solicitação [ForgetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgetDevice.html)da API.
+ Em um aplicativo cliente confidencial, envie a chave do dispositivo e o token de acesso do usuário na solicitação [AdminForgetDevice](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminForgetDevice.html)da API.

# Como usar o Amazon Pinpoint para análise de grupos de usuários
<a name="cognito-user-pools-pinpoint-integration"></a>

**nota**  
**Aviso de fim do suporte:** em 30 de outubro de 2026, AWS encerrará o suporte para o Amazon Pinpoint. Após 30 de outubro de 2026, você não poderá mais acessar o console do Amazon Pinpoint nem seus recursos (endpoints, segmentos, campanhas, jornadas e analytics). Para obter mais informações, consulte [Fim do suporte do Amazon Pinpoint](https://docs.aws.amazon.com/console/pinpoint/migration-guide). **Observação:** APIs relacionados a SMS, voz, push móvel, OTP e validação de número de telefone não são afetados por essa alteração e são compatíveis com o AWS End User Messaging.

Os grupos de usuários do Amazon Cognito são integrados ao Amazon Pinpoint para fornecer análise para grupos de usuários do Amazon Cognito e para enriquecer os dados do usuário para campanhas do Amazon Pinpoint. O Amazon Pinpoint fornece análise e campanhas direcionadas para promover o envolvimento dos usuários em aplicações móveis usando notificações por push. Com o suporte analítico do Amazon Pinpoint nos grupos de usuários do Amazon Cognito, você pode rastrear inscrições, logins, autenticações falhadas, usuários ativos diários () e usuários ativos mensais DAUs () no console do Amazon Pinpoint. MAUs Você pode analisar os dados em diferentes faixas de datas ou de atributos, como plataforma de dispositivos, local do dispositivo e versão do aplicativo.

Também é possível configurar atributos personalizados para a aplicação. Eles poderão ser usados para segmentar seus usuários no Amazon Pinpoint e enviar notificações por push direcionadas a eles. Se você selecionar **Compartilhar dados de atributos do usuário com o Amazon Pinpoint** na configuração **Analytics** do seu cliente da aplicação no menu **Clientes da aplicação** no console do Amazon Cognito, o Amazon Pinpoint criará endpoints adicionais para os endereços de e-mail e números de telefone do usuário.

Ao ativar a análise do Amazon Pinpoint no grupo de usuários com o console do Amazon Cognito, você também cria um [perfil vinculado ao serviço](https://docs.aws.amazon.com/IAM/latest/UserGuide/using-service-linked-roles.html#service-linked-role-permissions) que o Amazon Cognito assume quando faz uma solicitação de API ao Amazon Pinpoint para o grupo de usuários. O diretor do IAM que adiciona sua configuração de análise deve ter [CreateServiceLinkedRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateServiceLinkedRole.html)permissões. A função vinculada ao serviço é. [AWSServiceRoleForAmazonCognitoIdp](https://console.aws.amazon.com/iamv2/home?region=us-east-1#/roles/details/AWSServiceRoleForAmazonCognitoIdp) Para obter mais informações, consulte [Como usar funções vinculadas a serviço para o Amazon Cognito](using-service-linked-roles.md).

Ao aplicar uma `AnalyticsConfiguration` ao cliente da aplicação na API do Amazon Cognito, você pode atribuir um perfil do IAM personalizado ao Amazon Pinpoint e um ID externo para assumir o perfil. O perfil deve confiar na entidade principal do serviço `cognito-idp` e, se a política de confiança do perfil exigir um ID externo, ela deverá corresponder à sua `AnalyticsConfiguration`. Você deve conceder as permissões `cognito-idp:Describe*` do perfil e as permissões a seguir a seu **projeto do Amazon Pinpoint**.
+ `mobiletargeting:UpdateEndpoint`
+ `mobiletargeting:PutEvents`

## Disponibilidade de regiões do Amazon Cognito e Amazon Pinpoint
<a name="cognito-user-pools-find-region-mappings"></a>

A tabela a seguir mostra os Região da AWS mapeamentos entre o Amazon Cognito e o Amazon Pinpoint que atendem a uma das seguintes condições.
+ É possível usar somente um projeto do Amazon Pinpoint na região Leste dos EUA (Norte da Virgínia) (us-east-1).
+ É possível usar um projeto do Amazon Pinpoint na mesma região *ou* na região Leste dos EUA (Norte da Virgínia) (us-east-1).

Por padrão, o Amazon Cognito só pode enviar análises para um projeto do Amazon Pinpoint na mesma Região da AWS. As exceções a essa regra são as regiões na tabela a seguir e as regiões em que o Amazon Pinpoint não está disponível.

O Amazon Pinpoint já está disponível nas regiões a seguir. Os grupos de usuários do Amazon Cognito nessas regiões não são compatíveis com a análise.
+ Europa (Milão)
+ Oriente Médio (Bahrein)
+ Ásia-Pacífico (Osaka)
+ Israel (Tel Aviv)
+ África (Cidade do Cabo)
+ Ásia-Pacífico (Jacarta)
+ Ásia-Pacífico (Malásia)

A tabela mostra a relação entre a região em que você criou o grupo de usuários do Amazon Cognito e a região correspondente no Amazon Pinpoint. É necessário configurar o projeto do Amazon Pinpoint em uma região disponível para integrá-lo ao Amazon Cognito.


| Região do grupo de usuários do Amazon Cognito | Região do projeto do Amazon Pinpoint | 
| --- | --- | 
|  ap-northeast-1  |  us-east-1  | 
|  ap-northeast-2  |  us-east-1  | 
|  ap-south-1  |  us-east-1, ap-south-1  | 
|  ap-southeast-1  |  us-east-1  | 
|  ap-southeast-2  |  us-east-1, ap-southeast-2  | 
|  ca-central-1  |  us-east-1  | 
|  eu-central-1  |  us-east-1, eu-central-1  | 
|  eu-west-1  |  us-east-1, eu-west-1  | 
|  eu-west-2  |  us-east-1  | 
|  us-east-1  |  us-east-1  | 
|  us-east-2  |  us-east-1  | 
|  us-west-2  |  us-east-1, us-west-2  | 

**Exemplos de mapeamento de região**
+ Se criar um grupo de usuários na região ap-northeast-1, você poderá criar o projeto do Amazon Pinpoint na região us-east-1.
+ Se criar um grupo de usuários na região ap-south-1, você poderá criar o projeto do Amazon Pinpoint na região us-east-1 ou ap-south-1.

**nota**  
Para todos Regiões da AWS , exceto aqueles na tabela anterior, o Amazon Cognito só pode usar um projeto Amazon Pinpoint na mesma região do seu grupo de usuários. Se o Amazon Pinpoint não estiver disponível na região onde você criou o grupo de usuários e não estiver listado na tabela, o Amazon Cognito não será compatível com as análises do Amazon Pinpoint nessa região. Para obter informações detalhadas sobre Região da AWS , consulte [Amazon Pinpoint endpoints and quotas](https://docs.aws.amazon.com/general/latest/gr/pinpoint.html) (Endpoints e cotas do Amazon Pinpoint).

### Como especificar configurações de análise do Amazon Pinpoint (Console de gerenciamento da AWS)
<a name="cognito-user-pools-pinpoint-integration-console"></a>

É possível configurar o grupo de usuários do Amazon Cognito para enviar dados de análise ao Amazon Pinpoint. O Amazon Cognito só envia dados de análise ao Amazon Pinpoint para usuários locais. Depois de configurar o grupo de usuários para se associar a um projeto do Amazon Pinpoint, você deverá incluir `AnalyticsMetadata` em suas solicitações de API. Para obter mais informações, consulte [Integrar sua aplicação ao Amazon Pinpoint](#cognito-user-pools-pinpoint-integration-client).

**Para especificar as configurações de análise**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Podem ser solicitadas suas credenciais do AWS .

1. Selecione **User Pools** (Grupos de usuários) e escolha um grupo de usuários existente na lista.

1. Clique no menu **Clientes da aplicação** e selecione o cliente da aplicação que deseja atualizar.

1. Na guia **Análise**, em **Análises do Pinpoint**, selecione **Habilitar**.

1. Escolha uma **Pinpoint Region** (Região do Pinpoint).

1. Escolha um **Amazon Pinpoint project** (Projeto do Amazon Pinpoint) ou selecione **Create Amazon Pinpoint project** (Criar projeto do Amazon Pinpoint.
**nota**  
O ID de projeto do Amazon Pinpoint é uma string de 32 caracteres exclusiva para seu projeto do Amazon Pinpoint. Ele está listado no console do Amazon Pinpoint.  
É possível mapear várias aplicações do Amazon Cognito em um único projeto do Amazon Pinpoint. No entanto, cada aplicação do Amazon Cognito pode ser mapeada somente em um projeto do Amazon Pinpoint.  
No Amazon Pinpoint, cada projeto deve ser uma única aplicação. Por exemplo, se um desenvolvedor de jogos tiver dois jogos, cada jogo deverá ser um projeto do Amazon Pinpoint separado, mesmo se os dois jogos usarem o mesmo grupo de usuários do Amazon Cognito. Para obter mais informações sobre projetos do Amazon Pinpoint, consulte [Criar um projeto no Amazon Pinpoint.](https://docs.aws.amazon.com/push-notifications/latest/userguide/mobile-push.html#mobile-push-create-project) 

1. Em **User data sharing** (Compartilhamento de dados de usuários), selecione **Share user data with Amazon Pinpoint** (Compartilhar dados de usuários com o Amazon Pinpoint) se quiser que o Amazon Cognito envie endereços de e-mail e números de telefone ao Amazon Pinpoint e crie endpoints adicionais para os usuários. Depois que os usuários verificarem o endereço de e-mail e número de telefone, o Amazon Cognito só compartilhará esses dados com o Amazon Pinpoint se eles estiverem disponíveis para a conta do usuário.
**nota**  
Um *endpoint* identifica exclusivamente um dispositivo de usuário ao qual você pode enviar notificações por push com o Amazon Pinpoint. Para mais informações sobre endpoints, consulte [Adicionar endpoints](https://docs.aws.amazon.com/pinpoint/latest/developerguide/endpoints.html) no *Guia do desenvolvedor do Amazon Pinpoint*.

1. Escolha **Salvar alterações**.

### Especificação das configurações de análise AWS CLI ( AWS e API) do Amazon Pinpoint
<a name="cognito-user-pools-pinpoint-integration-cli-api"></a>

Use os comandos a seguir para especificar as configurações de análise do Amazon Pinpoint para seu grupo de usuários.

**Para especificar as configurações de análise para o aplicativo cliente existente de seu grupo de usuários no momento da criação do aplicativo**
+ AWS CLI: `aws cognito-idp create-user-pool-client`
+ AWS API: [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html)

**Para atualizar as configurações de análise para o aplicativo cliente existente de seu grupo de usuários no momento da criação do aplicativo**
+ AWS CLI: `aws cognito-idp update-user-pool-client`
+ AWS API: [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html)

**nota**  
O Amazon Cognito oferece suporte a integrações na região quando você usa o `ApplicationArn`

## Integrar sua aplicação ao Amazon Pinpoint
<a name="cognito-user-pools-pinpoint-integration-client"></a>

Você pode publicar metadados de análise no Amazon Pinpoint para *usuários nativos* do Amazon Cognito na *API de grupos de usuários*.

**Usuários locais**  
Usuários que se cadastraram em uma conta ou foram criados em seu grupo de usuários, em vez daqueles que fazem login por meio de um provedor de identidades (IdP) de terceiros.

**API de grupos de usuários**  
As operações que você pode integrar a um AWS SDK usando um aplicativo com uma interface de usuário (UI) personalizada. Você não pode transmitir metadados de analytics para usuários federados ou locais que fazem login por meio do login gerenciado. Consulte [Referência de API do Amazon Cognito](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html) para ter uma lista de operações da API de grupos de usuários.

Depois de configurar seu grupo de usuários para publicar em uma campanha, o Amazon Cognito transmite metadados ao Amazon Pinpoint para as operações de API a seguir.
+ `AdminInitiateAuth`
+ `AdminRespondToAuthChallenge`
+ `ConfirmForgotPassword`
+ `ConfirmSignUp`
+ `ForgotPassword`
+ `InitiateAuth`
+ `ResendConfirmationCode`
+ `RespondToAuthChallenge`
+ `SignUp`

Para transmitir metadados sobre a sessão do usuário à sua campanha do Amazon Pinpoint, inclua um valor `AnalyticsEndpointId` no parâmetro `AnalyticsMetadata` da solicitação de API. JavaScript Por exemplo, consulte [Por que minhas análises do grupo de usuários do Amazon Cognito não estão aparecendo no meu painel do Amazon Pinpoint?](https://aws.amazon.com/premiumsupport/knowledge-center/pinpoint-cognito-user-pool-analytics/) no *Centro de AWS Conhecimento*.

# Configurações de e-mail para grupos de usuários do Amazon Cognito
<a name="user-pool-email"></a>

Determinados eventos na aplicação podem fazer com que o Amazon Cognito envie e-mails para os usuários. Por exemplo, se você configurar o grupo de usuários para exigir verificação de e-mail, o Amazon Cognito enviará um e-mail quando um usuário se cadastrar em uma nova conta na aplicação ou redefinir a senha. Dependendo da ação que inicia o e-mail, o e-mail contém um código de verificação ou uma senha temporária.

Para processar a entrega de e-mails, você pode usar uma das seguintes opções:
+ [A configuração de e-mail padrão](#user-pool-email-default) integrada ao serviço do Amazon Cognito.
+ [Sua configuração do Amazon Simple Email Service (Amazon SES)](#user-pool-email-developer).

Você pode alterar a opção de entrega depois de criar o grupo de usuários.

O Amazon Cognito envia mensagens de e-mail aos usuários com um código que eles podem inserir ou um link de URL que pode ser selecionado. A tabela a seguir mostra os eventos que podem gerar uma mensagem de e-mail.

**Opções de mensagem**


| Atividade | Operação de API | Opções de entrega | Opções de formato | Personalizável | [Modelo de mensagem](cognito-user-pool-settings-message-customizations.md) | 
| --- |--- |--- |--- |--- |--- |
| Esqueci a senha | [ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html), [AdminResetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminResetUserPassword.html) | E-mail, SMS | código | Sim | Mensagem de verificação | 
| Convite | [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html) | E-mail, SMS | código | Sim | Mensagem de convite | 
| Autorregistro | [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html), [ResendConfirmationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html) | E-mail, SMS | código, link | Sim | Mensagem de verificação | 
| Verificação de endereço de e-mail ou número de telefone | [UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html), [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html), [GetUserAttributeVerificationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html) | E-mail, SMS | código | Sim | Mensagem de verificação | 
| Autenticação multifatorial (MFA) | [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html), [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) | E-mail¹, SMS, aplicativo autenticador | código | Sim² | Mensagem de MFA | 
| Autenticação de senha única (OTP) | [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html), [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) | E-mail¹, SMS | código | Sim | Mensagem de MFA ³ | 

¹ Requer o [plano de recursos](cognito-sign-in-feature-plans.md) Essentials ou superior e a [configuração de e-mail do Amazon SES](#user-pool-email-developer). 

² Para mensagens SMS e e-mail.

³ Você só pode personalizar o modelo de mensagem de MFA quando a MFA é obrigatória ou opcional no grupo de usuários. Quando a MFA está inativa, o Amazon Cognito envia senhas de uso único com o modelo padrão.

O Amazon SES cobra por mensagens de e-mail. Para obter mais informações, consulte [Definição de preço do Amazon SES](https://aws.amazon.com/ses/pricing/).

Para saber mais sobre a MFA do e-mail, consulte [MFA de mensagens SMS e e-mail](user-pool-settings-mfa-sms-email-message.md).

O Amazon Cognito pode impedir a entrega de mensagens adicionais de e-mail ou SMS para um único destino em um curto período. Se você acredita que seu grupo de usuários foi afetado, configure e analise os [logs de erros de entrega de mensagens](exporting-quotas-and-usage.md#exporting-quotas-and-usage-messages) e entre em contato com a equipe da sua conta.

## Configuração de e-mail padrão
<a name="user-pool-email-default"></a>

O Amazon Cognito pode usar sua configuração de e-mail padrão para processar entregas de e-mail para você. Quando você usa a opção padrão, o Amazon Cognito limita o número de e-mails que ele envia por dia para o grupo de usuários. Para obter mais informações sobre limites do serviço, consulte [Cotas no Amazon Cognito](quotas.md). Para ambientes de produção típicos, o limite de e-mails padrão fica abaixo do volume de entrega necessário. Para habilitar um volume de entrega maior, você deve usar a configuração de e-mail do Amazon SES.

Ao usar a configuração padrão, você usa os recursos do Amazon SES que são gerenciados pela AWS para enviar mensagens de e-mail. O Amazon SES adiciona endereços de e-mail que retornam uma [devolução definitiva](https://docs.aws.amazon.com/ses/latest/dg/send-email-concepts-deliverability.html#send-email-concepts-deliverability-bounce) para uma [lista de supressão em nível de conta](https://docs.aws.amazon.com/ses/latest/dg/sending-email-suppression-list.html) ou uma [lista de supressão global](https://docs.aws.amazon.com/ses/latest/dg/send-email-concepts-deliverability.html#send-email-concepts-deliverability-suppression-list). Se um endereço de e-mail impossível de entregar puder ser entregue posteriormente, você não poderá controlar sua remoção da lista de supressão enquanto o grupo de usuários estiver configurado para usar a configuração padrão. Um endereço de e-mail pode permanecer na lista de supressão AWS gerenciada indefinidamente. Para gerenciar endereços de e-mail que não podem ser entregues, use sua configuração de e-mail do Amazon SES com uma lista de supressão em nível de conta, conforme descrito na próxima seção.

Ao usar a configuração de e-mail padrão, você pode utilizar um dos seguintes endereços de e-mail como endereço DE:
+ O endereço de e-mail padrão, *no-reply@verificationemail.com*.
+ Um endereço de e-mail personalizado. Para poder usar seu próprio endereço de e-mail, verifique-o no Amazon SES e conceda permissão ao Amazon Cognito para usá-lo.

## Configuração de e-mail do Amazon SES
<a name="user-pool-email-developer"></a>

O aplicativo pode exigir um volume de entrega maior do que está disponível com a opção padrão. Para aumentar o volume de entrega possível, use os recursos do Amazon SES com o grupo de usuários para enviar e-mail aos usuários. Você também pode [monitorar a atividade de envio de e-mail](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/monitor-sending-activity.html) ao enviar mensagens usando sua própria configuração do Amazon SES.

Antes de poder usar a configuração do Amazon SES, você deve verificar um ou mais endereços de e-mail ou de domínio no Amazon SES. Use um endereço de e-mail ou de domínio verificado como o endereço de e-mail FROM (DE) que você atribui ao grupo de usuários. Quando o Amazon Cognito envia um e-mail a um usuário, ele chama o Amazon SES para você e usa seu endereço de e-mail.

Quando você usa a configuração do Amazon SES, as seguintes condições se aplicam:
+ Os limites de entrega de e-mail para seu grupo de usuários são os mesmos que se aplicam ao endereço de e-mail verificado do Amazon SES em sua Conta da AWS.
+ Você pode gerenciar suas mensagens para endereços de e-mail que não podem ser entregues com uma lista de supressão em nível de conta no Amazon SES que substitui a [lista de supressão global](https://docs.aws.amazon.com/ses/latest/dg/send-email-concepts-deliverability.html#send-email-concepts-deliverability-suppression-list). Ao usar uma lista de supressão em nível de conta, as devoluções de mensagens de e-mail afetam a reputação de sua conta como remetente. Para obter mais informações, consulte [Como usar a lista de supressão do Amazon SES por conta](https://docs.aws.amazon.com/ses/latest/dg/sending-email-suppression-list.html) no Guia do desenvolvedor do Amazon Simple Email Service.

### Regiões de configuração de e-mail do Amazon SES
<a name="user-pool-email-developer-region-mapping"></a>

O Região da AWS local onde você cria um grupo de usuários terá um dos três requisitos para a configuração de mensagens de e-mail com o Amazon SES. Você pode enviar mensagens de e-mail do Amazon SES na mesma região do seu grupo de usuários, em várias regiões, incluindo a mesma região, ou em uma ou mais regiões remotas. Para obter o melhor desempenho, envie mensagens de e-mail com uma identidade verificada do Amazon SES na mesma região do seu grupo de usuários quando você tiver a opção.Categorias de requisitos regionais para identidades verificadas pelo Amazon SES

**Somente na região**  
Seus grupos de usuários podem enviar mensagens de e-mail com identidades verificadas da Região da AWS mesma forma que o grupo de usuários. Na configuração de e-mail padrão sem um endereço de e-mail personalizado `FROM`, o Amazon Cognito usa uma identidade `no-reply@verificationemail.com` verificada na mesma região.

**Retrocompatibilidade**  
Seus grupos de usuários podem enviar mensagens de e-mail com identidades verificadas na mesma região Região da AWS ou em uma das seguintes regiões alternativas:   
+ Leste dos EUA (N. da Virgínia)
+ Oeste dos EUA (Oregon)
+ Europa (Irlanda)
Esse recurso mantém a continuidade para recursos de grupo de usuários criados para atender aos requisitos do Amazon Cognito quando o serviço foi iniciado. Os grupos de usuários desse período só podiam enviar mensagens de e-mail com identidades verificadas em um número limitado de Regiões da AWS. Na configuração de e-mail padrão sem um endereço de e-mail personalizado `FROM`, o Amazon Cognito usa uma identidade `no-reply@verificationemail.com` verificada na mesma região.

**Região alternativa**  
Seus grupos de usuários podem enviar mensagens de e-mail com identidades verificadas em uma alternativa Região da AWS que esteja fora da região do grupo de usuários. Essa configuração ocorre quando o Amazon SES não está disponível em uma região onde o Amazon Cognito está disponível.  
A política de autorização de envio do Amazon SES para sua identidade verificada na região alternativa deve confiar no responsável pelo serviço Amazon Cognito da região de origem. Para obter mais informações, consulte [Para conceder permissões para usar a configuração de e-mail padrão](#user-pool-email-permissions-default).  
Em algumas dessas regiões, o Amazon Cognito divide as mensagens de e-mail entre duas regiões alternativas para a configuração de e-mail padrão do `COGNITO_DEFAULT`. Nesses casos, para usar um endereço de e-mail personalizado do `FROM`, a política de autorização de envio do Amazon SES para sua identidade verificada em cada região alternativa deve confiar no responsável pelo serviço Amazon Cognito da região de origem. Para obter mais informações, consulte [Para conceder permissões para usar a configuração de e-mail padrão](#user-pool-email-permissions-default). Com a configuração de e-mail do Amazon SES de `DEVELOPER` nessas regiões, você deve usar uma identidade verificada na *primeira* região listada e configurá-la para confiar na entidade principal do serviço do Amazon Cognito na região do grupo de usuários. Por exemplo, em um grupo de usuários no Oriente Médio (EAU), configure uma identidade verificada na Europa (Frankfurt) para confiar em `cognito-idp.me-central-1.amazonaws.com`. Na configuração de e-mail padrão sem um endereço de e-mail personalizado `FROM`, o Amazon Cognito usa uma identidade `no-reply@verificationemail.com` verificada em cada região.

**nota**  
Sob a seguinte combinação de condições, você deve especificar o `SourceArn` parâmetro [EmailConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-EmailConfiguration)com um curinga no elemento Região, no formato`arn:${Partition}:ses:*:${Account}:identity/${IdentityName}`. Isso permite que seu grupo de usuários envie mensagens de e-mail com identidades verificadas idênticas às suas Conta da AWS em ambos. Regiões da AWS  
O seu EmailSendingAccount é`COGNITO_DEFAULT`.
Você quer usar um endereço personalizado `FROM`.
Seu grupo de usuários envia e-mails em uma **Região alternativa**.
Seu grupo de usuários tem uma *segunda*[1](#cognito-email-alternate-regions-note) **região alternativa** especificada na tabela de **Regiões permitidas do Amazon SES** a seguir.

Se você criar um grupo de usuários programaticamente — com um SDK AWS , a API ou CLI do Amazon Cognito, o AWS CDK, ou — seu grupo de usuários enviará mensagens de e-mail com a AWS CloudFormation identidade do Amazon SES `SourceArn` que o parâmetro de especifica para seu grupo de usuários. [EmailConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-EmailConfiguration) A identidade do Amazon SES deve ocupar um espaço suportado Região da AWS. Se sua `EmailSendingAccount` for `COGNITO_DEFAULT` e você não especificar um parâmetro `SourceArn`, o Amazon Cognito enviará mensagens de e-mail de `no-reply@verificationemail.com` usando recursos na região onde você criou o grupo de usuários.

A tabela a seguir mostra Regiões da AWS onde você pode usar as identidades do Amazon SES com o Amazon Cognito.


| Região do grupo de usuários | Opção de região | Regiões permitidas do Amazon SES | 
| --- | --- | --- | 
|  Leste dos EUA (Norte da Virgínia)  |  Retrocompatibilidade  |  Leste dos EUA (Norte da Virgínia), Oeste dos EUA (Oregon), Europa (Irlanda)  | 
|  Leste dos EUA (Ohio)  |  Retrocompatibilidade  |  Leste dos EUA (Ohio), Leste dos EUA (Norte da Virgínia), Oeste dos EUA (Oregon), Europa (Irlanda)  | 
|  Oeste dos EUA (N. da Califórnia)  |  Somente na região  |  Oeste dos EUA (N. da Califórnia)  | 
|  Oeste dos EUA (Oregon)  |  Retrocompatibilidade  |  Leste dos EUA (Norte da Virgínia), Oeste dos EUA (Oregon), Europa (Irlanda)  | 
|  Canadá (Central)  |  Retrocompatibilidade  |  Canadá (Central), Leste dos EUA (Norte da Virgínia), Oeste dos EUA (Oregon), Europa (Irlanda)  | 
|  Oeste do Canadá (Calgary)  |  Região alternativa  |  Canadá (Central), Oeste dos EUA (N. da Califórnia)[1](#cognito-email-alternate-regions-note)  | 
|  México (Centro)  |  Região alternativa  |  Leste dos EUA (Norte da Virgínia), Oeste dos EUA (Oregon)[1](#cognito-email-alternate-regions-note)  | 
|  Ásia-Pacífico (Tóquio)  |  Retrocompatibilidade  |  Ásia-Pacífico (Tóquio), Leste dos EUA (Norte da Virgínia), Oeste dos EUA (Oregon), Europa (Irlanda)  | 
|  Ásia-Pacífico (Hong Kong)  |  Região alternativa  |  Ásia-Pacífico (Singapura), Ásia-Pacífico (Tóquio)[1](#cognito-email-alternate-regions-note)  | 
|  Ásia-Pacífico (Seul)  |  Retrocompatibilidade  |  Ásia-Pacífico (Seul), Leste dos EUA (Norte da Virgínia), Oeste dos EUA (Oregon), Europa (Irlanda)  | 
| Ásia-Pacífico (Malásia) | Região alternativa | Ásia-Pacífico (Sydney), Ásia-Pacífico (Singapura)[1](#cognito-email-alternate-regions-note) | 
| Ásia-Pacífico (Tailândia) | Região alternativa | Ásia-Pacífico (Singapura), Ásia-Pacífico (Mumbai)[1](#cognito-email-alternate-regions-note) | 
|  Ásia-Pacífico (Mumbai)  |  Retrocompatibilidade  |  Ásia-Pacífico (Mumbai), Leste dos EUA (Norte da Virgínia), Oeste dos EUA (Oregon), Europa (Irlanda)  | 
|  Ásia-Pacífico (Hyderabad)  |  Região alternativa  |  Ásia-Pacífico (Mumbai), Ásia-Pacífico (Singapura)[1](#cognito-email-alternate-regions-note)  | 
|  Ásia-Pacífico (Singapura)  |  Retrocompatibilidade  |  Ásia-Pacífico (Singapura), Leste dos EUA (Norte da Virgínia), Oeste dos EUA (Oregon), Europa (Irlanda)  | 
|  Ásia-Pacífico (Sydney)  |  Retrocompatibilidade  |  Ásia-Pacífico (Sydney), Leste dos EUA (Norte da Virgínia), Oeste dos EUA (Oregon), Europa (Irlanda)  | 
|  Ásia-Pacífico (Osaka)  |  Somente na região  |  Ásia-Pacífico (Osaka)  | 
|  Ásia-Pacífico (Jacarta)  |  Somente na região  |  Ásia-Pacífico (Jacarta)  | 
|  Ásia-Pacífico (Melbourne)  |  Região alternativa  |  Ásia-Pacífico (Sydney), Ásia-Pacífico (Singapura)[1](#cognito-email-alternate-regions-note)  | 
|  Europa (Irlanda)  |  Retrocompatibilidade  |  Leste dos EUA (Norte da Virgínia), Oeste dos EUA (Oregon), Europa (Irlanda)  | 
|  Europa (Londres)  |  Retrocompatibilidade  |  Europa (Londres), Leste dos EUA (Norte da Virgínia), Oeste dos EUA (Oregon), Europa (Irlanda)  | 
|  Europa (Paris)  |  Somente na região  |  Europa (Paris)  | 
|  Europa (Frankfurt)  |  Retrocompatibilidade  |  Europa (Frankfurt), Leste dos EUA (Norte da Virgínia), Oeste dos EUA (Oregon), Europa (Irlanda)  | 
|  Europa (Zurique)  |  Região alternativa  |  Europa (Frankfurt), Europa (Londres)[1](#cognito-email-alternate-regions-note)  | 
|  Europa (Estocolmo)  |  Somente na região  |  Europa (Estocolmo)  | 
| Europa (Milão) |  Somente na região  | Europa (Milão) | 
| Europa (Espanha) |  Região alternativa  | Europa (Paris), Europa (Estocolmo)[1](#cognito-email-alternate-regions-note) | 
|  Oriente Médio (Bahrein)  |  Somente na região  |  Oriente Médio (Bahrein)  | 
|  Oriente Médio (Emirados Árabes Unidos)  |  Região alternativa  |  Europa (Frankfurt), Europa (Londres)[1](#cognito-email-alternate-regions-note)  | 
|  América do Sul (São Paulo)  |  Somente na região  |  América do Sul (São Paulo)  | 
|  Israel (Tel Aviv)  |  Somente na região  |  Israel (Tel Aviv)  | 
|  África (Cidade do Cabo)  |  Somente na região  |  África (Cidade do Cabo)  | 

1 Usado em grupos de usuários com a configuração de e-mail padrão. O Amazon Cognito distribui mensagens de e-mail entre identidades verificadas com o mesmo endereço de e-mail em cada região. Para usar um endereço personalizado `FROM`, configure `EmailConfiguration` com um parâmetro `SourceArn` no formato `arn:${Partition}:ses:*:${Account}:identity/${IdentityName}`.

## Configurar e-mail para seu grupo de usuários
<a name="user-pool-email-configure"></a>

Execute as etapas a seguir para definir as configurações de e-mail do grupo de usuários. Dependendo das configurações que você usa, pode precisar de permissões do IAM no Amazon SES, o AWS Identity and Access Management (IAM) e o Amazon Cognito.

**nota**  
Não é possível compartilhar os recursos criados nessas etapas entre Contas da AWS. Por exemplo, não é possível configurar um grupo de usuários em uma conta e depois usá-la com um endereço de e-mail do Amazon SES em outra conta. Se você usar o Amazon Cognito em várias contas, repita essas etapas em cada uma.

### Etapa 1: verificar seu endereço de e-mail ou domínio com o Amazon SES
<a name="user-pool-email-configure-verify-ses"></a>

Antes de configurar o grupo de usuários, você deve verificar um ou mais domínios ou endereços de e-mail com o Amazon SES se quiser executar uma das seguintes ações:
+ Usar seu endereço de e-mail como endereço FROM
+ Usar a configuração do Amazon SES para processar a entrega de e-mails

Ao verificar seu endereço de e-mail ou domínio, você confirma que é o proprietário, o que ajuda a impedir o uso não autorizado.

Para obter mais informações sobre a verificação de um endereço de e-mail com o Amazon SES, consulte [Verificar um endereço de e-mail](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-email-addresses-procedure.html) no *Guia do desenvolvedor do Amazon Simple Email Service*. Para mais informações sobre como verificar um domínio com o Amazon SES, consulte [Verificar domínios](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/verify-domains.html).

### Etapa 2: retirar sua conta da sandbox do Amazon SES
<a name="user-pool-email-configure-sandbox"></a>

Ignore esta etapa se estiver usando a configuração de e-mail padrão do Amazon Cognito.

Quando você usa o Amazon SES pela primeira vez em qualquer um Região da AWS, ele coloca você Conta da AWS na sandbox do Amazon SES dessa região. O Amazon SES usa a sandbox para evitar fraudes e uso abusivo. Se você usar a configuração do Amazon SES para processar a entrega de e-mails, deverá remover sua Conta da AWS da sandbox para que o Amazon Cognito possa enviar e-mails aos usuários.

Na sandbox, o Amazon SES impõe restrições sobre a quantidade de e-mails que você pode enviar e onde pode enviá-los. Você pode enviar e-mails somente para endereços e domínios que você já tenha verificado no Amazon SES ou pode enviá-los para endereços do simulador de caixa postal do Amazon SES. Enquanto você Conta da AWS permanecer no sandbox, não use sua configuração do Amazon SES para aplicativos que estão em produção. Nessa situação, o Amazon Cognito não consegue enviar mensagens para os endereços de e-mail de seus usuários.

Para removê-lo Conta da AWS da sandbox, consulte Como [sair da sandbox do Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/request-production-access.html) no Guia do *desenvolvedor do Amazon Simple Email Service*.

### Etapa 3: conceder permissões de e-mail ao Amazon Cognito
<a name="user-pool-email-permissions"></a>

Talvez você precise conceder permissões específicas ao Amazon Cognito para que ele possa enviar e-mails aos usuários. As permissões que você concede e o processo usado para concedê-las dependem de você estar usando a configuração de e-mail padrão ou a configuração do Amazon SES.

#### Para conceder permissões para usar a configuração de e-mail padrão
<a name="user-pool-email-permissions-default"></a>

Conclua esta etapa somente se você configurar seu grupo de usuários para **Enviar e-mail com o Cognito** ou definir `EmailSendingAccount` como `COGNITO_DEFAULT`.

Com a configuração de e-mail padrão, seu grupo de usuários pode enviar mensagens de e-mail com qualquer um dos seguintes endereços:
+ O endereço padrão `no-reply@verificationemail.com`.
+ Um endereço FROM personalizado de seus endereços ou domínios de e-mail verificados no Amazon SES.

Se você usar um endereço personalizado, o Amazon Cognito precisará de permissões adicionais para enviar e-mail aos usuários a partir desse endereço. Essas permissões são concedidas por uma [política de autorização de envio](https://docs.aws.amazon.com/ses/latest/dg/sending-authorization.html) para o endereço ou domínio no Amazon SES. Se você usar o console do Amazon Cognito para adicionar um endereço personalizado ao grupo de usuários, a política será anexada automaticamente ao endereço de e-mail verificado do Amazon SES. No entanto, se você configurar seu grupo de usuários fora do console, como usar a API AWS CLI ou a API do Amazon Cognito, deverá anexar a política usando o [console do Amazon SES](https://console.aws.amazon.com/ses/) ou a [PutIdentityPolicy](https://docs.aws.amazon.com/ses/latest/APIReference/API_PutIdentityPolicy.html)API.

**nota**  
Você só pode configurar um endereço FROM (Remetente) em um domínio verificado usando a AWS CLI ou a API do Amazon Cognito.

Uma política de autorização de envio permite ou nega o acesso com base nos recursos da conta que estão usando o Amazon Cognito para invocar o Amazon SES. Para obter mais informações sobre políticas baseadas em recursos, consulte o [Manual do usuário do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_resource-based). Você também pode encontrar exemplos de políticas baseadas em recursos no [Guia do desenvolvedor do Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policy-examples.html).

**Example Política de autorização de envio**  
O exemplo de política de autorização de envio a seguir concede ao Amazon Cognito uma capacidade limitada de usar uma identidade verificada do Amazon SES. O Amazon Cognito só pode enviar mensagens de e-mail quando o fizer em nome do grupo de usuários na condição `aws:SourceArn` e da conta na condição `aws:SourceAccount`.  
Sua política de autorização de envio na região do grupo de usuários ou na região alternativa deve permitir que a entidade principal do serviço Amazon Cognito envie mensagens de e-mail. Para obter mais informações, consulte a [tabela de regiões](#ses-regions-table). Se sua **Região do grupo de usuários** corresponder a pelo menos um valor na **Região do Amazon SES**, configure sua política de autorização de envio com a entidade principal de serviço global no exemplo a seguir.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "stmnt1234567891234",
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "email.cognito-idp.amazonaws.com"
                ]
            },
            "Action": [
                "SES:SendEmail",
                "SES:SendRawEmail"
            ],
            "Resource": "arn:aws:ses:us-east-1:111122223333:identity/support@example.com",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:cognito-idp:us-east-1:111122223333:userpool/us-east-1_EXAMPLE"
                }
            }
        }
    ]
}
```
O Amazon SES não está disponível em todas as opções em que o Amazon Cognito Regiões da AWS está disponível. O Oriente Médio (EAU) é um exemplo e só pode enviar e-mails com identidades verificadas na Europa (Frankfurt) (`eu-central-1`). Em grupos de usuários com a configuração de e-mail padrão, o Amazon Cognito também envia mensagens de e-mail com uma identidade verificada em cada uma das duas regiões. No caso do Oriente Médio (EAU), a região adicional é Europa (Londres). Você deve atualizar a política de autorização de envio nas duas regiões.  
Sua política de autorização de envio em cada região alternativa deve permitir que a entidade principal do serviço Amazon Cognito na opção de região do grupo de usuários envie mensagens de e-mail. Para obter mais informações, consulte a [tabela de regiões](#ses-regions-table). Se sua região estiver marcada como **Região alternativa**, configure suas políticas de autorização de envio com a entidade principal de serviço regional, como no exemplo a seguir. Substitua o identificador de região *me-central-1* de exemplo pelo ID de região necessário, conforme necessário.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "cognito-idp.me-central-1.amazonaws.com"
                ]
            },
            "Action": [
                "SES:SendEmail",
                "SES:SendRawEmail"
            ],
            "Resource": "arn:aws:ses:us-east-1:111122223333:identity/support@example.com",
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "111122223333"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:cognito-idp:us-east-1:111122223333:userpool/us-east-1_EXAMPLE"
                }
            }
        }
    ]
}
```
Para mais informações sobre sintaxe de políticas, consulte [Políticas de autorização de envio do Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policies.html) no *Guia do desenvolvedor do Amazon Simple Email Service*.  
Para mais exemplos, consulte [Exemplos de política de autorização de envio do Amazon SES](https://docs.aws.amazon.com/ses/latest/DeveloperGuide/sending-authorization-policy-examples.html) no *Guia do desenvolvedor do Amazon Simple Email Service*.

#### Para conceder permissões para usar sua configuração do Amazon SES
<a name="user-pool-email-permissions-developer"></a>

Se você configurar o grupo de usuários para usar a configuração do Amazon SES, o Amazon Cognito precisará de permissões adicionais para chamar o Amazon SES em seu nome quando ele enviar e-mails aos usuários. Essa autorização é concedida com o serviço do IAM.

Quando você configura o grupo de usuários com essa opção, o Amazon Cognito cria uma *função vinculada ao serviço*, que é um tipo de função do IAM, em sua Conta da AWS. Essa função contém as permissões para que o Amazon Cognito acesse o Amazon SES e envie mensagens de e-mail com seu endereço.

O Amazon Cognito cria sua função vinculada ao serviço com as AWS credenciais da sessão do usuário que define a configuração. As permissões do IAM dessa sessão devem incluir a ação `iam:CreateServiceLinkedRole`. Para obter mais informações sobre permissões no IAM, consulte [Gerenciamento de acesso para AWS recursos](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) no *Guia do usuário do IAM*.

Para obter mais informações sobre a função vinculada ao serviço criada pelo Amazon Cognito, consulte [Como usar funções vinculadas a serviço para o Amazon Cognito](using-service-linked-roles.md).

### Etapa 4: configurar o grupo de usuários
<a name="user-pool-email-configure-user-pool"></a>

Execute as etapas a seguir para configurar o grupo de usuários com qualquer um dos seguintes:
+ Um endereço FROM personalizado exibido como remetente de e-mail
+ Um endereço REPLY-TO personalizado que recebe as mensagens que os usuários enviam ao endereço FROM
+ Sua configuração do Amazon SES

**nota**  
Se a identidade verificada for um endereço de e-mail, ele será definido pelo Amazon Cognito como o endereço de e-mail FROM e REPLY-TO por padrão. Porém, se a identidade verificada for um domínio, você deverá fornecer um valor para o endereço de e-mail FROM.

Ignore este procedimento se quiser usar a configuração de e-mail e endereço padrão do Amazon Cognito.

**Configurar o grupo de usuários para usar um endereço de e-mail personalizado**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente da lista.

1. Clique no menu **Métodos de autenticação**, localize **Configuração de e-mail** e selecione **Editar**.

1. Na página **Edit email configuration** (Editar configuração do e-mail), selecione **Send email from Amazon SES** (Enviar e-mail do Amazon SES) ou **Send email with Amazon Cognito** (Enviar e-mail com o Amazon Cognito). Só é possível personalizar a **SES Region** (Região SES), o **Configuration Set** (Conjunto de configurações) e o **FROM sender name** (Nome do remetente) quando você seleciona **Send email from Amazon SES** (Enviar e-mail do Amazon SES).

1. Para usar um endereço FROM (remetente) personalizado, conclua as seguintes etapas:

   1. Em **SES Region** (Região do SES), escolha a região que contém seu endereço de e-mail verificado.

   1. Em **FROM email address** (Endereço do e-mail remetente), escolha seu endereço de e-mail. Use um endereço de e-mail verificado com o Amazon SES.

   1. (Opcional) Em **Configuration set** (Conjunto de configurações), escolha um conjunto de configurações a ser usado pelo Amazon SES. Criar e salvar essa alteração cria uma função vinculada ao serviço.

   1. (Opcional) Em **FROM sender address** (Endereço do remetente), insira um endereço de e-mail. Você pode fornecer apenas um endereço de e-mail ou um endereço de e-mail e um nome amigável no formato `Jane Doe <janedoe@example.com>`.

   1. (Opcional) Em **REPLY-TO email address** (Endereço de e-mail para resposta), insira o endereço de e-mail no qual você deseja receber mensagens enviadas pelos usuários para o seu endereço FROM (Remetente).

1. Escolha **Salvar alterações**.

**Related Topics**
+ [Personalizar mensagens de verificação de e-mail](cognito-user-pool-settings-message-customizations.md#cognito-user-pool-settings-email-verification-message-customization)
+ [Como personalizar mensagens de convite a usuários](cognito-user-pool-settings-message-customizations.md#cognito-user-pool-settings-user-invitation-message-customization)

# Configurações de mensagens SMS para grupos de usuários do Amazon Cognito
<a name="user-pool-sms-settings"></a>

Alguns eventos do Amazon Cognito para seu grupo de usuários podem fazer com que o Amazon Cognito envie mensagens de texto SMS para eles. Por exemplo, se você configurar o grupo de usuários para exigir verificação de telefone, o Amazon Cognito enviará um e-mail quando um usuário se cadastrar em uma nova conta na aplicação ou redefinir a senha. Dependendo da ação que inicia a mensagem de texto SMS, a mensagem contém um código de verificação, uma senha temporária ou uma mensagem de boas-vindas.

O Amazon Cognito usa o Amazon Simple Notification Service (Amazon SNS) para a entrega de mensagens de texto SMS. O Amazon SNS, por sua vez, entrega mensagens SMS para. AWS End User Messaging SMS Se você estiver enviando uma mensagem de texto pelo Amazon Cognito pela primeira vez, isso o AWS End User Messaging SMS colocará em um ambiente de [sandbox](https://docs.aws.amazon.com/sms-voice/latest/userguide/sandbox.html). No ambiente de área restrita para testes, você pode testar suas aplicações para mensagens de texto SMS. No sandbox, só é possível simular o envio de mensagens.

**nota**  
Em novembro de 2024, AWS substituiu as mensagens SMS do Amazon SNS por. AWS End User Messaging SMS Atualmente, o console do Amazon Cognito faz referência aos recursos do Amazon SNS. Grupos de usuários iniciam mensagens SMS com a operação Amazon [SNS](https://docs.aws.amazon.com/sns/latest/api/API_Publish.html) Publish, que é uma passagem para. AWS End User Messaging SMS Portanto, você ainda deve configurar permissões para `sns:Publish`, não para `sms-voice:SendTextMessage`.

AWS End User Messaging SMS cobranças por mensagens de texto SMS. Para obter mais informações, consulte [Preços do AWS End User Messaging SMS](https://aws.amazon.com/end-user-messaging/pricing/).

O Amazon Cognito envia mensagens SMS aos usuários com um código a ser inserido. A tabela a seguir mostra os eventos que podem gerar uma mensagem SMS.

**Opções de mensagem**


| Atividade | Operação de API | Opções de entrega | Opções de formato | Personalizável | [Modelo de mensagem](cognito-user-pool-settings-message-customizations.md) | 
| --- |--- |--- |--- |--- |--- |
| Esqueci a senha | [ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html), [AdminResetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminResetUserPassword.html) | E-mail, SMS | código | Sim | Mensagem de verificação | 
| Convite | [AdminCreateUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUser.html) | E-mail, SMS | código | Sim | Mensagem de convite | 
| Autorregistro | [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html), [ResendConfirmationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html) | E-mail, SMS | código, link | Sim | Mensagem de verificação | 
| Verificação de endereço de e-mail ou número de telefone | [UpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserAttributes.html), [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html), [GetUserAttributeVerificationCode](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUserAttributeVerificationCode.html) | E-mail, SMS | código | Sim | Mensagem de verificação | 
| Autenticação multifatorial (MFA) | [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html), [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) | E-mail¹, SMS, aplicativo autenticador | código | Sim² | Mensagem de MFA | 
| Autenticação de senha única (OTP) | [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html), [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) | E-mail¹, SMS | código | Sim | Mensagem de MFA ³ | 

¹ Requer o [plano de recursos](cognito-sign-in-feature-plans.md) Essentials ou superior e a [configuração de e-mail do Amazon SES](user-pool-email.md#user-pool-email-developer). 

² Para mensagens SMS e e-mail.

³ Você só pode personalizar o modelo de mensagem de MFA quando a MFA é obrigatória ou opcional no grupo de usuários. Quando a MFA está inativa, o Amazon Cognito envia senhas de uso único com o modelo padrão.

AWS End User Messaging SMS cobranças por mensagens SMS. Para obter mais informações, consulte [Preços do AWS End User Messaging SMS](https://aws.amazon.com/end-user-messaging/pricing/).

Para saber mais sobre a MFA, consulte [MFA de mensagens SMS e e-mail](user-pool-settings-mfa-sms-email-message.md).

O Amazon Cognito pode impedir a entrega de mensagens adicionais de e-mail ou SMS para um único destino em um curto período. Se você acredita que seu grupo de usuários foi afetado, configure e analise os [logs de erros de entrega de mensagens](exporting-quotas-and-usage.md#exporting-quotas-and-usage-messages) e entre em contato com a equipe da sua conta.

## Práticas recomendadas
<a name="user-pool-sms-settings-best-practices"></a>

Devido ao volume de tráfego de SMS não solicitado ao redor do mundo, alguns governos impõem barreiras entre os remetentes e os destinatários das mensagens SMS. Ao usar mensagens SMS para MFA e atualizações de usuários, você deve tomar medidas adicionais para garantir que suas mensagens sejam entregues. Você também deve monitorar SMS-message-related as regulamentações nos países em que seus usuários possam morar e manter sua configuração de mensagens SMS atualizada. Para obter mais informações, consulte [Recursos e limitações de SMS e MMS por país](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-sms-support-by-country.html) no *Guia do usuário do AWS End User Messaging SMS *.

O uso de mensagens SMS para autenticar e verificar usuários não é uma prática recomendada de segurança. Os números de telefone podem mudar de proprietário e podem não representar de maneira confiável o fator de MFA *algo que você tem* para seus usuários. Em vez disso, implemente a MFA TOTP na aplicação ou com um IdP de terceiros. Você também pode criar outros fatores de autenticação personalizados com [Acionadores do Lambda de desafio personalizado de autenticação](user-pool-lambda-challenge.md).

Consulte os links a seguir para obter informações sobre como proteger sua arquitetura de entrega de mensagens SMS.
+ [Reduce risks of user sign-up fraud and SMS pumping with Amazon Cognito user pools](https://aws.amazon.com/blogs/security/reduce-risks-of-user-sign-up-fraud-and-sms-pumping-with-amazon-cognito-user-pools/)
+ [Defesa contra o bombeamento de SMS: novos AWS recursos para ajudar a combater o tráfego inflado artificialmente](https://aws.amazon.com/blogs/messaging-and-targeting/defending-against-sms-pumping-new-aws-features-to-help-combat-artificially-inflated-traffic/)

## Configurar mensagens SMS pela primeira vez nos grupos de usuários do Amazon Cognito
<a name="user-pool-sms-settings-first-time"></a>

O Amazon Cognito usa o Amazon SNS, e AWS End User Messaging SMS indiretamente, para enviar mensagens SMS de seus grupos de usuários. Você também pode usar um [Acionador do Lambda de remetente personalizado de SMS](user-pool-lambda-custom-sms-sender.md) para utilizar seus próprios recursos para enviar mensagens SMS. A primeira vez que você configura mensagens de texto SMS em uma determinada região Região da AWS, AWS End User Messaging SMS coloca você Conta da AWS na sandbox de SMS dessa região. AWS End User Messaging SMS usa o sandbox para evitar fraudes e abusos e para atender aos requisitos de conformidade. [Quando você Conta da AWS está na sandbox, AWS End User Messaging SMS impõe algumas restrições.](https://docs.aws.amazon.com/sms-voice/latest/userguide/sandbox.html#sandbox-sms) Por exemplo, você pode enviar mensagens de texto para até dez números de destino verificados se tiver uma identidade de origem, ou pode simular o envio de mensagens sem uma identidade de origem. Enquanto você Conta da AWS permanecer na sandbox, não envie mensagens SMS em produção. Quando você está na área restrita para testes, o Amazon Cognito não pode enviar mensagens para os números de telefone dos seus usuários.

**Topics**
+ [

### Prepare uma função do IAM que o Amazon Cognito possa usar para enviar mensagens SMS com AWS End User Messaging SMS
](#sms-create-a-role)
+ [

### Escolha o Região da AWS para mensagens SMS
](#sms-choose-a-region)
+ [

### Obter uma identidade de origem para enviar mensagens SMS a números de telefone dos EUA
](#user-pool-sms-settings-first-time-origination)
+ [

### Confirmar se você está na sandbox SMS
](#user-pool-sms-settings-first-time-confirm-sandbox)
+ [

### Migrar sua conta do sandbox
](#user-pool-sms-settings-first-time-out-sandbox)
+ [

### Use números de simulador ou números de telefone verificados com AWS End User Messaging SMS
](#user-pool-sms-settings-first-time-verify-numbers)
+ [

### Concluir a configuração do grupo de usuários no Amazon Cognito
](#user-pool-sms-settings-first-time-finish-user-pool)

### Prepare uma função do IAM que o Amazon Cognito possa usar para enviar mensagens SMS com AWS End User Messaging SMS
<a name="sms-create-a-role"></a>

Quando você envia uma mensagem SMS de seu grupo de usuários, o Amazon Cognito assume um perfil do IAM em sua conta. O Amazon Cognito usa a permissão `sns:Publish` atribuída a esse perfil para enviar mensagens SMS aos usuários. No console do Amazon Cognito, você pode definir uma **Seleção de perfil do IAM** no menu **Métodos de autenticação** do grupo de usuários, em **SMS**, ou fazer essa seleção no assistente de criação do grupo de usuários.

A política de confiança do perfil do IAM de exemplo a seguir concede aos grupos de usuários do Amazon Cognito uma capacidade limitada para assumir uma função. O Amazon Cognito só pode assumir a função quando atende às seguintes condições:
+ A operação assume-role está em nome do grupo de usuários na condição `aws:SourceArn`.
+ A operação assume-role está em nome de um grupo de usuários na Conta da AWS definida pela condição `aws:SourceAccount`.
+ A operação assume-role inclui o ID externo na condição `sts:externalId`.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "cognito-idp.amazonaws.com"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
                "StringEquals": {
                    "sts:ExternalId": "a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
                    "aws:SourceAccount": "111122223333"
                },
                "ArnLike": {
                    "aws:SourceArn": "arn:aws:cognito-idp:us-west-2:111122223333:userpool/us-west-2_EXAMPLE"
                }
            }
        }
    ]
}
```

------

Você pode especificar um [ARN do grupo de usuários](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazoncognitouserpools.html#amazoncognitouserpools-resources-for-iam-policies) exato ou um ARN curinga no valor da condição `aws:SourceArn`. Pesquise seus grupos ARNs de usuários no Console de gerenciamento da AWS ou com uma solicitação de [DescribeUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DescribeUserPool.html)API.

Para enviar mensagens SMS para [autenticação multifator](user-pool-settings-mfa-sms-email-message.md), sua política de confiança do perfil do IAM deve ter uma condição `sts:ExternalId`. O valor dessa condição deve corresponder à `ExternalId` propriedade [SmsConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-SmsConfiguration)do seu grupo de usuários. Quando você cria um perfil do IAM durante o processo de criação do grupo de usuários no console do Amazon Cognito, o Amazon Cognito configura o ID externo para você no perfil e nas configurações do grupo de usuários. Isso não acontece quando você usa um perfil do IAM existente.

Você deve atualizar o `ExternalId` parâmetro do grupo de usuários em uma solicitação de [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API e atualizar a política de confiança da função do IAM com uma `sts:externalId` condição com o mesmo valor. Para saber como usar a API para atualizar um grupo de usuários de forma a preservar a configuração original, consulte [Como atualizar a configuração do grupo de usuários e do cliente da aplicação](cognito-user-pool-updating.md).

Para obter mais informações sobre políticas e perfis do IAM, consulte “[Termos e conceitos das funções](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html)” no *Guia do usuário do AWS Identity and Access Management *.

### Escolha o Região da AWS para mensagens SMS
<a name="sms-choose-a-region"></a>

**nota**  
As mensagens SMS recebidas agora AWS são gerenciadas em [AWS End User Messaging SMS](https://console.aws.amazon.com/sms-voice/home).

Em alguns Regiões da AWS, você pode escolher a região que contém os recursos do Amazon SNS que você deseja usar para as mensagens SMS do Amazon Cognito. Em qualquer Região da AWS lugar em que o Amazon Cognito esteja disponível, exceto na Ásia-Pacífico (Seul), você pode usar os recursos do Amazon SNS no Região da AWS local em que criou seu grupo de usuários. Para tornar suas mensagens SMS mais rápidas e confiáveis quando você tiver uma opção de regiões, use os recursos do Amazon SNS na mesma região do grupo de usuários.

Escolha uma região para recursos de SMS na etapa **Configurar a entrega de mensagens** do novo assistente de grupo de usuários. Você também pode clicar em **Editar** em **SMS** no menu **Métodos de autenticação** de um grupo de usuários existente.

No lançamento, para alguns Regiões da AWS, o Amazon Cognito enviou mensagens SMS com recursos do Amazon SNS em uma região alternativa. Para definir sua região preferida, use o `SnsRegion` parâmetro do [SmsConfigurationType](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SmsConfigurationType.html)objeto para seu grupo de usuários. Quando você cria programaticamente um recurso de grupos de usuários do Amazon Cognito em uma **Amazon Cognito Region** (Região do Amazon Cognito) descrita na tabela a seguir e não fornece um parâmetro `SnsRegion`, seu grupo de usuários envia mensagens SMS com recursos do Amazon SNS em uma **Amazon SNS Region** (Região do Amazon SNS) herdada.

Os grupos de usuários do Amazon Cognito na Ásia-Pacífico (Seul) Região da AWS devem usar sua configuração do Amazon SNS na região Ásia-Pacífico (Tóquio).

O Amazon SNS (via AWS End User Messaging SMS) define a cota de gastos para todas as novas contas em 1,00 USD por mês. Você pode ter aumentado seu limite de gastos em um Região da AWS que você usa com o Amazon Cognito. Antes de alterar as Região da AWS mensagens SMS do Amazon SNS, abra um caso de aumento de cota no AWS Support Center para aumentar seu limite na nova região. Para obter mais informações, consulte Como [migrar do sandbox do AWS End User Messaging SMS MMS e do Voice para a produção](https://docs.aws.amazon.com/sms-voice/latest/userguide/sandbox.html#sandbox-sms-move-to-production) no Guia do *AWS End User Messaging SMS usuário*.

Você pode enviar mensagens SMS para qualquer **região do Amazon Cognito** na tabela a seguir com AWS End User Messaging SMS recursos na região de **mensagens SMS** correspondente.


| Região do Amazon Cognito | Região de mensagens SMS | 
| --- | --- | 
|  Leste dos EUA (Ohio)  |  Leste dos EUA (Ohio), Leste dos EUA (Norte da Virgínia)  | 
|  Leste dos EUA (Norte da Virgínia)  |  Leste dos EUA (Norte da Virgínia)  | 
|  Oeste dos EUA (N. da Califórnia)  |  Oeste dos EUA (N. da Califórnia)  | 
|  Oeste dos EUA (Oregon)  |  Oeste dos EUA (Oregon)  | 
|  Canadá (Central)  |  Canadá (Central), Leste dos EUA (Norte da Virgínia)  | 
|  Oeste do Canadá (Calgary)  |  Oeste do Canadá (Calgary)  | 
|  México (Centro)  |  México (Centro)  | 
|  Europa (Frankfurt)  |  Europa (Frankfurt), Europa (Irlanda)  | 
|  Europa (Londres)  |  Europa (Londres), Europa (Irlanda)  | 
|  Europa (Irlanda)  |  Europa (Irlanda)  | 
|  Europa (Paris)  |  Europa (Paris)  | 
|  Europa (Estocolmo)  |  Europa (Estocolmo)  | 
|  Europa (Milão)  |  Europa (Milão)  | 
|  Europa (Espanha)  |  Europa (Espanha)  | 
|  Europa (Zurique)  |  Europa (Zurique)  | 
| Ásia-Pacífico (Malásia) | Ásia-Pacífico (Singapura) | 
|  Ásia-Pacífico (Tailândia)  |  Ásia-Pacífico (Mumbai)  | 
|  Ásia-Pacífico (Mumbai)  |  Ásia-Pacífico (Mumbai), Ásia-Pacífico (Singapura)  | 
|  Ásia-Pacífico (Hyderabad)  |  Ásia-Pacífico (Hyderabad)  | 
|  Ásia-Pacífico (Hong Kong)  |  Ásia-Pacífico (Singapura)  | 
|  Ásia-Pacífico (Seul)  |  Ásia-Pacífico (Tóquio)  | 
|  Ásia-Pacífico (Singapura)  |  Ásia-Pacífico (Singapura)  | 
|  Ásia-Pacífico (Sydney)  |  Ásia-Pacífico (Sydney)  | 
|  Ásia-Pacífico (Tóquio)  |  Ásia-Pacífico (Tóquio)  | 
|  Ásia-Pacífico (Jacarta)  |  Ásia-Pacífico (Jacarta)  | 
|  Ásia-Pacífico (Osaka)  |  Asia Pacific (Osaka)  | 
|  Ásia-Pacífico (Melbourne)  |  Ásia-Pacífico (Melbourne)  | 
|  Oriente Médio (Bahrein)  |  Oriente Médio (Bahrein)  | 
|  Oriente Médio (Emirados Árabes Unidos)  |  Oriente Médio (Emirados Árabes Unidos)  | 
|  América do Sul (São Paulo)  |  América do Sul (São Paulo)  | 
|  Israel (Tel Aviv)  |  Israel (Tel Aviv)  | 
|  África (Cidade do Cabo)  |  África (Cidade do Cabo)  | 

### Obter uma identidade de origem para enviar mensagens SMS a números de telefone dos EUA
<a name="user-pool-sms-settings-first-time-origination"></a>

Se você pretende enviar mensagens de texto SMS para números de telefone dos EUA, deve obter uma identidade de origem, independentemente de criar um ambiente de área restrita para testes de SMS ou de um ambiente de produção.

As operadoras dos EUA exigem uma identidade de origem para o envio de mensagens para números de telefone dos EUA. Se você ainda não tiver uma identidade de origem, deverá obter uma. Para saber como obter uma identidade de origem, consulte [Solicitar um número de telefone](https://docs.aws.amazon.com/sms-voice/latest/userguide/phone-numbers-request.html) no *Guia do usuário do AWS End User Messaging SMS *.

Quando você tem mais de uma identidade de origem na mesma Região da AWS, AWS End User Messaging SMS escolhe um tipo de identidade de origem na seguinte ordem de prioridade: código curto, 10DLC, número gratuito. Não é possível alterar essa prioridade. Para obter mais informações, consulte [AWS End User Messaging SMS FAQs](https://aws.amazon.com/end-user-messaging/faqs/).

### Confirmar se você está na sandbox SMS
<a name="user-pool-sms-settings-first-time-confirm-sandbox"></a>

Use o procedimento a seguir para confirmar que você está na área restrita para testes de SMS. Repita o procedimento para cada um Região da AWS em que você tenha grupos de usuários de produção do Amazon Cognito.

#### Revise o status de área restrita para testes de SMS no console do Amazon Cognito.
<a name="check-that-you-are-in-the-sms-sandbox"></a>

**Para confirmar que você está na área restrita para testes de SMS**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas credenciais da AWS .

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente da lista.

1. Clique no menu **Métodos de autenticação**.

1. Na seção **SMS configuration** (Configuração do SMS), expanda **Move to Amazon SNS production environment** (Migrar para o ambiente de produção do Amazon SNS). Se sua conta estiver na área restrita para testes de SMS, você verá a seguinte mensagem:

   **Configure AWS service (Serviço da AWS) dependências para concluir a configuração da mensagem SMS**

   Se você não vir essa mensagem, significa que alguém já configurou mensagens SMS em sua conta. Vá para [Concluir a configuração do grupo de usuários no Amazon Cognito](#user-pool-sms-settings-first-time-finish-user-pool).

1. Selecione o link do [Amazon SNS](https://console.aws.amazon.com/sns/home) em **Mover para o ambiente de produção do Amazon SNS**. Isso abre o console do Amazon SNS em uma nova guia.

1. Verifique se você está no ambiente da área restrita para testes. A mensagem do console indica o status do seu sandbox e Região da AWS, da seguinte forma:

   `This account is in the SMS sandbox in US East (N. Virginia).`

### Migrar sua conta do sandbox
<a name="user-pool-sms-settings-first-time-out-sandbox"></a>

Para usar sua aplicação em produção, mova sua conta da área restrita para testes de SMS para a produção. Depois de configurar uma identidade de origem na Região da AWS que contém os AWS End User Messaging SMS recursos que você deseja que o Amazon Cognito use, você pode verificar os números de telefone dos EUA enquanto permanece na Conta da AWS sandbox do SMS. Quando seu ambiente está em produção, você não precisa verificar números de telefone de usuários antes de enviar mensagens SMS para eles.

Você pode criar uma solicitação para sair da sandbox a partir do AWS End User Messaging SMS console ou do console do Amazon SNS. Para obter instruções detalhadas, consulte [Migrar do sandbox de SMS](https://docs.aws.amazon.com/sms-voice/latest/userguide/sandbox.html#sandbox-sms-move-to-production) no *Guia do usuário do AWS End User Messaging SMS *.

### Use números de simulador ou números de telefone verificados com AWS End User Messaging SMS
<a name="user-pool-sms-settings-first-time-verify-numbers"></a>

Se você tiver removido sua conta da área restrita para testes de SMS, ignore esta etapa.

Se você estiver no sandbox, mas tiver configurado um número de origem, poderá enviar mensagens para números de destino verificados. Para configurar destinos verificados, consulte [Adicionar um número de telefone de destino verificado](https://docs.aws.amazon.com/sms-voice/latest/userguide/verify-destination-phone-number.html) no *Guia do usuário do AWS End User Messaging SMS *.

Você também pode enviar mensagens com remetentes e destinos simulados. As mensagens do simulador produzem logs, mas não são enviadas pela rede da operadora. No [menu Atalhos](https://console.aws.amazon.com/sms-voice/home?#/shortcuts), selecione **Testar o envio de SMS com o simulador de SMS**. Para obter mais informações, consulte [Números de telefone do simulador](https://docs.aws.amazon.com/sms-voice/latest/userguide/test-phone-numbers.html) no *Guia do usuário do AWS End User Messaging SMS *.

### Concluir a configuração do grupo de usuários no Amazon Cognito
<a name="user-pool-sms-settings-first-time-finish-user-pool"></a>

Retorne para a guia do navegador em que você estava criando ou [editando](signing-up-users-in-your-app.md#verification-configure) o grupo de usuários. Conclua o procedimento . Quando você adiciona com êxito a configuração de SMS ao seu grupo de usuários, o Amazon Cognito envia uma mensagem de teste para um número de telefone interno a fim de verificar se sua configuração funciona. O Amazon SNS cobra por toda mensagem SMS de teste.

# Usar atributos de segurança de grupos de usuários do Amazon Cognito
<a name="managing-security"></a>

Você pode querer proteger a aplicação contra invasão de rede, adivinhação de senhas, falsificação de identidade de usuário e cadastros e logins mal-intencionados. Sua configuração dos recursos de segurança dos grupos de usuários do Amazon Cognito pode ser um componente essencial na arquitetura de segurança. A segurança do seu aplicativo é de *responsabilidade do cliente “Segurança na nuvem”*, conforme descrito no [Modelo de Responsabilidade AWS Compartilhada](https://aws.amazon.com/compliance/shared-responsibility-model/). As ferramentas deste capítulo contribuem para que o design de segurança da sua aplicação esteja alinhado com essas metas.

Uma decisão importante que você deve tomar ao configurar seu grupo de usuários é permitir o cadastro e o login públicos. Algumas opções de grupos de usuários, como clientes confidenciais, criação administrativa e confirmação de usuários e grupos de usuários sem domínio, estão sujeitas, em menor grau, a ataques pela Internet. No entanto, um caso de uso comum são clientes públicos que aceitam o cadastro de qualquer pessoa na Internet e enviam todas as operações diretamente para seu grupo de usuários. Em qualquer configuração, mas especialmente no caso dessas públicas, recomendamos que você planeje e implante seu grupo de usuários com os recursos de segurança em mente. A segurança insuficiente também pode afetar sua AWS fatura quando fontes indesejadas criam novos usuários ativos ou tentam explorar usuários existentes.

A MFA e a proteção contra ameaças se aplicam aos usuários [locais](cognito-terms.md#terms-localuser). IdPs Os terceiros são responsáveis pela postura de segurança dos usuários [federados.](cognito-terms.md#terms-federateduser)Recursos de segurança de grupos de usuários.

**Autenticação multifatorial (MFA)**  
Solicite um código que seu grupo de usuários envie por e-mail (com o plano de recursos Essentials ou Plus) ou mensagem SMS ou de uma aplicação autenticadora para confirmar o login do grupo de usuários.

**Proteção contra ameaças**  
Procure no cadastro indicadores de risco e aplique a MFA ou bloqueie o login. Adicione declarações e escopos personalizados para acessar tokens. Envie códigos MFA do e-mail.

**AWS WAF web ACLs**  
Inspecione o tráfego de entrada nos [endpoints do grupo de usuários e na API de autenticação](authentication-flows-public-server-side.md#user-pools-API-operations) em busca de atividades indesejadas nas camadas da rede e de aplicação.

**Diferenciação de letras maiúsculas e minúsculas**  
Impeça a criação de usuários cujo endereço de e-mail ou nome de usuário preferencial seja idêntico ao de outro usuário, a não ser pela diferenciação de letras maiúsculas e minúsculas.

**Deletion protection (Proteção contra exclusão)**  
Evite que sistemas automatizados excluam acidentalmente seus grupos de usuários. Exija confirmação adicional da exclusão do grupo de usuários no Console de gerenciamento da AWS.

**Erros de existência de usuários**  
Proteja-se contra a divulgação de nomes de usuário e aliases existentes no grupo de usuários. Retorne um erro genérico em resposta à autenticação malsucedida, independentemente de o nome de usuário ser válido ou não.

**Topics**
+ [

# Adicionar MFA a um grupo de usuários
](user-pool-settings-mfa.md)
+ [

# Segurança avançada com proteção contra ameaças
](cognito-user-pool-settings-threat-protection.md)
+ [

# Associar uma ACL AWS WAF da web a um grupo de usuários
](user-pool-waf.md)
+ [

# Sensibilidade entre maiúsculas e minúsculas do grupo de usuários
](user-pool-case-sensitivity.md)
+ [

# Proteção contra exclusão do grupo de usuários
](user-pool-settings-deletion-protection.md)
+ [

# Gerenciar respostas de erro de existência do usuário
](cognito-user-pool-managing-errors.md)

# Adicionar MFA a um grupo de usuários
<a name="user-pool-settings-mfa"></a>

a MFA adiciona um fator de autenticação do tipo *algo que você tem* ao fator *algo que você sabe* inicial, geralmente um nome de usuário e senha. Você pode optar por mensagens de texto SMS, e-mails ou senhas de uso único com marcação temporal (TOTP) como fatores adicionais para o login dos usuários com senhas como o fator de autenticação primário.

A autenticação multifator (MFA) aumenta a segurança dos [usuários locais](cognito-terms.md#terms-localuser) na aplicação. No caso de [usuários federados](cognito-terms.md#terms-federateduser), o Amazon Cognito delega todos os processos de autenticação ao IdP e não oferece a eles fatores de autenticação adicionais.

**nota**  
Na primeira vez que um novo usuário faz login no seu aplicativo, o Amazon Cognito emite tokens OAuth 2.0, mesmo que seu grupo de usuários exija MFA. O segundo fator de autenticação quando o usuário faz login pela primeira vez é a confirmação da mensagem de verificação que o Amazon Cognito envia a ele. Se o grupo de usuários exigir MFA, o Amazon Cognito solicitará que o usuário inscreva um fator de login adicional para ser usado durante toda tentativa de login posterior à primeira.

Com a autenticação adaptável, você pode configurar o grupo de usuários para exigir um fator de autenticação adicional em resposta a um aumento no nível de risco. Para adicionar autenticação adaptável ao grupo de usuários, consulte [Segurança avançada com proteção contra ameaças](cognito-user-pool-settings-threat-protection.md).

Quando você define a MFA como `required` para um grupo de usuários, todos os usuários devem concluir a MFA para fazer login. Para fazer login, cada usuário deve configurar pelo menos um fator de MFA. Quando a MFA é exigida, você deve incluir a configuração da MFA na integração dos usuários para que seu grupo de usuários permita que eles façam login.

O login gerenciado solicita que os usuários configurem a MFA quando você a define como obrigatória. Quando você define a MFA como opcional no grupo de usuários, o login gerenciado não a solicita aos usuários. Para trabalhar com a MFA opcional, você deve criar uma interface na aplicação que solicite que os usuários selecionem se desejam configurar a MFA e, depois, oriente-os durante as entradas da API para verificar o fator adicional de login.

**Topics**
+ [

## Informações importantes sobre a MFA de grupo de usuários
](#user-pool-settings-mfa-prerequisites)
+ [

## Preferências de MFA do usuário
](#user-pool-settings-mfa-preferences)
+ [

## Detalhes da lógica de MFA no runtime do usuário
](#user-pool-settings-mfa-user-outcomes)
+ [

## Configurar um grupo de usuários para a autenticação multifator
](#user-pool-configuring-mfa)
+ [

# MFA de mensagens SMS e e-mail
](user-pool-settings-mfa-sms-email-message.md)
+ [

# MFA de token de software TOTP
](user-pool-settings-mfa-totp.md)

## Informações importantes sobre a MFA de grupo de usuários
<a name="user-pool-settings-mfa-prerequisites"></a>

Antes de configurar a MFA, considere o seguinte:
+ Os usuários podem ter MFA *ou* fazer login sem senha, com uma exceção: chaves de acesso com verificação de usuário podem atender aos requisitos de MFA quando você configura em seu grupo de usuários. `FactorConfiguration` `MULTI_FACTOR_WITH_USER_VERIFICATION` `WebAuthnConfiguration`
  + Você não pode definir o MFA como obrigatório em grupos de usuários que oferecem suporte a senhas de uso [único](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless).
  + Você não pode adicionar `EMAIL_OTP` ou aumentar `AllowedFirstAuthFactors` quando `SMS_OTP` a MFA é necessária em seu grupo de usuários. Você pode adicionar `WEB_AUTHN` quando `FactorConfiguration` está definido como`MULTI_FACTOR_WITH_USER_VERIFICATION`.
  + O [login baseado em opções](authentication-flows-selection-sdk.md#authentication-flows-selection-choice) só oferece fatores `PASSWORD` e `PASSWORD_SRP` em todos os clientes da aplicação quando a MFA é necessária no grupo de usuários. Para obter mais informações sobre fluxos de nome de usuário e senha, consulte [Fazer login com senhas persistentes](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-password) e [Fazer login com senhas persistentes e carga útil segura](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-srp) no capítulo **Autenticação** deste guia.
  + Em grupos de usuários em que a MFA é opcional, os usuários que configuraram um fator de MFA só podem entrar com fluxos de autenticação de nome de usuário e senha no login baseado em opções. Esses usuários são elegíveis para todos os fluxos de [login baseado no cliente](authentication-flows-selection-sdk.md#authentication-flows-selection-client).

  A tabela a seguir descreve o efeito das configurações de MFA do grupo de usuários e da configuração dos fatores de MFA pelo usuário na capacidade de os usuários fazerem login com fatores sem senha.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/user-pool-settings-mfa.html)
+ O método de MFA preferido de um usuário influencia os métodos que ele pode usar para recuperar a senha. Os usuários cujo MFA preferencial é por mensagem de e-mail não podem receber um código de redefinição de senha por e-mail. Os usuários cujo MFA preferencial é por mensagem SMS não podem receber um código de redefinição de senha por SMS.

  Suas configurações de [recuperação de senha](managing-users-passwords.md#user-pool-password-reset-and-recovery) devem fornecer uma opção alternativa quando os usuários não estão qualificados para usar o método de redefinição de senha de sua preferência. Por exemplo, seus mecanismos de recuperação podem ter o e-mail como prioridade e o MFA do e-mail pode ser opcional no seu grupo de usuários. Nesse caso, adicione a recuperação da conta de mensagens SMS como uma segunda opção ou use operações administrativas da API para redefinir as senhas desses usuários.

  O Amazon Cognito responde às solicitações de redefinição de senha de usuários que não têm um método de recuperação válido com uma resposta de erro `InvalidParameterException`.

  O exemplo de corpo da solicitação [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html#API_UpdateUserPool_Examples)ilustra um exemplo `AccountRecoverySetting` em que os usuários podem voltar à recuperação por mensagem SMS quando a redefinição de senha da mensagem de e-mail não está disponível.
+ Os usuários não podem receber códigos de redefinição de senha e de MFA no mesmo endereço de e-mail ou número de telefone. Se eles usarem senhas de uso único (OTPs) de mensagens de e-mail para MFA, deverão usar mensagens SMS para recuperação da conta. Se OTPs usarem mensagens SMS para MFA, deverão usar mensagens de e-mail para recuperação da conta. Em grupos de usuários com MFA, talvez os usuários não consigam concluir a recuperação de senha por autoatendimento se tiverem o endereço de e-mail cadastrado, mas não tiverem o número de telefone, ou vice-versa.

  Para evitar que os usuários não consigam redefinir as senhas em grupos de usuários com essa configuração, defina os atributos `email` e `phone_number` [como obrigatórios](user-pool-settings-attributes.md). Como alternativa, é possível configurar processos que sempre coletam e definem esses atributos quando os usuários se cadastram ou quando seus administradores criam perfis de usuário. Quando os usuários possuem ambos os atributos, o Amazon Cognito envia automaticamente códigos de redefinição de senha para o destino que *não* é o fator de MFA do usuário.
+ Ao ativar a MFA em seu grupo de usuários e escolher **Mensagem de texto SMS** ou **Mensagem de e-mail** como um segundo fator, você pode enviar mensagens para um atributo de número de telefone ou e-mail que você não verificou no Amazon Cognito. Depois que o usuário conclui a MFA, o Amazon Cognito define o atributo `phone_number_verified` ou `email_verified` como `true`.
+ Depois de cinco tentativas malsucedidas de apresentar um código de MFA, o Amazon Cognito inicia o processo de bloqueio de tempo limite exponencial descrito em [Comportamento de bloqueio em tentativas fracassadas de login](authentication.md#authentication-flow-lockout-behavior).
+ Se sua conta estiver na sandbox de SMS Região da AWS que contém os recursos do Amazon Simple Notification Service (Amazon SNS) para seu grupo de usuários, você deve verificar os números de telefone no Amazon SNS antes de enviar uma mensagem SMS. Para obter mais informações, consulte [Configurações de mensagens SMS para grupos de usuários do Amazon Cognito](user-pool-sms-settings.md).
+ Para alterar o status da MFA dos usuários em resposta aos eventos detectados com proteção contra ameaças, ative a MFA e a defina como opcional no console do grupo de usuários do Amazon Cognito. Para obter mais informações, consulte [Segurança avançada com proteção contra ameaças](cognito-user-pool-settings-threat-protection.md).
+ As mensagens de e-mail e SMS exigem que seus usuários tenham atributos de endereço de e-mail e número de telefone, respectivamente. Você pode definir `email` ou `phone_number` como atributos obrigatórios do seu grupo de usuários. Nesse caso, os usuários não podem concluir o cadastro a menos que informem um número de telefone. Se você não definir esses atributos como obrigatórios, mas quiser usar a MFA para e-mail ou SMS, solicite aos usuários o endereço de e-mail ou número de telefone quando eles se cadastrarem. Como prática recomendada, configure seu grupo de usuários para enviar mensagens automáticas aos usuários para [verificar esses atributos](signing-up-users-in-your-app.md).

  O Amazon Cognito considera um número de telefone ou endereço de e-mail como verificado se um usuário recebeu com sucesso um código temporário por SMS ou mensagem de e-mail e devolveu esse código em uma solicitação de [VerifyUserAttribute](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifyUserAttribute.html)API. Como alternativa, sua equipe pode definir números de telefone e marcá-los como verificados com um aplicativo administrativo que realiza solicitações de [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html)API.
+ Se você definiu a MFA como obrigatória e ativou mais de um fator de autenticação, o Amazon Cognito solicitará que novos os usuários selecionem um fator de MFA que queiram usar. Os usuários devem ter um número de telefone para configurar a MFA de mensagens SMS e um endereço de e-mail para configurar a MFA de mensagens de e-mail. Se um usuário não tiver o atributo definido para nenhuma MFA baseada em mensagem disponível, o Amazon Cognito solicitará que ele configure a MFA TOTP. A solicitação para escolher um fator de MFA (`SELECT_MFA_TYPE`) e configurar um fator escolhido (`MFA_SETUP`) surge como uma resposta desafiadora às operações [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)de [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)API.

## Preferências de MFA do usuário
<a name="user-pool-settings-mfa-preferences"></a>

Os usuários podem configurar vários fatores de MFA. Apenas um valor pode estar ativo. Você pode escolher a preferência efetiva de MFA para seus usuários nas configurações do grupo de usuários ou nas solicitações do usuário. Um grupo de usuários solicita que o usuário forneça códigos de MFA quando as configurações do grupo de usuários e suas próprias configurações em nível de usuário atendem às seguintes condições:

1. Você define a MFA como opcional ou obrigatória em seu grupo de usuários.

1. O usuário tem um atributo `phone_number` ou `email` válido ou configurou uma aplicação autenticadora para TOTP.

1. Pelo menos um fator de MFA está ativo.

1. Um fator de MFA é definido como preferencial.

### Evite o uso do mesmo fator para login e MFA
<a name="user-pool-settings-mfa-preferences-same-factor"></a>

É possível configurar seu grupo de usuários de forma que um fator de login seja a única opção de login e MFA disponível para alguns ou todos os usuários. Esse resultado pode ocorrer quando seu principal caso de uso de login são senhas de uso único por mensagem de e-mail ou mensagem SMS (). OTPs O MFA preferido de um usuário pode ser o mesmo tipo de fator de seu login nas seguintes condições:
+ O MFA é necessário no grupo de usuários.
+ O OTP por e-mail e SMS estão disponíveis nas opções de login e *MFA* no grupo de usuários.
+ O usuário faz login com e-mail ou mensagem SMS OTP.
+ Eles têm um atributo de endereço de e-mail, mas nenhum atributo de número de telefone, ou um atributo de número de telefone, mas nenhum atributo de endereço de e-mail.

Nesse cenário, o usuário pode entrar com uma OTP de e-mail e concluir o MFA com uma OTP de e-mail. Essa opção cancela a função essencial do MFA. Os usuários que fazem login com senhas de uso único devem poder usar métodos de entrega diferentes para fazer login e para MFA. Quando os usuários têm opções de SMS e e-mail, o Amazon Cognito atribui automaticamente um fator diferente. Por exemplo, quando um usuário faz login com OTP de e-mail, seu MFA preferido é SMS OTP.

Siga as etapas a seguir para abordar a autenticação do mesmo fator quando seu grupo de usuários oferece suporte à autenticação OTP para login e MFA.

1. Ative o OTP por e-mail e SMS como fatores de login.

1. Ative o OTP por e-mail e SMS como fatores de MFA.

1. Coletar

### Configurações do grupo de usuários e seus efeitos nas opções de MFA
<a name="user-pool-settings-mfa-preferences-things-to-know"></a>

A configuração do seu grupo de usuários influencia os métodos de MFA que os usuários podem escolher. A seguir estão algumas configurações do grupo de usuários que influenciam a capacidade dos usuários de configurar a MFA.
+ Na configuração **Autenticação multifator** no menu **Login** do console do Amazon Cognito, você pode definir a MFA como opcional ou obrigatória, ou desativá-la. O equivalente de API dessa configuração é o [MfaConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-MfaConfiguration)parâmetro de `CreateUserPool``UpdateUserPool`, `SetUserPoolMfaConfig` e.

  Além disso, na configuração de **Autenticação multifator**, a configuração de métodos de **MFA** determina os fatores de MFA que os usuários podem configurar. O equivalente da API a essa configuração é a [SetUserPoolMfaConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserPoolMfaConfig.html)operação. 
+ No menu **Login**, em **Recuperação de conta de usuário**, você pode configurar como seu grupo de usuários envia mensagens aos usuários que esquecem a senha. O método de MFA de um usuário não pode ter o mesmo método de entrega de MFA do grupo de usuários para códigos de senha esquecida. O parâmetro da API para o método de entrega de senha esquecida é o [AccountRecoverySetting](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-AccountRecoverySetting)parâmetro de e. `CreateUserPool` `UpdateUserPool`

  Por exemplo, usuários não podem configurar a MFA do e-mail quando a opção de recuperação é **Somente e-mail**. Isso ocorre porque você não pode habilitar a MFA do e-mail e definir a opção de recuperação como **Somente e-mail** no mesmo grupo de usuários. Quando você define essa opção como **E-mail se disponível, ou SMS**, o e-mail é a opção prioritária de recuperação, mas seu grupo de usuários pode recorrer à mensagem SMS quando um usuário não está qualificado para a recuperação de mensagens de e-mail. Nesse cenário, os usuários podem definir a MFA do e-mail como preferencial e só podem receber uma mensagem SMS quando tentarem redefinir sua senha.
+ Se você definir apenas um método de MFA como disponível, não precisará gerenciar as preferências de MFA do usuário.
+ Uma configuração ativa de SMS torna automaticamente as mensagens SMS um método de MFA disponível em seu grupo de usuários.

  Uma [configuração de e-mail](user-pool-email.md) ativa com seus próprios recursos do Amazon SES em um grupo de usuários e o plano de recursos Essentials ou Plus torna automaticamente as mensagens de e-mail um método de MFA disponível em seu grupo de usuários.
+ Quando você define a MFA como obrigatória em um grupo de usuários, os usuários não podem habilitar ou desabilitar nenhum método de MFA. Você só pode definir um método preferencial.
+ Quando você define a MFA como opcional em um grupo de usuários, o login gerenciado não solicita que os usuários configurem a MFA, mas solicita que os usuários forneçam um código de MFA quando têm um método de MFA preferencial.
+ Quando você ativa a [proteção contra ameaças](cognito-user-pool-settings-threat-protection.md) e configura respostas de autenticação adaptativa no modo de função completa, a MFA deve ser opcional em seu grupo de usuários. Uma das opções de resposta com a autenticação adaptativa é exigir MFA para um usuário cuja tentativa de login é avaliada como contendo um nível de risco.

  A configuração **Atributos obrigatórios** no menu **Cadastrar-se** do console determina se os usuários devem fornecer um endereço de e-mail ou número de telefone para se cadastrar na aplicação. Mensagens de e-mail e SMS se tornam fatores elegíveis de MFA quando um usuário tem o atributo correspondente. O parâmetro [Schema](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#CognitoUserPools-CreateUserPool-request-Schema) de `CreateUserPool` define os atributos como obrigatórios.
+ Quando você define a MFA como obrigatória em um grupo de usuários e um usuário faz login com o login gerenciado, o Amazon Cognito solicita que ele selecione um método de MFA dentre os métodos disponíveis para seu grupo de usuários. O login gerenciado trata da coleta de um endereço de e-mail ou um número de telefone e da configuração de TOTP. O diagrama a seguir demonstra a lógica por trás das opções que o Amazon Cognito apresenta aos usuários.

### Configurar preferências de MFA para usuários
<a name="user-pool-settings-mfa-preferences-configure"></a>

Você pode configurar as preferências de MFA para usuários em um modelo de autoatendimento com autorização de token de acesso ou em um modelo gerenciado pelo administrador com operações administrativas de API. Essas operações ativam ou desativam os métodos de MFA e definem um dos vários métodos como a opção preferencial. Depois que o usuário definir uma preferência de MFA, o Amazon Cognito solicitará que ele forneça um código do método de MFA preferencial no momento do login. Os usuários que não definiram uma preferência recebem uma solicitação para escolher um método preferencial em um desafio `SELECT_MFA_TYPE`.
+ Em um modelo de autoatendimento do usuário ou aplicativo público [SetUserMfaPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserMFAPreference.html), autorizado com um token de acesso do usuário conectado, define a configuração da MFA.
+ Em um aplicativo confidencial ou gerenciado pelo administrador, autorizado com AWS credenciais administrativas [AdminSetUserPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserMFAPreference.html), define a configuração da MFA.

Você também pode definir as preferências de MFA do usuário no menu **Usuários** do console do Amazon Cognito. Para obter mais informações sobre os modelos de autenticação pública e confidencial na API de grupos de usuários do Amazon Cognito, consulte [Noções básicas sobre a autenticação de API, OIDC e páginas de login gerenciado](authentication-flows-public-server-side.md#user-pools-API-operations).

## Detalhes da lógica de MFA no runtime do usuário
<a name="user-pool-settings-mfa-user-outcomes"></a>

Para determinar as etapas a serem tomadas quando os usuários fazem login, seu grupo de usuários avalia as preferências de MFA do usuário, [os atributos do usuário](user-pool-settings-attributes.md), a [configuração de MFA do grupo de usuários](#user-pool-configuring-mfa), as ações de [proteção contra ameaças](cognito-user-pool-settings-adaptive-authentication.md) e as configurações de [recuperação de contas de autoatendimento](managing-users-passwords.md#user-pool-password-reset-and-recovery). Em seguida, ele conecta os usuários, solicita que eles escolham um método de MFA, solicita que configurem um método de MFA ou solicita a MFA. Para configurar um método de MFA, os usuários devem fornecer um [endereço de e-mail ou número de telefone](user-pool-settings-mfa-sms-email-message.md) ou [registrar um autenticador TOTP](user-pool-settings-mfa-totp.md#totp-mfa-set-up-api). Eles também podem configurar opções de MFA e [registrar uma opção preferida](#user-pool-settings-mfa-preferences-configure) com antecedência. O diagrama a seguir lista os efeitos detalhados da configuração do grupo de usuários nas tentativas de login imediatamente após a inscrição inicial.

A lógica ilustrada aqui se aplica às aplicações baseados em SDK e ao [login gerenciado](cognito-user-pools-managed-login.md), mas é menos visível no login gerenciado. Ao solucionar problemas de MFA, retroceda dos resultados dos usuários para as configurações do perfil do usuário e do grupo de usuários que contribuíram para a decisão.

![\[Um diagrama do processo de decisão dos grupos de usuários do Amazon Cognito para a seleção de MFA do usuário final.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/cup-mfa-decision-tree.png)


A lista a seguir corresponde à numeração no diagrama lógico de decisão e descreve cada etapa em detalhes. Um ![\[checkmark\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/checkmark.png) indica uma autenticação bem-sucedida e a conclusão do fluxo. Um ![\[error\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/error.png) indica uma autenticação malsucedida.

1. Um usuário apresenta o nome de usuário ou nome de usuário e senha na tela de login. Se ele não apresentar credenciais válidas, a solicitação de login será negada. 

1. Se ele conseguir a autenticação por nome de usuário e senha, determine se a MFA será obrigatória, opcional ou desativada. Se ela estiver desativada, o nome de usuário e a senha corretos resultarão em autenticação bem-sucedida. ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/checkmark.png)

   1. Se a MFA for opcional, determine se o usuário configurou anteriormente um autenticador TOTP. Se ele tiver configurado o TOTP, solicite a MFA com TOTP. Se ele responder com sucesso ao desafio de MFA, o login será bem-sucedido. ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/checkmark.png)

   1. Determine se o recurso de autenticação adaptável da proteção contra ameaças exigiu que o usuário configurasse a MFA. Se ele não tiver atribuído a MFA, o login será bem-sucedido. ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/checkmark.png)

1. Se a MFA for necessária ou a autenticação adaptativa tiver atribuído a MFA, determine se o usuário definiu um fator de MFA como habilitado e preferencial. Se ele tiver, solicite a MFA com esse fator. Se ele responder com sucesso ao desafio de MFA, o login será bem-sucedido. ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/checkmark.png)

1. Se o usuário não tiver definido uma preferência de MFA, determine se ele registrou um autenticador TOTP.

   1. Se o usuário registrou um autenticador TOTP, determine se a MFA com TOTP está disponível no grupo de usuários (a MFA com TOTP pode ser desabilitada após os usuários terem configurado previamente os autenticadores).

   1. Determine se a MFA por mensagem SMS ou de e-mail também está disponível no grupo de usuários.

   1.  Se nem a MFA do e-mail nem SMS estiverem disponíveis, solicite ao usuário a MFA com TOTP. Se ele responder com sucesso ao desafio de MFA, o login será bem-sucedido. ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/checkmark.png)

   1. Se a MFA do e-mail ou SMS estiver disponível, determine se o usuário tem o atributo `email` ou `phone_number` correspondente. Nesse caso, qualquer atributo que não seja o método principal de recuperação de contas de autoatendimento e esteja habilitado para MFA estará disponível para ele.

   1. Solicite ao usuário um desafio `SELECT_MFA_TYPE` com opções `MFAS_CAN_SELECT` que incluem TOTP e os fatores de MFA disponíveis por SMS ou e-mail.

   1.  Solicite ao usuário o fator que ele selecionou em resposta ao desafio `SELECT_MFA_TYPE`. Se ele responder com sucesso ao desafio de MFA, o login será bem-sucedido. ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/checkmark.png)

1. Se o usuário não registrou um autenticador TOTP, ou se o fez, mas a MFA com TOTP está atualmente desabilitada, determine se o usuário tem um atributo `email` ou `phone_number`.

1.  Se o usuário tiver somente um endereço de e-mail ou somente um número de telefone, determine se esse atributo também é o método que o grupo de usuários implementa para enviar mensagens de recuperação de conta para redefinição de senha. Nesse caso, ele não conseguirá concluir o login com a exigência de MFA e o Amazon Cognito retornará um erro. Para ativar o login desse usuário, você deverá adicionar um atributo de não recuperação ou registrar um autenticador TOTP para ele. ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/error.png)

   1. Se ele tiver um endereço de e-mail ou número de telefone de não recuperação disponível, determine se o fator MFA do e-mail ou SMS correspondente está habilitado.

   1. Se ele tiver um atributo de endereço de e-mail de não recuperação e a MFA do e-mail estiver habilitada, solicite um desafio `EMAIL_OTP`. Se ele responder com sucesso ao desafio de MFA, o login será bem-sucedido. ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/checkmark.png)

   1. Se ele tiver um atributo de número de telefone de não recuperação e a MFA do SMS estiver habilitada, solicite um desafio `SMS_MFA`. Se ele responder com sucesso ao desafio de MFA, o login será bem-sucedido. ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/checkmark.png)

   1. Se ele não tiver um atributo qualificado para um fator de MFA do e-mail ou SMS habilitado, determine se a MFA com TOTP está habilitada. Se a MFA com TOTP estiver desabilitada, ele não conseguirá concluir o login com a exigência de MFA e o Amazon Cognito retornará um erro. Para ativar o login desse usuário, você deverá adicionar um atributo de não recuperação ou registrar um autenticador TOTP para ele. ![\[alt text not found\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/error.png)
**nota**  
Essa etapa já foi avaliada como **Não** se o usuário tiver um autenticador TOTP, mas a MFA com TOTP estiver desabilitada.

   1. Se a MFA com TOTP estiver habilitada, apresente ao usuário um desafio `MFA_SETUP` com `SOFTWARE_TOKEN_MFA` nas opções `MFAS_CAN_SETUP`. Para concluir esse desafio, você deve registrar separadamente um autenticador TOTP para o usuário e responder com `"ChallengeName": "MFA_SETUP", "ChallengeResponses": {"USERNAME": "[username]", "SESSION": "[Session ID from VerifySoftwareToken]}"`.

   1. Depois que o usuário responder ao `MFA_SETUP` desafio com o token de sessão de uma [VerifySoftwareToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifySoftwareToken.html)solicitação, solicite a ele um `SOFTWARE_TOKEN_MFA` desafio. Se ele responder com sucesso ao desafio de MFA, o login será bem-sucedido. ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/checkmark.png)

1. Se o usuário tiver um endereço de e-mail e um número de telefone, determine qual atributo, se houver, é o principal método para mensagens de recuperação de conta para redefinição de senha.

   1. Se a recuperação de conta de autoatendimento estiver desabilitada, qualquer um dos atributos poderá ser usado para a MFA. Determine se um ou ambos os fatores de MFA do e-mail e SMS estão habilitados.

   1. Se ambos os atributos estiverem habilitados como um fator de MFA, solicite ao usuário um desafio `SELECT_MFA_TYPE` com as opções `MFAS_CAN_SELECT` `SMS_MFA` e `EMAIL_OTP`.

   1. Solicite ao usuário o fator que ele selecionou em resposta ao desafio `SELECT_MFA_TYPE`. Se ele responder com sucesso ao desafio de MFA, o login será bem-sucedido. ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/checkmark.png)

   1. Se somente um atributo for um fator de MFA elegível, solicite que ele responda a um desafio para o fator restante. Se ele responder com sucesso ao desafio de MFA, o login será bem-sucedido. ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/checkmark.png)

      Esse resultado acontece nos cenários a seguir.

      1. Quando ele tem os atributos `email` e `phone_number`, a MFA do SMS e e-mail estão habilitadas, e o principal método de recuperação da conta é por e-mail ou mensagem SMS.

      1. Quando ele tem os atributos `email` e `phone_number`, somente a MFA do SMS ou a MFA do e-mail está habilitada e a recuperação de conta de autoatendimento está desabilitada.

1. Se o usuário não tiver registrado um autenticador TOTP e não tiver um atributo `email` nem `phone_number`, solicite a ele um desafio `MFA_SETUP`. A lista em `MFAS_CAN_SETUP` inclui todos os fatores de MFA habilitados no grupo de usuários que não são a principal opção de recuperação de conta. Ele pode responder a esse desafio com `ChallengeResponses` para MFA do e-mail ou com TOTP. Para configurar a MFA do SMS, adicione um atributo de número de telefone separadamente e reinicie a autenticação.

   Para a MFA com TOTP, responda com `"ChallengeName": "MFA_SETUP", "ChallengeResponses": {"USERNAME": "[username]", "SESSION": "[Session ID from VerifySoftwareToken]"}`.

   Para a MFA do e-mail, responda com `"ChallengeName": "MFA_SETUP", "ChallengeResponses": {"USERNAME": "[username]", "email": "[user's email address]"}`.

   1. Solicite ao usuário o fator que ele selecionou em resposta ao desafio `SELECT_MFA_TYPE`. Se ele responder com sucesso ao desafio de MFA, o login será bem-sucedido. ![\[Green circular icon with a checkmark symbol inside.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/checkmark.png)

## Configurar um grupo de usuários para a autenticação multifator
<a name="user-pool-configuring-mfa"></a>

Você pode configurar o MFA no console do Amazon Cognito ou com a operação [SetUserPoolMfaConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserPoolMfaConfig.html)da API e os métodos do SDK.

**Para configurar MFA no console do Amazon Cognito**

1. Faça login no [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home).

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Clique no menu **Fazer login**. Encontre **Autenticação multifator** e selecione **Editar**.

1. Escolha o método **MFA enforcement** (Aplicação de MFA) que você deseja usar com o grupo de usuários.  
![\[Uma captura de tela do console do Amazon Cognito com opções de MFA.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/cup-mfa.png)

   1. **Solicite a MFA**. Todos os usuários do grupo de usuários devem fazer login com um código adicional de SMS, e-mail ou senha de uso único com marcação temporal (TOTP) como um fator de autenticação adicional.

   1. **MFA opcional**. MFA opcional: é possível oferecer aos usuários a opção de cadastrar um fator adicional de acesso e ainda permitir o acesso por usuários sem MFA configurada. Se você usar a autenticação adaptativa, escolha essa opção. Para obter mais informações sobre autenticação adaptativa, consulte [Segurança avançada com proteção contra ameaças](cognito-user-pool-settings-threat-protection.md).

   1. **Sem MFA**. Os usuários não podem registrar um fator adicional de login.

1. Escolha os **MFA methods** (Métodos de MFA) que você aceitará em sua aplicação. Você pode definir **Mensagem de e-mail**, **Mensagem SMS** ou **Aplicações autenticadoras** geradoras de TOTP como segundo fator.

1. Se usar mensagens de texto SMS como segundo fator e não tiver uma função do IAM configurada para usar com o Amazon Simple Notification Service(Amazon SNS) para mensagens de SMS, você poderá criar uma no console. No menu **Métodos de autenticação** do seu grupo de usuários, localize **SMS** e selecione **Editar**. Você também pode usar uma função existente que permita que o Amazon Cognito envie mensagens SMS aos usuários por você. Para obter mais informações, consulte [Perfis do IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html).

   Se usar mensagens de e-mail como segundo fator e não tiver uma identidade de origem configurada para usar com o Amazon Simple Email Service (Amazon SES) para mensagens de e-mail, você poderá criar uma no console. Você deve escolher a opção **Enviar e-mail com SES**. No menu **Métodos de autenticação** do seu grupo de usuários, localize **E-mail** e selecione **Editar**. Selecione um **Endereço de e-mail do remetente** entre as identidades verificadas disponíveis na lista. Se você escolher um domínio verificado, por exemplo `example.com`, também deverá configurar um **Nome do remetente** no domínio verificado, por exemplo `admin-noreply@example.com`.

1. Escolha **Salvar alterações**.

# MFA de mensagens SMS e e-mail
<a name="user-pool-settings-mfa-sms-email-message"></a>

As mensagens de MFA por SMS e e-mail confirmam que os usuários têm acesso a um destino de mensagem antes de poderem fazer login. Elas confirmam tanto o acesso a uma senha como às mensagens SMS ou à caixa de entrada de e-mail do usuário original. O Amazon Cognito solicita que os usuários informem um código curto que seu grupo de usuários envia após fornecerem com sucesso um nome de usuário e uma senha.

A MFA por SMS e e-mail não requer configuração adicional depois que o usuário adiciona um endereço de e-mail ou um número de telefone ao perfil. O Amazon Cognito pode enviar mensagens para endereços de e-mail e números de telefone não verificados. Quando um usuário conclui sua primeira MFA, o Amazon Cognito marca seu endereço de e-mail ou número de telefone como verificado.

A autenticação de MFA começa quando um usuário com MFA insere seu nome de usuário e senha na aplicação. Seu aplicativo envia esses parâmetros iniciais em um método SDK que invoca uma solicitação de API ou. [InitiateAuth[AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) Os `ChallengeParameters` na resposta da API incluem um valor `CODE_DELIVERY_DESTINATION` que indica para onde o código de autorização foi enviado. Na aplicação, exiba um formulário que solicite que o usuário verifique o telefone e inclua um elemento de entrada para o código. Quando ele inserir o código, envie-o em uma solicitação de API de desafio-resposta para concluir o processo de login.

Depois que o usuário com MFA faz login com nome de usuário e senha nas páginas do [login gerenciado](cognito-user-pools-managed-login.md), ele automaticamente precisa fornecer o código de MFA.

Os grupos de usuários enviam mensagens SMS para a MFA e outras notificações do Amazon Cognito com os recursos do Amazon Simple Notification Service (Amazon SNS) na Conta da AWS. Da mesma forma, grupos de usuários enviam mensagens de e-mail com os recursos do Amazon Simple Email Service (Amazon SES) em sua conta. Esses serviços vinculados incorrem em seus próprios custos em sua AWS fatura de entrega de mensagens. Eles também têm requisitos adicionais para enviar mensagens em volumes de produção. Para obter mais informações, consulte os seguintes links:
+ [Configurações de mensagens SMS para grupos de usuários do Amazon Cognito](user-pool-sms-settings.md)
+ [Preços de SMS no mundo](https://aws.amazon.com/sns/sms-pricing/)
+ [Configurações de e-mail para grupos de usuários do Amazon Cognito](user-pool-email.md)
+ [Definição de preços do Amazon SES](https://aws.amazon.com/ses/pricing)

## Considerações sobre MFA para SMS e mensagens de e-mail
<a name="user-pool-settings-mfa-sms-email-message-considerations"></a>
+ Para permitir que os usuários façam login com a MFA do e-mail, seu grupo de usuários deve ter as seguintes opções de configuração:

  1. Você tem o plano de recursos Plus ou Essentials em seu grupo de usuários. Para obter mais informações, consulte [Planos de recursos de grupos de usuários](cognito-sign-in-feature-plans.md).

  1. Seu grupo de usuários envia mensagens de e-mail com seus próprios recursos do Amazon SES. Para obter mais informações, consulte [Configuração de e-mail do Amazon SES](user-pool-email.md#user-pool-email-developer).
+ O código de MFA é válido para a **Duração da sessão de fluxo de autenticação** que você definiu para o cliente da aplicação.

  Defina a duração de uma sessão de fluxo de autenticação no console do Amazon Cognito na guia **Clientes da aplicação** ao **Editar** o cliente da aplicação. Você também pode definir a duração da sessão do fluxo de autenticação em uma solicitação de API `CreateUserPoolClient` ou `UpdateUserPoolClient`. Para obter mais informações, consulte [Um exemplo de sessão de autenticação](authentication.md#amazon-cognito-user-pools-authentication-flow).
+ Quando um usuário envia corretamente um código de uma mensagem SMS ou de e-mail que o Amazon Cognito enviou para um número de telefone ou endereço de e-mail não verificado, o Amazon Cognito marca o atributo correspondente como verificado.
+ Para que um usuário faça uma alteração por autoatendimento no valor de um número de telefone ou endereço de e-mail associado à MFA, ele deve entrar e autorizar a solicitação com um token de acesso. Se não conseguir acessar o número de telefone ou endereço de e-mail atual, ele não conseguirá fazer login. Sua equipe deve alterar esses valores com AWS as credenciais de administrador nas solicitações de [AdminUpdateUserAttributes](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateUserAttributes.html)API.
+ Depois de [configurar o SMS](user-pool-sms-settings.md) em seu grupo de usuários, você não pode desativar as mensagens SMS como um fator de MFA disponível.

# MFA de token de software TOTP
<a name="user-pool-settings-mfa-totp"></a>

Quando você configura a MFA de token de software TOTP no grupo de usuários, o usuário faz login com um nome de usuário e senha e usa uma TOTP para concluir a autenticação. Depois que o usuário definir e verificar um nome de usuário e uma senha, ele poderá ativar um token de software TOTP para MFA. Se a sua aplicação usar o login gerenciado do Amazon Cognito para fazer login de usuários, o usuário enviará o nome de usuário e a senha e enviará a senha TOTP em uma página de login adicional.

Você pode ativar a MFA com TOTP para seu grupo de usuários no console do Amazon Cognito ou usar as operações da API do Amazon Cognito. No nível do grupo de usuários, você pode ligar [SetUserPoolMfaConfig](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserPoolMfaConfig.html)para configurar o MFA e habilitar o TOTP MFA.

**nota**  
Se a MFA de token do software TOTP não estiver habilitada para o grupo de usuários, o Amazon Cognito não poderá usar o token para associar nem verificar usuários. Nesse caso, os usuários recebem uma exceção `SoftwareTokenMFANotFoundException` com a descrição `Software Token MFA has not been enabled by the userPool`. Se você desativar a MFA do token de software mais tarde para o grupo de usuários, os usuários que já tiverem associado e verificado um token TOTP poderão continuar a usá-lo para a MFA.

A configuração da TOTP do usuário é um processo de várias etapas no qual o usuário recebe um código secreto que é validado com a digitação de uma senha de uso único. Em seguida, você pode ativar a MFA da TOTP para o usuário ou definir a TOTP como método de MFA preferencial para o seu usuário.

Quando você configura seu grupo de usuários para exigir a MFA com TOTP e os usuários se cadastram em sua aplicação no login gerenciado, o Amazon Cognito automatiza o processo do usuário. O Amazon Cognito solicita que o usuário selecione um método de MFA, exibe um código QR para configurar a aplicação autenticadora e verifica o registro de MFA. Em grupos de usuários em que você permitiu a escolha entre MFA por SMS e TOTP, o Amazon Cognito também oferece ao usuário uma opção de método.

**Importante**  
Quando você tem uma ACL AWS WAF da web associada a um grupo de usuários e uma regra na sua ACL da web apresenta um CAPTCHA, isso pode causar um erro irrecuperável no registro do TOTP de login gerenciado. Para criar uma regra que tenha uma ação de CAPTCHA e não afete a TOTP do login gerenciado, consulte [Configurando sua ACL AWS WAF da web para login gerenciado TOTP MFA](#totp-waf). Para obter mais informações sobre a AWS WAF web ACLs e o Amazon Cognito, consulte. [Associar uma ACL AWS WAF da web a um grupo de usuários](user-pool-waf.md)

Para implementar o TOTP MFA em uma interface de usuário personalizada com AWS um SDK e a API de grupos de usuários do [Amazon Cognito](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html), consulte. [Configurar a MFA com TOTP para um usuário](#totp-mfa-set-up-api)

Para adicionar MFA ao grupo de usuários, consulte [Adicionar MFA a um grupo de usuários](user-pool-settings-mfa.md).

**Considerações e limitações da MFA com TOTP**

1. O Amazon Cognito comporta MFA de token de software por meio de uma aplicação autenticadora que gera códigos TOTP. O Amazon Cognito não comporta MFA baseada em hardware.

1. Quando seu grupo de usuários requer uma TOTP para um usuário que não a configurou, o usuário recebe um token de acesso único que sua aplicação pode usar para ativar a MFA com TOTP para ele. Ocorrerá uma falha nas tentativas de login subsequentes enquanto o usuário não registrar um fator de login TOTP adicional.
   + O usuário que se inscreve em seu grupo de usuários com a operação de API `SignUp` ou pelo login gerenciado recebe tokens únicos ao concluir o cadastro.
   + Depois que você cria um usuário e o usuário define a senha inicial, o Amazon Cognito emite tokens únicos do login gerenciado para o usuário. Se você definir uma senha permanente para o usuário, o Amazon Cognito emitirá tokens únicos quando ele fizer login pela primeira vez.
   + O Amazon Cognito não emite tokens únicos para um usuário criado pelo administrador que faz login com as operações da API ou da API. [InitiateAuth[AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) Depois que seu usuário tiver êxito no desafio de definir a senha inicial ou se você definir uma senha permanente para ele, o Amazon Cognito imediatamente convidará o usuário a configurar a MFA.

1. Se um usuário em um grupo de usuários que requer MFA já tiver recebido um token de acesso único, mas não tiver configurado a MFA com TOTP, ele não poderá fazer login com o login gerenciado enquanto não configurar a MFA. Em vez do token de acesso, você pode usar o valor da `session` resposta de um `MFA_SETUP` desafio para [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)ou [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)em uma [AssociateSoftwareToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AssociateSoftwareToken.html)solicitação.

1. Se os usuários tiverem configurado a TOTP, eles poderão usá-la para MFA, mesmo que, posteriormente, você a função do Lambda para o grupo de usuários.

1. O Amazon Cognito só aceita TOTPs aplicativos autenticadores que geram códigos com a função hash HMAC. SHA1 Os códigos gerados com o hash SHA-256 geram um erro `Code mismatch`.

## Configurar a MFA com TOTP para um usuário
<a name="totp-mfa-set-up-api"></a>

Quando um usuário faz login pela primeira vez, sua aplicação usa o token de acesso único para gerar a chave privada TOTP e apresentá-la ao usuário em formato de texto ou código QR. O usuário configura a aplicação autenticadora e fornece uma TOTP para tentativas de login subsequentes. Sua aplicação ou login gerenciado apresenta o TOTP para o Amazon Cognito nas respostas do desafio de MFA.

Em algumas circunstâncias, o login gerenciado solicita que novos usuários configurem um autenticador TOTP. Para obter mais informações, consulte [Detalhes da lógica de MFA no runtime do usuário](user-pool-settings-mfa.md#user-pool-settings-mfa-user-outcomes).

**Topics**
+ [

### Associar o token de software TOTP
](#user-pool-settings-mfa-totp-associate-token)
+ [

### Verificar o token TOTP
](#user-pool-settings-mfa-totp-verification)
+ [

### Faça login com MFA de TOTP
](#user-pool-settings-mfa-totp-sign-in)
+ [

### Remover o token de TOTP
](#user-pool-settings-mfa-totp-remove)

### Associar o token de software TOTP
<a name="user-pool-settings-mfa-totp-associate-token"></a>

Para associar o token TOTP, envie ao usuário um código secreto que ele deve validar com uma senha única. A associação do token requer três função do Lambdas.

1. Quando seu usuário escolher o token de software TOTP MFA, ligue [AssociateSoftwareToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AssociateSoftwareToken.html)para retornar um código-chave secreto compartilhado gerado exclusivo para a conta do usuário. Você pode autorizar AssociateSoftwareToken com um token de acesso ou uma string de sessão. 

1. Sua aplicação apresenta ao usuário a chave privada ou um código QR gerado por meio da chave privada. Seu usuário deve inserir a chave em uma aplicação geradora de TOTP, como o Google Authenticator, digitalizando o código QR que sua aplicação gera com base na chave privada ou inserindo a chave manualmente.

1. O usuário insere a chave ou digitaliza o código QR em uma aplicação autentiticadora, como o Google Authenticator, e a aplicação começa a gerar códigos.

### Verificar o token TOTP
<a name="user-pool-settings-mfa-totp-verification"></a>

Depois, verifique o token TOTP. Solicite códigos de exemplo de seu usuário e os forneça ao serviço Amazon Cognito para confirmar se o usuário está gerando códigos TOTP com êxito, da forma a seguir.

1. Sua aplicação solicita um código ao usuário para demonstrar que ele configurou a aplicação autenticadora corretamente.

1. A aplicação autenticadora do usuário exibe uma senha temporária. A aplicação autenticadora usa a chave secreta que você forneceu ao usuário como base para a senha.

1. O usuário insere a senha temporária. Sua aplicação transmite a senha temporária para o Amazon Cognito em uma solicitação de API `[VerifySoftwareToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifySoftwareToken.html)`.

1.  O Amazon Cognito mantém a chave secreta associada ao usuário e gera uma TOTP e a compara com a que o usuário forneceu. Se elas corresponderem, o `VerifySoftwareToken` retornará uma resposta `SUCCESS`.

1. O Amazon Cognito associa o fator TOTP ao usuário.

1. Se a operação `VerifySoftwareToken` retornar uma resposta `ERROR`, verifique se o relógio do usuário está correto e se ele não excedeu o número máximo de novas tentativas. O Amazon Cognito aceita tokens TOTP 30 segundos antes ou depois da tentativa, para que haja uma distorção mínima no relógio. Depois de resolver o problema, tente a VerifySoftwareToken operação novamente.

### Faça login com MFA de TOTP
<a name="user-pool-settings-mfa-totp-sign-in"></a>

Nesse ponto, o usuário faz login com a senha única baseada em tempo. O processo ocorre conforme a seguir.

1. O usuário digita o nome de usuário e a senha para fazer login em sua aplicação cliente.

1. O desafio da MFA de TOTP é invocado e o usuário é solicitado pela sua aplicação a inserir uma senha temporária.

1. O usuário obtém a senha temporária de um aplicativo gerador de TOTP associado.

1. O usuário informa o código da TOTP no seu aplicativo cliente. A aplicação notifica o serviço do Amazon Cognito para verificá-lo. Para cada login, [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)deve ser chamado para obter uma resposta ao novo desafio de autenticação TOTP.

1. Se o token for verificado pelo Amazon Cognito, o login será bem-sucedido e o usuário continuará com o fluxo de autenticação. 

### Remover o token de TOTP
<a name="user-pool-settings-mfa-totp-remove"></a>

Por fim, a aplicação deve permitir que o usuário desative a configuração do TOTP. No momento, você não poderá excluir o token de software TOTP de um usuário. Para substituir o token de software do usuário, associe e confirme um novo token de software. Para desativar o TOTP MFA para um usuário, ligue para modificar seu usuário [SetUserMFAPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserMFAPreference.html)para não usar nenhum MFA ou somente MFA por SMS.

1. Crie uma interface na aplicação para usuários que desejam redefinir a MFA. Solicite que um usuário nessa interface insira a senha.

1. Se o Amazon Cognito retornar um desafio de MFA TOTP, atualize a preferência de MFA do seu usuário com. [SetUserMFAPreference](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetUserMFAPreference.html)

1. Na aplicação, comunique ao usuário que ele desativou a MFA e solicite que ele faça login novamente.

## Configurando sua ACL AWS WAF da web para login gerenciado TOTP MFA
<a name="totp-waf"></a>

Quando você tem uma ACL AWS WAF da web associada a um grupo de usuários e uma regra na sua ACL da web apresenta um CAPTCHA, isso pode causar um erro irrecuperável no registro do TOTP de login gerenciado. AWS WAF As regras de CAPTCHA *só* têm esse efeito no TOTP MFA no login gerenciado e na interface de usuário hospedada clássica. A MFA por SMS não é afetada.

O Amazon Cognito exibe o erro a seguir quando a regra de CAPTCHA não permite que um usuário conclua a configuração da MFA com TOTP. 

Solicitação não permitida devido ao captcha do WAF.

Esse erro ocorre quando AWS WAF solicita um CAPTCHA em resposta a [AssociateSoftwareToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AssociateSoftwareToken.html)solicitações de [VerifySoftwareToken](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_VerifySoftwareToken.html)API que seu grupo de usuários faz em segundo plano. Para criar uma regra que tenha uma ação de CAPTCHA e não afete o TOTP do login gerenciado, exclua os valores `AssociateSoftwareToken` e `VerifySoftwareToken` do cabeçalho `x-amzn-cognito-operation-name` da ação de CAPTCHA em sua regra.

A captura de tela a seguir mostra um exemplo de AWS WAF regra que aplica uma ação CAPTCHA a todas as solicitações que não têm um valor de `x-amzn-cognito-operation-name` cabeçalho de ou. `AssociateSoftwareToken` `VerifySoftwareToken`

![\[Uma captura de tela de uma AWS WAF regra que aplica uma ação CAPTCHA a todas as solicitações que não têm um valor de x-amzn-cognito-operation-name cabeçalho de ou. AssociateSoftwareToken VerifySoftwareToken\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/cup-WAF-rule-TOTP.png)


Para obter mais informações sobre a AWS WAF web ACLs e o Amazon Cognito, consulte. [Associar uma ACL AWS WAF da web a um grupo de usuários](user-pool-waf.md)

# Segurança avançada com proteção contra ameaças
<a name="cognito-user-pool-settings-threat-protection"></a>

Depois de criar o grupo de usuários, você terá acesso à **Proteção contra ameaças** no menu de navegação do console do Amazon Cognito. Você pode ativar os recursos de proteção contra ameaças e personalizar as ações executadas em resposta a riscos diferentes. Outra opção é usar o modo de auditoria para coletar métricas sobre riscos detectados sem aplicar mitigação de segurança. No modo de auditoria, a proteção contra ameaças publica métricas na Amazon CloudWatch. Você verá métricas depois que o Amazon Cognito gerar o primeiro evento. Consulte [Como exibir métricas de proteção contra ameaças](metrics-for-cognito-user-pools.md#user-pool-settings-viewing-threat-protection-metrics).

A proteção contra ameaças, anteriormente chamada de *recursos avançados de segurança*, é um conjunto de ferramentas de monitoramento de atividades indesejadas em seu grupo de usuários e ferramentas de configuração para encerrar automaticamente atividades possivelmente mal-intencionadas. A proteção contra ameaças tem diferentes opções de configuração para operações de autenticação padrão e personalizadas. Por exemplo, você pode querer enviar uma notificação a um usuário com um login suspeito de autenticação personalizada, no qual você configurou fatores de segurança adicionais, mas bloqueou o usuário no mesmo nível de risco com a autenticação básica por nome de usuário e senha.

A proteção contra ameaças está disponível no plano de recursos Plus. Para obter mais informações, consulte [Planos de recursos de grupos de usuários](cognito-sign-in-feature-plans.md).

As opções de grupos de usuários a seguir são os componentes da proteção contra ameaças.

**Credenciais comprometidas**  
Os usuários reutilizam senhas para várias contas de usuário. O recurso de credenciais comprometidas do Amazon Cognito compila dados de vazamentos públicos de nomes de usuário e senhas e compara as credenciais de seus usuários com listas de credenciais vazadas. A detecção de credenciais comprometidas também verifica se há senhas que possam ser deduzidas com facilidade. Você pode verificar se há credenciais comprometidas em fluxos de autenticação username-and-password padrão em grupos de usuários. O Amazon Cognito não detecta credenciais comprometidas na senha remota segura (SRP) ou na autenticação personalizada.  
Você pode selecionar as ações do usuário que solicitam a verificação de credenciais comprometidas e a ação que você deseja que o Amazon Cognito realize em resposta. Para eventos de login, inscrição e alteração de senha, o Amazon Cognito pode **Bloquear login** ou **Permitir login**. Nos dois casos, o Amazon Cognito gera um log de atividades do usuário. Nele, você pode encontrar mais informações sobre o evento.  
**Saiba mais**  
[Trabalhar com a detecção de credenciais comprometidas](cognito-user-pool-settings-compromised-credentials.md)

**Autenticação adaptável**  
O Amazon Cognito pode revisar as informações de localização e dispositivo das solicitações de login dos usuários e aplicar uma resposta automática para proteger as contas de usuário no grupo de usuários contra atividades suspeitas. Você pode monitorar a atividade do usuário e automatizar as respostas aos níveis de risco detectados no nome de usuário, senha e SRP, além da autenticação personalizada.  
Quando você ativa a proteção contra ameaças, o Amazon Cognito atribui uma pontuação de risco à atividade do usuário. Você pode atribuir uma resposta automática a atividades suspeitas: é possível **Exigir MFA**, **Bloquear login** ou apenas registrar os detalhes da atividade e a pontuação de risco. Você também pode enviar automaticamente mensagens de e-mail que notificam o usuário sobre a atividade suspeita para que ele possa redefinir a senha ou realizar outras ações autoguiadas.  
**Saiba mais**  
[Trabalhar com autenticação adaptável](cognito-user-pool-settings-adaptive-authentication.md)

**Lista de endereços IP permitidos e negados**  
Com a proteção contra ameaças do Amazon Cognito no **Modo de função completa**, você pode criar as exceções **Sempre bloquear** e **Sempre permitir** para o endereço IP. Uma sessão de um endereço IP na lista de exceções **Always block** (Bloquear sempre) não recebe um nível de risco por autenticação adaptativa e não pode fazer login no grupo de usuários.  

**O que você deve saber sobre listas de permissões e listas de bloqueio de endereços IP**
+ Você deve expressar **Sempre bloquear** e **Sempre permitir** no formato CIDR, por exemplo `192.0.2.0/24`, uma máscara de 24 bits ou `192.0.2.252/32`, um único endereço IP.
+  Dispositivos com endereços IP em um intervalo de IP **Always block** não podem se inscrever ou fazer login com aplicativos de login gerenciados ou baseados em SDK, mas podem fazer login com terceiros. IdPs 
+ As listas **Sempre permitir** e **Sempre bloquear** não afetam a atualização do token.
+ O Amazon Cognito não aplica regras de MFA de autenticação adaptável a dispositivos de um intervalo de IP **Sempre permitir**, mas aplica regras de credenciais comprometidas.

**Exportação de log**  
A proteção contra ameaças registra detalhes granulares das solicitações de autenticação dos usuários em seu grupo de usuários. Esses registros apresentam avaliações de ameaças, informações do usuário e metadados da sessão, como localização e dispositivo. Você pode criar arquivos externos desses logs para retenção e análise. Os grupos de usuários do Amazon Cognito exportam registros de proteção contra ameaças para o Amazon S3 CloudWatch , o Logs e o Amazon Data Firehose. Para obter mais informações, consulte [Como exibir e exportar o histórico de eventos do usuário](cognito-user-pool-settings-adaptive-authentication.md#user-pool-settings-adaptive-authentication-event-user-history).  
**Saiba mais**  
[Exportar logs de atividade de usuários de proteção contra ameaças](exporting-quotas-and-usage.md#exporting-quotas-and-usage-user-activity)

**Topics**
+ [

## Considerações e limitações da proteção contra ameaças
](#cognito-user-pool-threat-protection-considerations)
+ [

## Ativar a proteção contra ameaças em grupos de usuários
](#cognito-user-pool-threat-protection-activating)
+ [

## Conceitos de aplicação da proteção contra ameaças
](#cognito-user-pool-settings-threat-protection-threat-protection-enforcement)
+ [

## Proteção contra ameaças para autenticação padrão e autenticação personalizada
](#cognito-user-pool-settings-threat-protection-threat-protection-types)
+ [

## Pré-requisitos de proteção contra ameaças
](#cognito-user-pool-threat-protection-prerequisites)
+ [

## Configurar a proteção contra ameaças
](#cognito-user-pool-settings-configure-threat-protection)
+ [

# Trabalhar com a detecção de credenciais comprometidas
](cognito-user-pool-settings-compromised-credentials.md)
+ [

# Trabalhar com autenticação adaptável
](cognito-user-pool-settings-adaptive-authentication.md)
+ [

# Coletar dados para proteção contra ameaças em aplicações
](user-pool-settings-viewing-threat-protection-app.md)

## Considerações e limitações da proteção contra ameaças
<a name="cognito-user-pool-threat-protection-considerations"></a>

**As opções de proteção contra ameaças diferem entre os fluxos de autenticação**  
O Amazon Cognito aceita tanto a autenticação adaptativa quanto a detecção de credenciais comprometidas com os fluxos de autenticação `USER_PASSWORD_AUTH` e `ADMIN_USER_PASSWORD_AUTH`. Você só pode habilitar a autenticação adaptável para `USER_SRP_AUTH`. Não é possível usar a proteção contra ameaças com login federado.

**Sempre bloqueie a IPs contribuição para solicitar cotas**  
Solicitações bloqueadas de endereços IP em uma lista de exceções **Always block** (Bloquear sempre) em seu grupo de usuários contribuem para as [cotas de taxas de solicitação](https://docs.aws.amazon.com/cognito/latest/developerguide/limits.html#category_operations) de seus grupos de usuários.

**A proteção contra ameaças não aplica limites de taxa**  
Alguns tráfegos maliciosos têm a característica de um alto volume de solicitações, como ataques distribuídos de negação de serviço (DDoS). As classificações de risco que o Amazon Cognito aplica ao tráfego de entrada são por solicitação e não levam em conta o volume de solicitações. Solicitações individuais em um evento de alto volume podem receber uma pontuação de risco e uma resposta automática por motivos da camada de aplicação que não estão relacionados à sua função em um ataque volumétrico. Para implementar defesas contra ataques volumétricos em seus grupos de usuários, adicione web. AWS WAF ACLs Para obter mais informações, consulte [Associar uma ACL AWS WAF da web a um grupo de usuários](user-pool-waf.md).

**A proteção contra ameaças não afeta as solicitações M2M**  
As concessões de credenciais do cliente são destinadas à autorização machine-to-machine (M2M) sem conexão com contas de usuário. A proteção contra ameaças monitora somente contas e senhas de usuários em seu grupo de usuários. Para implementar recursos de segurança com sua atividade M2M, considere os recursos de AWS WAF monitorar as taxas e o conteúdo das solicitações. Para obter mais informações, consulte [Associar uma ACL AWS WAF da web a um grupo de usuários](user-pool-waf.md).

## Ativar a proteção contra ameaças em grupos de usuários
<a name="cognito-user-pool-threat-protection-activating"></a>

------
#### [ Amazon Cognito user pools console ]

**Como ativar a proteção contra ameaças para um grupo de usuários**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Se ainda não o fez, ative o plano de recursos Plus no menu **Configurações**.

1. Clique no menu **Proteção contra ameaças** e selecione **Ativar**.

1. Escolha **Salvar alterações**.

------
#### [ API ]

Defina seu plano de recursos como Plus em uma solicitação de [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)ou API. O exemplo parcial de corpo de solicitação a seguir define a proteção contra ameaças para o modo de função completa. Para ver um exemplo completo de solicitação, consulte [Exemplos](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html#API_CreateUserPool_Examples).

```
"UserPoolAddOns": { 
      "AdvancedSecurityMode": "ENFORCED"
   }
```

------

Proteção contra ameaças é o termo coletivo para os recursos que monitoram as operações do usuário em busca de sinais de invasão da conta e respondem automaticamente para proteger as contas de usuários afetadas. Você pode aplicar configurações de proteção contra ameaças aos usuários quando eles fazem login com fluxos de autenticação padrão e personalizados.

A proteção contra ameaças [gera](cognito-user-pool-settings-adaptive-authentication.md#user-pool-settings-adaptive-authentication-event-user-history) registros que detalham o login, a saída e outras atividades dos usuários. Você poderá exportar esses logs para um sistema de terceiros. Para obter mais informações, consulte [Como exibir e exportar o histórico de eventos do usuário](cognito-user-pool-settings-adaptive-authentication.md#user-pool-settings-adaptive-authentication-event-user-history).

## Conceitos de aplicação da proteção contra ameaças
<a name="cognito-user-pool-settings-threat-protection-threat-protection-enforcement"></a>

A proteção contra ameaças começa em um modo *somente de auditoria*, em que seu grupo de usuários monitora a atividade do usuário, atribui níveis de risco e gera logs. Como prática recomendada, execute no modo somente de auditoria por duas semanas ou mais antes de ativar o modo de função *completa*. O modo de função completa inclui um conjunto de reações automáticas às atividades de risco detectadas e senhas comprometidas. Com o modo somente de auditoria, você pode monitorar as avaliações de ameaças que o Amazon Cognito está realizando. Você também pode [fornecer feedback](cognito-user-pool-settings-adaptive-authentication.md#user-pool-settings-adaptive-authentication-feedback) para treinar o recurso sobre falsos positivos e negativos.

Você pode configurar a aplicação da proteção contra ameaças no nível do grupo de usuários para cobrir todos os clientes da aplicação no grupo de usuários e no nível de clientes de aplicações individuais. As configurações de proteção contra ameaças do cliente de aplicação substituem a configuração do grupo de usuários. Para configurar a proteção contra ameaças para um cliente de aplicação, navegue até as configurações do cliente de aplicação no menu **Clientes da aplicação** do seu grupo de usuários no console do Amazon Cognito. Lá, você pode **Usar s configurações no nível do cliente** e configurar a aplicação exclusiva para o cliente de aplicação.

Além disso, você pode configurar a proteção contra ameaças separadamente para os tipos de autenticação padrão e personalizada.

## Proteção contra ameaças para autenticação padrão e autenticação personalizada
<a name="cognito-user-pool-settings-threat-protection-threat-protection-types"></a>

As formas de configurar a proteção contra ameaças dependem do tipo de autenticação que você está fazendo em seu grupo de usuários e clientes de aplicação. Cada um dos seguintes tipos de autenticação pode ter seu próprio modo de aplicação e respostas automatizadas:

**Autenticação padrão**  
A *autenticação padrão* é o gerenciamento de login, saída e senhas do usuário com fluxos de nome de usuário e senha e no login gerenciado. A proteção contra ameaças do Amazon Cognito monitora as operações em busca de indicadores de risco quando elas fazem login com o login gerenciado ou usam os seguintes parâmetros da API `AuthFlow`:    
**[InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-AuthFlow)**  
`USER_PASSWORD_AUTH`, `USER_SRP_AUTH`. O recurso de credenciais comprometidas não tem acesso às senhas no login `USER_SRP_AUTH` e não monitora nem gerencia eventos com esse fluxo.  
**[AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-request-AuthFlow)**  
`ADMIN_USER_PASSWORD_AUTH`, `USER_SRP_AUTH`. O recurso de credenciais comprometidas não tem acesso às senhas no login `USER_SRP_AUTH` e não monitora nem gerencia eventos com esse fluxo.
Você pode definir o **Modo de imposição** para autenticação padrão como **Somente auditoria** ou **Função completa**. Para desabilitar o monitoramento de ameaças para autenticação padrão, defina proteção contra ameaças como **Sem imposição**.

**Autenticação personalizada**  
A *Autenticação personalizada* é o login do usuário com [acionadores personalizados do Lambda de desafio](user-pool-lambda-challenge.md). Não é possível fazer autenticação personalizada no login gerenciado. A proteção contra ameaças do Amazon Cognito monitora as operações em busca de indicadores de risco quando elas fazem login com o parâmetro `AuthFlow` da API de `InitiateAuth` e `AdminInitiateAuth`.  
Você pode definir o **Modo de imposição** para autenticação personalizada como **Somente auditoria**, **Função completa** ou **Sem imposição**. A opção **Sem imposição** desabilita o monitoramento de ameaças para autenticação personalizada sem afetar outros recursos da proteção contra ameaças.

## Pré-requisitos de proteção contra ameaças
<a name="cognito-user-pool-threat-protection-prerequisites"></a>

Antes de começar, você precisará fazer o seguinte:
+ Um grupo de usuários com um cliente de aplicativo. Para obter mais informações, consulte [Conceitos básicos dos grupos de usuários](getting-started-user-pools.md).
+ Defina a autenticação multifator (MFA) como **Optional** (Opcional) no console do Amazon Cognito para usar o recurso de autenticação adaptável com base em risco. Para obter mais informações, consulte [Adicionar MFA a um grupo de usuários](user-pool-settings-mfa.md).
+ Se você estiver usando notificações por e-mail, acesse o [console do Amazon SES](https://console.aws.amazon.com/ses/home) para configurar e verificar um endereço de e-mail ou um domínio a ser usado com suas notificações. Para obter mais informações sobre o Amazon SES, consulte [Verificar identidades no Amazon SES](https://docs.aws.amazon.com/ses/latest/dg/verify-addresses-and-domains.html).

## Configurar a proteção contra ameaças
<a name="cognito-user-pool-settings-configure-threat-protection"></a>

Siga estas instruções para configurar a proteção contra ameaças do grupo de usuários.

**nota**  
Para definir uma configuração diferente de proteção contra ameaças para um cliente de aplicação no console de grupos de usuários do Amazon Cognito, selecione o cliente de aplicação no menu **Clientes da aplicação** e escolha **Usar configurações no nível do cliente**.

------
#### [ Console de gerenciamento da AWS ]

**Como configurar a proteção contra ameaças para um grupo de usuários**

1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Clique no menu **Proteção contra ameaças** e selecione **Ativar**.

1. Escolha o método de proteção contra ameaças que você deseja configurar: **Autenticação padrão e personalizada**. Você pode definir diferentes modos de aplicação para autenticações personalizada e padrão, mas eles compartilham a configuração de respostas automatizadas no modo de **Função completa**.

1. Selecione **Editar**.

1. Escolha um **Modo de aplicação**. Para começar a responder imediatamente aos riscos detectados, selecione **Função completa** e configure as respostas automatizadas para credenciais comprometidas e autenticação adaptável. Para coletar informações em registros e entradas em nível de usuário CloudWatch, selecione **Somente auditoria**.

   Recomendamos manter a proteção contra ameaças no modo de auditoria por duas semanas antes de ativar as ações. Durante esse tempo, o Amazon Cognito pode aprender os padrões de uso dos usuários da aplicação, e você pode fornecer feedback de eventos para ajustar as respostas.

1. Se tiver selecionado **Audit only** (Somente auditoria), escolha **Save changes** (Salvar alterações). Se tiver selecionado **Full function** (Função completa):

   1. Selecione se vai executar uma ação **Custom** (Personalizada) ou usar **Cognito defaults** (Padrões do Cognito) para responder a **Compromised credentials** (Credenciais comprometidas) suspeitas. Os **padrões do Cognito** são:

      1. Detectar credenciais comprometidas ao **Acessar**, **Cadastrar-se**, e **Alterar senha**.

      1. Responder a credenciais comprometidas com a ação **Block sign-in** (Bloquear acesso).

   1. Se tiver selecionado ações **Personalizadas** para **Credenciais comprometidas**, escolha as ações do grupo de usuários que o Amazon Cognito usará para **Detecção de eventos** e as **Respostas a credenciais comprometidas** que deseja que o Amazon Cognito adote. É possível **Block sign-in** (Bloquear acesso) ou **Allow sign-in** (Permitir acesso) com credenciais comprometidas suspeitas.

   1. Escolha como responder a tentativas maliciosas de acesso em **Adaptive authentication** (Autenticação adaptável). Selecione se vai executar uma ação **Custom** (Personalizada) ou usar **Cognito defaults** (Padrões do Cognito) para responder a atividades maliciosas suspeitas. Quando você seleciona **Cognito defaults** (Padrões do Cognito), o Amazon Cognito bloqueia o acesso em todos os níveis de risco e não notifica o usuário.

   1. Se tiver selecionado ações **Custom** (Personalizadas) para **Adaptive authentication** (Autenticação adaptável), escolha as ações de **Automatic risk response** (Resposta automática a riscos) que o Amazon Cognito adotará em resposta aos riscos detectados com base no nível de gravidade. Quando você atribui uma resposta a um nível de risco, não é possível atribuir uma resposta menos restritiva a um nível de risco mais alto. Você pode atribuir as seguintes respostas aos níveis de risco:

      1. **Allow sign-in** (Permitir acesso): não tomar nenhuma ação preventiva.

      1. **Optional MFA** (MFA opcional): se o usuário tiver a MFA configurada, o Amazon Cognito sempre vai exigir que o usuário forneça um fator adicional de SMS ou senha de uso único com marcação temporal (TOTP) quando fizer o acesso. Se o usuário não tiver a MFA configurada, ele poderá continuar fazendo o acesso normalmente.

      1. **Require MFA** (Exigir MFA): se o usuário tiver a MFA configurada, o Amazon Cognito sempre vai exigir que o usuário forneça um fator adicional de SMS ou TOTP quando fizer o acesso. Se o usuário não tiver a MFA configurada, o Amazon Cognito solicitará que ele configure a MFA. Antes de exigir automaticamente a MFA de seus usuários, configure um mecanismo em sua aplicação para capturar números de telefone para MFA via SMS ou para registrar aplicações autenticadoras para MFA com TOTP.

      1. **Block sign-in** (Bloquear acesso): impedir que o usuário faça o acesso.

      1. **Notify user** (Notificar o usuário): enviar uma mensagem de e-mail para o usuário com informações sobre o risco que o Amazon Cognito detectou e a resposta adotada. Você pode personalizar modelos de mensagem de e-mail para as mensagens enviadas.

1. Se tiver escolhido **Notify user** (Notificar o usuário) na etapa anterior, você pode personalizar suas configurações de entrega de e-mail e modelos de mensagem de e-mail para autenticação adaptativa.

   1. Em **Configuração de e-mail**, escolha os valores para **Região SES**, **Endereço de e-mail do remetente**, **Nome do remetente** e **Endereço de e-mail do destinatário** que você deseja usar com a autenticação adaptativa. Para obter mais informações sobre como integrar as mensagens de e-mail do grupo de usuários ao Amazon Simple Email Service, consulte [Configurações de e-mail dos grupos de usuários do Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-email.html).  
![\[Histórico de eventos do usuário\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/cup-advanced-security-ses-notification.png)

   1. Expanda **Email templates** (Modelos de e-mail) para personalizar as notificações de autenticação adaptativa com as versões de mensagens de e-mail HTML e de texto simples. Para saber mais sobre modelos de mensagem de e-mail, consulte [Modelos de mensagens](cognito-user-pool-settings-message-customizations.md#cognito-user-pool-settings-message-templates).

1. Expanda **as exceções de endereço IP** para criar uma lista **sempre permitida** ou **sempre bloqueada** ou intervalos de IPv6 endereços que sempre serão permitidos IPv4 ou bloqueados, independentemente da avaliação de risco de proteção contra ameaças. Especifique os intervalos de endereços IP em [CIDR notation](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing#CIDR_notation) (Notação CIDR) (por exemplo, 192.168.100.0/24).

1. Escolha **Salvar alterações**.

------
#### [ API (user pool) ]

Para definir a configuração de proteção contra ameaças para um grupo de usuários, envie uma solicitação de [SetRiskConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html)API que inclua um `UserPoolId` parâmetro, mas não um `ClientId` parâmetro. Veja a seguir um exemplo de corpo da solicitação para um grupo de usuários. Essa configuração de risco executa uma série crescente de ações com base na gravidade do risco e notifica os usuários em todos os níveis de risco. Ela aplica um bloco de credenciais comprometidas às operações de cadastro.

Para aplicar essa configuração, você deve `AdvancedSecurityMode` defini-la `ENFORCED` em uma solicitação separada [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)ou de [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API. Para obter mais informações sobre os modelos de espaço reservado, como `{username}` neste exemplo, consulte [Configurar mensagens de MFA, autenticação, verificação e convite](cognito-user-pool-settings-message-customizations.md).

```
{
   "AccountTakeoverRiskConfiguration": { 
      "Actions": { 
         "HighAction": { 
            "EventAction": "MFA_REQUIRED",
            "Notify": true
         },
         "LowAction": { 
            "EventAction": "NO_ACTION",
            "Notify": true
         },
         "MediumAction": { 
            "EventAction": "MFA_IF_CONFIGURED",
            "Notify": true
         }
      },
      "NotifyConfiguration": { 
         "BlockEmail": { 
            "Subject": "You have been blocked for suspicious activity",
            "TextBody": "We blocked {username} at {login-time} from {ip-address}."
         },
         "From": "admin@example.com",
         "MfaEmail": { 
            "Subject": "Suspicious activity detected, MFA required",
            "TextBody": "Unexpected sign-in from {username} on device {device-name}. You must use MFA."
         },
         "NoActionEmail": { 
            "Subject": "Suspicious activity detected, secure your user account",
            "TextBody": "We noticed suspicious sign-in activity by {username} from {city}, {country} at {login-time}. If this was not you, reset your password."
         },
         "ReplyTo": "admin@example.com",
         "SourceArn": "arn:aws:ses:us-west-2:123456789012:identity/admin@example.com"
      }
   },
   "CompromisedCredentialsRiskConfiguration": { 
      "Actions": { 
         "EventAction": "BLOCK"
      },
      "EventFilter": [ "SIGN_UP" ]
   },
   "RiskExceptionConfiguration": { 
      "BlockedIPRangeList": [ "192.0.2.0/24","198.51.100.0/24" ],
      "SkippedIPRangeList": [ "203.0.113.0/24" ]
   },
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

------
#### [ API (app client) ]

Para definir a configuração de proteção contra ameaças para um cliente de aplicativo, envie uma solicitação de [SetRiskConfiguration](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SetRiskConfiguration.html)API que inclua um `UserPoolId` parâmetro e um `ClientId` parâmetro. Veja a seguir um exemplo de corpo da solicitação de um cliente de aplicação. Essa configuração de risco é mais severa do que a configuração do grupo de usuários, pois bloqueia entradas de alto risco. Também aplica blocos de credenciais comprometidas às operações de cadastro, login e redefinição de senha.

Para aplicar essa configuração, você deve `AdvancedSecurityMode` defini-la `ENFORCED` em uma solicitação separada [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)ou de [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API. Para obter mais informações sobre os modelos de espaço reservado, como `{username}` neste exemplo, consulte [Configurar mensagens de MFA, autenticação, verificação e convite](cognito-user-pool-settings-message-customizations.md).

```
{
   "AccountTakeoverRiskConfiguration": { 
      "Actions": { 
         "HighAction": { 
            "EventAction": "BLOCK",
            "Notify": true
         },
         "LowAction": { 
            "EventAction": "NO_ACTION",
            "Notify": true
         },
         "MediumAction": { 
            "EventAction": "MFA_REQUIRED",
            "Notify": true
         }
      },
      "NotifyConfiguration": { 
         "BlockEmail": { 
            "Subject": "You have been blocked for suspicious activity",
            "TextBody": "We blocked {username} at {login-time} from {ip-address}."
         },
         "From": "admin@example.com",
         "MfaEmail": { 
            "Subject": "Suspicious activity detected, MFA required",
            "TextBody": "Unexpected sign-in from {username} on device {device-name}. You must use MFA."
         },
         "NoActionEmail": { 
            "Subject": "Suspicious activity detected, secure your user account",
            "TextBody": "We noticed suspicious sign-in activity by {username} from {city}, {country} at {login-time}. If this was not you, reset your password."
         },
         "ReplyTo": "admin@example.com",
         "SourceArn": "arn:aws:ses:us-west-2:123456789012:identity/admin@example.com"
      }
   },
   "ClientId": "1example23456789",
   "CompromisedCredentialsRiskConfiguration": { 
      "Actions": { 
         "EventAction": "BLOCK"
      },
      "EventFilter": [ "SIGN_UP", "SIGN_IN", "PASSWORD_CHANGE" ]
   },
   "RiskExceptionConfiguration": { 
      "BlockedIPRangeList": [ "192.0.2.1/32","192.0.2.2/32" ],
      "SkippedIPRangeList": [ "192.0.2.3/32","192.0.2.4/32" ]
   },
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

------

# Trabalhar com a detecção de credenciais comprometidas
<a name="cognito-user-pool-settings-compromised-credentials"></a>

O Amazon Cognito pode detectar se o nome de usuário e a senha de um usuário foram comprometidos em outro local. Isso pode ocorrer quando os usuários reutilizam credenciais em mais de um local ou quando usam senhas inseguras. O Amazon Cognito confere [usuários locais](cognito-terms.md#terms-localuser) que fazem login com nome de usuário e senha, no login gerenciado e com a API do Amazon Cognito.

No menu **Proteção contra ameaças** do console do Amazon Cognito, você pode configurar **Credenciais comprometidas**. Configure **Event detection** (Detecção de eventos) para escolher os eventos do usuário que você deseja monitorar em relação a credenciais comprometidas. Configure **Compromised credentials responses** (Respostas de credenciais comprometidas) para escolher se deseja permitir ou bloquear o usuário se forem detectadas credenciais comprometidas. O Amazon Cognito pode conferir a existência de credenciais comprometidas durante o login, o cadastro e as alterações de senha.

Ao escolher **Permitir login**, você pode revisar os Amazon CloudWatch Logs para monitorar as avaliações que o Amazon Cognito faz em eventos de usuários. Para obter mais informações, consulte [Como exibir métricas de proteção contra ameaças](metrics-for-cognito-user-pools.md#user-pool-settings-viewing-threat-protection-metrics). Ao escolher **Block sign-in** (Bloquear login), o Amazon Cognito impede o login dos usuários que usam credenciais comprometidas. Quando o Amazon Cognito bloqueia o login de um usuário, ele define o [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserType.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserType.html) do usuário como `RESET_REQUIRED`. Um usuário com o status `RESET_REQUIRED` precisa alterar a senha para poder fazer login novamente.

As credenciais comprometidas podem verificar as senhas da atividade do usuário a seguir.

**Cadastrar-se**  
Seu grupo de usuários verifica as senhas que os usuários transmitem na [SignUp](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)operação e na página de inscrição do login gerenciado em busca de indicadores de comprometimento.

**Fazer login**  
Seu grupo de usuários verifica as senhas que os usuários enviam no login baseado em senha em busca de indicadores de comprometimento. O Amazon Cognito pode analisar o `ADMIN_USER_PASSWORD_AUTH` fluxo de [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)entrada, o `USER_PASSWORD_AUTH` fluxo de [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)entrada e a `PASSWORD` opção do `USER_AUTH` fluxo em ambos.  
No momento, o Amazon Cognito não confere credenciais comprometidas para operações de login com o fluxo de Secure Remote Password (SRP). O SRP envia uma prova de senha com hash durante o login. Com o Amazon Cognito não tem acesso às senhas internamente, ele só pode avaliar uma senha que seu cliente transmite para ele em texto simples.

**Redefinição de senhas**  
Seu grupo de usuários verifica os indicadores de comprometimento nas operações que definem novas senhas de usuário com a operação de redefinição [ConfirmForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html)de senha de autoatendimento. O código necessário para essa operação é gerado por [ForgotPassword[AdminResetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminResetUserPassword.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html)e.  
As credenciais comprometidas não verificam as senhas temporárias ou permanentes definidas pelo administrador definidas com. [AdminSetUserPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html) No entanto, com senhas temporárias, seu grupo de usuários verifica as senhas a partir das respostas ao `NEW_PASSWORD_REQUIRED` desafio em [RespondToAuthChallenge[AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)e.

Para adicionar proteções contra credenciais comprometidas ao grupo de usuários, consulte [Segurança avançada com proteção contra ameaças](cognito-user-pool-settings-threat-protection.md).

# Trabalhar com autenticação adaptável
<a name="cognito-user-pool-settings-adaptive-authentication"></a>

Com a autenticação adaptável, você pode configurar o grupo de usuários para bloquear logins suspeitos ou exigir a autenticação de segundo fator em resposta a um aumento no nível de risco. Para cada tentativa de login, o Amazon Cognito gera uma pontuação de risco para a probabilidade da solicitação de login ser de uma fonte comprometida. Essa pontuação de risco é baseada em fatores de dispositivo e usuário que sua aplicação fornece e outros que o Amazon Cognito extrai da solicitação. Alguns fatores que contribuem para a avaliação de risco pelo Amazon Cognito são o endereço IP, o agente do usuário e a distância geográfica de outras tentativas de login. A autenticação adaptativa pode ativar ou exigir a autenticação multifator (MFA) para um usuário em seu grupo de usuários quando o Amazon Cognito detecta riscos na sessão de um usuário e o usuário ainda não selecionou um método de MFA. Quando você ativa a MFA para um usuário, ele sempre recebe o desafio de fornecer ou configurar um segundo fator durante a autenticação, independentemente de como você configurou a autenticação adaptativa. Do ponto de vista do usuário, a aplicação oferece ajuda para configurar a MFA e, opcionalmente, o Amazon Cognito impede que ele faça login novamente até que tenha configurado um fator adicional.

O Amazon Cognito publica métricas sobre tentativas de login, seus níveis de risco e desafios fracassados para a Amazon. CloudWatch Para obter mais informações, consulte [Como exibir métricas de proteção contra ameaças](metrics-for-cognito-user-pools.md#user-pool-settings-viewing-threat-protection-metrics).

Para adicionar autenticação adaptável ao grupo de usuários, consulte [Segurança avançada com proteção contra ameaças](cognito-user-pool-settings-threat-protection.md).

**Topics**
+ [

## Visão geral da autenticação adaptável
](#security-cognito-user-pool-settings-adaptive-authentication-overview)
+ [

## Adicionar dados de sessão e dispositivo do usuário a solicitações de API
](#user-pool-settings-adaptive-authentication-device-fingerprint)
+ [

## Como exibir e exportar o histórico de eventos do usuário
](#user-pool-settings-adaptive-authentication-event-user-history)
+ [

## Como fornecer feedback sobre eventos
](#user-pool-settings-adaptive-authentication-feedback)
+ [

## Como enviar mensagens de notificação
](#user-pool-settings-adaptive-authentication-messages)

## Visão geral da autenticação adaptável
<a name="security-cognito-user-pool-settings-adaptive-authentication-overview"></a>

No menu **Proteção contra ameaças** do console do Amazon Cognito, você pode escolher as configurações de autenticação adaptável, incluindo as ações que serão executadas em diferentes níveis de risco e a personalização de mensagens de notificação que serão enviadas aos usuários. É possível atribuir uma configuração de proteção contra ameaças a todos os seus clientes de aplicações, mas aplicar uma configuração no nível de cliente a clientes de aplicações individuais.

A autenticação adaptativa do Amazon Cognito atribui um dos seguintes níveis de risco a cada sessão do usuário: **Alto**, **Médio**, **Baixo** ou **Sem risco**.

Considere suas opções com cuidado ao alterar seu **Enforcement method** (método de aplicação) de **Audit-only** (Somente auditoria) para **Full-function** (Função completa). As respostas automáticas que você aplica aos níveis de risco influenciam o nível de risco que o Amazon Cognito atribui às sessões de usuário subsequentes com as mesmas características. Por exemplo, depois de optar por não realizar nenhuma ação ou permitir (**Allow**) sessões de usuário que o Amazon Cognito inicialmente avalia como de alto risco, o Amazon Cognito considera que sessões semelhantes têm um risco menor.


**Para cada nível de risco, você pode escolher as seguintes opções:**  

|  Opção  |  Ação  | 
| --- | --- | 
| Permitir | Os usuários podem fazer login sem um fator adicional. | 
| MFA opcional | Os usuários que tiverem um segundo fator configurado deverão concluir um segundo desafio de fator para fazer login. Um número de telefone para SMS e um token de software TOTP são o segundo fator disponível. Usuários sem um segundo fator configurado podem fazer login apenas com um conjunto de credenciais. | 
| Solicitar MFA | Os usuários que tiverem um segundo fator configurado deverão concluir um segundo desafio de fator para fazer login. O Amazon Cognito bloqueia o login para usuários que não têm um segundo fator configurado. | 
| Bloquear | O Amazon Cognito bloqueia todas as tentativas de login no nível de risco designado. | 

**nota**  
Não é necessário confirmar os números de telefone para usá-los para SMS como segundo fator de autenticação.

## Adicionar dados de sessão e dispositivo do usuário a solicitações de API
<a name="user-pool-settings-adaptive-authentication-device-fingerprint"></a>

Você pode coletar e transmitir informações sobre a sessão do usuário à proteção contra ameaças do Amazon Cognito ao usar a API para inscrevê-lo, fazer seu login e redefinir sua senha. Essas informações incluem o endereço IP do usuário e um identificador de dispositivo exclusivo.

É possível ter um dispositivo de rede intermediário entre seus usuários e o Amazon Cognito, como um serviço proxy ou um servidor de aplicações. Você pode coletar dados de contexto dos usuários e transmiti-los ao Amazon Cognito para que a autenticação adaptativa calcule seu risco com base nas características do endpoint do usuário, em vez de seu servidor ou proxy. Se a aplicação do lado do cliente chamar as operações da API do Amazon Cognito diretamente, a autenticação adaptativa registrará automaticamente o endereço IP de origem. No entanto, outras informações sobre o dispositivo não serão registradas, como o `user-agent`, a menos que você também colha uma impressão digital do dispositivo.

Gere esses dados com a biblioteca de coleta de dados de contexto do Amazon Cognito e envie-os para a proteção contra ameaças do Amazon Cognito com [ContextData](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ContextDataType.html)os parâmetros e. [UserContextData](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserContextDataType.html) A biblioteca de coleta de dados de contexto está incluída no AWS SDKs. Para obter mais informações, consulte [Integração da autenticação e autorização do Amazon Cognito com aplicações móveis e da web](cognito-integrate-apps.md). Você pode enviar `ContextData` se tiver o plano de recursos Plus. Para obter mais informações, consulte [Configurar a proteção contra ameaças](cognito-user-pool-settings-threat-protection.md#cognito-user-pool-settings-configure-threat-protection).

Ao chamar essas operações de API autenticadas do Amazon Cognito do seu servidor de aplicações, transmita o IP do dispositivo do usuário no parâmetro `ContextData`. Além disso, transmita o nome e o caminho do servidor, bem como os dados de impressão digital do dispositivo codificado.
+ [AdminInitiateAuth ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)
+ [AdminRespondToAuthChallenge ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html)

Ao chamar as operações de API não autenticadas do Amazon Cognito, você pode enviar `UserContextData` à proteção contra ameaças do Amazon Cognito. Esses dados incluem uma impressão digital do dispositivo no parâmetro `EncodedData`. Você também pode enviar um parâmetro `IpAddress` em `UserContextData` se atender às seguintes condições:
+ Seu grupo de usuários está no plano de recursos Plus. Para obter mais informações, consulte [Planos de recursos de grupos de usuários](cognito-sign-in-feature-plans.md).
+ O cliente da aplicação tem um segredo do cliente. Para obter mais informações, consulte [Configurações específicas da aplicação com clientes de aplicação](user-pool-settings-client-apps.md).
+ Você ativou a opção **Accept additional user context data** (Aceitar dados de contexto do usuário adicionais) no cliente da aplicação. Para obter mais informações, consulte [Aceitar dados de contexto do usuário adicionais (Console de gerenciamento da AWS)](#user-pool-settings-adaptive-authentication-accept-user-context-data).

Sua aplicação pode preencher o parâmetro `UserContextData` com dados codificados de impressão digital e o endereço IP do dispositivo do usuário nestas operações de API não autenticadas do Amazon Cognito.
+ [InitiateAuth ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html)
+ [RespondToAuthChallenge ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)
+ [SignUp ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)
+ [ConfirmSignUp ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmSignUp.html)
+ [ForgotPassword ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html)
+ [ConfirmForgotPassword ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ConfirmForgotPassword.html)
+ [ResendConfirmationCode ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ResendConfirmationCode.html)

### Aceitar dados de contexto do usuário adicionais (Console de gerenciamento da AWS)
<a name="user-pool-settings-adaptive-authentication-accept-user-context-data"></a>

Seu grupo de usuários aceita um endereço IP em um parâmetro `UserContextData` depois que você ativa o recurso **Accept additional user context data** (Aceitar dados de contexto do usuário adicionais). Não será necessário ativar esse recurso se:
+ Seus usuários só fazem login com operações de API autenticadas [AdminInitiateAuth ](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html), como, e você usa o `ContextData` parâmetro.
+ Você quiser que suas operações de API não autenticadas só enviem uma impressão digital do dispositivo, mas não um endereço IP, à proteção contra ameaças do Amazon Cognito.

Atualize o cliente da aplicação da maneira a seguir no console do Amazon Cognito para adicionar suporte para dados de contexto do usuário adicionais.

1. Faça login no [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home).

1. No painel de navegação, selecione **Manage your User Pools** e escolha o grupo de usuários que você deseja editar.

1. Clique no menu **Clientes da aplicação**.

1. Escolha ou crie um cliente da aplicação. Para obter mais informações, consulte [Configurar um cliente da aplicação do grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-app-idp-settings.html).

1. Escolha **Edit** (Editar) no contêiner **App client information** (Informações do cliente da aplicação).

1. Em **Advanced authentication settings** (Configurações de autenticação avançada) do cliente da aplicação, escolha **Accept additional user context data** (Aceitar dados de contexto do usuário adicionais).

1. Escolha **Salvar alterações**.

Para configurar seu cliente de aplicativo para aceitar dados de contexto do usuário na API do Amazon Cognito, `EnablePropagateAdditionalUserContextData` defina como `true` em uma solicitação [CreateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPoolClient.html)ou [UpdateUserPoolClient](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html). Para obter informações sobre como trabalhar com a proteção contra ameaças na aplicação web ou móvel, consulte [Coletar dados para proteção contra ameaças em aplicações](user-pool-settings-viewing-threat-protection-app.md). Quando a aplicação chamar o Amazon Cognito do servidor, colete dados de contexto do usuário no lado do cliente. Veja a seguir um exemplo que usa o método JavaScript `getData` SDK.

```
var EncodedData = AmazonCognitoAdvancedSecurityData.getData(username, userPoolId, clientId);
```

Quando você estiver criando sua aplicação para usar a autenticação adaptativa, é recomendável incorporar nela o SDK mais recente do Amazon Cognito. A versão mais recente do SDK coleta informações de impressão digital do dispositivo, como ID, modelo e fuso horário. Para obter mais informações sobre o Amazon Cognito SDKs, consulte [Instalar um SDK de grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-sdk-links.html). A proteção contra ameaças do Amazon Cognito só salva e atribui uma pontuação de risco aos eventos enviados pela aplicação no formato correto. Se o Amazon Cognito retornar uma resposta de erro, verifique se sua solicitação inclui um hash secreto válido e se o `IPaddress` parâmetro é um endereço ou válido IPv4 . IPv6 

**Recursos de `ContextData` e `UserContextData`**
+ AWS Amplify SDK para Android: [GetUserContextData](https://github.com/aws-amplify/aws-sdk-android/blob/main/aws-android-sdk-cognitoidentityprovider/src/main/java/com/amazonaws/mobileconnectors/cognitoidentityprovider/CognitoUserPool.java#L626)
+ AWS Amplify SDK para iOS: [userContextData](https://github.com/aws-amplify/aws-sdk-ios/blob/d3cd4fa0086b526f2f5c9c6c58880c9da7004c66/AWSCognitoIdentityProviderASF/AWSCognitoIdentityProviderASF.m#L21)
+ JavaScript: [amazon-cognito-advanced-security-data.min.js](https://amazon-cognito-assets.us-east-1.amazoncognito.com/amazon-cognito-advanced-security-data.min.js)

## Como exibir e exportar o histórico de eventos do usuário
<a name="user-pool-settings-adaptive-authentication-event-user-history"></a>

O Amazon Cognito gera um log para cada evento de autenticação de um usuário quando você habilita a proteção contra ameaças. Por padrão, você pode visualizar os registros do usuário no menu **Usuários** no console do Amazon Cognito ou com a operação da [AdminListUserAuthEvents](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListUserAuthEvents.html)API. Você também pode exportar esses eventos para um sistema externo, como CloudWatch Logs, Amazon S3 ou Amazon Data Firehose. O recurso de exportação pode tornar as informações de segurança sobre a atividade do usuário em sua aplicação mais acessíveis aos seus próprios sistemas de análise de segurança.

**Topics**
+ [

### Como exibir o histórico de eventos do usuário (Console de gerenciamento da AWS)
](#user-pool-settings-adaptive-authentication-event-user-history-console)
+ [

### Como exibir o histórico de eventos do usuário (API/CLI)
](#user-pool-settings-adaptive-authentication-event-user-history-api-cli)
+ [

### Como exportar eventos de autenticação de usuários
](#user-pool-settings-adaptive-authentication-event-user-history-exporting)

### Como exibir o histórico de eventos do usuário (Console de gerenciamento da AWS)
<a name="user-pool-settings-adaptive-authentication-event-user-history-console"></a>

Para ver o histórico de logins de um usuário, é possível selecionar o usuário no menu **Usuários** no console do Amazon Cognito. O Amazon Cognito mantém o histórico de eventos do usuário por dois anos.

![\[Histórico de eventos do usuário\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/cup-advanced-security-event-history.png)


Cada evento de login tem um ID de evento. O evento também tem dados de contexto correspondentes, como localização, detalhes do dispositivo e resultados da detecção de risco.

Você também pode correlacionar o ID do evento com o token que o Amazon Cognito emitiu no momento em que gravou o evento. O ID e os tokens de acesso incluem esse ID de evento em sua carga útil. O Amazon Cognito também correlaciona o uso de token de atualização ao ID do evento original. É possível rastrear o ID do evento original de volta para o ID do evento de login que resultou na emissão de tokens do Amazon Cognito. Você pode rastrear o uso de um token em seu sistema para determinado evento de autenticação. Para obter mais informações, consulte [Compreendendo os tokens web JSON do grupo de usuários () JWTs](amazon-cognito-user-pools-using-tokens-with-identity-providers.md).

### Como exibir o histórico de eventos do usuário (API/CLI)
<a name="user-pool-settings-adaptive-authentication-event-user-history-api-cli"></a>

[Você pode consultar o histórico de eventos do usuário com a operação da API do Amazon Cognito [AdminListUserAuthEvents](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminListUserAuthEvents.html)ou com o AWS Command Line Interface (AWS CLI) com admin-list-user-auth -events.](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/admin-list-user-auth-events.html)

------
#### [ AdminListUserAuthEvents request ]

O corpo da solicitação a seguir `AdminListUserAuthEvents` retorna o log de atividades mais recente de um usuário.

```
{
  "UserPoolId": "us-west-2_EXAMPLE", 
  "Username": "myexampleuser", 
  "MaxResults": 1
}
```

------
#### [ admin-list-user-auth-events request ]

A solicitação a seguir `admin-list-user-auth-events` retorna o log de atividades mais recente de um usuário.

```
aws cognito-idp admin-list-user-auth-events --max-results 1 --username myexampleuser --user-pool-id us-west-2_EXAMPLE
```

------
#### [ Response ]

O Amazon Cognito retorna o mesmo corpo de resposta JSON para as duas solicitações. Veja um exemplo de resposta para um evento de login de login gerenciado que não continha fatores de risco:

```
{
    "AuthEvents": [
        {
            "EventId": "[event ID]",
            "EventType": "SignIn",
            "CreationDate": "[Timestamp]",
            "EventResponse": "Pass",
            "EventRisk": {
                "RiskDecision": "NoRisk",
                "CompromisedCredentialsDetected": false
            },
            "ChallengeResponses": [
                {
                    "ChallengeName": "Password",
                    "ChallengeResponse": "Success"
                }
            ],
            "EventContextData": {
                "IpAddress": "192.168.2.1",
                "DeviceName": "Chrome 125, Windows 10",
                "Timezone": "-07:00",
                "City": "Bellevue",
                "Country": "United States"
            }
        }
    ],
    "NextToken": "[event ID]#[Timestamp]"
}
```

------

### Como exportar eventos de autenticação de usuários
<a name="user-pool-settings-adaptive-authentication-event-user-history-exporting"></a>

Configure seu grupo de usuários para exportar eventos de usuário da proteção contra ameaças para um sistema externo. Os sistemas externos compatíveis — Amazon S3, CloudWatch Logs e Amazon Data Firehose — podem adicionar custos à sua AWS fatura pelos dados que você envia ou recupera. Para obter mais informações, consulte [Exportar logs de atividade de usuários de proteção contra ameaças](exporting-quotas-and-usage.md#exporting-quotas-and-usage-user-activity).

------
#### [ Console de gerenciamento da AWS ]

1. Faça login no [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home).

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Clique no menu **Fluxo de logs**. Selecione **Editar**.

1. Em **Status de registro em log**, marque a caixa de seleção ao lado de **Ativar exportação do log de atividades do usuário**.

1. Em **Logging destination**, escolha o AWS service (Serviço da AWS) que você deseja manipular com seus registros: **grupo de CloudWatch registros**, **stream do Amazon Data Firehose** ou bucket do **S3**.

1. Sua seleção preencherá o seletor de recursos com o tipo de recurso correspondente. Selecione um grupo de logs, stream ou bucket na lista. Você também pode selecionar o botão **Criar** para ir ao Console de gerenciamento da AWS do serviço selecionado e criar um novo recurso.

1. Selecione **Salvar alterações**.

------
#### [ API ]

Escolha um tipo de destino para seus logs de atividades do usuário.

Veja a seguir um exemplo de corpo de solicitação `SetLogDeliveryConfiguration` que define um stream do Firehose como o destino do log.

```
{
   "LogConfigurations": [
      {
         "EventSource": "userAuthEvents",
         "FirehoseConfiguration": {
            "StreamArn": "arn:aws:firehose:us-west-2:123456789012:deliverystream/example-user-pool-activity-exported"
         },
         "LogLevel": "INFO"
      }
   ],
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

Veja a seguir um exemplo de corpo de solicitação `SetLogDeliveryConfiguration` que define um bucket do Amazon S3 como o destino do log.

```
{
   "LogConfigurations": [
      {
         "EventSource": "userAuthEvents",
         "S3Configuration": { 
            "BucketArn": "arn:aws:s3:::amzn-s3-demo-logging-bucket"
         },
         "LogLevel": "INFO"
      }
   ],
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

Veja a seguir um exemplo de corpo de `SetLogDeliveryConfiguration` solicitação que define um grupo de CloudWatch registros como o destino do registro.

```
{
   "LogConfigurations": [
      {
         "EventSource": "userAuthEvents",
         "CloudWatchLogsConfiguration": { 
            "LogGroupArn": "arn:aws:logs:us-west-2:123456789012:log-group:DOC-EXAMPLE-LOG-GROUP"
         },
         "LogLevel": "INFO"
      }
   ],
   "UserPoolId": "us-west-2_EXAMPLE"
}
```

------

## Como fornecer feedback sobre eventos
<a name="user-pool-settings-adaptive-authentication-feedback"></a>

Os feedbacks sobre eventos não só afetam a avaliação de risco em tempo real, mas também aprimoram o algoritmo de avaliação de risco ao longo do tempo. Você pode fornecer feedback sobre a validade das tentativas de login por meio do console do Amazon Cognito e das operações de API. 

**nota**  
O feedback de seu evento influencia o nível de risco que o Amazon Cognito atribui às sessões de usuário subsequentes com as mesmas características.

No console do Amazon Cognito, selecione um usuário na guia **Usuários** e selecione **Fornecer feedback de evento**. É possível revisar os detalhes do evento e definir como válido (**Set as valid** ou definir como inválido (**Set as invalid**).

O console lista o histórico de login em detalhes do usuário no menu **Usuários**. Se você selecionar uma entrada, poderá marcar o evento como válido ou não válido. Você também pode fornecer feedback por meio da operação da API do grupo [AdminUpdateAuthEventFeedback](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminUpdateAuthEventFeedback.html)de usuários e do AWS CLI comando [admin-update-auth-event-feedback](https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/admin-update-auth-event-feedback.html). 

Ao selecionar **Set as valid** (Definir como válido) no console do Amazon Cognito ou fornecer um valor `FeedbackValue` de `valid` na API, você diz ao Amazon Cognito que confia em uma sessão de usuário em que o Amazon Cognito avaliou algum nível de risco. Ao selecionar **Set as invalid** (Definir como inválido) no console do Amazon Cognito ou fornecer um valor `FeedbackValue` de `invalid` na API, você diz ao Amazon Cognito que não confia em uma sessão de usuário ou não acredita que o Amazon Cognito avaliou um nível de risco alto o suficiente.

## Como enviar mensagens de notificação
<a name="user-pool-settings-adaptive-authentication-messages"></a>

Com a proteção contra ameaças, o Amazon Cognito pode notificar seus usuários sobre tentativas de login arriscadas. O Amazon Cognito também pode solicitar que os usuários selecionem links para indicar se o login foi ou não válido. O Amazon Cognito usa esse feedback para melhorar a precisão da detecção de riscos para seu grupo de usuários. 

**nota**  
O Amazon Cognito só envia mensagens de notificação aos usuários quando a ação deles gera uma resposta automática ao risco: bloquear o login, permitir o login, definir a MFA como opcional ou exigir a MFA. Algumas solicitações podem ter um nível de risco atribuído, mas não geram respostas de risco automatizadas de autenticação adaptável. Para elas, seu grupo de usuários não envia notificações. Por exemplo, senhas incorretas podem ser registradas com uma classificação de risco, mas a resposta do Amazon Cognito é falha do login, não aplicar uma regra de autenticação adaptável.

Na seção **Automatic risk response** (Resposta automática a riscos), selecione **Notify Users** (Notificar usuários) para os casos de baixo, médio e alto risco.

![\[Notificar usuários\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/cup-adaptive-auth.png)


O Amazon Cognito envia notificações por e-mail aos seus usuários, independentemente de eles terem verificado o endereço de e-mail.

Você pode personalizar mensagens de e-mail de notificação e disponibilizá-las em versões de texto simples e HTML. Para personalizar suas notificações por e-mail, abra **Modelos de e-mail** em **Mensagens de autenticação adaptável** em sua configuração de proteção contra ameaças. Para saber mais sobre modelos de e-mail, consulte [Modelos de mensagens](cognito-user-pool-settings-message-customizations.md#cognito-user-pool-settings-message-templates).

# Coletar dados para proteção contra ameaças em aplicações
<a name="user-pool-settings-viewing-threat-protection-app"></a>

A [autenticação adaptável](cognito-user-pool-settings-adaptive-authentication.md) do Amazon Cognito avalia os níveis de risco de tentativa de invasão da conta a partir de detalhes contextuais das tentativas de login dos usuários. A aplicação deve adicionar *dados de contexto* às solicitações de API para que a proteção contra ameaças do Amazon Cognito possa avaliar os riscos com mais precisão. Dados de contexto são informações como endereço IP, agente do navegador, informações do dispositivo e cabeçalhos de solicitação que fornecem informações contextuais sobre como o usuário se conectou ao grupo de usuários.

A responsabilidade central de uma aplicação que envia esse contexto ao Amazon Cognito é um parâmetro `EncodedData` nas solicitações de autenticação para grupos de usuários. Para adicionar esses dados às suas solicitações, você pode implementar o Amazon Cognito com um SDK que gera automaticamente essas informações para você, ou você pode implementar um módulo para JavaScript iOS ou Android que coleta esses dados. Aplicativos *somente para clientes* que fazem solicitações diretas ao Amazon Cognito devem ser implementados. AWS Amplify SDKs As aplicações *cliente-servidor* que têm um servidor intermediário ou componente de API devem implementar um módulo SDK separado.

Nos cenários a seguir, seu frontend de autenticação gerencia a coleta de dados de contexto do usuário sem qualquer configuração adicional:
+ O login gerenciado coleta e envia automaticamente dados de contexto para a proteção contra ameaças.
+ Todas as AWS Amplify bibliotecas têm coleta de dados contextuais incorporada em seus métodos de autenticação.

## Envio de dados de contexto do usuário em aplicações somente para clientes com Amplify
<a name="user-pool-settings-viewing-threat-protection-app-amplify"></a>

![\[Uma visão geral da coleta de dados para proteção contra ameaças em uma aplicação Amplify.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/user-pools-asf-amplify-data-collection.png)


O Amplify SDKs oferece suporte a clientes móveis que se autenticam diretamente no Amazon Cognito. Clientes desse tipo fazem solicitações diretas de API às operações públicas de API do Amazon Cognito. Por padrão, os clientes do Amplify coletam automaticamente dados de contexto para a proteção contra ameaças.

Os aplicativos Amplify com JavaScript são uma exceção. Eles exigem a adição de um [JavaScript módulo](#user-pool-settings-viewing-threat-protection-app-additional-resources-js) que coleta dados de contexto do usuário.

Normalmente, um aplicativo nessa configuração usa operações de API não autenticadas, como e. [InitiateAuth[RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) O [UserContextData](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserContextDataType.html)objeto ajuda a avaliar os riscos com mais precisão nessas operações. O Amplify SDKs adiciona informações do dispositivo e da sessão a um `EncodedData` parâmetro de. `UserContextData`

## Coletar dados de contexto em aplicações cliente-servidor
<a name="user-pool-settings-viewing-threat-protection-app-server-side"></a>

Algumas aplicações têm um nível de frontend que coleta dados de autenticação do usuário e um nível de backend de aplicações que envia solicitações de autenticação para o Amazon Cognito. Essa é uma arquitetura comum em servidores web e aplicações auxiliadas por microsserviços. Nessas aplicações, você deve importar uma biblioteca pública de coleta de dados contextuais.

![\[Uma visão geral da autenticação do lado do servidor com dados de contexto de proteção contra ameaças em. JavaScript\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/user-pools-asf-non-amplify-data-collection.png)


Normalmente, um servidor de aplicativos nessa configuração usa operações de API autenticadas, como [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html)e. [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html) O [ContextData](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-request-ContextData)objeto ajuda o Amazon Cognito a avaliar os riscos dessas operações com mais precisão. O conteúdo de `ContextData` são os dados codificados que o frontend passou para o servidor e detalhes adicionais da solicitação HTTP do usuário para o servidor. Esses detalhes adicionais de contexto, como os cabeçalhos HTTP e o endereço IP, fornecem ao servidor de aplicações as características do ambiente do usuário.

Seu servidor de aplicativos também pode fazer login com operações de API não autenticadas, como e. [InitiateAuth[RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) O [UserContextData](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html#CognitoUserPools-InitiateAuth-request-UserContextData)objeto informa a análise de risco de proteção contra ameaças nessas operações. As operações nas bibliotecas de coleta de dados de contexto público disponíveis adicionam informações de segurança ao parâmetro `EncodedData` nas solicitações de autenticação. Além disso, configure seu grupo de usuários para aceitar dados de contexto adicionais e adicionar o IP de origem do usuário ao parâmetro `IpAddress` de `UserContextData`.

**Para adicionar dados de contexto a aplicações cliente-servidor**

1. Em seu aplicativo front-end, colete dados de contexto codificados do cliente com um [iOS, Android](#user-pool-settings-viewing-threat-protection-app-additional-resources) ou módulo. JavaScript 

1. Passe os dados codificados e os detalhes da solicitação de autenticação para seu servidor de aplicações.

1. No seu servidor de aplicações, extraia o endereço IP do usuário, os cabeçalhos HTTP relevantes, o nome do servidor solicitado e o caminho da solicitação HTTP. Preencha esses valores com o [ContextData](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html#CognitoUserPools-AdminInitiateAuth-request-ContextData)parâmetro da sua solicitação de API para o Amazon Cognito.

1. Preencha o parâmetro `EncodedData` de `ContextData` na solicitação de API com os dados codificados do dispositivo que seu módulo SDK coletou. Adicione esses dados de contexto à solicitação de autenticação.

## Bibliotecas de dados de contexto para aplicações cliente-servidor
<a name="user-pool-settings-viewing-threat-protection-app-additional-resources"></a>

### JavaScript
<a name="user-pool-settings-viewing-threat-protection-app-additional-resources-js"></a>

O módulo `amazon-cognito-advanced-security-data.min.js` coleta `EncodedData` que você pode passar para o servidor de aplicações.

Adicione o `amazon-cognito-advanced-security-data.min.js` módulo à sua JavaScript configuração. `<region>`Substitua por um Região da AWS da lista a seguir: `us-east-1``us-east-2`,`us-west-2`,`eu-west-1`,`eu-west-2`, ou`eu-central-1`.

```
<script src="https://amazon-cognito-assets.<region>.amazoncognito.com/amazon-cognito-advanced-security-data.min.js"></script>
```

Para gerar um `encodedContextData` objeto que você possa usar no `EncodedData` parâmetro, adicione o seguinte à fonte do JavaScript aplicativo:

```
var encodedContextData = AmazonCognitoAdvancedSecurityData.getData(_username, _userpoolId, _userPoolClientId);
```

### iOS/Swift
<a name="user-pool-settings-viewing-threat-protection-app-additional-resources-ios"></a>

Para gerar dados de contexto, os aplicativos iOS podem integrar o [AWSCognitoIdentityProvidermódulo](https://github.com/aws-amplify/aws-sdk-ios/tree/main/AWSCognitoIdentityProviderASF) ASF do [Mobile SDK para](https://github.com/aws-amplify/aws-sdk-ios/tree/main) iOS.

Para coletar dados de contexto codificados para proteção contra ameaças, adicione o seguinte trecho à aplicação:

```
import AWSCognitoIdentityProviderASF

let deviceId = getDeviceId()
let encodedContextData = AWSCognitoIdentityProviderASF.userContextData(
                            userPoolId, 
                            username: username, 
                            deviceId: deviceId, 
                            userPoolClientId: userPoolClientId)
                                
/**
 * Reuse DeviceId from keychain or generate one for the first time.
 */
func getDeviceId() -> String {
    let deviceIdKey = getKeyChainKey(namespace: userPoolId, key: "AWSCognitoAuthAsfDeviceId")
    
   if let existingDeviceId = self.keychain.string(forKey: deviceIdKey) {
        return existingDeviceId
    }

    let newDeviceId = UUID().uuidString
    self.keychain.setString(newDeviceId, forKey: deviceIdKey)
    return newDeviceId
}

/**
 * Get a namespaced keychain key given a namespace and key
 */    
func getKeyChainKey(namespace: String, key: String) -> String {
    return "\(namespace).\(key)"
}
```

### Android
<a name="user-pool-settings-viewing-threat-protection-app-additional-resources-android"></a>

Para gerar dados de contexto, os aplicativos Android podem integrar o [aws-android-sdk-cognitoidentityprovidermódulo](https://github.com/aws-amplify/aws-sdk-android/tree/main/aws-android-sdk-cognitoidentityprovider-asf) -asf do [Mobile SDK for](https://github.com/aws-amplify/aws-sdk-android/tree/main) Android.

Para coletar dados de contexto codificados para proteção contra ameaças, adicione o seguinte trecho à aplicação:

```
UserContextDataProvider provider = UserContextDataProvider.getInstance();
// context here is android application context.
String encodedContextData = provider.getEncodedContextData(context, username, userPoolId, userPoolClientId);
```

# Associar uma ACL AWS WAF da web a um grupo de usuários
<a name="user-pool-waf"></a>

AWS WAF é um firewall de aplicativos da web. Com uma lista de controle de acesso à AWS WAF web (web ACL), você pode proteger seu grupo de usuários contra solicitações indesejadas para sua interface de usuário hospedada clássica, login gerenciado e endpoints de serviço da API Amazon Cognito. A ACL da web oferece controle detalhado sobre todas as solicitações web HTTPS às quais o grupo de usuários responde. Para obter mais informações sobre a AWS WAF web ACLs, consulte [Gerenciando e usando uma lista de controle de acesso à web (Web ACL)](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl.html) no *Guia do AWS WAF desenvolvedor*.

Quando você tem uma ACL AWS WAF da web associada a um grupo de usuários, o Amazon Cognito encaminha cabeçalhos e conteúdos não confidenciais selecionados das solicitações de seus usuários para. AWS WAF AWS WAF inspeciona o conteúdo da solicitação, compara com as regras que você especificou na sua ACL da web e retorna uma resposta ao Amazon Cognito.

## Coisas que você deve saber sobre a AWS WAF web ACLs e o Amazon Cognito
<a name="user-pool-waf-things-to-know"></a>
+ Você não pode configurar as regras de Web ACL para corresponder às informações de identificação pessoal (PII) nas solicitações do grupo de usuários, por exemplo, nomes de usuário, senhas, números de telefone ou endereços de e-mail. Esses dados não estarão disponíveis para AWS WAF. Em vez disso, configure suas regras de Web ACL para corresponder aos dados da sessão nos cabeçalhos, no caminho e no corpo, como endereços IP, agentes do navegador e operações de API solicitadas.
+ As condições das regras da Web ACL só podem retornar respostas de bloco personalizadas à **primeira** solicitação dos usuários em uma página de login gerenciada interativa com o usuário. Quando as conexões subsequentes correspondem a uma condição de resposta de bloco personalizada, elas retornam seu código de status, cabeçalho e respostas de redirecionamento personalizados, mas uma mensagem de bloqueio padrão.
+ Solicitações bloqueadas por AWS WAF não contam para a cota de taxa de solicitação de nenhum tipo de solicitação. O AWS WAF manipulador é chamado antes dos manipuladores de limitação no nível da API.
+ Quando você cria uma ACL da web, há um pequeno tempo de espera até que a ACL da web seja totalmente propagada e esteja disponível para o Amazon Cognito. O tempo de propagação pode ser de alguns segundos a alguns minutos. AWS WAF retorna a [https://docs.aws.amazon.com/waf/latest/APIReference/API_AssociateWebACL.html#API_AssociateWebACL_Errors](https://docs.aws.amazon.com/waf/latest/APIReference/API_AssociateWebACL.html#API_AssociateWebACL_Errors)quando você tenta associar uma ACL da web antes que ela seja totalmente propagada.
+ É possível associar uma Web ACL a cada grupo de usuários.
+ Sua solicitação pode ocasionar uma carga útil acima dos limites inspecionados pelo AWS WAF . Consulte [Tratamento de componentes de solicitações de tamanho grande](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statement-oversize-handling.html) no *Guia do AWS WAF desenvolvedor* para saber como configurar como lidar AWS WAF com solicitações de grandes dimensões do Amazon Cognito.
+ Você não pode associar uma ACL da web que usa a [prevenção de aquisição de contas (ATP) do AWS WAF Fraud Control](https://docs.aws.amazon.com/waf/latest/developerguide/waf-atp.html) a um grupo de usuários do Amazon Cognito. O recurso ATP está no grupo de regras gerenciadas `AWS-AWSManagedRulesATPRuleSet`. Antes de associar uma Web ACL a um grupo de usuários, certifique-se de que ela não usa esse grupo de regras gerenciadas.
+ Quando você tem uma ACL AWS WAF da web associada a um grupo de usuários e uma regra na sua ACL da web apresenta um CAPTCHA, isso pode causar um erro irrecuperável no registro do TOTP de login gerenciado. Para criar uma regra que tenha uma ação de CAPTCHA e não afete a TOTP do login gerenciado, consulte [Configurando sua ACL AWS WAF da web para login gerenciado TOTP MFA](user-pool-settings-mfa-totp.md#totp-waf).

AWS WAF inspeciona solicitações para os seguintes endpoints.

**Login gerenciado e a IU hospedada clássica**  
Solicitações a todos os endpoints no [Referência de login gerenciado e endpoints do grupo de usuários](cognito-userpools-server-contract-reference.md).

**Operações públicas de API**  
Solicitações do seu aplicativo para a API do Amazon Cognito que não usam AWS credenciais para autorizar. Isso inclui operações de API como [InitiateAuth[RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html)](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html), [GetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html)e. As operações de API que estão no escopo de AWS WAF não exigem autenticação com AWS credenciais. Elas não são autenticadas nem autorizadas com uma string de sessão nem um token de acesso. Para obter mais informações, consulte [Lista de operações de API agrupadas por modelo de autorização](authentication-flows-public-server-side.md#user-pool-apis-auth-unauth).

É possível configurar as regras na Web ACL com ações como **Contar**, **Permitir**, **Bloquear** ou apresentar um **CAPTCHA** em resposta a uma solicitação correspondente a uma regra. Para ter mais informações, consulte [Regras do AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rules.html) no *Guia do desenvolvedor do AWS WAF *. Dependendo da ação da regra, você pode personalizar a resposta que o Amazon Cognito retorna aos usuários.

**Importante**  
Suas opções para personalizar a resposta de erro dependem da forma como você faz uma solicitação de API.  
Você pode personalizar o código de erro e o corpo da resposta das solicitações do login gerenciado. Você só pode apresentar um CAPTCHA para o usuário resolver no login gerenciado.
Para solicitações feitas com a [API de grupos de usuários](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html) do Amazon Cognito, você pode personalizar o corpo da resposta de uma solicitação que recebe uma resposta **Bloquear**. Você também pode especificar um código de erro personalizado no intervalo de 400 a 499.
O AWS Command Line Interface (AWS CLI) e o AWS SDKs retornam um `ForbiddenException` erro às solicitações que produzem uma resposta de **bloco** ou **CAPTCHA**.

## Associar uma ACL da web ao grupo de usuários
<a name="user-pool-waf-setting-up"></a>

Para trabalhar com uma ACL da web em seu grupo de usuários, seu diretor AWS Identity and Access Management (IAM) deve ter o Amazon Cognito AWS WAF e as seguintes permissões. Para obter informações sobre AWS WAF permissões, consulte [Permissões de AWS WAF API](https://docs.aws.amazon.com/waf/latest/developerguide/waf-api-permissions-ref.html) no *Guia do AWS WAF desenvolvedor*.

------
#### [ JSON ]

****  

```
{
	"Version":"2012-10-17",		 	 	 
	"Statement": [
		{
			"Sid": "AllowWebACLUserPool",
			"Effect": "Allow",
			"Action": [
				"cognito-idp:ListResourcesForWebACL",
				"cognito-idp:GetWebACLForResource",
				"cognito-idp:AssociateWebACL"
			],
			"Resource": [
				"arn:aws:cognito-idp:*:123456789012:userpool/*"
			]
		},
		{
			"Sid": "AllowWebACLUserPoolWAFv2",
			"Effect": "Allow",
			"Action": [
				"wafv2:ListResourcesForWebACL",
				"wafv2:AssociateWebACL",
				"wafv2:DisassociateWebACL",
				"wafv2:GetWebACLForResource"
			],
			"Resource": "arn:aws:wafv2:*:123456789012:*/webacl/*/*"
		},
		{
			"Sid": "DisassociateWebACL1",
			"Effect": "Allow",
			"Action": "wafv2:DisassociateWebACL",
			"Resource": "*"
		},
		{
			"Sid": "DisassociateWebACL2",
			"Effect": "Allow",
			"Action": [
				"cognito-idp:DisassociateWebACL"
			],
			"Resource": [
				"arn:aws:cognito-idp:*:123456789012:userpool/*"
			]
		}
	]
}
```

------

Embora você deva conceder permissões do IAM, as ações listadas são somente com permissão e não correspondem a nenhuma [operação de API](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html).

**AWS WAF Para ativar seu grupo de usuários e associar uma ACL da web**

1. Faça login no [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home).

1. No painel de navegação, escolha **User Pools** (Grupos de usuários) e escolha o grupo de usuários que deseja editar.

1. Clique na guia **AWS WAF** na seção **Segurança**.

1. Escolha **Editar**.

1. Selecione **Usar AWS WAF com seu grupo de usuários**.  
![\[Captura de tela da caixa de AWS WAF diálogo com a opção Usar AWS WAF com seu grupo de usuários selecionada.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/cup-WAF-console.png)

1. Escolha uma **AWS WAF Web ACL** que você já criou ou escolha **Criar ACL da Web em AWS WAF** para criar uma em uma nova AWS WAF sessão no. Console de gerenciamento da AWS

1. Escolha **Salvar alterações**.

Para associar programaticamente uma ACL da web ao seu grupo de usuários no AWS Command Line Interface ou a um SDK, use a [AssociateWebACL](https://docs.aws.amazon.com/waf/latest/APIReference/API_AssociateWebACL.html) da API. AWS WAF O Amazon Cognito não tem uma operação de API separada que associe uma ACL da web.

## Testando e registrando AWS WAF na web ACLs
<a name="user-pool-waf-evaluating-and-logging"></a>

Quando você define uma ação de regra como **Count** em sua ACL da web, AWS WAF adiciona a solicitação a uma contagem de solicitações que correspondem à regra. Para testar uma ACL da web com o grupo de usuários, defina as ações da regra como **Count** (Contar) e considere o volume de solicitações correspondentes a cada regra. Por exemplo, se uma regra que você deseja definir como uma ação **Block** (Bloquear) corresponder a um grande número de solicitações que você considera tráfego normal de usuários, talvez seja necessário reconfigurar sua regra. Para ter mais informações, consulte [Testar e ajustar suas proteções do AWS WAF](https://docs.aws.amazon.com/waf/latest/developerguide/web-acl-testing.html) no *Guia do desenvolvedor do AWS WAF *.

Você também pode configurar AWS WAF para registrar cabeçalhos de solicitação em um grupo de CloudWatch logs do Amazon Logs, em um bucket do Amazon Simple Storage Service (Amazon S3) ou em um Amazon Data Firehose. Você pode identificar as solicitações do Amazon Cognito realizadas com a API de grupos de usuários pelo `x-amzn-cognito-client-id` e pelo `x-amzn-cognito-operation-name`. As solicitações de login gerenciado incluem somente o cabeçalho `x-amzn-cognito-client-id`. Para obter mais informações, consulte [Logging web ACL traffic](https://docs.aws.amazon.com/waf/latest/developerguide/logging.html) (Registrar em log o tráfego da ACL da web) no *Guia do desenvolvedor do AWS WAF *.

AWS WAF A web ACLs está disponível em todos os [planos de recursos](cognito-sign-in-feature-plans.md) do grupo de usuários. Os recursos de segurança do AWS WAF complementam a proteção contra ameaças do Amazon Cognito. É possível ativar os dois recursos em um grupo de usuários. O AWS WAF cobra separadamente pela inspeção das solicitações do grupo de usuários. Para obter mais informações, consulte [AWS WAF Preço](https://aws.amazon.com/waf/pricing).

Os dados da AWS WAF solicitação de registro estão sujeitos à cobrança adicional do serviço ao qual você segmenta seus registros. Para obter mais informações, consulte [Definição de preço para registrar informações de tráfego da ACL da Web](https://docs.aws.amazon.com/waf/latest/developerguide/logging.html#logging-pricing) no *Guia do desenvolvedor do AWS WAF *.

# Sensibilidade entre maiúsculas e minúsculas do grupo de usuários
<a name="user-pool-case-sensitivity"></a>

Os grupos de usuários do Amazon Cognito que você cria no não Console de gerenciamento da AWS diferenciam maiúsculas de minúsculas por padrão. Quando um grupo de usuários não faz distinção entre maiúsculas e minúsculas, *User@example.com* e *user@example.com* referem-se ao mesmo usuário. Quando nomes de usuário em um grupo de usuários não fazem distinção entre maiúsculas e minúsculas, os atributos `preferred_username` e `email` também não fazem essa distinção.

A não diferenciação de maiúsculas e minúsculas não se aplica somente às entradas de atributos, mas também às saídas. Valores de atributos com letras maiúsculas e minúsculas em grupos de usuários que não as diferenciam são reduzidos a minúsculas na saída de texto do grupo de usuários. [Exemplos de saída de texto do grupo de [usuários são respostas do UserInfo](userinfo-endpoint.md), respostas à consulta do usuário, como a saída de [GetUser](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html), e eventos de entrada para os gatilhos do Lambda.](cognito-user-pools-working-with-lambda-triggers.md)

Para explicar as configurações de distinção entre maiúsculas e minúsculas de grupo de usuários, identifique usuários no código da aplicação com base em um atributo de usuário alternativo. Como o uso de maiúsculas e minúsculas no nome de usuário, do nome de usuário preferido ou no atributo de endereço de e-mail pode variar em diferentes perfis de usuário, consulte o atributo `sub`. Você também pode criar um atributo personalizado imutável no seu grupo de usuários e designar ao atributo seu próprio valor de identificador exclusivo em cada novo perfil de usuário. Ao criar um usuário pela primeira vez, é possível gravar um valor em um atributo personalizado imutável que você criou.

**nota**  
Independentemente das configurações de diferenciação entre maiúsculas e minúsculas do grupo de usuários, o Amazon Cognito exige que um usuário federado de um provedor de identidade (IdP) SAML ou OIDC passe uma declaração `NameId` ou `sub` exclusiva e que diferencie maiúsculas e minúsculas. Para obter mais informações sobre a distinção entre maiúsculas e minúsculas do identificador exclusivo e SAML IdPs, consulte[Implementar o login SAML iniciado pelo SP](cognito-user-pools-SAML-session-initiation.md#cognito-user-pools-saml-idp-authentication).

Criar um grupo de usuários com distinção entre maiúsculas e minúsculas  
Se você criar recursos com as operações AWS Command Line Interface (AWS CLI) e de API [CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html), como, deverá definir o `CaseSensitive` parâmetro booleano como. `false` Essa configuração cria um grupo de usuários sem distinção entre maiúsculas e minúsculas. Se você não especificar um valor, a `CaseSensitive` definirá como padrão `true`. Os grupos de usuários que você cria no console do Amazon Cognito não diferenciam maiúsculas de minúsculas. Para produzir um grupo de usuários com distinção entre letras maiúsculas e minúsculas, você deve usar a operação `CreateUserPool`. Antes de 12 de fevereiro de 2020, grupos de usuários tinham distinção entre maiúsculas e minúsculas por padrão, independentemente da plataforma.   
No menu de **login do Console de gerenciamento da AWS e na** `UsernameConfiguration` propriedade de [DescribeUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UserPoolType.html#CognitoUserPools-Type-UserPoolType-UsernameConfiguration), você pode revisar as configurações de distinção entre maiúsculas e minúsculas de cada grupo de usuários em sua conta.

Migração para um novo grupo de usuários  
Devido a possíveis conflitos entre perfis de usuário, você não pode alterar um grupo de usuários do Amazon Cognito que faz distinção entre maiúsculas e minúsculas para um que não faça essa distinção. Em vez disso, faça a migração dos seus usuários para um novo grupo de usuários. Você deve criar um código de migração para resolver conflitos relacionados a maiúsculas e minúsculas. Esse código deve retornar um novo usuário exclusivo ou rejeitar a tentativa de login quando detectar um conflito. Em um novo grupo de usuários sem distinção entre maiúsculas e minúsculas, atribua um [Migrar o acionador do Lambda do usuário](user-pool-lambda-migrate-user.md). A AWS Lambda função pode criar usuários no novo grupo de usuários que não diferencia maiúsculas de minúsculas. Quando o usuário não conseguir fazer login com o grupo de usuários sem distinção entre maiúsculas e minúsculas, a função do Lambda localizará e duplicará o usuário desse grupo com distinção entre maiúsculas e minúsculas. Você também pode ativar um gatilho [ForgotPassword](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_ForgotPassword.html)Lambda de usuário de migração em eventos. O Amazon Cognito transmite informações do usuário e metadados de eventos da ação de login ou recuperação de senha para a sua função do Lambda. Você pode usar dados de evento para gerenciar conflitos entre nomes de usuário e endereços de e-mail quando sua função cria o usuário em seu grupo de usuários sem distinção entre maiúsculas e minúsculas. Esses conflitos ocorrem entre nomes de usuário e endereços de e-mail que seriam exclusivos em um grupo de usuários sem distinção entre letras maiúsculas e minúsculas.   
Para obter mais informações sobre como usar um gatilho Lambda de migração de usuários entre grupos de usuários do Amazon Cognito, [consulte Migração de usuários para grupos de usuários do Amazon Cognito](https://aws.amazon.com/blogs/mobile/migrating-users-to-amazon-cognito-user-pools/) no blog. AWS 

# Proteção contra exclusão do grupo de usuários
<a name="user-pool-settings-deletion-protection"></a>

Para que os administradores não excluam acidentalmente seu grupo de usuários, ative a proteção contra exclusão. Com a proteção contra exclusão ativa, você deve confirmar que deseja excluir o grupo de usuários antes de excluí-lo. Ao excluir um grupo de usuários no Console de gerenciamento da AWS, você pode desativar a proteção contra exclusão ao mesmo tempo. Quando você aceita a solicitação para desativar a proteção contra exclusão e confirma sua intenção de excluir, o Amazon Cognito exclui o grupo de usuários, conforme mostrado na imagem a seguir.

![\[Uma captura de tela Console de gerenciamento da AWS mostrando uma solicitação para excluir um grupo de usuários com uma solicitação incluída para também desativar a proteção contra exclusão.\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/images/amazon-cognito-delete-user-pool-deactivate-deletion-protection.png)


Quando quiser excluir um grupo de usuários com uma solicitação da API do Amazon Cognito, você deve primeiro `DeletionProtection` fazer a alteração `Inactive` em uma [UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)solicitação. Se você não desativar a proteção contra exclusão, o Amazon Cognito retornará um erro `InvalidParameterException`. Depois de desativar a proteção contra exclusão, você pode excluir o grupo de usuários em uma [DeleteUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_DeleteUserPool.html)solicitação.

O Amazon Cognito ativa a **Deletion protection** (Proteção contra exclusão) por padrão quando você cria um grupo de usuários no Console de gerenciamento da AWS. Quando você cria um grupo de usuários com a API `CreateUserPool`, a proteção contra exclusão fica inativa por padrão. Para usar esse recurso nos grupos de usuários que você cria com o AWS CLI ou com um AWS SDK, defina o `DeletionProtection` parâmetro como. `True`

É possível ativar ou desativar o status da proteção contra exclusão no contêiner **Proteção contra exclusão** no menu **Configurações** no console do Amazon Cognito.

# Como configurar a proteção contra exclusão


1. Acesse o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Você pode ser solicitado a fornecer suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou [crie um grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html).

1. Selecione o menu **Configurações** e navegue até a guia **Proteção contra exclusão**. Selecione **Ativar** ou **Desativar**.

1. Confirme sua escolha na próxima caixa de diálogo.

# Gerenciar respostas de erro de existência do usuário
<a name="cognito-user-pool-managing-errors"></a>

O Amazon Cognito permite personalizar respostas de erro retornadas por grupos de usuários. As respostas de erro personalizadas estão disponíveis para operações de criação e autenticação de usuários, recuperação de senha e confirmação.

Use o `PreventUserExistenceErrors` de um cliente da aplicação de grupo de usuários para habilitar ou desabilitar erros relacionados à existência do usuário. Ao criar um cliente de aplicação utilizando a API de grupo de usuários do Amazon Cognito `LEGACY` será `PreventUserExistenceErrors` ou então desativada, por padrão. No console do Amazon Cognito, a opção **Habilitar a prevenção de erros de existência do usuário** — uma configuração de `ENABLED` para `PreventUserExistenceErrors` — é selecionada por padrão. Para atualizar a configuração `PreventUserExistenceErrors`, siga um destes procedimentos:
+ Altere o valor de `PreventUserExistenceErrors` entre `ENABLED` e `LEGACY` em uma solicitação da API [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPoolClient.html).
+ Edite seu cliente de aplicação no console do Amazon Cognito e altere o estado de **Habilitar a prevenção de erros de existência do usuário** entre selecionado (`ENABLED`) e desmarcado (`LEGACY`).

Quando essa propriedade tem um valor `LEGACY`, o cliente da aplicação retorna uma resposta de erro `UserNotFoundException` quando um usuário tenta fazer login com um nome de usuário que não existe no seu grupo de usuários.

Quando essa propriedade tem um valor `ENABLED`, o cliente da aplicação não divulga a inexistência de uma conta de usuário em seu grupo de usuários e exibe o erro `UserNotFoundException`. Uma configuração `PreventUserExistenceErrors` de `ENABLED` tem os seguintes efeitos quando você envia uma solicitação de um nome de usuário que não existe:
+ O Amazon Cognito responde com informações não específicas às solicitações de API, em que sua resposta poderia revelar a existência de um usuário válido.
+ O Amazon Cognito retorna uma resposta genérica de falha de autenticação para solicitações de esquecimento de senha e solicitações de autenticação com fluxos de autenticação, *exceto* para autenticação [baseada em opções](authentication-flows-selection-sdk.md#authentication-flows-selection-choice) (`USER_AUTH`). Por exemplo, `USER_SRP_AUTH` ou `CUSTOM_AUTH`. A resposta de erro informa que o nome de usuário ou a senha está incorreta.
+ O Amazon Cognito responde às solicitações de autenticação baseada em opções com uma seleção aleatória dos tipos de desafio permitidos para o grupo de usuários. Seu grupo de usuários pode retornar uma chave de acesso, senha de uso único ou desafio de senha.
+ O comportamento da confirmação da conta do Amazon Cognito e da recuperação de senha APIs alterna entre retornar uma resposta indicando que um código foi enviado para uma mídia de entrega simulada e retornar um erro. `InvalidParameterException`

As informações a seguir detalham os comportamentos das operações do grupo de usuários quando `PreventUserExistenceErrors` está definido como `ENABLED`.

## Operações de criação e autenticação de usuários
<a name="cognito-user-pool-managing-errors-user-auth"></a>

Você pode configurar respostas de erro na autenticação de nome de usuário-senha e Senha remota segura (SRP). Também é possível personalizar os erros retornados com a autenticação personalizada. A autenticação baseada em opções não é afetada pela sua configuração `PreventUserExistenceErrors`.Detalhes da divulgação da existência do usuário nos fluxos de autenticação

**Autenticação baseada em opções**  
No fluxo de autenticação baseado em opções `USER_AUTH`, o Amazon Cognito retorna um desafio dos principais fatores de autenticação que estão disponíveis, dependendo da configuração do seu grupo de usuários e dos atributos dos usuários. Esse fluxo de autenticação pode retornar desafios de senha, senha remota segura (SRP), WebAuthn (chave de acesso), senha de uso único por SMS (OTP) ou OTP por e-mail. Com a opção `PreventUserExistenceErrors` ativa, o Amazon Cognito desafia usuários inexistentes a realizarem uma ou mais das formas de autenticação disponíveis. Com `PreventUserExistenceErrors` inativo, o Amazon Cognito retorna uma exceção `UserNotFound`.

**Autenticação com nome de usuário e senha**  
Os fluxos de autenticação `ADMIN_USER_PASSWORD_AUTH` e `USER_PASSWORD_AUTH`, além do fluxo `PASSWORD` de `USER_AUTH` retornam `NotAuthorizedException` com a mensagem `Incorrect username or password` quando `PreventUserExistenceErrors` está ativo. Quando `PreventUserExistenceErrors` está inativo, esses fluxos retornam `UserNotFoundException`.

**Autenticação baseada em senha remota segura (SRP)**  
Como prática recomendada, implemente somente `PreventUserExistenceErrors` com `USER_SRP_AUTH` ou o fluxo `PASSWORD_SRP` de `USER_AUTH` grupos de usuários sem endereço de e-mail, número de telefone ou [atributos preferenciais de alias](user-pool-settings-attributes.md#user-pool-settings-aliases) de nome de usuário. Usuários com atributos de alias podem não estar sujeitos à supressão da existência do usuário no fluxo de autenticação SRP. Os fluxos de autenticação de nome de usuário e senha, `ADMIN_USER_PASSWORD_AUTH`, `USER_PASSWORD_AUTH` e o desafio `USER_AUTH` `PASSWORD`, suprimem totalmente a existência de usuários com base em atributos de alias.  
Quando alguém tenta fazer login no SRP com um nome de usuário não conhecido pelo cliente de aplicação, o Amazon Cognito retorna uma resposta simulada na primeira etapa conforme descrito em [RFC 5054](https://tools.ietf.org/html/rfc5054#section-2.5.1.3). O Amazon Cognito retorna o mesmo salt e um ID de usuário interno no formato de [UUID](cognito-terms.md#terms-uuid) para a mesma combinação de nome de usuário e grupo de usuários. Quando você envia uma solicitação de API `RespondToAuthChallenge` com prova de senha, o Amazon Cognito retorna um erro genérico `NotAuthorizedException` quando o nome de usuário ou a senha está incorreta. Para obter mais informações sobre como implementar uma autenticação SRP, consulte [Fazer login com senhas persistentes e carga útil segura](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-srp).  
Você pode simular uma resposta genérica com a autenticação de nome de usuário e senha se estiver usando atributos de alias baseados em verificação e se o nome de usuário imutável não estiver formatado como um [UUID](cognito-terms.md#terms-uuid).

**Acionador do Lambda do desafio de autenticação personalizada**  
O Amazon Cognito invoca os [acionadores do Lambda do desafio de autenticação personalizada](user-pool-lambda-challenge.md) quando os usuários tentam fazer login com o fluxo de autenticação `CUSTOM_AUTH`, mas o nome de usuário não é encontrado. O evento de entrada inclui um parâmetro booleano nomeado `UserNotFound` com um valor de `true` para qualquer usuário inexistente. Esse parâmetro aparece nos eventos de solicitação que seu grupo de usuários envia às funções do Lambda do desafio de criação, definição e verificação de autenticação que compõem a arquitetura de autenticação personalizada. Ao examinar esse indicador na lógica da função do Lambda, você pode simular desafios de autenticação personalizados para usuários não existentes.

**Acionador do Lambda de pré-autenticação**  
O Amazon Cognito invoca o [acionador de pré-autenticação](user-pool-lambda-pre-authentication.md) quando os usuários tentam fazer login, mas o nome de usuário não é encontrado. O evento de entrada inclui um parâmetro `UserNotFound` com um valor de `true` para qualquer usuário inexistente.

A lista a seguir descreve o efeito `PreventUserExistenceErrors` na criação de contas de usuário.Detalhes da divulgação da existência do usuário nos fluxos de criação do usuário

**SignUp**  
A operação `SignUp` sempre retorna `UsernameExistsException` quando um nome de usuário já está sendo usado. Se você não quiser que o Amazon Cognito retorne um erro `UsernameExistsException` para endereços de e-mail e números de telefone ao inscrever usuários na aplicação, use atributos de alias baseados em verificação. Para obter mais informações sobre aliases, consulte [Personalização dos atributos de login](user-pool-settings-attributes.md#user-pool-settings-aliases).  
Para ver um exemplo de como o Amazon Cognito pode impedir o uso de solicitações da API `SignUp` para descobrir usuários no grupo de usuários, consulte [Evitar erros `UsernameExistsException` de endereços de e-mail e números de telefone na inscrição](#cognito-user-pool-managing-errors-prevent-userexistence-errors).

**Usuários importados**  
Se `PreventUserExistenceErrors` estiver habilitado durante a autenticação de usuários importados, será retornado um erro genérico `NotAuthorizedException`, que indica que o nome de usuário ou a senha estava incorreta, em vez de `PasswordResetRequiredException`. Consulte [Solicitação de redefinição de senha aos usuários importados](cognito-user-pools-using-import-tool.md#cognito-user-pools-using-import-tool-password-reset) para obter mais informações.

**Migrar o acionador do Lambda do usuário**  
O Amazon Cognito retornará uma resposta simulada para usuários não existentes quando uma resposta vazia tiver sido definida no contexto do evento original pelo acionador do Lambda. Para obter mais informações, consulte [Como importar usuários com um acionador do Lambda de migração de usuários](cognito-user-pools-import-using-lambda.md). 

### Evitar erros `UsernameExistsException` de endereços de e-mail e números de telefone na inscrição
<a name="cognito-user-pool-managing-errors-prevent-userexistence-errors"></a>

O exemplo a seguir demonstra como, ao configurar atributos de alias no grupo de usuários, você pode impedir que endereços de e-mail e números de telefone duplicados gerem erros `UsernameExistsException` em resposta às solicitações da API `SignUp`. Você deve ter criado o grupo de usuários com o endereço de e-mail ou o número de telefone como atributos de alias. Para obter mais informações, consulte a seção *Personalizar atributos de login* de [Atributos de grupos de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html#user-pool-settings-aliases).

1. Jie se inscreve com um novo nome de usuário e também fornece o endereço de e-mail `jie@example.com`. O Amazon Cognito envia um código para o endereço de e-mail dele.

   **Exemplo de AWS CLI comando**

   ```
   aws cognito-idp sign-up --client-id 1234567890abcdef0 --username jie --password PASSWORD --user-attributes Name="email",Value="jie@example.com"
   ```

   **Exemplo de resposta**

   ```
   {
       "UserConfirmed": false, 
       "UserSub": "<subId>", 
       "CodeDeliveryDetails": {
           "AttributeName": "email", 
           "Destination": "j****@e****", 
           "DeliveryMedium": "EMAIL"
       }
   }
   ```

1. Jie fornece o código enviado a ele para confirmar a propriedade do endereço de e-mail. Isso conclui seu registro como usuário.

   **Exemplo de AWS CLI comando**

   ```
   aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=jie --confirmation-code xxxxxx
   ```

1. Shirley registra uma nova conta de usuário e fornece o endereço de e-mail `jie@example.com`. O Amazon Cognito não retorna um erro `UsernameExistsException` e envia um código de confirmação para o endereço de e-mail de Jie.

   **Exemplo de AWS CLI comando**

   ```
   aws cognito-idp sign-up --client-id 1234567890abcdef0 --username shirley --password PASSWORD --user-attributes Name="email",Value="jie@example.com"
   ```

   **Exemplo de resposta**

   ```
   {
       "UserConfirmed": false, 
       "UserSub": "<new subId>", 
       "CodeDeliveryDetails": {
           "AttributeName": "email", 
           "Destination": "j****@e****", 
           "DeliveryMedium": "EMAIL"
       }
   }
   ```

1. Em um cenário diferente, Shirley é proprietária de `jie@example.com`. Shirley recupera o código que o Amazon Cognito enviou para o endereço de e-mail de Jie e tenta confirmar a conta.

   **Exemplo de AWS CLI comando**

   ```
   aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=shirley --confirmation-code xxxxxx
   ```

   **Exemplo de resposta**

   ```
   An error occurred (AliasExistsException) when calling the ConfirmSignUp operation: An account with the email already exists.
   ```

O Amazon Cognito não retorna um erro à solicitação `aws cognito-idp sign-up` de Shirley, apesar de `jie@example.com` ter sido atribuído a um usuário existente. Shirley deve demonstrar a propriedade do endereço de e-mail antes que o Amazon Cognito retorne uma resposta de erro. Em um grupo de usuários com atributos de alias, esse comportamento impede o uso da API `SignUp` pública para verificar se existe um usuário com um determinado endereço de e-mail ou número de telefone.

Esse comportamento é diferente da resposta que o Amazon Cognito retorna à solicitação `SignUp` com um nome de usuário existente, conforme mostrado no exemplo a seguir. Embora Shirley saiba, com base nessa resposta, que já existe um usuário com o nome `jie`, não é possível saber sobre nenhum endereço de e-mail ou número de telefone associado ao usuário.

**Exemplo de comando da CLI**

```
aws cognito-idp sign-up --client-id 1example23456789 --username jie --password PASSWORD
      --user-attributes Name="email",Value="shirley@example.com"
```

**Exemplo de resposta**

```
An error occurred (UsernameExistsException) when calling the SignUp operation: User already exists
```

## Operações de redefinição de senha
<a name="cognito-user-pool-managing-errors-password-reset"></a>

O Amazon Cognito retorna as respostas a seguir às operações de redefinição de senha do usuário quando você evita erros de existência do usuário.

**ForgotPassword**  
Quando um usuário não é encontrado, está desativado ou não tem um mecanismo de entrega verificado para recuperar a senha, o Amazon Cognito retorna `CodeDeliveryDetails` com um meio de entrega simulado para um usuário. O meio de entrega simulado é determinado pelo formato de entrada do nome de usuário e as configurações de verificação do grupo de usuários.

**ConfirmForgotPassword**  
O Amazon Cognito retorna o erro `CodeMismatchException` para usuários que não existem ou estão desabilitados. Se um código não for solicitado ao ser usado o `ForgotPassword`, o Amazon Cognito retornará o erro `ExpiredCodeException`.

## Operações de confirmação
<a name="cognito-user-pool-managing-errors-confirmation"></a>

O Amazon Cognito retorna as respostas a seguir às operações de confirmação e verificação do usuário quando você evita erros de existência do usuário.

**ResendConfirmationCode**  
O Amazon Cognito retorna `CodeDeliveryDetails` para um usuário desabilitado ou um usuário que não existe. O Amazon Cognito envia um código de confirmação para o e-mail ou telefone do usuário existente.

**ConfirmSignUp**  
 Retorna `ExpiredCodeException` se um código tiver expirado. O Amazon Cognito retorna `NotAuthorizedException` quando um usuário não está autorizado. Se o código não corresponder ao que o servidor espera que o Amazon Cognito retorne `CodeMismatchException`. 

# Referência de login gerenciado e endpoints do grupo de usuários
<a name="cognito-userpools-server-contract-reference"></a>

O Amazon Cognito tem dois modelos de autenticação de grupos de usuários: com a API de grupos de usuários e com o servidor de autorização OAuth 2.0. Use a API quando quiser recuperar tokens do OpenID Connect (OIDC) AWS com um SDK no back-end do seu aplicativo. Use o servidor de autorização quando quiser implementar seu grupo de usuários como um provedor OIDC. O servidor de autorização adiciona recursos como [login federado](cognito-user-pools-identity-federation.md), [autorização de API e M2M com escopos de token de acesso](cognito-user-pools-define-resource-servers.md) e [login gerenciado](cognito-user-pools-managed-login.md). Você pode usar os modelos de API e OIDC, individualmente ou em conjunto, configurados no nível do grupo de usuários ou no nível do [cliente de aplicação](user-pool-settings-client-apps.md). Esta seção é uma referência para a implementação do modelo OIDC. Para obter mais informações sobre os dois modos de autenticação, consulte [Noções básicas sobre a autenticação de API, OIDC e páginas de login gerenciado](authentication-flows-public-server-side.md#user-pools-API-operations).

O Amazon Cognito ativa as páginas da web públicas listadas aqui quando você atribui um domínio ao grupo de usuários. O domínio serve como um ponto de acesso central para todos os clientes da aplicação. Isso inclui o login gerenciado, no qual os usuários podem se cadastrar e fazer login ([Endpoint de login](login-endpoint.md)) e logout ([Endpoint de logout](logout-endpoint.md)). Para obter mais informações sobre esses recursos, consulte [Login gerenciado do grupo de usuários](cognito-user-pools-managed-login.md).

Essas páginas também incluem os recursos públicos da web que permitem que seu grupo de usuários se comunique com provedores de identidade SAML, OpenID Connect (OIDC OAuth ) e 2.0 () de terceiros. IdPs Para conectar um usuário com um provedor de identidades federado, os usuários devem iniciar uma solicitação para o [Endpoint de login](login-endpoint.md) de login gerenciado interativo ou o [Autorizar endpoint](authorization-endpoint.md) do OIDC. O endpoint de autorização redireciona seus usuários para suas páginas de login gerenciado ou para a página de login do IdP.

Sua aplicação também pode fazer login de *usuários locais* com a [API de grupos de usuários do Amazon Cognito](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/Welcome.html). Um usuário local existe exclusivamente em seu diretório de grupo de usuários sem federação por meio de um IdP externo.

Além do login gerenciado, o Amazon Cognito se integra com SDKs Android JavaScript, iOS e muito mais. Eles SDKs fornecem ferramentas para realizar operações de API de grupos de usuários com endpoints de serviço da API Amazon Cognito. Para obter mais informações sobre endpoints de serviço, consulte [Endpoints e cotas do Amazon Cognito Identity](https://docs.aws.amazon.com/general/latest/gr/cognito_identity.html).

**Atenção**  
Não fixe os certificados TLS (Transport Layer Security) da entidade final ou intermediária para os domínios do Amazon Cognito. AWS gerencia todos os certificados de todos os endpoints e domínios de prefixo do seu grupo de usuários. As autoridades de certificação (CAs) na cadeia de confiança que dá suporte aos certificados do Amazon Cognito são alternadas e renovadas dinamicamente. Quando você fixa seu aplicativo em um certificado intermediário ou secundário, seu aplicativo pode falhar sem aviso prévio ao AWS alternar os certificados.  
Em vez disso, fixe sua aplicação em todos os [certificados raiz da Amazon](https://www.amazontrust.com/repository/) disponíveis. Para obter mais informações, consulte as práticas recomendadas e as recomendações em [Fixação do certificado](https://docs.aws.amazon.com/acm/latest/userguide/acm-bestpractices.html#best-practices-pinning) no *Guia do usuário do AWS Certificate Manager *.

**Topics**
+ [

# Endpoints de login gerenciado interativo com o usuário e IU hospedada clássica
](managed-login-endpoints.md)
+ [

# Provedor de identidades e endpoints de terceiros confiáveis
](federation-endpoints.md)
+ [

# OAuth 2.0 subsídios
](federation-endpoints-oauth-grants.md)
+ [

# Como usar PKCE em concessões de código de autorização
](using-pkce-in-authorization-code.md)
+ [

# Respostas de erro de federação e login gerenciado
](federation-endpoint-idp-responses.md)

# Endpoints de login gerenciado interativo com o usuário e IU hospedada clássica
<a name="managed-login-endpoints"></a>

O Amazon Cognito ativa os endpoints de login gerenciado nesta seção quando você adiciona um domínio ao grupo de usuários. São páginas da web nas quais os usuários podem concluir as principais operações de autenticação de um grupo de usuários. Eles incluem páginas para gerenciamento de senhas, autenticação multifator (MFA) e verificação de atributos.

As páginas da web que compõem o login gerenciado são uma aplicação web de frontend para sessões interativas de usuários com os clientes. A aplicação deve invocar o login gerenciado nos navegadores dos usuários. O Amazon Cognito não permite o acesso programático às páginas da web deste capítulo. Esses endpoints de federação no [Provedor de identidades e endpoints de terceiros confiáveis](federation-endpoints.md) que retornam uma resposta JSON podem ser consultados diretamente no código da aplicação. O [Autorizar endpoint](authorization-endpoint.md) redireciona para o login gerenciado ou para uma página de login do IdP e também deve ser aberto nos navegadores dos usuários.

Todos os endpoints do grupo de usuários aceitam tráfego IPv4 e endereços IP IPv6 de origem.

Os tópicos deste guia descrevem detalhadamente os endpoints de IU hospedada clássica e login gerenciado usados com frequência. A diferença entre o login gerenciado e a IU hospedada é visível, não funcional. Com exceção de `/passkeys/add`, todos os caminhos são compartilhados entre as duas versões da identidade visual do login gerenciado.

O Amazon Cognito disponibiliza as páginas da web a seguir quando você atribui um domínio ao grupo de usuários.


**Endpoints de login gerenciado**  

| URL do endpoint | Description | Como é acessado | 
| --- | --- | --- | 
| https://Your user pool domain/login | Faz login no grupo de usuários locais e federados. |  Redirecione de endpoints como [Autorizar endpoint](authorization-endpoint.md), `/logout` e `/confirmforgotPassword`. Consulte [Endpoint de login](login-endpoint.md).  | 
| https://Your user pool domain/logout | Desconecta os usuários do grupo de usuários. |  Link direto. Consulte [Endpoint de logout](logout-endpoint.md).  | 
| https://Your user pool domain/ConfirmUser | Confirma os usuários que selecionaram um link de e-mail para confirmar a respectiva conta de usuário. |  O usuário selecionou um link em uma mensagem de e-mail.  | 
| https://Your user pool domain/signup | Inscreve um novo usuário. A página /login direciona o usuário para /signup quando ele seleciona Sign up (Cadastrar-se). |  Link direto com os mesmos parâmetros do `/oauth2/authorize`.  | 
| https://Your user pool domain/confirm | Depois que o grupo de usuários envia um código de confirmação a um usuário que se inscreveu, solicita o código ao usuário. |  Redireciona somente de `/signup`.  | 
| https://Your user pool domain/Esqueci minha senha | Solicita que o usuário informe o nome de usuário e envia um código para redefinição da senha. A página /login direciona o usuário para /forgotPassword quando ele seleciona Forgot your password? (Esqueceu a senha?). |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/managed-login-endpoints.html)  | 
| https://Your user pool domain/confirmForgotPassword | Solicita ao usuário o código para redefinição da senha e uma nova senha. A página /forgotPassword direciona o usuário para /confirmforgotPassword quando ele seleciona Reset your password (Redefinir a senha). | Redireciona somente de /forgotPassword. | 
| https://Your user pool domain/reenviar código | Envia um novo código de confirmação a um usuário que se inscreveu no grupo de usuários. |  Redireciona somente do link **Enviar um novo código** em `/confirm`.  | 
| https://Your user pool domain/passkeys/add | Registra uma nova [chave de acesso](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passkey). Disponível somente no login gerenciado. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/cognito/latest/developerguide/managed-login-endpoints.html)  | 

**Topics**
+ [

# O endpoint de login do login gerenciado: `/login`
](login-endpoint.md)
+ [

# O endpoint de logout do login gerenciado: `/logout`
](logout-endpoint.md)

# O endpoint de login do login gerenciado: `/login`
<a name="login-endpoint"></a>

O endpoint de login é um servidor de autenticação e um destino de redirecionamento do [Autorizar endpoint](authorization-endpoint.md). É o ponto de entrada para o login gerenciado quando você não especifica um provedor de identidade. Ao gerar um redirecionamento para o endpoint de login, ele carrega a página de login e apresenta as opções de autenticação configuradas para o cliente ao usuário.

**nota**  
O endpoint de login é um componente do login gerenciado. Na aplicação, invoque a federação e as páginas do login gerenciado que redirecionam para o endpoint de login. O acesso direto dos usuários ao endpoint de login não é uma prática recomendada.

## GET/login
<a name="get-login"></a>

O endpoint de `/login` só é compatível com `HTTPS GET` para a solicitação inicial do usuário. A aplicação invoca a página em um navegador como o Chrome ou o Firefox. Quando você redireciona de [Autorizar endpoint](authorization-endpoint.md) para `/login`, ele transmite todos os parâmetros que você forneceu na solicitação inicial. O endpoint de login é compatível com todos os parâmetros de solicitação do endpoint de autorização. Você também pode acessar o endpoint de login diretamente. Como prática recomendada, origine todas as sessões dos usuários em `/oauth2/authorize`.

**Exemplo — solicitar que o usuário faça login**

Este exemplo exibe a tela de login.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/login?
                response_type=code&
                client_id=ad398u21ijw3s9w3939&
                redirect_uri=https://YOUR_APP/redirect_uri&
                state=STATE&
                scope=openid+profile+aws.cognito.signin.user.admin
```

**Exemplo - resposta**  
O servidor de autenticação redireciona o estado e o código de autorização à aplicação. O servidor deve retornar o código e o estado nos parâmetros de string de consulta e não no fragmento.

```
HTTP/1.1 302 Found
                    Location: https://YOUR_APP/redirect_uri?code=AUTHORIZATION_CODE&state=STATE
```

## Solicitação de login iniciada pelo usuário
<a name="post-login"></a>

Depois que o usuário carrega o endpoint de `/login`, ele pode inserir um nome de usuário e uma senha e selecionar **Fazer login**. Ao fazer isso, eles geram uma solicitação `HTTPS POST` com os mesmos parâmetros de solicitação de cabeçalho da solicitação `GET` e um corpo de solicitação com seu nome de usuário, senha e impressão digital do dispositivo.

# O endpoint de logout do login gerenciado: `/logout`
<a name="logout-endpoint"></a>

O `/logout` é um endpoint de redirecionamento. Ele desconecta o usuário e o redireciona para um URL de saída autorizado para o cliente da aplicação ou o endpoint do `/login`. Os parâmetros disponíveis em uma solicitação GET para o endpoint `/logout` são personalizados para casos de uso de login gerenciado do Amazon Cognito.

O endpoint de desconexão é uma aplicação web de front-end para sessões interativas de usuários com os clientes. A aplicação deve invocar esse e outros endpoints de login gerenciado nos navegadores dos usuários.

Para redirecionar o usuário para o login gerenciado para que ele possa fazer login novamente, adicione um parâmetro `redirect_uri` à solicitação. Uma solicitação `logout` com um parâmetro `redirect_uri` também deve incluir parâmetros para sua solicitação subsequente ao [Endpoint de login](login-endpoint.md), como `client_id`, `response_type` e `scope`.

Para redirecionar seu usuário para uma página que você escolher, adicione Sessão **permitida URLs ao seu cliente de** aplicativo. Nas solicitações dos usuários para o endpoint `logout`, adicione parâmetros `logout_uri` e `client_id`. Se o valor de `logout_uri` for uma das **saídas permitidas URLs para seu cliente de aplicativo, o Amazon Cognito redirecionará os usuários para essa** URL.

Com o logout único (SLO) para SAML 2.0, o Amazon IdPs Cognito primeiro redireciona seu usuário para o endpoint de SLO que você definiu na sua configuração de IdP. Depois que seu IdP redireciona o usuário de volta para `saml2/logout`, o Amazon Cognito responde com mais um redirecionamento para `redirect_uri` ou `logout_uri` de sua solicitação. Para obter mais informações, consulte [Como desconectar usuários do SAML com logout único](cognito-user-pools-saml-idp-sign-out.md).

O endpoint de logout não desconecta os usuários do OIDC ou dos provedores de identidade social (). IdPs Para desconectar os usuários da sessão com um IdP externo, direcione-os para a página de desconexão desse provedor.

## GET /logout
<a name="get-logout"></a>

O endpoint `/logout` só é compatível com `HTTPS GET`. O cliente do grupo de usuários normalmente faz essa solicitação por meio do navegador do sistema. O navegador geralmente é a guia do Chrome personalizada no Android ou no Safari View Control no iOS.

### Parâmetros de solicitação
<a name="get-logout-request-parameters"></a>

*client\$1id*  
O ID do cliente dp aplicativo para o aplicativo. Para obter um ID do cliente da aplicação, é preciso registrar a aplicação no grupo de usuários. Para obter mais informações, consulte [Configurações específicas da aplicação com clientes de aplicação](user-pool-settings-client-apps.md).  
Obrigatório.

*logout\$1uri*  
Redirecione seu usuário para uma página de logout personalizada com um parâmetro *logout\$1uri*. Defina seu valor como o **sign-out URL** (URL de saída) do cliente da aplicação para o qual você deseja redirecionar o usuário depois que ele sair. Use *logout\$1uri* somente com um parâmetro *client\$1id*. Para obter mais informações, consulte [Configurações específicas da aplicação com clientes de aplicação](user-pool-settings-client-apps.md).  
Você também pode usar o parâmetro *logout\$1uri* para redirecionar o usuário para a página de login de outro cliente de aplicação. Defina a página de login para o outro cliente de aplicação como um **Allowed callback URL** (URL de retorno de chamada permitido) em seu cliente de aplicação. Em sua solicitação para o endpoint `/logout`, defina o valor do parâmetro *logout\$1uri* para a página de login codificada em URL.  
O Amazon Cognito requer um parâmetro *logout\$1uri* ou *redirect\$1uri* em sua solicitação para o endpoint `/logout`. O parâmetro *logout\$1uri* redireciona o usuário para outro site. Se os parâmetros *logout\$1uri* e *redirect\$1uri* forem incluídos em sua solicitação para o endpoint `/logout`, o Amazon Cognito utilizará exclusivamente o parâmetro *logout\$1uri*, substituindo o parâmetro *redirect\$1uri*.

*`nonce`*  
(Opcional) Um valor aleatório que você pode adicionar à solicitação. O valor nonce fornecido está incluído no token de ID que o Amazon Cognito emite. Para se proteger contra ataques de repetição, a aplicação pode inspecionar a reivindicação `nonce` no token de ID e compará-la com o que você gerou. Para obter mais informações sobre a solicitação `nonce`, consulte “[ID Token Validation](https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation)” (Validação de tokens de ID) no *OpenID Connect Standard* (Padrão do OpenID Connect).

**redirect\$1uri**  
Redirecione seu usuário para sua página de login a fim de realizar a autenticação com um parâmetro *redirect\$1uri*. Defina seu valor como o **Allowed callback URL** (URL de retorno de chamada permitido) do cliente da aplicação para o qual você deseja redirecionar o usuário depois que ele fizer login novamente. Adicione os parâmetros *client\$1id*, *scope*, *state* e *response\$1type* que você deseja transmitir ao endpoint `/login`.  
O Amazon Cognito requer um parâmetro *logout\$1uri* ou *redirect\$1uri* em sua solicitação para o endpoint `/logout`. Para redirecionar o usuário para o endpoint `/login`, a fim de reautenticar e passar tokens à sua aplicação, adicione um parâmetro *redirect\$1uri*. Se os parâmetros *logout\$1uri* e *redirect\$1uri* forem incluídos em sua solicitação para o endpoint `/logout`, o Amazon Cognito substituirá o parâmetro *redirect\$1uri* e processará o parâmetro *logout\$1uri* exclusivamente.

*response\$1type*  
A resposta OAuth 2.0 que você deseja receber do Amazon Cognito após o login do usuário. `code`e `token` são os valores válidos para o parâmetro *response\$1type*.  
Obrigatório quando você usa um parâmetro *redirect\$1uri*.

*estado*  
Quando sua aplicação adiciona um parâmetro *state* a uma solicitação, o Amazon Cognito retorna o valor para a aplicação quando o endpoint `/oauth2/logout` redireciona o usuário.  
Adicione esse valor às suas solicitações para se proteger contra ataques [CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery).  
Não é possível definir o valor de um parâmetro `state` como uma string JSON codificada por URL. Para transmitir uma string que corresponda a esse formato em um parâmetro `state`, codifique-a como base64 e, depois, decodifique-a em sua aplicação.  
Altamente recomendado se você usar um parâmetro *redirect\$1uri*.

*scope*  
Os escopos OAuth 2.0 que você deseja solicitar do Amazon Cognito depois de desconectá-los com *um* parâmetro redirect\$1uri. O Amazon Cognito redireciona o usuário para o endpoint `/login` com o parâmetro *scope* em sua solicitação ao endpoint `/logout`.  
Opcional se você usar um parâmetro *redirect\$1uri*. Se você não incluir um parâmetro *scope*, o Amazon Cognito redirecionará o usuário para o endpoint `/login` com um parâmetro *scope*. Quando o Amazon Cognito redireciona o usuário e preenche automaticamente `scope`, o parâmetro inclui todos os escopos autorizados para seu cliente de aplicação.

### Exemplo de solicitações
<a name="get-logout-request-sample"></a>

**Exemplo - fazer logout e redirecionar o usuário ao cliente**

O Amazon Cognito redireciona as sessões do usuário para o URL no valor de `logout_uri`, ignorando todos os outros parâmetros da solicitação, quando as solicitações incluem e `logout_uri` e `client_id`. Esse URL deve ser um URL de logoff autorizado para o cliente da aplicação.

Veja a seguir um exemplo de solicitação de logoff e de redirecionamento para `https://www.example.com/welcome`.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/logout?
  client_id=1example23456789&
  logout_uri=https%3A%2F%2Fwww.example.com%2Fwelcome
```

**Exemplo - fazer logout e solicitar que o usuário faça login como outro usuário**

Quando as solicitações omitem `logout_uri`, mas fornecem os parâmetros que compõem uma solicitação bem formada para o endpoint de autorização, o Amazon Cognito redireciona os usuários para o login do login gerenciado. O endpoint de logout anexa os parâmetros em sua solicitação original ao destino do redirecionamento.

Os parâmetros adicionais que você adiciona à solicitação de logout devem estar na lista em [Parâmetros de solicitação](#get-logout-request-parameters). Por exemplo, o endpoint de logout não é compatível com o redirecionamento automático do IdP com parâmetros `identity_provider` ou `idp_identifier`. O parâmetro `redirect_uri` em uma solicitação para o endpoint de logout não é um URL de logout, mas um post-sign-in URL que você deseja passar para o endpoint de autorização.

Veja a seguir um exemplo de solicitação que faz logout de um usuário, redireciona para a página de login e fornece um código de autorização para `https://www.example.com` depois do login.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/logout?
  response_type=code&
  client_id=1example23456789&
  redirect_uri=https%3A%2F%2Fwww.example.com&
  state=example-state-value&
  nonce=example-nonce-value&
  scope=openid+profile+aws.cognito.signin.user.admin
```

# Provedor de identidades e endpoints de terceiros confiáveis
<a name="federation-endpoints"></a>

Os *endpoints de federação* são endpoints de grupos de usuários que servem ao propósito de um dos padrões de autenticação usados pelos grupos de usuários. Eles incluem SAML ACS URLs, endpoints de descoberta OIDC e endpoints de serviço para funções de grupos de usuários, tanto como provedor de identidade quanto como parte confiável. Os endpoints da federação iniciam fluxos de autenticação, recebem comprovantes de IdPs autenticação e emitem tokens para os clientes. Eles interagem com IdPs aplicativos e administradores, mas não com usuários.

Os tópicos de página inteira após esta página têm detalhes sobre os endpoints do provedor OAuth 2.0 e OIDC que ficam disponíveis quando você adiciona um domínio ao seu grupo de usuários. O gráfico a seguir é uma lista de todos os endpoints de federação.

Exemplos de [domínios de grupos de usuários](cognito-user-pools-assign-domain.md) são:

1. Domínio de prefixo: `mydomain.auth.us-east-1.amazoncognito.com`

1. Domínio personalizado: `auth.example.com`


**Endpoints de federação do grupo de usuários**  

| URL do endpoint | Description | Como é acessado | 
| --- | --- | --- | 
| https://Your user pool domain/oauth2/authorize | Redireciona um usuário para o login gerenciado ou para fazer login com seu IdP. | Invocado no navegador do cliente para iniciar a autenticação do usuário. Consulte [Autorizar endpoint](authorization-endpoint.md). | 
| Your user pool domainhttps://oauth2/token | Retorna tokens com base em um código de autorização ou solicitação de credenciais do cliente. | Solicitado pela aplicação para recuperar tokens. Consulte [Endpoint de token](token-endpoint.md). | 
| https://Your user pool domain/oauth2/UserInfo | Retorna atributos do usuário com base nos escopos OAuth 2.0 e na identidade do usuário em um token de acesso. | Solicitado pela aplicação para recuperar o perfil do usuário. Consulte [endpoint userinfo](userinfo-endpoint.md). | 
| Your user pool domainhttps://oauth2/revoke | Revoga um token de atualização e os tokens de acesso associados. | Solicitado pela aplicação para revogar um token. Consulte [Revogar endpoint](revocation-endpoint.md). | 
| https://cognito-idp. Region.amazonaws.com/ your user pool ID /.well-known/openid-configuration | Um diretório da arquitetura OIDC do seu grupo de usuários. [1](#cognito-federation-oidc-discovery-note) | Solicitado pela aplicação para localizar metadados do emissor do grupo de usuários. | 
| https://cognito-idp. Region.amazonaws.com/ /.well-known/jwks.json your user pool ID | Chaves públicas que você pode usar para validar os tokens do Amazon Cognito. [2](#cognito-federation-oidc-jwks-note) | Solicitado pelo aplicativo para verificação JWTs. | 
| Your user pool domainhttps://oauth2/idresponse | Os provedores de identidades sociais precisam redirecionar seus usuários para esse endpoint com um código de autorização. O Amazon Cognito resgata o código para um token quando autentica seu usuário federado. | Redirecionado do login do IdP OIDC como URL de retorno de chamada do cliente IdP. | 
| Your user pool domainhttps://saml2/idresponse | O URL do Serviço do Consumidor de Declaração (ACS) para integração com provedores de identidades SAML 2.0. | Redirecionado do IdP SAML 2.0 como URL do ACS ou o ponto de origem para login iniciado pelo IdP[3](#cognito-federation-idp-init-note). | 
| Your user pool domainhttps://saml2/logout | O URL de [Logout único](cognito-user-pools-saml-idp-sign-out.md#cognito-user-pools-saml-idp-sign-out.title) (SLO) para integração com provedores de identidades SAML 2.0. | Redirecionado do IdP SAML 2.0 como URL de logout único (SLO). Aceita somente a vinculação POST. | 

1 O `openid-configuration` documento pode ser atualizado a qualquer momento com informações adicionais que mantenham o endpoint em conformidade com o OIDC e as especificações. OAuth2 

2 O arquivo JSON `jwks.json` pode ser atualizado a qualquer momento com novas chaves públicas de assinatura de token.

3 Para obter mais informações sobre o login SAML iniciado pelo IdP, consulte. [Implementar o login SAML iniciado pelo IdP](cognito-user-pools-SAML-session-initiation.md#cognito-user-pools-SAML-session-initiation-idp-initiation)

[Para obter mais informações sobre o OpenID Connect e OAuth os padrões, consulte OpenID [Connect](http://openid.net/specs/openid-connect-core-1_0.html) 1.0 e 2.0. OAuth](https://tools.ietf.org/html/rfc6749)

**Topics**
+ [

# O endpoint de redirecionamento e autorização
](authorization-endpoint.md)
+ [

# O endpoint do emissor de tokens
](token-endpoint.md)
+ [

# O endpoint de atributos do usuário
](userinfo-endpoint.md)
+ [

# O endpoint de revogação do token
](revocation-endpoint.md)
+ [

# O endpoint de declaração SAML do IdP
](saml2-idpresponse-endpoint.md)

# O endpoint de redirecionamento e autorização
<a name="authorization-endpoint"></a>

O endpoint `/oauth2/authorize` é um endpoint de redirecionamento compatível com dois destinos de redirecionamento. Se você incluir um `identity_provider` ou `idp_identifier` no URL, ele redirecionará silenciosamente o usuário para a página de login desse provedor de identidades (IdP). Do contrário, ele redirecionará para o [Endpoint de login](login-endpoint.md) com os mesmos parâmetros de URL que você incluiu em sua solicitação. 

O endpoint de autorização redireciona para o login gerenciado ou para a página de login do IdP. O destino de uma sessão de usuário nesse endpoint é uma página da web com a qual o usuário deve interagir diretamente no navegador.

Para usar o endpoint de autorização, invoque o navegador do usuário em `/oauth2/authorize` com parâmetros que forneçam ao seu grupo de usuários os detalhes a seguir do grupo de usuários.
+ O cliente da aplicação no qual você deseja fazer login.
+ O URL de retorno de chamada ao qual você deseja chegar.
+ Os escopos OAuth 2.0 que você deseja solicitar no token de acesso do seu usuário.
+ Opcionalmente, o IdP de terceiros que você deseja usar para fazer login.

Você também pode fornecer os parâmetros `state` e `nonce` que o Amazon Cognito usa para validar as solicitações recebidas.

## GET `/oauth2/authorize`
<a name="get-authorize"></a>

O endpoint `/oauth2/authorize` só é compatível com `HTTPS GET`. Sua aplicação normalmente inicia essa solicitação no navegador do usuário. Você só pode fazer solicitações ao endpoint `/oauth2/authorize` por HTTPS.

Você pode saber mais sobre a definição de endpoint de autorização no padrão do OpenID Connect (OIDC) em [Authorization Endpoint](http://openid.net/specs/openid-connect-core-1_0.html#ImplicitAuthorizationEndpoint) (Endpoint de autorização).

### Parâmetros de solicitação
<a name="get-authorize-request-parameters"></a>

**`response_type`**  
Obrigatório.  
O tipo de resposta. Precisa ser `code` ou `token`.   
Uma solicitação bem-sucedida com um `response_type` do `code` retorna uma concessão de código de autorização. Uma concessão de código de autorização é um parâmetro `code` que o Amazon Cognito anexa ao URL de redirecionamento. Sua aplicação pode trocar o código por [Endpoint de token](token-endpoint.md) para acesso, ID e tokens de atualização. Como prática recomendada de segurança e para receber tokens de atualização para os usuários, use uma concessão de código de autorização na aplicação.  
Uma solicitação bem-sucedida com um `response_type` do `token` retorna uma concessão implícita. Uma concessão implícita é um ID e um token de acesso que o Amazon Cognito anexa ao URL de redirecionamento. A concessão implícita é menos segura porque expõe tokens e possíveis informações de identificação aos usuários. Você pode desativar o suporte para concessões implícitas na configuração do cliente da aplicação.

**`client_id`**  
Obrigatório.  
O ID do cliente do aplicativo  
O valor de `client_id` deve ser o ID de um cliente da aplicação no grupo de usuários em que você faz a solicitação. O cliente da aplicação deve ser compatível com o login de usuários locais do Amazon Cognito ou pelo menos um IdP de terceiros.

**`redirect_uri`**  
Obrigatório.  
O URL para o qual o servidor de autenticação redireciona o navegador depois que o Amazon Cognito autoriza o usuário.  
Um identificador de recurso uniforme (URI) de redirecionamento deve ter os seguintes atributos:  
+ Deve ser um URI absoluto.
+ É necessário pré-registrar o URI em um cliente.
+ Não pode incluir um componente de fragmento.
Consulte [OAuth 2.0 - Endpoint de redirecionamento](https://tools.ietf.org/html/rfc6749#section-3.1.2).  
O Amazon Cognito exige que seu URI de redirecionamento use HTTPS, exceto para `http://localhost`, que você pode definir como um URL de retorno de chamada para fins de teste.  
O Amazon Cognito também oferece suporte ao retorno de chamadas URLs de aplicativos, como. `myapp://example`

**`state`**  
Opcional, recomendado.  
Quando sua aplicação adiciona um parâmetro *state* a uma solicitação, o Amazon Cognito retorna o valor para a aplicação quando o endpoint `/oauth2/authorize` redireciona o usuário.  
Adicione esse valor às suas solicitações para se proteger contra ataques [CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery).  
Não é possível definir o valor de um parâmetro `state` como uma string JSON codificada por URL. Para transmitir uma string que corresponda a esse formato em um parâmetro `state`, codifique-a como Base64 e, depois, decodifique-a em sua aplicação.

**`identity_provider`**  
Opcional.  
Adicione esse parâmetro para ignorar o login gerenciado e redirecionar seu usuário para uma página de login do provedor. O valor do parâmetro *identity\$1provider* é o nome do provedor de identidade (IdP) da forma como ele aparece no grupo de usuários.  
+ Para provedores sociais, você pode usar os valores *identity\$1provider*`Facebook`, `Google` e `LoginWithAmazon` e `SignInWithApple`.
+ Para grupos de usuários do Amazon Cognito, use o valor `COGNITO`.
+ Para provedores de identidade SAML 2.0 e OpenID Connect (OIDC) (IdPs), use o nome que você atribuiu ao IdP em seu grupo de usuários.

**`idp_identifier`**  
Opcional.  
Adicione esse parâmetro para redirecionar para um provedor com um nome alternativo para o nome de *identity\$1provider*. Você pode inserir identificadores para seu SAML 2.0 e OIDC no menu de **provedores sociais e externos IdPs ** do console do Amazon Cognito.

**`scope`**  
Opcional.  
Pode ser uma combinação de quaisquer escopos reservados ao sistema ou de escopos personalizados associados a um cliente. Os escopos devem ser separados por espaços. Os escopos reservados ao sistema são `openid`, `email`, `phone`, `profile` e `aws.cognito.signin.user.admin`. Qualquer escopo usado deve ser associado ao cliente ou ele será ignorado durante o tempo de execução.  
Se o cliente não solicita qualquer escopo, o servidor de autenticação usa todos os escopos associados ao cliente.  
Um token de ID só é retornado se o escopo `openid` é solicitado. O token de acesso só pode ser usado com relação a grupos de usuários do Amazon Cognito se o escopo `aws.cognito.signin.user.admin` é solicitado. Os escopos `phone`, `email` e `profile` só podem ser solicitados se o escopo `openid` também é solicitado. Esses escopos ditam as solicitações que entram no token de ID.

**`code_challenge_method`**  
Opcional.  
O protocolo de hash que você usa para gerar o desafio. O [PKCE RFC](https://tools.ietf.org/html/rfc7636) define dois métodos, S256 e simples; no entanto, o servidor de autenticação do Amazon Cognito só é compatível com o S256.

**`code_challenge`**  
Opcional.  
O desafio da chave de prova para troca de código (PKCE) que você gerou por meio de `code_verifier`. Para obter mais informações, consulte [Como usar PKCE em concessões de código de autorização](using-pkce-in-authorization-code.md).  
Obrigatório somente quando você especifica um parâmetro `code_challenge_method`.

**`nonce`**  
Opcional.  
Um valor aleatório que você pode adicionar à solicitação. O valor nonce fornecido está incluído no token de ID que o Amazon Cognito emite. Para se proteger contra ataques de repetição, a aplicação pode inspecionar a reivindicação `nonce` no token de ID e compará-la com o que você gerou. Para obter mais informações sobre a solicitação `nonce`, consulte “[ID Token Validation](https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation)” (Validação de tokens de ID) no *OpenID Connect Standard* (Padrão do OpenID Connect).

**`lang`**  
Opcional.  
O idioma no qual você deseja exibir as páginas interativas. As páginas de login gerenciado podem ser localizadas, mas as páginas de IU hospedada (clássica) não. Para obter mais informações, consulte [Managed login localization](cognito-user-pools-managed-login.md#managed-login-localization).

**`login_hint`**  
Opcional.  
Um prompt de nome de usuário que você deseja enviar ao servidor de autorização. Você pode coletar um nome de usuário, endereço de e-mail ou número de telefone do seu usuário e permitir que o provedor de destino preencha previamente o nome de login do usuário. Quando você envia um parâmetro `login_hint` e nenhum parâmetro `idp_identifier` ou `identity_provider` para o endpoint `oauth2/authorize`, o login gerenciado preenche o campo do nome de usuário com o valor da dica. Você também pode passar esse parâmetro para o [Endpoint de login](login-endpoint.md) e preencher automaticamente o valor do nome de usuário.  
Quando sua solicitação de autorização invoca um redirecionamento para o OIDC, o IdPs Amazon Cognito adiciona `login_hint` um parâmetro à solicitação para esse autorizador terceirizado. Você não pode encaminhar dicas de login para SAML, Apple, Login With Amazon, Google ou Facebook (Meta). IdPs

**`prompt`**  
Opcional.  
Um parâmetro OIDC que controla o comportamento de autenticação para sessões existentes. Disponível somente na versão de identidade visual de login gerenciado, não na IU hospedada clássica. Para obter mais informações da especificação do OIDC, consulte [Authentication request](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest). Os valores `none` e `login` têm um efeito no comportamento de autenticação do grupo de usuários.  
O Amazon Cognito encaminha todos os valores de, `prompt` exceto `none` para o seu, IdPs quando os usuários selecionam a autenticação com provedores terceirizados. Isso ocorre quando o URL que os usuários acessam inclui um parâmetro `identity_provider` ou `idp_identifier`, ou quando o servidor de autorização os redireciona para o [Endpoint de login](login-endpoint.md) e eles selecionam um IdP nos botões disponíveis.  
**Valores de parâmetros de prompt**    
`prompt=none`  
O Amazon Cognito continua silenciosamente a autenticação para usuários que têm uma sessão autenticada válida. Com esse prompt, os usuários podem se autenticar silenciosamente entre diferentes clientes da aplicação no grupo de usuários. Se o usuário ainda não estiver autenticado, o servidor de autorização retornará um erro `login_required`.  
`prompt=login`  
O Amazon Cognito exige que os usuários se autentiquem novamente, mesmo que já tenham uma sessão ativa. Envie esse valor quando quiser verificar a identidade do usuário novamente. Usuários autenticados que tenham uma sessão existente podem retornar ao login sem invalidar essa sessão. Quando um usuário com uma sessão ativa faz login novamente, o Amazon Cognito atribui a ele um novo cookie de sessão. Esse parâmetro também pode ser encaminhado para o seu IdPs. IdPsque aceitam esse parâmetro também solicitam uma nova tentativa de autenticação do usuário.  
`prompt=select_account`  
Esse valor não tem efeito no login local e deve ser enviado em solicitações que redirecionam para o. IdPs Quando incluído na solicitação de autorização, esse parâmetro adiciona `prompt=select_account` ao caminho do URL para o destino de redirecionamento do IdP. Quando IdPs oferecem suporte a esse parâmetro, eles solicitam que os usuários selecionem a conta com a qual desejam fazer login.  
`prompt=consent`  
Esse valor não tem efeito no login local e deve ser enviado em solicitações que redirecionam para o. IdPs Quando incluído na solicitação de autorização, esse parâmetro adiciona `prompt=consent` ao caminho do URL para o destino de redirecionamento do IdP. Quando IdPs oferecem suporte a esse parâmetro, eles solicitam o consentimento do usuário antes de serem redirecionados de volta para seu grupo de usuários. 
Quando você omite o parâmetro `prompt` da solicitação, o login gerenciado segue o comportamento padrão: os usuários devem fazer login, a menos que o navegador tenha um cookie de sessão de login gerenciado válido. Você pode combinar vários valores para `prompt` com um delimitador de espaço, por exemplo, `prompt=login consent`.

**`resource`**  
Opcional.  
O identificador de um recurso que você deseja vincular ao token de acesso na declaração `aud`. Quando você inclui esse parâmetro, o Amazon Cognito valida se o valor é um URL e define o público do token de acesso resultante para o recurso solicitado. Você pode solicitar um [servidor de recursos](cognito-user-pools-define-resource-servers.md) do grupo de usuários com um identificador em formato de URL ou um URL de sua escolha. Os valores desse parâmetro devem começar com`https://`, `http://localhost` ou com um esquema de URL personalizado, como `myapp://`.  
A vinculação de recursos é definida no [RFC 8707](https://www.rfc-editor.org/rfc/rfc8707.html). Para obter mais informações sobre servidores de recursos e vinculação de recursos, consulte [Vinculação de recursos](cognito-user-pools-define-resource-servers.md#cognito-user-pools-resource-binding).

## Exemplo: concessão de código de autorização
<a name="sample-authorization-code-grant"></a>

Este é um exemplo de solicitação de concessão de código de autorização.

A solicitação a seguir inicia uma sessão para recuperar um código de autorização que seu usuário passa para a aplicação de destino `redirect_uri`. Essa sessão solicita escopos para atributos de usuário e acesso às operações da API de autoatendimento do Amazon Cognito.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=openid+profile+aws.cognito.signin.user.admin
```

O servidor de autenticação do Amazon Cognito faz o redirecionamento de volta à aplicação com o estado e o código de autorização. O código de autorização é válido por cinco minutos.

```
HTTP/1.1 302 Found
Location: https://www.example.com?code=a1b2c3d4-5678-90ab-cdef-EXAMPLE11111&state=abcdefg
```

## Exemplo: concessão de código de autorização com PKCE
<a name="sample-authorization-code-grant-with-pkce"></a>

Este fluxo de exemplo realiza uma concessão de código de autorização com [PKCE](using-pkce-in-authorization-code.md#using-pkce-in-authorization-code.title).

Esta solicitação adiciona um parâmetro `code_challenge`. Para concluir a troca de um código por um token, você deve incluir o parâmetro `code_verifier` em sua solicitação para o endpoint `/oauth2/token`.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=aws.cognito.signin.user.admin&
code_challenge_method=S256&
code_challenge=a1b2c3d4...
```

O servidor de autorização redireciona de volta à aplicação com o estado e o código de autorização. Sua aplicação processa o código de autorização e o troca por tokens.

```
HTTP/1.1 302 Found
Location: https://www.example.com?code=a1b2c3d4-5678-90ab-cdef-EXAMPLE11111&state=abcdefg
```

## Exemplo: exigência de reautenticação com `prompt=login`
<a name="sample-authorization-code-with-prompt-login"></a>

A solicitação a seguir adiciona um parâmetro `prompt=login` que exige que o usuário se autentique novamente, mesmo que tenha uma sessão ativa.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=openid+profile+aws.cognito.signin.user.admin&
prompt=login
```

O servidor de autorização redireciona para o [endpoint de login](login-endpoint.md), exigindo uma nova autenticação.

```
HTTP/1.1 302 Found Location: https://mydomain.auth.us-east-1.amazoncognito.com/login?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com&state=abcdefg&scope=openid+profile+aws.cognito.signin.user.admin&prompt=login
```

## Exemplo: autenticação silenciosa com `prompt=none`
<a name="sample-authorization-code-with-prompt-none"></a>

A solicitação a seguir adiciona um parâmetro `prompt=none` que verifica silenciosamente se o usuário tem uma sessão válida.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=openid+profile+aws.cognito.signin.user.admin&
prompt=none
```

Quando não há uma sessão válida, o servidor de autorização retorna um erro ao URI de redirecionamento.

```
HTTP/1.1 302 Found Location: https://www.example.com?error=login_required&state=abcdefg
```

Quando há uma sessão válida, o servidor de autorização retorna um código de autorização.

```
HTTP/1.1 302 Found Location: https://www.example.com?code=AUTHORIZATION_CODE&state=abcdefg
```

## Exemplo: concessão de código de autorização com vinculação de recursos
<a name="sample-authorization-code-with-resource-binding"></a>

A solicitação a seguir adiciona um parâmetro `resource` para vincular o token de acesso a um servidor de recursos específico. O token de acesso resultante cria as condições para que a API de destino valide que é o público-alvo da solicitação do usuário autenticado.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=solar-system-data-api.example.com/asteroids.add&
resource=https://solar-system-data-api.example.com
```

O servidor de autorização retorna um código de autorização que resulta em um token de acesso com uma declaração `aud` de `https://solar-system-data-api.example.com`.

```
HTTP/1.1 302 Found Location: https://www.example.com?code=AUTHORIZATION_CODE&state=abcdefg
```

## Exemplo: concessão de token (implícita) sem escopo `openid`
<a name="sample-token-grant-without-openid-scope"></a>

Esse exemplo de fluxo gera uma concessão implícita e retorna JWTs diretamente para a sessão do usuário.

A solicitação é para uma concessão implícita do seu servidor de autorização. Ela solicita escopos no token de acesso que autorizam as operações de autoatendimento do perfil do usuário.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=token&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=aws.cognito.signin.user.admin
```

O servidor de autorização redireciona de volta à aplicação somente com um token de acesso. Como o escopo `openid` não foi solicitado, o Amazon Cognito não retorna um token de ID. Além disso, o Amazon Cognito não retorna um token de atualização nesse fluxo.

```
HTTP/1.1 302 Found
Location: https://example.com/callback#access_token=eyJra456defEXAMPLE&token_type=bearer&expires_in=3600&state=STATE
```

## Exemplo: concessão de token (implícita) com escopo `openid`
<a name="sample-token-grant-with-openid-scope"></a>

Este fluxo de exemplo gera uma concessão implícita e retorna tokens para o navegador do usuário.

A solicitação é para uma concessão implícita do seu servidor de autorização. Ela solicita escopos no token de acesso que autorizam o acesso a atributos do usuário e operações de autoatendimento.

```
GET
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? 
response_type=token& 
client_id=1example23456789& 
redirect_uri=https://www.example.com& 
state=abcdefg&
scope=aws.cognito.signin.user.admin+openid+profile
```

O servidor de autorização redireciona de volta à aplicação com token de acesso e token de ID (porque o escopo `openid` foi incluído):

```
HTTP/1.1 302 Found
Location: https://www.example.com#id_token=eyJra67890EXAMPLE&access_token=eyJra12345EXAMPLE&token_type=bearer&expires_in=3600&state=abcdefg
```

## Exemplos de respostas negativas
<a name="get-authorize-negative"></a>

O Amazon Cognito pode negar sua solicitação. As solicitações negativas vêm com um código de erro HTTP e uma descrição que você pode usar para corrigir os parâmetros da solicitação. Veja a seguir exemplos de respostas negativas.
+ Se `client_id` e `redirect_uri` forem válidos, mas os parâmetros da solicitação não estiverem formatados corretamente, o servidor de autenticação redirecionará o erro para o `redirect_uri` do cliente e anexará uma mensagem de erro em um parâmetro de URL. Veja a seguir exemplos de formatos incorretos.
  + A solicitação não inclui um parâmetro `response_type`.
  + A solicitação de autorização forneceu um parâmetro `code_challenge`, mas não um parâmetro `code_challenge_method`.
  + O valor do parâmetro `code_challenge_method` não é `S256`.

  Veja a seguir um exemplo de resposta para a solicitação com formato incorreto.

  ```
  HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request
  ```
+ Se o cliente solicitar `code` ou `token` em `response_type`, mas não tiver permissão para essas solicitações, o servidor de autorização do Amazon Cognito retornará `unauthorized_client` ao `redirect_uri` do cliente da seguinte forma:

  ```
  HTTP 1.1 302 Found Location: https://client_redirect_uri?error=unauthorized_client
  ```
+  Se o cliente solicitar um escopo inválido, desconhecido ou malformado, o servidor de autorização do Amazon Cognito deverá retornar o `invalid_scope` ao `redirect_uri` do cliente da seguinte forma: 

  ```
  HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_scope
  ```
+ Se acontece um erro inesperado no servidor, o servidor de autenticação retorna `server_error` ao `redirect_uri` do cliente. Como o erro HTTP 500 não é enviado ao cliente, ele não aparece no navegador do usuário. O servidor de autorização retorna o erro a seguir.

  ```
  HTTP 1.1 302 Found Location: https://client_redirect_uri?error=server_error
  ```
+ Quando o Amazon Cognito se autentica por meio de federação para terceiros, IdPs o Amazon Cognito pode enfrentar problemas de conexão, como os seguintes:
  + Se ocorrer um tempo limite de conexão ao solicitar o token do IdP, o servidor de autenticação redirecionará o erro para o `redirect_uri` do cliente da seguinte maneira:

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Timeout+occurred+in+calling+IdP+token+endpoint
    ```
  + Se ocorrer um tempo limite de conexão na chamada do endpoint `jwks_uri` para validação do token de ID, o servidor de autenticação redirecionará o erro para o `redirect_uri` do cliente da seguinte maneira:

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=error_description=Timeout+in+calling+jwks+uri
    ```
+ Ao se autenticar por meio de federação com terceiros IdPs, os provedores podem retornar respostas de erro. Isso pode acontecer em razão de erros de configuração ou outros motivos, como os seguintes:
  + Se uma resposta de erro for recebida de outros provedores, o servidor de autenticação redirecionará o erro para o `redirect_uri` do cliente da seguinte maneira:

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=[IdP name]+Error+-+[status code]+error getting token
    ```
  + Se uma resposta de erro for recebida do Google, o servidor de autenticação redirecionará o erro para o `redirect_uri` do cliente da seguinte maneira: 

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Google+Error+-+[status code]+[Google-provided error code]
    ```
+ Quando o Amazon Cognito encontra uma exceção de comunicação com um IdP externo, o servidor de autenticação redireciona o erro para o `redirect_uri` do cliente com uma das seguintes mensagens:
  + 

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Connection+reset
    ```
  + 

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Read+timed+out
    ```

# O endpoint do emissor de tokens
<a name="token-endpoint"></a>

O [endpoint do token OAuth ](https://www.rfc-editor.org/rfc/rfc6749#section-3.2) 2.0 `/oauth2/token` emite tokens web JSON (JWTs) para aplicativos que desejam concluir fluxos de concessão de código de autorização e credenciais de cliente. Esses tokens são o resultado da autenticação com um grupo de usuários. Eles contêm informações sobre o usuário (token de ID), o nível de acesso do usuário (token de acesso) e o direito do usuário de persistir na sessão conectada (token de atualização). As bibliotecas independentes do OpenID Connect (OIDC) gerenciam cargas úteis de solicitações e respostas desse endpoint. Os tokens fornecem prova verificável de autenticação, informações de perfil e um mecanismo para acesso a sistemas de backend.

Seu servidor de autorização do grupo de usuários OAuth 2.0 emite tokens web JSON (JWTs) do endpoint do token para os seguintes tipos de sessões:

1. Usuários que concluíram uma solicitação de concessão de código de autorização. O resgate bem-sucedido de um código retorna tokens de ID, acesso e atualização.

1. Machine-to-machine Sessões (M2M) que concluíram uma concessão de credenciais de cliente. A autorização bem-sucedida com o segredo do cliente retorna um token de acesso.

1. Usuários que já fizeram login e receberam tokens de atualização. A autenticação de token de atualização retorna novos tokens de ID e acesso.
**nota**  
Os usuários que fazem login com uma concessão de código de autorização no login gerenciado ou por meio da federação sempre podem atualizar seus tokens por meio do endpoint de token. Usuários que fazem login com as operações da API `InitiateAuth` e `AdminInitiateAuth` podem atualizar seus tokens com o endpoint do token quando os [dispositivos memorizados](amazon-cognito-user-pools-device-tracking.md) *não* estão ativos em seu grupo de usuários. Se os dispositivos memorizados estiverem ativos, atualize os tokens com a [API relevante ou a operação de atualização de token do SDK](amazon-cognito-user-pools-using-the-refresh-token.md#using-the-refresh-token-api) para seu cliente de aplicação.

O endpoint do token fica disponível ao público quando você adiciona um domínio ao grupo de usuários. Ele aceita solicitações HTTP POST. Para fins de segurança da aplicação, use o PKCE com eventos de login com código de autorização. O PKCE verifica se o usuário que está transmitindo um código de autorização é o mesmo usuário que se autenticou. Para obter mais informações sobre PKCE, consulte [IETF RFC 7636](https://datatracker.ietf.org/doc/html/rfc7636).

Você pode aprender mais sobre os clientes do aplicativo do grupo de usuários e seus tipos de concessão, segredos do cliente, escopos permitidos e clientes IDs em[Configurações específicas da aplicação com clientes de aplicação](user-pool-settings-client-apps.md). Você pode aprender mais sobre autorização M2M, concessões de credenciais de clientes e autorização com escopos de token de acesso em [Escopos, M2M e servidores de recursos](cognito-user-pools-define-resource-servers.md).

Para recuperar informações sobre um usuário por meio do token de acesso, transmita-o para [endpoint userinfo](userinfo-endpoint.md) ou para uma solicitação de API [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html). O token de acesso deve conter os escopos apropriados para essas solicitações.

## Formatar uma solicitação POST para o endpoint de token
<a name="post-token"></a>

O endpoint `/oauth2/token` só é compatível com `HTTPS POST`. Esse endpoint não é interativo com o usuário. Gerencie solicitações de token com uma [biblioteca OpenID Connect (OIDC)](https://openid.net/developers/certified-openid-connect-implementations/) em sua aplicação.

O endpoint de token é compatível com a autenticação de `client_secret_basic` e `client_secret_post`. Para obter mais informações sobre a especificação do OIDC, consulte [Client Authentication](https://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication). Para obter mais informações sobre o endpoint de token na especificação do OpenID Connect, consulte [Endpoint de token](http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint).

### Parâmetros de solicitação no cabeçalho
<a name="post-token-request-parameters"></a>

Você pode transmitir os parâmetros a seguir no cabeçalho da sua solicitação para o endpoint de token.

**`Authorization`**  
Se um segredo foi emitido para o cliente, ele precisa passar o `client_id` e o `client_secret` no cabeçalho de autorização como autorização HTTP `client_secret_basic`. Você também pode incluir o `client_id` e `client_secret` no corpo da solicitação como autorização de `client_secret_post`.  
A string do cabeçalho de autorização é [Basic](https://en.wikipedia.org/wiki/Basic_access_authentication#Client_side) `Base64Encode(client_id:client_secret)`. O exemplo a seguir é um cabeçalho de autorização para o cliente da aplicação `djc98u3jiedmi283eu928` com segredo do cliente `abcdef01234567890` usando a versão codificada em Base64 da string `djc98u3jiedmi283eu928:abcdef01234567890`:  

```
Authorization: Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw
```

**`Content-Type`**  
Defina o valor desse parâmetro como `'application/x-www-form-urlencoded'`.

### Parâmetros de solicitação no corpo
<a name="post-token-request-parameters-in-body"></a>

A seguir estão os parâmetros que você pode solicitar em formato `x-www-form-urlencoded` no corpo da solicitação para o endpoint de token.

**`grant_type`**  
*Obrigatório*.  
O tipo de concessão do OIDC que você deseja solicitar.  
Deve ser `authorization_code` ou `refresh_token` ou `client_credentials`. Você pode solicitar um token de acesso para um escopo personalizado a partir do endpoint do token sob as seguintes condições:  
+ Você habilitou o escopo solicitado na configuração do cliente da aplicação.
+ Você configurou o cliente da aplicação com um segredo do cliente.
+ Você ativa a concessão de credenciais do cliente em seu cliente de aplicação.
O endpoint de token retorna um token de atualização somente quando o `grant_type` é `authorization_code`.

**`client_id`**  
*Opcional. Não é obrigatório quando você fornece o ID do cliente de aplicação no cabeçalho `Authorization`.*  
O ID de um cliente de aplicação no grupo de usuários. Especifique o mesmo cliente de aplicação que autenticou o usuário.  
Você deve fornecer esse parâmetro se o cliente for público e não tiver um segredo ou com `client_secret` na autorização `client_secret_post`.

**`client_secret`**  
*Opcional. Não é obrigatório quando você fornece o segredo do cliente no cabeçalho `Authorization` e quando o cliente de aplicação não tem um segredo.*  
O segredo do cliente de aplicação, caso o cliente de aplicação tenha um, para autorização `client_secret_post`.

**`scope`**  
*Opcional.*  
Pode ser uma combinação de quaisquer escopos associados ao seu cliente de aplicação. O Amazon Cognito ignora escopos na solicitação que não são permitidos para o cliente de aplicação solicitado. Se você não fornecer esse parâmetro de solicitação, o servidor de autorização retornará uma declaração `scope` de token de acesso com todos os escopos de autorização que você habilitou na configuração do cliente de aplicação. É possível solicitar qualquer um dos escopos permitidos para o cliente de aplicação solicitado: escopos padrão, escopos personalizados de servidores de recursos e o escopo de autoatendimento do usuário `aws.cognito.signin.user.admin`.

**`redirect_uri`**  
*Opcional. Não é obrigatório para concessões de credenciais de clientes.*  
Precisa ser o mesmo `redirect_uri` usado para obter o `authorization_code` em `/oauth2/authorize`.  
Você deve fornecer esse parâmetro se `grant_type` for `authorization_code`.

**`refresh_token`**  
*Opcional. Usado somente quando o usuário já tem um token de atualização e deseja obter um novo ID e tokens de acesso.*  
Para gerar novos tokens de acesso e ID para a sessão de um usuário, defina o valor de `refresh_token` para um token de atualização válido emitido pelo cliente de aplicação solicitado.  
Retorna um novo token de atualização com um novo token de ID e acesso quando a [alternância de tokens de atualização](amazon-cognito-user-pools-using-the-refresh-token.md#using-the-refresh-token-rotation) está ativa, caso contrário, retorna somente tokens de ID e acesso. Se o token de acesso original estiver [vinculado a um recurso da API](cognito-user-pools-define-resource-servers.md#cognito-user-pools-resource-binding), o novo token de acesso manterá o URL da API solicitado na declaração `aud`.

**`code`**  
*Opcional. Obrigatório somente em concessões de código de autorização.*  
O código de autorização de uma concessão de código de autorização. Você deve fornecer esse parâmetro se sua solicitação de autorização incluir `grant_type` de `authorization_code`.

**`aws_client_metadata`**  
*Opcional.*  
Informações que você deseja passar para os fluxos de autorização [Acionador do Lambda antes da geração do token](user-pool-lambda-pre-token-generation.md) in [machine-to-machine (M2M)](cognito-user-pools-define-resource-servers.md). Sua aplicação pode coletar informações de contexto sobre a sessão e transmiti-las neste parâmetro. Quando você transmite `aws_client_metadata` no formato JSON codificado por URL, o Amazon Cognito o inclui no evento de entrada para sua função do Lambda do acionador. Sua versão do evento de acionador de pré-geração de tokens ou a versão global de acionador do Lambda deve ser configurada para a versão três ou posterior. Embora o Amazon Cognito aceite solicitações para este endpoint em fluxos M2M de código de autorização e credenciais do cliente, seu grupo de usuários só transmite `aws_client_metadata` para o acionador de pré-geração de tokens por meio de solicitações de credenciais do cliente.

**`code_verifier`**  
Opcional. Obrigatório somente se você tiver fornecido os parâmetros `code_challenge_method` e `code_challenge` em sua solicitação de autorização inicial.  
O verificador de código gerado que sua aplicação usou para calcular `code_challenge` em uma solicitação de concessão de código de autorização com [PKCE](using-pkce-in-authorization-code.md).

## Como trocar um código de autorização por tokens
<a name="post-token-positive-exchanging-authorization-code-for-tokens"></a>

A solicitação a seguir gera tokens de ID, acesso e atualização com sucesso após a autenticação com uma concessão de código de autorização. A solicitação transmite o segredo do cliente no formato `client_secret_basic` no cabeçalho `Authorization`.

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token&
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=authorization_code&
client_id=1example23456789&
code=AUTHORIZATION_CODE&
redirect_uri=com.myclientapp://myclient/redirect
```

A resposta emite novos tokens de ID, acesso e atualização para o usuário, com metadados adicionais.

```
HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJra1example",
    "id_token": "eyJra2example",
    "refresh_token": "eyJj3example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Credenciais do cliente com autorização básica
<a name="exchanging-client-credentials-for-an-access-token-in-request-body"></a>

A solicitação a seguir de uma aplicação M2M solicita a concessão de credenciais do cliente. Como as credenciais do cliente exigem um segredo do cliente, a solicitação é autorizada com um cabeçalho `Authorization` derivado do ID e do segredo do cliente de aplicação. A solicitação resulta em um token de acesso com os dois escopos solicitados. A solicitação também inclui metadados do cliente que fornecem informações de endereço IP e um token emitido para o usuário atribuído a essa concessão. O Amazon Cognito transmite os metadados do cliente para o acionador do Lambda de pré-geração de tokens.

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token >
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=client_credentials&
client_id=1example23456789&
scope=resourceServerIdentifier1%2Fscope1%20resourceServerIdentifier2%2Fscope2&
&aws_client_metadata=%7B%22onBehalfOfToken%22%3A%22eyJra789ghiEXAMPLE%22,%20%22ClientIpAddress%22%3A%22192.0.2.252%22%7D
```

O Amazon Cognito transmite o evento de entrada a seguir para o acionador do Lambda de pré-geração de tokens.

```
{
    version: '3',
    triggerSource: 'TokenGeneration_ClientCredentials',
    region: 'us-east-1',
    userPoolId: 'us-east-1_EXAMPLE',
    userName: 'ClientCredentials',
    callerContext: {
        awsSdkVersion: 'aws-sdk-unknown-unknown',
        clientId: '1example23456789'
    },
    request: {
        userAttributes: {},
        groupConfiguration: null,
        scopes: [
           'resourceServerIdentifier1/scope1',
           'resourceServerIdentifier2/scope2'
        ],
        clientMetadata: {
            'onBehalfOfToken': 'eyJra789ghiEXAMPLE',
            'ClientIpAddress': '192.0.2.252'
        }
    },
    response: { claimsAndScopeOverrideDetails: null }
}
```

A resposta retorna um token de acesso. As concessões de credenciais do cliente são para autorização machine-to-machine (M2M) e retornam apenas tokens de acesso.

```
HTTP/1.1 200 OK
Content-Type: application/json
{
    "access_token": "eyJra1example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Credenciais do cliente com autorização do corpo POST
<a name="post-token-positive-exchanging-client-credentials-for-an-access-token-in-request-body"></a>

A solicitação de concessão de credenciais do cliente a seguir inclui o parâmetro `client_secret` no corpo da solicitação e não inclui um cabeçalho `Authorization`. Essa solicitação usa a sintaxe de autorização `client_secret_post`. A solicitação resulta em um token de acesso com o escopo solicitado. A solicitação também inclui metadados do cliente que fornecem informações de endereço IP e um token emitido para o usuário atribuído a essa concessão. O Amazon Cognito transmite os metadados do cliente para o acionador do Lambda de pré-geração de tokens.

```
POST /oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
X-Amz-Target: AWSCognitoIdentityProviderService.Client credentials request
User-Agent: USER_AGENT
Accept: /
Accept-Encoding: gzip, deflate, br
Content-Length: 177
Referer: http://auth.example.com/oauth2/token
Host: auth.example.com
Connection: keep-alive

grant_type=client_credentials&
client_id=1example23456789&
scope=my_resource_server_identifier%2Fmy_custom_scope&
client_secret=9example87654321&
aws_client_metadata=%7B%22onBehalfOfToken%22%3A%22eyJra789ghiEXAMPLE%22,%20%22ClientIpAddress%22%3A%22192.0.2.252%22%7D
```

O Amazon Cognito transmite o evento de entrada a seguir para o acionador do Lambda de pré-geração de tokens.

```
{
    version: '3',
    triggerSource: 'TokenGeneration_ClientCredentials',
    region: 'us-east-1',
    userPoolId: 'us-east-1_EXAMPLE',
    userName: 'ClientCredentials',
    callerContext: {
        awsSdkVersion: 'aws-sdk-unknown-unknown',
        clientId: '1example23456789'
    },
    request: {
        userAttributes: {},
        groupConfiguration: null,
        scopes: [
           'resourceServerIdentifier1/my_custom_scope'
        ],
        clientMetadata: {
            'onBehalfOfToken': 'eyJra789ghiEXAMPLE',
            'ClientIpAddress': '192.0.2.252'
        }
    },
    response: { claimsAndScopeOverrideDetails: null }
}
```

A resposta retorna um token de acesso. As concessões de credenciais do cliente são para autorização machine-to-machine (M2M) e retornam apenas tokens de acesso.

```
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Date: Tue, 05 Dec 2023 16:11:11 GMT
x-amz-cognito-request-id: 829f4fe2-a1ee-476e-b834-5cd85c03373b

{
    "access_token": "eyJra12345EXAMPLE",
    "expires_in": 3600,
    "token_type": "Bearer"
}
```

## Concessão de código de autorização com PKCE
<a name="post-token-positive-exchanging-authorization-code-grant-with-pkce-for-tokens"></a>

O exemplo a seguir conclui uma solicitação de autorização que incluiu os parâmetros `code_challenge_method` e `code_challenge` em uma solicitação de concessão de código de autorização com [PKCE](using-pkce-in-authorization-code.md).

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=authorization_code&
client_id=1example23456789&
code=AUTHORIZATION_CODE&
code_verifier=CODE_VERIFIER&
redirect_uri=com.myclientapp://myclient/redirect
```

A resposta retorna tokens de ID, acesso e atualização da verificação bem-sucedida do PKCE pela aplicação.

```
HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJra1example",
    "id_token": "eyJra2example",
    "refresh_token": "eyJj3example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Atualização de token sem alternância de tokens de atualização
<a name="post-token-positive-exchanging-a-refresh-token-for-tokens"></a>

O exemplo de solicitações a seguir fornece um token de atualização para um cliente de aplicação no qual a [alternância de tokens de atualização](amazon-cognito-user-pools-using-the-refresh-token.md#using-the-refresh-token-rotation) está inativa. Como o cliente de aplicação tem um segredo do cliente, a solicitação fornece um cabeçalho `Authorization`.

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token >
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=refresh_token&
client_id=1example23456789&
refresh_token=eyJj3example
```

A resposta retorna novos tokens de ID e acesso.

```
HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJra1example",
    "id_token": "eyJra2example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Atualização de token com alternância de tokens de atualização
<a name="post-token-positive-refresh-token-rotation"></a>

O exemplo de solicitações a seguir fornece um token de atualização para um cliente de aplicação no qual a [alternância de tokens de atualização](amazon-cognito-user-pools-using-the-refresh-token.md#using-the-refresh-token-rotation) está ativa. Como o cliente de aplicação tem um segredo do cliente, a solicitação fornece um cabeçalho `Authorization`.

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token >
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=refresh_token&
client_id=1example23456789&
refresh_token=eyJj3example
```

A resposta retorna novos tokens de ID, acesso e atualização.

```
HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJra1example",
    "id_token": "eyJra2example",
    "refresh_token": "eyJj4example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Exemplos de respostas negativas
<a name="post-token-negative"></a>

Solicitações malformadas geram erros no endpoint de token. Veja a seguir um mapa geral do corpo da resposta quando as solicitações de token geram um erro.

```
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8

{
"error":"invalid_request|invalid_client|invalid_grant|unauthorized_client|unsupported_grant_type"
}
```

**`invalid_request`**  
A solicitação não tem um parâmetro obrigatório, inclui um valor de parâmetro não compatível (diferente de `unsupported_grant_type`) ou está malformado. Por exemplo, `grant_type` é `refresh_token` , mas `refresh_token` não está incluído. 

**`invalid_client`**  
Falha na autenticação do cliente. Por exemplo, quando o cliente inclui `client_id` e `client_secret` no cabeçalho de autorização, mas não há tal cliente com esse `client_id` e `client_secret`. 

**`invalid_grant`**  
O token de atualização foi revogado.   
O código de autorização já foi consumido ou não existe.   
O cliente da aplicação não tem acesso de leitura a todos os [atributos](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html) no escopo solicitado. Por exemplo, a aplicação solicita o escopo `email` e o cliente da aplicação consegue ler o atributo `email`, mas não `email_verified`.

**`unauthorized_client`**  
O cliente não tem permissão para fluxo de concessão de código ou para tokens de atualização. 

**`unsupported_grant_type`**  
Retornado se `grant_type` for diferente de `authorization_code`, `refresh_token` ou `client_credentials`. 

# O endpoint de atributos do usuário
<a name="userinfo-endpoint"></a>

Quando o OIDC emite tokens de ID que contêm atributos do usuário, o OAuth 2.0 implementa o endpoint. `/oauth2/userInfo` Um usuário ou cliente autenticado recebe um token de acesso com uma reivindicação `scopes`. Essa reivindicação determina os atributos que o servidor de autorização deve retornar. Quando uma aplicação apresenta um token de acesso ao endpoint `userInfo`, o servidor de autorização retorna um corpo de resposta que contém os atributos do usuário que estão dentro dos limites definidos pelos escopos do token de acesso. Essa aplicação pode recuperar informações sobre um usuário a partir do endpoint `userInfo`, desde que tenha um token de acesso válido com pelo menos uma reivindicação de escopo `openid`.

O endpoint `userInfo` é um [endpoint userInfo](https://openid.net/specs/openid-connect-core-1_0.html#UserInfo) do OpenID Connect (OIDC). Ele responde com atributos do usuário quando os provedores de serviço apresentam os tokens de acesso que seu [endpoint do](token-endpoint.md) emitiu. Os escopos no token de acesso do usuário definem os atributos do usuário que o endpoint userInfo retorna em sua resposta. O escopo `openid` deve ser uma das reivindicações do token de acesso.

O Amazon Cognito emite tokens de acesso em resposta a solicitações de API dos grupos de usuários, como [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html). Como elas não contêm escopos, o endpoint userInfo não aceita esses tokens de acesso. Em vez disso, você deve apresentar os tokens de acesso do endpoint de token.

Seu provedor de identidade terceirizado (IdP) OAuth 2.0 também hospeda um userInfo endpoint. Quando o usuário faz a autenticação com esse IdP, o Amazon Cognito troca silenciosamente um código de autorização com o endpoint `token` do IdP. Seu grupo de usuários passa o token de acesso do IdP para autorizar a recuperação das informações do usuário do endpoint `userInfo` do IdP.

Os escopos no token de acesso de um usuário são determinados pelo parâmetro de solicitação `scopes` nas solicitações de autenticação ou pelos escopos que o [acionador do Lambda de pré-geração de tokens](user-pool-lambda-pre-token-generation.md) adiciona. Você pode decodificar tokens de acesso e examinar as declarações `scope` para ver os escopos de controle de acesso que elas contêm. A seguir estão algumas combinações de escopo que influenciam os dados retornados do endpoint `userInfo`. O escopo reservado do Amazon Cognito `aws.cognito.signin.user.admin` não afeta os dados retornados desse endpoint.Exemplos de escopos no token de acesso e seus efeitos na resposta `userInfo`

**`openid`**  
Retorna uma resposta com todos os atributos do usuário que o cliente de aplicação pode ler.

**`openid profile`**  
Retorna os atributos do usuário `name`, `family_name`, `given_name`, `middle_name`, `nickname`, `preferred_username`, `profile`, `picture`, `website`, `gender`, `birthdate`, `zoneinfo`, `locale` e `updated_at`. Também retorna [atributos personalizados](user-pool-settings-attributes.md#user-pool-settings-custom-attributes). Em clientes da aplicação que não têm acesso de leitura a cada atributo, a resposta a esse escopo inclui todos os atributos da especificação aos quais o cliente de aplicação tem acesso de leitura.

**`openid email`**  
Retorna informações básicas do perfil e os atributos `email` e `email_verified`.

**`openid phone`**  
Retorna informações básicas do perfil e os atributos `phone_number` e `phone_number_verified`.

## GET /oauth2/userInfo
<a name="get-userinfo"></a>

A aplicação gera solicitações para este endpoint diretamente, não por meio de um navegador.

Para ter mais informações, consulte [Endpoint UserInfo](http://openid.net/specs/openid-connect-core-1_0.html#UserInfo) na especificação do OpenID Connect (OIDC).

**Topics**
+ [

## GET /oauth2/userInfo
](#get-userinfo)
+ [

## Parâmetros de solicitação no cabeçalho
](#get-userinfo-request-header-parameters)
+ [

## Exemplo - solicitação
](#get-userinfo-positive-exchanging-authorization-code-for-userinfo-sample-request)
+ [

## Exemplo - resposta positiva
](#get-userinfo-response-sample)
+ [

## Exemplo - respostas negativas
](#get-userinfo-negative)

## Parâmetros de solicitação no cabeçalho
<a name="get-userinfo-request-header-parameters"></a>

**`Authorization: Bearer <access_token>`**  
Repasse o token de acesso no campo do cabeçalho da autorização.  
Obrigatório.

## Exemplo - solicitação
<a name="get-userinfo-positive-exchanging-authorization-code-for-userinfo-sample-request"></a>

```
GET /oauth2/userInfo HTTP/1.1
Content-Type: application/x-amz-json-1.1
Authorization: Bearer eyJra12345EXAMPLE
User-Agent: [User agent]
Accept: */*
Host: auth.example.com
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
```

## Exemplo - resposta positiva
<a name="get-userinfo-response-sample"></a>

```
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: [Integer]
Date: [Timestamp]
x-amz-cognito-request-id: [UUID]
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Server: Server
Connection: keep-alive
{
    "sub": "[UUID]",
    "email_verified": "true",
    "custom:mycustom1": "CustomValue",
    "phone_number_verified": "true",
    "phone_number": "+12065551212",
    "email": "bob@example.com",
    "username": "bob"
}
```

Para obter uma lista de solicitações OIDC, consulte [Solicitações padrão](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). No momento, o Amazon Cognito retorna os valores para `email_verified` e `phone_number_verified` como strings.

## Exemplo - respostas negativas
<a name="get-userinfo-negative"></a>

### Exemplo - solicitação inválida
<a name="get-userinfo-negative-400"></a>

```
HTTP/1.1 400 Bad Request
WWW-Authenticate: error="invalid_request",
error_description="Bad OAuth2 request at UserInfo Endpoint"
```

**`invalid_request`**  
A solicitação não possui um parâmetro obrigatório, inclui um valor de parâmetro não compatível ou contém informações incorretas.

### Exemplo - token inválido
<a name="get-userinfo-negative-401"></a>

```
HTTP/1.1 401 Unauthorized
WWW-Authenticate: error="invalid_token",
error_description="Access token is expired, disabled, or deleted, or the user has globally signed out."
```

**`invalid_token`**  
O token de acesso está expirado, revogado, informado incorretamente ou inválido.

# O endpoint de revogação do token
<a name="revocation-endpoint"></a>

Os usuários que têm um token de atualização em sua sessão têm algo semelhante a um cookie de navegador. Eles podem renovar a sessão existente, desde que o token de atualização seja válido. Em vez de solicitar que o usuário faça login após a expiração do ID ou do token de acesso, a aplicação pode usar o token de atualização para obter tokens novos e válidos. No entanto, você pode determinar externamente que a sessão de um usuário seja encerrada, ou o usuário pode optar por esquecer a sessão atual. Nesse ponto, você pode revogar esse token de atualização para que eles não possam mais persistir na sessão.

O endpoint `/oauth2/revoke` revoga o token de acesso de um usuário que o Amazon Cognito emitiu inicialmente com o token de atualização fornecido por você. Esse endpoint também revoga o próprio token de atualização e todos os tokens de acesso e identidade subsequentes do mesmo token de atualização. Depois que o endpoint revogar os tokens, você não poderá usar os tokens de acesso revogados para acessar a autenticação dos tokens do Amazon APIs Cognito.

## POST /oauth2/revoke
<a name="post-revoke"></a>

O endpoint `/oauth2/revoke` só é compatível com `HTTPS POST`. O cliente do grupo de usuários faz solicitações para esse endpoint diretamente e não por meio do navegador do sistema.

### Parâmetros de solicitação no cabeçalho
<a name="revocation-request-parameters"></a>

**`Authorization`**  
Se o cliente da aplicação tiver recebido um segredo, a aplicação precisará passar o `client_id` e o `client_secret` no cabeçalho da autorização por meio da autorização HTTP básica. O segredo é [https://en.wikipedia.org/wiki/Basic_access_authentication#Client_side](https://en.wikipedia.org/wiki/Basic_access_authentication#Client_side)básico`Base64Encode(client_id:client_secret)`.

**`Content-Type`**  
Precisa ser sempre `'application/x-www-form-urlencoded'`.

#### Parâmetros de solicitação no corpo
<a name="revocation-request-parameters-body"></a>

**`token`**  
(Obrigatório) O token de atualização que o cliente quer revogar. A solicitação também revoga todos os tokens de acesso que o Amazon Cognito emitiu com esse token de atualização.  
Obrigatório.

**`client_id`**  
(Opcional) O ID do cliente da aplicação para o token que você deseja revogar.  
Obrigatório se o cliente for público e não tiver um segredo.

## Exemplos de solicitação de revogação
<a name="revoke-sample-request"></a>

Esta solicitação revoga um token de atualização para um cliente de aplicação que não tem segredo de cliente. O parâmetro `client_id` contém o corpo da solicitação.

```
POST /oauth2/revoke HTTP/1.1
Host: mydomain.auth.us-east-1.amazoncognito.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
token=2YotnFZFEjr1zCsicMWpAA&
client_id=1example23456789
```

Esta solicitação revoga um token de atualização para um cliente de aplicação que *tem* um segredo de cliente. Observe que o cabeçalho `Authorization` contém um ID de cliente e um segredo de cliente codificados, mas nenhum `client_id` no corpo da solicitação.

```
POST /oauth2/revoke HTTP/1.1
Host: mydomain.auth.us-east-1.amazoncognito.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
token=2YotnFZFEjr1zCsicMWpAA
```

## Resposta de erro de revogação
<a name="revoke-sample-response"></a>

Uma resposta bem-sucedida contém um corpo vazio. A resposta de erro é um objeto JSON com um campo `error` e, em alguns casos, um campo `error_description`.

**Erros de endpoint**
+ Se o token não estiver presente na solicitação ou se o recurso estiver desabilitado para o cliente da aplicação, você receberá HTTP 400 e o erro `invalid_request`.
+ Se o token que o Amazon Cognito enviou na solicitação de revogação não for um token de atualização, você receberá um HTTP 400 e um erro `unsupported_token_type`.
+ Se as credenciais do cliente não forem válidas, você receberá um HTTP 401 e um erro `invalid_client`.
+ Se o token tiver sido revogado ou se o cliente tiver enviado um token que não é válido, você receberá um HTTP 200 OK. 

# O endpoint de declaração SAML do IdP
<a name="saml2-idpresponse-endpoint"></a>

O `/saml2/idpresponse` recebe declarações de SAML. No login service-provider-initiated (iniciado pelo SP), seu aplicativo não interage diretamente com esse endpoint — seu provedor de identidade (IdP) do SAML 2.0 redireciona seu usuário aqui com a resposta do SAML. Para login iniciado pelo SP, configure seu IdP com o caminho para `saml2/idpresponse` como URL do serviço de consumidor de declaração (ACS). Para obter mais informações sobre o início da sessão, consulte [Iniciação de sessão SAML em grupos de usuários do Amazon Cognito](cognito-user-pools-SAML-session-initiation.md).

No login iniciado pelo IdP, invoque solicitações para esse endpoint em sua aplicação depois de fazer login como usuário com seu provedor SAML 2.0. Seus usuários fazem login com seu IdP no navegador e, em seguida, a aplicação coleta a declaração SAML e a envia para esse endpoint. Você deve enviar declarações SAML no corpo de uma solicitação `HTTP POST` por HTTPS. O corpo da sua solicitação `POST` deve ser um parâmetro `SAMLResponse` e um parâmetro `Relaystate`. Para obter mais informações, consulte [Implementar o login SAML iniciado pelo IdP](cognito-user-pools-SAML-session-initiation.md#cognito-user-pools-SAML-session-initiation-idp-initiation).

O endpoint `saml2/idpresponse` pode aceitar declarações SAML de até 100.000 caracteres.

## POST `/saml2/idpresponse`
<a name="saml2-idpresponse-endpoint-post"></a>

Para usar o endpoint `/saml2/idpresponse` em um login iniciado por IdP, gere uma solicitação POST com parâmetros que forneçam ao seu grupo de usuários os detalhes da sessão do usuário.
+ O cliente da aplicação no qual ele deseja fazer login.
+ O URL de retorno de chamada ao qual ele deseja chegar.
+ Os escopos OAuth 2.0 que eles desejam solicitar no token de acesso do seu usuário.
+ O IdP que iniciou a solicitação de login.

### Parâmetros do corpo da solicitação iniciados pelo IdP
<a name="saml2-idpresponse-endpoint-post-request"></a>

*SAMLResponse*  
Uma declaração SAML codificada em Base64 de um IdP associado a um cliente de aplicação válido e a uma configuração de IdP em seu grupo de usuários.

*RelayState*  
Um parâmetro `RelayState` contém os parâmetros de solicitação que, de outra forma, você passaria para o endpoint `oauth2/authorize`. Para mais informações sobre esses parâmetros, consulte [Autorizar endpoint](authorization-endpoint.md).    
*response\$1type*  
O tipo de subsídio OAuth 2.0.  
*client\$1id*  
O ID do cliente do aplicativo  
*redirect\$1uri*  
O URL para o qual o servidor de autenticação redireciona o navegador depois que o Amazon Cognito autoriza o usuário.  
*identity\$1provider*  
O nome do provedor de identidades para o qual você deseja redirecionar o usuário.  
*idp\$1identifier*  
O identificador do provedor de identidades para o qual você deseja redirecionar o usuário.  
*scope*  
Os escopos OAuth 2.0 que você deseja que seu usuário solicite do servidor de autorização.

### Exemplos de solicitações com respostas positivas
<a name="saml2-idpresponse-endpoint-post-example"></a>

**Exemplo - solicitação POST**  
A solicitação a seguir é para uma concessão de código de autorização para um usuário do IdP `MySAMLIdP` no cliente de aplicação `1example23456789`. O usuário redireciona para `https://www.example.com` com seu código de autorização, que pode ser trocado por tokens que incluem um token de acesso com os escopos OAuth `openid` 2.0, e. `email` `phone`

```
POST /saml2/idpresponse HTTP/1.1
User-Agent: USER_AGENT
Accept: */*
Host: example.auth.us-east-1.amazoncognito.com
Content-Type: application/x-www-form-urlencoded

SAMLResponse=[Base64-encoded SAML assertion]&RelayState=identity_provider%3DMySAMLIdP%26client_id%3D1example23456789%26redirect_uri%3Dhttps%3A%2F%2Fwww.example.com%26response_type%3Dcode%26scope%3Demail%2Bopenid%2Bphone
```

**Exemplo - resposta**  
Veja a seguir um exemplo de resposta para a solicitação anterior.

```
HTTP/1.1 302 Found
Date: Wed, 06 Dec 2023 00:15:29 GMT
Content-Length: 0
x-amz-cognito-request-id: 8aba6eb5-fb54-4bc6-9368-c3878434f0fb
Location: https://www.example.com?code=[Authorization code]
```

# OAuth 2.0 subsídios
<a name="federation-endpoints-oauth-grants"></a>

O servidor de autorização OAuth 2.0 do grupo de usuários do Amazon Cognito emite tokens em resposta a três tipos de concessões de [autorização OAuth ](https://datatracker.ietf.org/doc/html/rfc6749#section-1.3) 2.0. Você pode definir os tipos de concessão compatíveis para cada cliente da aplicação no grupo de usuários. Não é possível habilitar concessões de *credenciais do cliente* no mesmo cliente de aplicação como concessões *implícitas* ou de *código de autorização*. As solicitações de concessões implícitas e de código de autorização começam em [Autorizar endpoint](authorization-endpoint.md), ao passo que as solicitações de concessões de credenciais de clientes começam em [Endpoint de token](token-endpoint.md).

**Concessão de código de autorização**  
Em resposta a uma solicitação de autenticação bem-sucedida, o servidor de autorização anexa um código de autorização em um parâmetro `code` ao URL de retorno de chamada. Depois é necessário trocar o código para ID, acesso e tokens de atualização com o [Endpoint de token](token-endpoint.md). Para solicitar uma concessão de código de autorização, defina `response_type` como `code` na solicitação. Para ver um exemplo de solicitação, consulte [Exemplo: concessão de código de autorização](authorization-endpoint.md#sample-authorization-code-grant). O Amazon Cognito é compatível com a [chave de prova para troca de código (PKCE)](using-pkce-in-authorization-code.md) em concessões de códigos de autorização.  
A concessão de código de autorização é a forma mais segura de concessão de autorização. Ela não mostra o conteúdo do token diretamente aos usuários. Em vez disso, a aplicação é responsável por recuperar e armazenar com segurança os tokens do usuário. No Amazon Cognito, a concessão de código de autorização é a única maneira de obter todos os três tipos de token (ID, acesso e atualização) do servidor de autorização. Você também pode obter todos os três tipos de token da autenticação por meio da API de grupos de usuários do Amazon Cognito, mas a API não emite tokens de acesso com escopos diferentes de `aws.cognito.signin.user.admin`.

**Concessão implícita**  
Em resposta a uma solicitação de autenticação bem-sucedida, o servidor de autorização anexa um token de acesso em um parâmetro `access_token` e um token de ID em um parâmetro `id_token` ao URL de retorno de chamada. Uma concessão implícita não requer nenhuma interação adicional com o [Endpoint de token](token-endpoint.md). Para solicitar uma concessão implícita, defina `response_type` como `token` na solicitação. A concessão implícita gera apenas um ID e um token de acesso. Para ver um exemplo de solicitação, consulte [Exemplo: concessão de token (implícita) sem escopo `openid`](authorization-endpoint.md#sample-token-grant-without-openid-scope).  
A concessão implícita é uma concessão de autorização herdada. Diferentemente da concessão do código de autorização, os usuários podem interceptar e inspecionar seus tokens. Para evitar a entrega de tokens por meio de concessão implícita, configure o cliente da aplicação para aceitar somente a concessão de código de autorização.

**Credenciais do cliente**  
As credenciais do cliente são uma concessão de acesso somente para autorização. machine-to-machine Para receber uma concessão de credenciais do cliente, ignore o [Autorizar endpoint](authorization-endpoint.md) e gere uma solicitação diretamente para o [Endpoint de token](token-endpoint.md). O cliente da aplicação deve ter um segredo e aceitar apenas concessões de credenciais de cliente. Em resposta a uma solicitação bem-sucedida, o servidor de autorização retorna um token de acesso.  
O token de acesso de uma concessão de credenciais do cliente é um mecanismo de autorização que contém OAuth escopos 2.0. Normalmente, o token contém declarações de escopo personalizado que autorizam operações HTTP a serem protegidas por acesso APIs. Para obter mais informações, consulte [Escopos, M2M e servidores de recursos](cognito-user-pools-define-resource-servers.md).  
As concessões de credenciais do cliente adicionam custos à sua AWS fatura. Para mais informações, consulte [Preços do Amazon Cognito](https://aws.amazon.com/cognito/pricing).

**Token de atualização**  
Você pode solicitar uma concessão de token de atualização diretamente do [Endpoint de token](token-endpoint.md). Essa concessão retorna novos tokens de ID e acesso em troca de um token de atualização válido.

Para obter mais perspectivas sobre essas concessões e sua implementação, consulte Como usar a [OAuth versão 2.0 no Amazon Cognito: saiba mais sobre as diferentes concessões da OAuth versão 2.0](https://aws.amazon.com/blogs/security/how-to-use-oauth-2-0-in-amazon-cognito-learn-about-the-different-oauth-2-0-grants/) no blog de *AWS segurança*.

# Como usar PKCE em concessões de código de autorização
<a name="using-pkce-in-authorization-code"></a>

O Amazon Cognito oferece suporte à autenticação PKCE (Proof Key for Code Exchange, chave de prova para troca de código) em concessões de códigos de autorização. O PKCE é uma extensão da concessão do código de autorização do OAuth 2.0 para clientes públicos. O PKCE oferece proteção contra o resgate de códigos de autorização interceptados.

## Como o Amazon Cognito usa o PKCE
<a name="how-pkce-works"></a>

Para iniciar a autenticação com o PKCE, sua aplicação deve gerar um valor de string exclusivo. Essa string é o verificador de código, um valor secreto que o Amazon Cognito usa para comparar o cliente que está solicitando a concessão de autorização inicial com o cliente que está trocando o código de autorização por tokens. 

Seu aplicativo deve aplicar um SHA256 hash à string do verificador de código e codificar o resultado em base64. Passe a string com hash para o [Autorizar endpoint](authorization-endpoint.md) como um parâmetro `code_challenge` no corpo da solicitação. Quando a aplicação troca o código de autorização por tokens, deve incluir a string do verificador de código em texto simples como um parâmetro `code_verifier` no corpo da solicitação para o [Endpoint de token](token-endpoint.md). O Amazon Cognito executa a mesma hash-and-encode operação no verificador de código. O Amazon Cognito só retornará tokens de ID, acesso e atualização se determinar que o verificador de código resulta no mesmo desafio de código que recebeu na solicitação de autorização.

**Para implementar o fluxo de concessão de autorização com o PKCE**

1. Abra o [console do Amazon Cognito](https://console.aws.amazon.com/cognito/home). Se solicitado, insira suas AWS credenciais.

1. Escolha **User Pools** (Grupos de usuários).

1. Escolha um grupo de usuários existente na lista ou crie um grupo de usuários. Se você criar um grupo de usuários, receberá uma solicitação para configurar um cliente de aplicação e o login gerenciado durante o assistente.

   1. Se você criar um novo grupo de usuários, configure um cliente de aplicação e o login gerenciado durante a configuração guiada.

   1. Se você configurar um grupo de usuários existente, adicione um [domínio](cognito-user-pools-assign-domain.md) e um [cliente de aplicação público](user-pool-settings-client-apps.md), caso ainda não tenha feito isso.

1. Gere uma sequência alfanumérica aleatória, normalmente um identificador exclusivo universal ([UUID](cognito-terms.md#terms-uuid)), para criar um desafio de código para o PKCE. Essa string é o valor do parâmetro `code_verifier` que você enviará em sua solicitação para o [Endpoint de token](token-endpoint.md). 

1. Faça o hash da `code_verifier` string com o SHA256 algoritmo. Codifique o resultado da operação de hashing para base64. Essa string é o valor do parâmetro `code_challenge` que você enviará em sua solicitação para o [Autorizar endpoint](authorization-endpoint.md). 

   O exemplo de Python a seguir gera um `code_verifier` e calcula o `code_challenge`:

   ```
   #!/usr/bin/env python3
   
   import secrets
   from base64 import urlsafe_b64encode
   from hashlib import sha256
   from string import ascii_letters
   from string import digits
   
   # use the secrets module for cryptographically strong random values
   alphabet = ascii_letters + digits
   code_verifier = ''.join(secrets.choice(alphabet) for _ in range(128))
   code_verifier_hash = sha256(code_verifier.encode()).digest()
   code_challenge = urlsafe_b64encode(code_verifier_hash).decode().rstrip('=')
   
   print(f"code challenge: {code_challenge}")
   print(f"code verifier: {code_verifier}")
   ```

   Veja um exemplo de saída do script Python:

   ```
   code challenge: Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg
   code verifier: 9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBk-JWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH
   ```

1. Conclua o login no login gerenciado com uma solicitação de concessão de código de autorização com PKCE. O seguinte é um exemplo de URL:

   ```
   https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com&code_challenge=Eh0mg-OZv7BAyo-tdv_vYamx1boOYDulDklyXoMDtLg&code_challenge_method=S256
   ```

1. Colete a autorização `code` e troque-a por tokens com o endpoint de token. Veja a seguir uma solicitação de exemplo:

   ```
   POST /oauth2/token HTTP/1.1
   Host: mydomain.auth.us-east-1.amazoncognito.com
   Content-Type: application/x-www-form-urlencoded
   Content-Length: 296
   
   redirect_uri=https%3A%2F%2Fwww.example.com&
   client_id=1example23456789&
   code=7378f445-c87f-400c-855e-0297d072ff03&
   grant_type=authorization_code&
   code_verifier=9D-aW_iygXrgQcWJd0y0tNVMPSXSChIc2xceDhvYVdGLCBk-JWFTmBNjvKSdOrjTTYazOFbUmrFERrjWx6oKtK2b6z_x4_gHBDlr4K1mRFGyE8yA-05-_v7Dxf3EIYJH
   ```

1. Revise a resposta. Ela conterá tokens de ID, acesso e atualização. Para obter mais informações sobre como usar tokens de grupos de usuários do Amazon Cognito, consulte [Compreendendo os tokens web JSON do grupo de usuários () JWTs](amazon-cognito-user-pools-using-tokens-with-identity-providers.md).

# Respostas de erro de federação e login gerenciado
<a name="federation-endpoint-idp-responses"></a>

Um processo de login no login gerenciado ou no login federado pode retornar um erro. Veja a seguir algumas condições que podem fazer a autenticação terminar com um erro.
+ Um usuário realiza uma operação que o grupo de usuários não pode realizar.
+ Um acionador do Lambda não responde com a sintaxe esperada.
+ O provedor de identidades (IdP) retorna um erro.
+ O Amazon Cognito não conseguiu validar as informações de atributos fornecidas pelo usuário.
+ O IdP não enviou declarações que correspondem aos atributos necessários.

Quando o Amazon Cognito encontra um erro, ele o comunica de uma das formas a seguir.

1. O Amazon Cognito envia um URL de redirecionamento com o erro nos parâmetros da solicitação.

1. O Amazon Cognito exibe um erro no login gerenciado.

Os erros que o Amazon Cognito acrescenta aos parâmetros de solicitação têm o formato a seguir.

```
https://<Callback URL>/?error_description=error+description&error=error+name
```

Ao ajudar os usuários a enviar informações de erro quando eles não conseguem realizar uma operação, solicite que eles capturem o URL *e* o texto ou façam uma captura da página.

**nota**  
As descrições de erro do Amazon Cognito não são strings fixas, e você não deve usar uma lógica que dependa de um padrão ou formato fixo.

**Mensagens de erro do OIDC e do provedor de identidades social**  
O provedor de identidades retorna um erro. Quando um OIDC ou OAuth IdP 2.0 retorna um erro que está em conformidade com os padrões, o Amazon Cognito redireciona seu usuário para a URL de retorno de chamada e adiciona a resposta de erro do provedor aos parâmetros da solicitação de erro. O Amazon Cognito adiciona o nome do provedor e o código de erro HTTP às strings de erro existentes.

O URL a seguir é um exemplo de redirecionamento de um IdP que retornou um erro para o Amazon Cognito.

```
https://www.amazon.com/?error_description=LoginWithAmazon+Error+-+400+invalid_request+The+request+is+missing+a+required+parameter+%3A+client_secret&error=invalid_request
```

Como o Amazon Cognito só retorna o que recebe de um provedor, o usuário pode ver um subconjunto dessas informações. 

Quando o usuário encontra um problema com o login inicial por meio de seu IdP, o IdP envia qualquer mensagem de erro diretamente ao usuário. O Amazon Cognito retransmite uma mensagem de erro ao usuário quando gera uma solicitação ao seu IdP para validar a sessão do usuário. O Amazon Cognito retransmite e mensagens de erro do OAuth OIDC IdP dos seguintes endpoints.

`/token`  
O Amazon Cognito troca o código de autorização do IdP por um token de acesso.

`/.well-known/openid-configuration`  
O Amazon Cognito descobre o caminho para os endpoints do emissor.

`/.well-known/jwks.json`  
Para verificar os JSON Web Tokens (JWTs) do seu usuário, o Amazon Cognito descobre as JSON Web Keys (JWKs) que seu IdP usa para assinar tokens.

Como o Amazon Cognito não inicia sessões de saída para provedores de SAML 2.0 que possam retornar erros de HTTP, os erros dos usuários durante uma sessão com um IdP SAML 2.0 não incluem essa forma de mensagem de erro do provedor.