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
Michael Daehnert e Fabian Jahnke, Amazon Web Services
Resumo
O Amazon Cognito 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 com federação SAML.
Pré-requisitos e limitações
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.
Arquitetura
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.

O diagrama ilustra o seguinte:
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.
A Aplicação 1 emprega este token de acesso em todas as chamadas subsequentes para a Aplicação 2.
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.

O diagrama ilustra o seguinte:
O cliente envia uma solicitação ao servidor web.
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.
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.
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.
O token de acesso é usado em todas as chamadas subsequentes a outras aplicações.
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.

O diagrama ilustra o seguinte:
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.
A aplicação chama o endpoint /oauth2/authorization do Amazon Cognito. Ela redireciona automaticamente o usuário para o login do IdP configurado.
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.
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.
O token de acesso é usado em todas as chamadas subsequentes a outras aplicações.
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.

O diagrama ilustra o seguinte:
O usuário insere as credenciais em um formulário de login fornecido pela aplicação.
A AWS Command Line Interface (AWS CLI) faz admin-initiated-auth
uma chamada para o Amazon Cognito. nota
Como alternativa, você pode usar a AWS SDKs em vez da AWS CLI.
O Amazon Cognito retorna um token de acesso.
O token de acesso é usado em todas as chamadas subsequentes a outras aplicações.
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
Serviços da AWS
O Amazon Cognito 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)
é uma ferramenta baseada na web para validação de JWTs.
Épicos
| 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, 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 |
| Tarefa | Description | Habilidades necessárias |
|---|---|---|
Criar um grupo de usuários. |
| AWS geral |
(Opcional) Configure um provedor de identidades. |
| Usuário geral da AWS e administrador da federação |
Crie um cliente da aplicação. |
| AWS geral |
| 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. | Desenvolvedor de aplicativos |
Recursos relacionados
Documentação da AWS
Frameworks e SDKs:
Exemplos de provedores de identidade do Amazon Cognito (documentação do AWS SDK para Java 2.x)
Autenticar usuários com o Amazon Cognito (documentação do AWS SDK para .NET)
Publicações do blog da AWS
Parceiros de implementação
Mais informações
PERGUNTAS FREQUENTES
Por que o fluxo Implicit está preterido?
Desde o lançamento da estrutura OAuth 2.1
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
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?
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.