Fluxo de autenticação dos grupos de identidades (identidades federadas) - Amazon Cognito

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

Fluxo de autenticação dos grupos de identidades (identidades federadas)

O Amazon Cognito ajuda você a criar identificadores exclusivos para seus usuários finais que são mantidos consistentes em diversos dispositivos e plataformas. O Amazon Cognito também fornece credenciais temporárias com privilégios limitados ao seu aplicativo para acessar recursos. AWS Esta página aborda as noções básicas de como funciona a autenticação no Amazon Cognito e explica o ciclo de vida de uma identidade no grupo de identidades.

Fluxo de autenticação de provedor externo

Uma autenticação de usuário com o Amazon Cognito passará por um processo de várias etapas para fazer bootstrap das respectivas credenciais. O Amazon Cognito tem dois fluxos diferentes para autenticação com provedores públicos: aprimorado e básico.

Depois de concluir um desses fluxos, você pode acessar outros Serviços da AWS conforme definido pelas políticas de acesso da sua função. Por padrão, o console do Amazon Cognito cria funções com acesso ao armazenamento do Amazon Cognito Sync e ao Amazon Mobile Analytics. Para obter mais informações sobre como conceder acesso adicional, consulte Perfis do IAM.

Os grupos de identidades aceitam os seguintes artefatos dos provedores:

Provedor Artefato de autenticação
Conjunto de usuários do Amazon Cognito Token de ID
OpenID Connect (OIDC) Token de ID
SAML 2.0 Afirmação SAML
Provedor social Token de acesso

Fluxo de autenticação aprimorado (simplificado)

Quando você usa o fluxo de autenticação aprimorado, seu aplicativo primeiro apresenta uma prova de autenticação de um grupo de usuários autorizado do Amazon Cognito ou de um provedor de identidade terceirizado em GetIduma solicitação.

  1. Seu aplicativo apresenta um comprovante de autenticação — um token web JSON ou uma declaração SAML — de um grupo de usuários autorizado do Amazon Cognito ou de um provedor de identidade terceirizado em uma solicitação GetID.

  2. Seu grupo de identidades retorna uma ID de identidade.

  3. Seu aplicativo combina o ID de identidade com o mesmo comprovante de autenticação em uma GetCredentialsForIdentitysolicitação.

  4. Seu pool de identidade retorna AWS credenciais.

  5. Seu aplicativo assina solicitações de AWS API com as credenciais temporárias.

A autenticação aprimorada gerencia a lógica da seleção de funções do IAM e da recuperação de credenciais na configuração do seu grupo de identidades. Você pode configurar seu grupo de identidades para selecionar uma função padrão, para aplicar os princípios de controle de acesso baseado em atributos (ABAC) ou controle de acesso baseado em função (RBAC) à seleção de funções. As AWS credenciais da autenticação avançada são válidas por uma hora.

Ordem das operações na autenticação avançada
  1. GetId

  2. GetCredentialsForIdentity

Um diagrama que mostra o fluxo da autenticação aprimorada

Fluxo de autenticação básico (clássico)

Quando você usa o fluxo de autenticação básico,

  1. Seu aplicativo apresenta um comprovante de autenticação — um token web JSON ou uma declaração SAML — de um grupo de usuários autorizado do Amazon Cognito ou de um provedor de identidade terceirizado em uma solicitação GetID.

  2. Seu grupo de identidades retorna uma ID de identidade.

  3. Seu aplicativo combina o ID de identidade com o mesmo comprovante de autenticação em uma GetOpenIdTokensolicitação.

  4. GetOpenIdTokenretorna um novo token OAuth 2.0 emitido pelo seu grupo de identidades.

  5. Seu aplicativo apresenta o novo token em uma AssumeRoleWithWebIdentitysolicitação.

  6. AWS Security Token Service AWS STS) retorna AWS as credenciais.

  7. Seu aplicativo assina solicitações de AWS API com as credenciais temporárias.

O fluxo de trabalho básico oferece um controle mais detalhado sobre as credenciais que você distribui aos seus usuários. A solicitação GetCredentialsForIdentity do fluxo de autenticação aprimorado solicita uma função com base no conteúdo de um token de acesso. A AssumeRoleWithWebIdentity solicitação no fluxo de trabalho clássico concede ao seu aplicativo uma maior capacidade de solicitar credenciais para qualquer AWS Identity and Access Management função que você tenha configurado com uma política de confiança suficiente. Você também pode solicitar uma duração de sessão de perfil personalizado.

Ordem das operações na autenticação básica
  1. GetId

  2. GetOpenIdToken

  3. AssumeRoleWithWebIdentity

Um diagrama que mostra o fluxo da autenticação básica

Fluxo de autenticação de identidades autenticadas pelo desenvolvedor

Ao usar Identidades autenticadas pelo desenvolvedor (bancos de identidades), o cliente utilizará outro fluxo de autenticação que incluirá o código fora do Amazon Cognito para validar o usuário em seu próprio sistema de autenticação. O código fora do Amazon Cognito é apropriadamente indicado.

Fluxo de autenticação aprimorado

Ordem das operações na autenticação avançada com um provedor de desenvolvedores
  1. Faça login por meio do provedor do desenvolvedor (código fora do Amazon Cognito)

  2. Valide o login do usuário (código fora do Amazon Cognito).

  3. GetOpenIdTokenForDeveloperIdentity

  4. GetCredentialsForIdentity

Um diagrama que mostra o fluxo da autenticação aprimorada autenticada pelo desenvolvedor
Ordem das operações na autenticação básica com um provedor de desenvolvedores
  1. Implemente a lógica fora do pool de identidades para fazer login e gerar um identificador de desenvolvedor-provedor.

  2. Recupere as credenciais armazenadas do lado do servidor AWS .

  3. Envie o identificador do provedor do desenvolvedor em uma solicitação de GetOpenIdTokenForDeveloperIdentityAPI assinada com AWS credenciais autorizadas.

  4. Solicite as credenciais do aplicativo com AssumeRoleWithWebIdentity.

Um diagrama que mostra o fluxo da autenticação básica autenticada pelo desenvolvedor

Qual fluxo de autenticação devo usar?

O fluxo aprimorado é a opção mais segura com o menor nível de esforço do desenvolvedor:

  • O fluxo aprimorado reduz a complexidade, o tamanho e a taxa das solicitações de API.

  • Seu aplicativo não precisa fazer solicitações adicionais de API para AWS STS o.

  • Seu grupo de identidades avalia seus usuários quanto às credenciais da função do IAM que eles deveriam receber. Você não precisa incorporar lógica para seleção de funções em seu cliente.

Importante

Ao criar um novo grupo de identidades, não ative a autenticação básica (clássica) por padrão, como prática recomendada. Para implementar a autenticação básica, primeiro avalie as relações de confiança de suas funções do IAM para identidades da web. Em seguida, incorpore a lógica para seleção de funções em seu cliente e proteja o cliente contra modificações por usuários.

O fluxo básico de autenticação delega a lógica da seleção da função do IAM ao seu aplicativo. Nesse fluxo, o Amazon Cognito valida a sessão autenticada ou não autenticada do seu usuário e emite um token com o qual você pode trocar por credenciais. AWS STS Os usuários podem trocar os tokens da autenticação básica por qualquer função do IAM que confie amr em seu grupo de identidades e/ou em seu estado autenticado/não autenticado.

Da mesma forma, entenda que a autenticação do desenvolvedor é um atalho para a validação da autenticação do provedor de identidade. O Amazon Cognito confia nas AWS credenciais que autorizam uma GetOpenIdTokenForDeveloperIdentitysolicitação sem validação adicional do conteúdo da solicitação. Proteja os segredos que autorizam a autenticação do desenvolvedor do acesso dos usuários.

Resumo de APIs

GetId

A chamada de GetIdAPI é a primeira chamada necessária para estabelecer uma nova identidade no Amazon Cognito.

Acesso não autenticado

O Amazon Cognito pode conceder acesso de convidado não autenticado às aplicações. Se esse recurso for habilitado no grupo de identidades, os usuários poderão solicitar um novo ID de identidade a qualquer momento por meio da API GetId. Espera-se que a aplicação armazene em cache esse ID de identidade para fazer chamadas subsequentes para o Amazon Cognito. Os SDKs AWS móveis e o AWS SDK do navegador têm provedores de credenciais que gerenciam esse armazenamento JavaScript em cache para você.

Acesso autenticado

Quando você tiver configurado a aplicação para aceitar um provedor de login público (Facebook, Google +, Login with Amazon, Sign in with Apple), os usuários também poderão fornecer tokens (OAuth ou OpenID Connect) que os identificarão nesses provedores. Quando for usado em uma chamada para GetId, o Amazon Cognito criará uma identidade autenticada ou retornará a identidade já associada a esse login específico. O Amazon Cognito faz isso validando o token com o provedor e garantindo que:

  • O token seja válido e proveniente do provedor configurado.

  • O token não tenha expirado.

  • O token corresponde ao identificador de aplicação criado com esse provedor (por exemplo, ID do aplicativo do Facebook)

  • O token corresponda ao identificador de usuário.

GetCredentialsForIdentity

A GetCredentialsForIdentityAPI pode ser chamada depois que você estabelece um ID de identidade. Essa operação é funcionalmente equivalente a chamar GetOpenIdToken, então AssumeRoleWithWebIdentity.

Para que o Amazon Cognito chame AssumeRoleWithWebIdentity em seu nome, seu grupo de identidades deve ter funções do IAM associadas a ele. Você pode fazer isso por meio do console do Amazon Cognito ou manualmente por meio da SetIdentityPoolRolesoperação.

GetOpenIdToken

Faça uma solicitação de GetOpenIdTokenAPI depois de estabelecer um ID de identidade. Armazene IDs de identidade em cache após sua primeira solicitação e inicie sessões básicas (clássicas) subsequentes para essa identidade com GetOpenIdToken.

A resposta a uma solicitação de API GetOpenIdToken é um token gerado pelo Amazon Cognito. Você pode enviar esse token como WebIdentityToken parâmetro em uma AssumeRoleWithWebIdentitysolicitação.

Antes de enviar o token OpenID, verifique-o na aplicação. Você pode usar bibliotecas do OIDC em seu SDK ou em uma biblioteca, como aws-jwt-verify, para confirmar que o Amazon Cognito emitiu o token. O ID da chave de assinatura ou kid do token OpenID é um dos listados no documento jwks_uri do Amazon Cognito Identity †. Essas chaves estão sujeitas a alterações. Sua função que verifica os tokens do Amazon Cognito Identity deve atualizar periodicamente sua lista de chaves do documento jwks_uri. O Amazon Cognito define a duração da atualização no cabeçalho de resposta de controle de cache jwks_uri, atualmente definido como max-age de 30 dias.

Acesso não autenticado

Para obter um token para uma identidade não autenticada, você só precisa do próprio ID de identidade. Não é possível obter um token não autenticado para identidades autenticadas ou desativadas.

Acesso autenticado

Se você tem uma identidade autenticada, deve inserir ao menos um token válido para um login já associado a essa identidade. Todos os tokens inseridos durante a chamada de GetOpenIdToken devem passar na mesma validação mencionada anteriormente; se houver falha em um deles, toda a chamada falhará. A resposta da chamada de GetOpenIdToken também inclui o ID de identidade. Isso ocorre porque o ID de identidade que você insere pode não ser o retornado.

Como vincular logins

Se você inserir um token referente a um login que ainda não está associado a nenhuma identidade, o login será considerado "vinculado" à identidade associada. Você só pode vincular um login por provedor de público. Tentativas de vincular mais de um login a um provedor público gerará uma resposta de erro ResourceConflictException. Se um login for meramente vinculado a uma identidade existente, o ID de identidade retornado por GetOpenIdToken será o mesmo que foi inserido.

Como mesclar identidades

Se você inserir um token referente a um login que não está atualmente vinculado à identidade fornecida, mas está vinculado a outra identidade, as duas identidades serão mescladas. Uma vez mescladas, uma identidade se torna o pai/proprietário de todos os logins associados, enquanto o outro é desabilitado. Nesse caso, o ID de identidade do pai/proprietário é retornado. Você deverá atualizar seu cache local se esse valor for diferente. Os provedores nos SDKs AWS móveis ou JavaScript no AWS SDK do navegador realizam essa operação para você.

GetOpenIdTokenForDeveloperIdentity

A GetOpenIdTokenForDeveloperIdentityoperação substitui o uso GetOpenIdTokende GetIde para o dispositivo ao usar identidades autenticadas pelo desenvolvedor. Como seu aplicativo assina solicitações para essa operação de API com AWS credenciais, o Amazon Cognito confia que o identificador de usuário fornecido na solicitação é válido. A autenticação do desenvolvedor substitui a validação do token que o Amazon Cognito executa com provedores externos.

A carga útil dessa API inclui um logins mapa. Esse mapa deve conter a chave do seu provedor de desenvolvimento e um valor como identificador para o usuário em seu sistema. Se o identificador de usuário ainda não estiver vinculado a uma identidade existente, o Amazon Cognito criará uma identidade e retornará o ID da nova identidade e um token do OpenID Connect para ela. Se o identificador de usuário já estiver vinculado, o Amazon Cognito retornará o ID de identidade preexistente e um token do OpenID Connect. Armazene IDs de identidade de desenvolvedor em cache após sua primeira solicitação e inicie sessões básicas (clássicas) subsequentes para essa identidade com GetOpenIdTokenForDeveloperIdentity.

A resposta a uma solicitação de API GetOpenIdTokenForDeveloperIdentity é um token gerado pelo Amazon Cognito. Você pode enviar esse token como parâmetro WebIdentityToken em uma solicitação AssumeRoleWithWebIdentity.

Antes de enviar o token do OpenID Connect, verifique-o na aplicação. Você pode usar bibliotecas do OIDC em seu SDK ou em uma biblioteca, como aws-jwt-verify, para confirmar que o Amazon Cognito emitiu o token. O ID da chave de assinatura ou kid do token do OpenID Connect é um dos listados no documento jwks_uri do Amazon Cognito Identity†. Essas chaves estão sujeitas a alterações. Sua função que verifica os tokens do Amazon Cognito Identity deve atualizar periodicamente sua lista de chaves do documento jwks_uri. O Amazon Cognito define a duração da atualização no cabeçalho de resposta jwks_uri cache-control, atualmente definido como max-age de 30 dias.

Como vincular logins

Assim como ocorre com os provedores externos, o fornecimento de logins adicionais que ainda não estão associados a uma identidade os vinculará implicitamente a essa identidade. Se você vincular um login de provedor externo a uma identidade, o usuário poderá usar o fluxo de autenticação do provedor externo com esse provedor. No entanto, ele não pode usar o nome de seu provedor de desenvolvedor no mapa de logins ao chamar GetId ou GetOpenIdToken.

Como mesclar identidades

Com identidades autenticadas pelo desenvolvedor, o Amazon Cognito suporta tanto a fusão implícita quanto a fusão explícita por meio da API. MergeDeveloperIdentities Com a mesclagem explícita, você pode marcar duas identidades com identificadores de usuário em seu sistema como uma única identidade. Se você fornecer os identificadores de usuário de origem e de destino, o Amazon Cognito os mesclará. Na próxima vez em que você solicitar um token do OpenID Connect para um dos identificadores de usuário, a mesma identidade será retornada.

AssumeRoleWithWebIdentity

Depois de ter um token do OpenID Connect, você pode trocá-lo por AWS credenciais temporárias por meio da solicitação da AssumeRoleWithWebIdentityAPI para AWS Security Token Service ().AWS STS

Como não há nenhuma restrição quanto ao número de identidades que podem ser criadas, é importante compreender as permissões que estão sendo concedidas aos usuários. Configure diferentes funções do IAM para seu aplicativo: uma para usuários não autenticados e outra para usuários autenticados. O console do Amazon Cognito pode criar funções padrão quando você configura seu grupo de identidades pela primeira vez. Essas funções efetivamente não têm permissões concedidas. Modifique-os para atender às suas necessidades.

Saiba mais sobre Permissões e confiança de função.

† O documento jwks_uri padrão do Amazon Cognito Identity contém informações sobre as chaves que assinam tokens para grupos de identidades na maioria das Regiões da AWS. As regiões a seguir têm documentos jwks_uri diferentes.

Amazon Cognito Identity JSON web key URIs in other Regiões da AWS
Região da AWS Caminho para o documento jwks_uri
AWS GovCloud (Oeste dos EUA) https://cognito-identity.us-gov-west-1.amazonaws.com/.well-known/jwks_uri
China (Pequim) https://cognito-identity.cn-north-1.amazonaws.com.cn/.well-known/jwks_uri
Regiões opcionais, como Europa (Milão) e África (Cidade do Cabo) https://cognito-identity.Region.amazonaws.com/.well-known/jwks_uri

Você também pode extrapolar o jwks_uri do emissor ou iss que você recebe no token do OpenID do Amazon Cognito. O endpoint de descoberta padrão do OIDC <issuer>/.well-known/openid-configuration lista um caminho para o jwks_uri de seu token.