Fluxo de autenticação dos grupos de identidades - 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

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 IAMfunções.

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
SAML2.0 SAMLafirmação
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 da JSON web ou uma SAML declaração — 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 AWS API solicitações com as credenciais temporárias.

A autenticação aprimorada gerencia a lógica da seleção de IAM funções e da recuperação de credenciais na configuração do seu pool 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 da JSON web ou uma SAML declaração — 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 AWS API solicitações 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.

Você pode entrar com o fluxo de autenticação básico em grupos de usuários que não têm mapeamentos de função. Esse tipo de grupo de identidades não tem uma função padrão autenticada ou não autenticada e não tem controle de acesso baseado em função ou atributo configurado. Ao tentar GetOpenIdToken em um grupo de identidades com mapeamentos de função, você recebe o seguinte erro.

Basic (classic) flow is not supported with RoleMappings, please use enhanced flow.
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, 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 GetOpenIdTokenForDeveloperIdentityAPIsolicitação 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 de API solicitações.

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

  • Seu grupo de identidades avalia seus usuários quanto às credenciais de IAM função que eles devem 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 IAM funções 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 de IAM funções 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 IAM função que confie amr em seu pool de identidade 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.

APIresumo

GetId

A GetIdAPIchamada é 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 estiver ativado em seu grupo de identidades, os usuários poderão solicitar um novo ID de identidade a qualquer momento por meio do GetIdAPI. Espera-se que a aplicação armazene em cache esse ID de identidade para fazer chamadas subsequentes para o Amazon Cognito. O AWS celular SDKs e o AWS SDK for JavaScript no navegador têm provedores de credenciais que gerenciam esse armazenamento em cache para você.

Acesso autenticado

Quando você configura seu aplicativo com suporte para um provedor de login público (Facebook, Google+, Login with Amazon ou Sign in with Apple), os usuários também podem fornecer tokens (ou OAuth OpenID Connect) que os identificam 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

Eles GetCredentialsForIdentityAPIpodem ser chamados após você estabelecer um ID de identidade. Essa operação é funcionalmente equivalente a chamar GetOpenIdToken, então AssumeRoleWithWebIdentity.

Para que o Amazon Cognito ligue AssumeRoleWithWebIdentity em seu nome, seu grupo de identidades deve ter IAM funções 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 GetOpenIdTokenAPIsolicitação depois de estabelecer um ID de identidade. Armazene a identidade em cache IDs após sua primeira solicitação e inicie as sessões básicas (clássicas) subsequentes dessa identidade comGetOpenIdToken.

A resposta a uma GetOpenIdToken API solicitação é 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 OIDC bibliotecas em sua biblioteca SDK ou em uma biblioteca como aws-jwt-verifypara confirmar que o Amazon Cognito emitiu o token. O ID da chave de assinatura, oukid, do token OpenID é um dos listados na Identidade do Amazon Cognito jwks_uri documento †. 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. Depois de mesclada, uma identidade se torna a ser parent/owner of all associated logins and the other is disabled. In this case, the identity ID of the parent/owner retornada. Você deverá atualizar seu cache local se esse valor for diferente. Os provedores no AWS celular SDKs ou AWS SDK JavaScript no 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 API operação 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 para isso 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 em cache IDs a identidade do desenvolvedor após sua primeira solicitação e inicie as sessões básicas (clássicas) subsequentes dessa identidade comGetOpenIdTokenForDeveloperIdentity.

A resposta a uma GetOpenIdTokenForDeveloperIdentity API solicitação é 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 OIDC bibliotecas em sua biblioteca SDK ou em uma biblioteca como aws-jwt-verifypara 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 do. MergeDeveloperIdentitiesAPI 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 AssumeRoleWithWebIdentityAPIsolicitação 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 IAM funções diferentes 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 OIDC -standard <issuer>/.well-known/openid-configuration lista um caminho para o jwks_uri para seu token.