

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á.

# Seleção de um fluxo de autenticação do Amazon Cognito para aplicações empresariais
<a name="choose-an-amazon-cognito-authentication-flow-for-enterprise-applications"></a>

*Michael Daehnert e Fabian Jahnke, Amazon Web Services*

## Resumo
<a name="choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-summary"></a>

O [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) fornece autenticação, autorização e gerenciamento de usuários para aplicações web e móveis. Esse serviço fornece recursos úteis para a autenticação de identidades federadas. Para implementá-lo, os arquitetos técnicos precisam decidir como desejam utilizar esses recursos.

O Amazon Cognito fornece suporte a diversos fluxos destinados a solicitações de autenticação. Esses fluxos determinam de que forma os usuários podem comprovar a própria identidade. A decisão sobre qual fluxo de autenticação usar depende dos requisitos específicos da sua aplicação e pode se tornar uma tarefa complexa. Este padrão ajuda você a determinar qual fluxo de autenticação é o mais adequado para sua aplicação empresarial. O padrão pressupõe que você já tenha conhecimento básico de Amazon Cognito, OpenID Connect (OIDC) e federação, e orienta você pelos detalhes dos diferentes fluxos de autenticação federada.

Esta solução é destinada a tomadores de decisão com conhecimentos técnicos. Ela ajuda você a compreender os diferentes fluxos de autenticação e a mapeá-los para os requisitos da sua aplicação. Os líderes técnicos devem reunir os insights necessários para iniciar as integrações com o Amazon Cognito. Como organizações empresariais geralmente se concentram na federação SAML, este padrão inclui descrições de [grupos de usuários do Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-identity-pools.html) com federação SAML.

## Pré-requisitos e limitações
<a name="choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-prereqs"></a>

**Pré-requisitos **
+ Uma conta AWS ativa
+ Perfis e permissões do AWS Identity and Access Management (IAM) com acesso total ao Amazon Cognito
+ (Opcional) Acesso ao seu provedor de identidades (IdP), como Microsoft Entra ID, Active Directory Federation Service (AD FS) ou Okta
+ Um elevado nível de conhecimento técnico relacionado à sua aplicação
+ Noções básicas de Amazon Cognito, OpenID Connect (OIDC) e federação

**Limitações**
+ Este padrão se concentra nos grupos de usuários do Amazon Cognito e nos provedores de identidades. Para obter informações sobre os bancos de identidades do Amazon Cognito, consulte a seção [Informações adicionais](#choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-additional).

## Arquitetura
<a name="choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-architecture"></a>

Use a tabela apresentada a seguir para ajudar na seleção de um fluxo de autenticação. Mais informações sobre cada fluxo são apresentadas nesta seção.


| 
| 
| Você precisa de machine-to-machine autenticação? | Seu aplicativo é uma aplicação web cujo frontend é processado diretamente no servidor? | Seu aplicativo é uma aplicação de página única (SPA) ou uma aplicação cujo frontend é baseado em dispositivo móvel? | Sua aplicação requer tokens de atualização para oferecer a funcionalidade “manter-me conectado”? | O frontend disponibiliza um mecanismo de redirecionamento por meio do navegador? | Fluxo do Amazon Cognito recomendado | 
| --- |--- |--- |--- |--- |--- |
| Sim | Não | Não | Não | Não | Fluxo de credenciais do cliente | 
| Não | Sim | Não | Sim | Sim | Fluxo de código de autorização | 
| Não | Não | Sim | Sim | Sim | Fluxo de código de autorização com Proof Key for Code Exchange (PKCE) | 
| Não | Não | Não | Não | Não | Fluxo de senha do proprietário do recurso\* | 

\* O fluxo de senha do proprietário do recurso deve ser utilizado somente em casos estritamente necessários. Para obter mais informações, consulte a seção *Fluxo de senha do proprietário do recurso* neste padrão.

**Fluxo de credenciais do cliente**

O fluxo de credenciais do cliente é o mais curto entre os fluxos do Amazon Cognito. Ele deve ser usado quando sistemas ou serviços se comunicam entre si sem qualquer interação do usuário. O sistema solicitante emprega o ID do cliente e o segredo do cliente para recuperar um token de acesso. Como ambos os sistemas operam sem interação do usuário, nenhuma etapa adicional de consentimento é necessária.

![Fluxo de credenciais do cliente para o Amazon Cognito](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/7b5e567c-66a4-4386-a1f6-616ed77a6211/images/1138745d-69fa-4ecc-a9ec-c0b2a68ce7d2.png)


O diagrama ilustra o seguinte:

1. A Aplicação 1 envia uma solicitação de autenticação com o ID do cliente e o segredo do cliente para o endpoint do Amazon Cognito e recupera um token de acesso.

1. A Aplicação 1 emprega este token de acesso em todas as chamadas subsequentes para a Aplicação 2.

1. A Aplicação 2 valida o token de acesso com o Amazon Cognito.

Este fluxo deve ser usado:
+ Para comunicações entre aplicações sem interação do usuário

Este fluxo não deve ser usado:
+ Para qualquer comunicação na qual a interação do usuário seja possível

**Fluxo de código de autorização**

O fluxo de código de autorização é destinado à autenticação baseada na web clássica. Neste fluxo, o backend gerencia toda a troca e o armazenamento dos tokens. O cliente baseado em navegador não tem acesso aos tokens propriamente ditos. Esta solução é usada para aplicações desenvolvidas em estruturas como .NET Core, Jakarta Faces ou Jakarta Server Pages (JSP).

O fluxo de código de autorização é um fluxo baseado em redirecionamento. É necessário que o cliente consiga interagir com o navegador ou com outro cliente equivalente. O cliente é redirecionado para um servidor de autenticação e realiza a autenticação nesse servidor. Caso a autenticação do cliente ocorra com êxito, ele retorna ao servidor por meio de redirecionamento.

![Fluxo de código de autorização para o Amazon Cognito](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/7b5e567c-66a4-4386-a1f6-616ed77a6211/images/1008296c-d5b8-449d-99d4-f0b2b7cf5d80.png)


O diagrama ilustra o seguinte:

1. O cliente envia uma solicitação ao servidor web.

1. O servidor web redireciona o cliente para o Amazon Cognito usando o código de status HTTP 302. O cliente segue automaticamente esse redirecionamento até a tela de login do IdP configurado.

1. O IdP verifica a existência de uma sessão ativa no navegador do lado do IdP. Caso não exista, o usuário recebe um prompt para se autenticar informando o nome de usuário e a senha. O IdP responde ao Amazon Cognito com um token SAML.

1. O Amazon Cognito retorna uma operação bem-sucedida com um JSON Web Token (JWT), especificamente um token de código. O servidor web chama /oauth2/token para converter o token de código em um token de acesso. O servidor web envia o ID do cliente e o segredo do cliente para validação no Amazon Cognito.

1. O token de acesso é usado em todas as chamadas subsequentes a outras aplicações.

1. As demais aplicações validam o token de acesso com o Amazon Cognito.

Este fluxo deve ser usado:
+ Se o usuário conseguir interagir com o navegador da web ou com o cliente. O código da aplicação é executado e processado diretamente no servidor para garantir que nenhum segredo seja exposto ao navegador.

Este fluxo não deve ser usado:
+ Para aplicativos de página única (SPAs) ou aplicativos móveis porque eles são renderizados no cliente e não devem usar segredos do cliente.

**Fluxo de código de autorização com PKCE**

O fluxo de código de autorização com Proof Key for Code Exchange (PKCE) deve ser usado para aplicações de página única (SPAs) e aplicativos móveis. Trata-se do sucessor do fluxo Implicit, oferecendo mais segurança ao empregar PKCE. O PKCE é uma extensão da concessão do código de autorização OAuth 2.0 para clientes públicos. O PKCE oferece proteção contra o resgate de códigos de autorização interceptados.

![Fluxo de código de autorização com PKCE para o Amazon Cognito](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/7b5e567c-66a4-4386-a1f6-616ed77a6211/images/1609da4f-decd-4d43-afe0-31237238df6d.png)


O diagrama ilustra o seguinte:

1. A aplicação cria um code verifier e um code challenge. São valores bem definidos e exclusivos que são enviados ao Amazon Cognito para referência futura.

1. A aplicação chama o endpoint /oauth2/authorization do Amazon Cognito. Ela redireciona automaticamente o usuário para o login do IdP configurado.

1. O IdP verifica a existência de uma sessão ativa. Caso não exista, o usuário recebe um prompt para se autenticar informando o nome de usuário e a senha. O IdP responde ao Amazon Cognito com um token SAML.

1. Após o Amazon Cognito retornar uma opção bem-sucedida com um token de código, o servidor web chama /oauth2/token para converter o token de código em um token de acesso.

1. O token de acesso é usado em todas as chamadas subsequentes a outras aplicações.

1. As demais aplicações validam o token de acesso com o Amazon Cognito.

Este fluxo deve ser usado:
+ Para SPAs nossos aplicativos móveis

Este fluxo não deve ser usado:
+ Caso o servidor backend da aplicação seja responsável pela autenticação

**Fluxo de senha do proprietário do recurso**

O fluxo de senha do proprietário do recurso destina-se a aplicações que não contam com funcionalidades de redirecionamento. A implementação desse fluxo consiste em criar um formulário de login na própria aplicação. O login é verificado no Amazon Cognito por meio de uma chamada via CLI ou SDK, em vez de depender de fluxos de redirecionamento. A federação não é possível neste fluxo de autenticação, pois requer redirecionamentos baseados em navegador.

![Fluxo de senha do proprietário do recurso para o Amazon Cognito](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/7b5e567c-66a4-4386-a1f6-616ed77a6211/images/d74bc596-08a3-40f4-a6a7-07f6610fe6b1.png)


O diagrama ilustra o seguinte:

1. O usuário insere as credenciais em um formulário de login fornecido pela aplicação.

1. A AWS Command Line Interface (AWS CLI) faz [admin-initiated-auth](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/cognito-idp/admin-initiate-auth.html)uma chamada para o Amazon Cognito.
**nota**  
Como alternativa, você pode usar a AWS SDKs em vez da AWS CLI.

1. O Amazon Cognito retorna um token de acesso.

1. O token de acesso é usado em todas as chamadas subsequentes a outras aplicações.

1. As demais aplicações validam o token de acesso com o Amazon Cognito.

Este fluxo deve ser usado:
+ Ao migrar clientes existentes que usam lógica de autenticação direta (como autenticação de acesso básico ou autenticação de acesso resumido) para a OAuth conversão das credenciais armazenadas em um token de acesso

Este fluxo não deve ser usado:
+ Se você deseja usar identidades federadas
+ Se a sua aplicação fornecer suporte para redirecionamentos

## Ferramentas
<a name="choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-tools"></a>

**Serviços da AWS**
+ O [Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/what-is-amazon-cognito.html) fornece autenticação, autorização e gerenciamento de usuários para suas aplicações Web e móveis.

**Outras ferramentas**
+ O [depurador de JSON Web Token (JWT)](https://jwt.io/) é uma ferramenta baseada na web para validação de JWTs.

## Épicos
<a name="choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-epics"></a>

### Avaliação da aplicação
<a name="assess-your-application"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Defina os requisitos de autenticação. | Avalie a aplicação de acordo com seus requisitos específicos de autenticação. | Desenvolvedor de aplicações e arquiteto de aplicações | 
| Alinhe os requisitos aos fluxos de autenticação. | Na seção [Arquitetura](#choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-architecture), utilize a tabela de decisão e as explicações de cada fluxo para selecionar o fluxo de autenticação do Amazon Cognito. | Desenvolvedor de aplicações, usuário geral da AWS e arquiteto de aplicações | 

### Configuração do grupo de usuários do Amazon Cognito
<a name="set-up-the-amazon-cognito-user-pool"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Criar um grupo de usuários. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/choose-an-amazon-cognito-authentication-flow-for-enterprise-applications.html) | AWS geral | 
| (Opcional) Configure um provedor de identidades. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/choose-an-amazon-cognito-authentication-flow-for-enterprise-applications.html) | Usuário geral da AWS e administrador da federação | 
| Crie um cliente da aplicação. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/choose-an-amazon-cognito-authentication-flow-for-enterprise-applications.html) | AWS geral | 

### Integração da aplicação com o Amazon Cognito
<a name="integrate-the-application-with-amazon-cognito"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Compartilhe os detalhes de integração do Amazon Cognito. | Dependendo do seu fluxo de autenticação, compartilhe com a aplicação as informações do Amazon Cognito, como o ID do grupo de usuários e o ID do cliente da aplicação. | Desenvolvedor de aplicativos, AWS geral | 
| Implemente a autenticação do Amazon Cognito. | Isso depende do fluxo de autenticação escolhido, da linguagem de programação e das estruturas que você está usando. Para obter alguns links que auxiliarão você a começar a usar, consulte a seção [Recursos relacionados](#choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-resources). | Desenvolvedor de aplicativos | 

## Recursos relacionados
<a name="choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-resources"></a>

**Documentação da AWS**
+ [Fluxo de autenticação do grupo de usuários](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html)
+ [Verificando um token web JSON](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-verifying-a-jwt.html)
+ [Acesse os serviços da AWS a partir de um aplicativo ASP.NET Core usando grupos de identidade do Amazon Cognito](https://docs.aws.amazon.com/prescriptive-guidance/latest/patterns/access-aws-services-from-an-asp-net-core-app-using-amazon-cognito-identity-pools.html?did=pg_card&trk=pg_card)
+ Frameworks e SDKs:
  + [Amazon Amplify authentication](https://docs.amplify.aws/lib/auth/getting-started/q/platform/js)
  + [Exemplos de provedores de identidade do Amazon Cognito](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/java_cognito-identity-provider_code_examples.html) (documentação do AWS SDK para Java 2.x)
  + [Autenticar usuários com o Amazon Cognito](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/cognito-apis-intro.html) (documentação do AWS SDK para .NET)

**Publicações do blog da AWS**
+ [Authorization @Edge usando cookies: proteja seu CloudFront conteúdo da Amazon de ser baixado por usuários não autenticados](https://aws.amazon.com/blogs/networking-and-content-delivery/authorizationedge-using-cookies-protect-your-amazon-cloudfront-content-from-being-downloaded-by-unauthenticated-users/)
+ [Building AD FS Federation for your Web App using Amazon Cognito User Pools](https://aws.amazon.com/blogs/mobile/building-adfs-federation-for-your-web-app-using-amazon-cognito-user-pools/)

**Parceiros de implementação**
+ [Parceiros da AWS para soluções de autenticação](https://partners.amazonaws.com/search/partners?keyword=authentication)

## Mais informações
<a name="choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-additional"></a>

**PERGUNTAS FREQUENTES**

*Por que o fluxo Implicit está preterido?*

Desde o lançamento da [estrutura OAuth 2.1](https://oauth.net/2.1/), o fluxo implícito é marcado como obsoleto por motivos de segurança. Como alternativa, use o fluxo de código de autorização com o PKCE, descrito na seção [Arquitetura](#choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-architecture).

*O que devo fazer se o Amazon Cognito não oferecer alguma funcionalidade de que eu necessite?*

Os parceiros da AWS oferecem diferentes integrações para soluções de autenticação e autorização. Para obter mais informações, consulte [Parceiros da AWS para soluções de autenticação](https://partners.amazonaws.com/search/partners?keyword=authentication).

*E quanto aos fluxos de banco de identidades do Amazon Cognito?*

Os grupos de usuários e as identidades federadas do Amazon Cognito são usados para autenticação. Já os bancos de identidades do Amazon Cognito são usados para autorização de acesso a recursos da AWS por meio da solicitação de credenciais temporárias. A troca do token de ID e do token de acesso para bancos de identidade não é abordada neste padrão. Para obter mais informações, consulte [Qual é a diferença entre grupos de usuários e bancos de identidade do Amazon Cognito?](https://aws.amazon.com/premiumsupport/knowledge-center/cognito-user-pools-identity-pools/) e [Cenários comuns do Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-scenarios.html).

**Próximas etapas**

Este padrão fornece uma visão geral dos fluxos de autenticação do Amazon Cognito. Como próxima etapa, é necessário selecionar a implementação detalhada para a linguagem de programação da aplicação. Oferta SDKs e estruturas de vários idiomas, que você pode usar com o Amazon Cognito. Para obter referências úteis, consulte a seção [Recursos relacionados](#choose-an-amazon-cognito-authentication-flow-for-enterprise-applications-resources).