Use o Amazon Cognito Identity para autenticar usuários - AWS SDK for JavaScript

O Guia de API referência da AWS SDK for JavaScript V3 descreve detalhadamente todas as API operações da AWS SDK for JavaScript versão 3 (V3).

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

Use o Amazon Cognito Identity para autenticar usuários

A forma recomendada de obter AWS credenciais para os scripts do seu navegador é usar o cliente de credenciais do Amazon Cognito Identity. CognitoIdentityClient O Amazon Cognito permite a autenticação de usuários por meio de provedores de identidade terceirizados.

Para usar o Amazon Cognito Identity, você deve primeiro criar um banco de identidades no console do Amazon Cognito. Um grupo de identidades representa o grupo de identidades fornecido pelo aplicativo para os usuários. As identidades atribuídas a usuários identificam com exclusividade cada conta de usuário. As identidades do Amazon Cognito não são credenciais. Eles são trocados por credenciais usando o suporte à federação de identidade da web em AWS Security Token Service ()AWS STS.

O Amazon Cognito ajuda a gerenciar a abstração de identidades entre vários provedores de identidade. A identidade carregada acaba sendo trocada por credenciais no AWS STS.

Configurar o objeto de credenciais do Amazon Cognito Identity

Se você ainda não tiver criado um, crie um banco de identidades para usar com os scripts do navegador no console do Amazon Cognito antes de configurar o cliente do Amazon Cognito. Crie e associe os perfis do IAM autenticados e não autenticados para o banco de identidades. Para obter mais informações, consulte Tutorial: criação de um banco de identidades no Guia do desenvolvedor do Amazon Cognito.

Usuários não autenticados não têm a identidade verificada, tornando esse perfil apropriado para usuários convidados de seu aplicativo ou nos casos em que não importa se os usuários têm suas identidades verificadas. Os usuários autenticados fazem login no aplicativo por meio de um provedor de identidade de terceiros que verifica as identidades. Certifique-se de definir o escopo das permissões dos recursos de forma apropriada para que você não conceda acesso a eles a partir de usuários não autenticados.

Depois de configurar um banco de identidades, use o método fromCognitoIdentityPool do @aws-sdk/credential-providers para recuperar as credenciais do banco de identidades. No exemplo a seguir de criação de um cliente do Amazon S3, substitua AWS_REGION pela região e IDENTITY_POOL_ID pelo ID do banco de identidades.

// Import required AWS SDK clients and command for Node.js import {S3Client} from "@aws-sdk/client-s3"; import {fromCognitoIdentityPool} from "@aws-sdk/credential-providers"; const REGION = AWS_REGION; const s3Client = new S3Client({ region: REGION, credentials: fromCognitoIdentityPool({ clientConfig: { region: REGION }, // Configure the underlying CognitoIdentityClient. identityPoolId: 'IDENTITY_POOL_ID', logins: { // Optional tokens, used for authenticated login. }, }) });

A propriedade opcional logins é um mapa de nomes de provedor de identidade para os tokens de identidade para esses provedores. Como você obtém o token do seu provedor de identidade depende do provedor que usa. Por exemplo, se você estiver usando um grupo de usuários do Amazon Cognito como seu provedor de autenticação, poderá usar um método semelhante ao descrito abaixo.

// Get the Amazon Cognito ID token for the user. 'getToken()' below. let idToken = getToken(); let COGNITO_ID = "COGNITO_ID"; // 'COGNITO_ID' has the format 'cognito-idp.REGION.amazonaws.com/COGNITO_USER_POOL_ID' let loginData = { [COGNITO_ID]: idToken, }; const s3Client = new S3Client({ region: REGION, credentials: fromCognitoIdentityPool({ clientConfig: { region: REGION }, // Configure the underlying CognitoIdentityClient. identityPoolId: 'IDENTITY_POOL_ID', logins: loginData }) }); // Strips the token ID from the URL after authentication. window.getToken = function () { var idtoken = window.location.href; var idtoken1 = idtoken.split("=")[1]; var idtoken2 = idtoken1.split("&")[0]; var idtoken3 = idtoken2.split("&")[0]; return idtoken3; };

Trocar usuários não autenticados por usuários autenticados

O Amazon Cognito é compatível com usuários autenticados e não autenticados. Os usuários não autenticados receberão acesso aos recursos se eles não estiverem conectados a nenhum dos provedores de identidade. Esse nível de acesso é útil para exibir conteúdo para usuários antes de fazer login. Cada usuário não autenticado tem uma identidade exclusiva no Amazon Cognito, mesmo que não tenha feito login e sido autenticado individualmente.

Usuário não autenticado inicialmente

Os usuários normalmente começam com a função não autenticada para a qual você define a propriedade de credenciais do objeto de configuração sem uma propriedade logins. Neste caso, suas credenciais padrão podem parecer com o seguinte:

// Import the required AWS SDK for JavaScript v3 modules. import {fromCognitoIdentityPool} from "@aws-sdk/credential-providers"; // Set the default credentials. const creds = fromCognitoIdentityPool({ identityPoolId: 'IDENTITY_POOL_ID', clientConfig: { region: REGION } // Configure the underlying CognitoIdentityClient. });

Mudar para usuário autenticado

Quando um usuário autenticado faz login em um provedor de identidade e você tem um token, é possível alternar o usuário de não autenticado para autenticado chamando uma função personalizada que atualiza o objeto de credenciais e adiciona o token logins.

// Called when an identity provider has a token for a logged in user function userLoggedIn(providerName, token) { creds.params.Logins = creds.params.logins || {}; creds.params.Logins[providerName] = token; // Expire credentials to refresh them on the next request creds.expired = true; }