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
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.
-
Seu grupo de identidades retorna uma ID de identidade.
-
Seu aplicativo combina o ID de identidade com o mesmo comprovante de autenticação em uma GetCredentialsForIdentitysolicitação.
-
Seu pool de identidade retorna AWS credenciais.
-
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
-
GetId
-
GetCredentialsForIdentity
![Um diagrama que mostra o fluxo da autenticação aprimorada](images/amazon-cognito-ext-auth-enhanced-flow.png)
Fluxo de autenticação básico (clássico)
Quando você usa o fluxo de autenticação básico,
-
Seu grupo de identidades retorna uma ID de identidade.
-
Seu aplicativo combina o ID de identidade com o mesmo comprovante de autenticação em uma GetOpenIdTokensolicitação.
-
GetOpenIdToken
retorna um novo token OAuth 2.0 emitido pelo seu grupo de identidades. -
Seu aplicativo apresenta o novo token em uma AssumeRoleWithWebIdentitysolicitação.
-
AWS Security Token Service AWS STS) retorna AWS as credenciais.
-
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
-
GetId
-
GetOpenIdToken
-
AssumeRoleWithWebIdentity
![Um diagrama que mostra o fluxo da autenticação básica](images/amazon-cognito-ext-auth-basic-flow.png)
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
-
Faça login por meio do provedor do desenvolvedor (código fora do Amazon Cognito)
-
Valide o login do usuário (código fora do Amazon Cognito).
![Um diagrama que mostra o fluxo da autenticação aprimorada autenticada pelo desenvolvedor](images/amazon-cognito-dev-auth-enhanced-flow.png)
Ordem das operações na autenticação básica com um provedor de desenvolvedores
-
Implemente a lógica fora do pool de identidades para fazer login e gerar um identificador de desenvolvedor-provedor.
-
Recupere as credenciais armazenadas do lado do servidor AWS .
-
Envie o identificador do provedor do desenvolvedor em uma solicitação de GetOpenIdTokenForDeveloperIdentityAPI assinada com AWS credenciais autorizadas.
-
Solicite as credenciais do aplicativo com AssumeRoleWithWebIdentity.
![Um diagrama que mostra o fluxo da autenticação básica autenticada pelo desenvolvedor](images/amazon-cognito-dev-auth-basic-flow.png)
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 comoWebIdentityToken
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_urido 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 deGetOpenIdToken
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 porGetOpenIdToken
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 comGetOpenIdTokenForDeveloperIdentity
.A resposta a uma solicitação de API
GetOpenIdTokenForDeveloperIdentity
é um token gerado pelo Amazon Cognito. Você pode enviar esse token como parâmetroWebIdentityToken
em uma solicitaçãoAssumeRoleWithWebIdentity
.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 comomax-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
ouGetOpenIdToken
. - 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
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. |
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.