Verwenden Sie Amazon Cognito Identity, um Benutzer zu authentifizieren - AWS SDK for JavaScript

Das AWS SDK for JavaScript APIV3-Referenzhandbuch beschreibt detailliert alle API Operationen für die AWS SDK for JavaScript Version 3 (V3).

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden Sie Amazon Cognito Identity, um Benutzer zu authentifizieren

Die empfohlene Methode zum Abrufen von AWS Anmeldeinformationen für Ihre Browserskripte ist die Verwendung des Amazon Cognito Identity-AnmeldeinformationsclientsCognitoIdentityClient. Amazon Cognito ermöglicht die Authentifizierung von Benutzern über externe Identitätsanbieter.

Um Amazon Cognito Identity verwenden zu können, müssen Sie zunächst einen Identitätspool in der Amazon Cognito Cognito-Konsole erstellen. Ein Identitäten-Pool stellt die Gruppe von Identitäten dar, die Ihre Anwendung für Ihre Benutzer bereitstellt. Die den Benutzern zugewiesenen Identitäten identifizieren jedes Benutzerkonto eindeutig. Amazon-Cognito-Identitäten sind keine Anmeldeinformationen. Sie werden mithilfe der Unterstützung von Web Identity Federation in AWS Security Token Service (AWS STS) gegen Anmeldeinformationen ausgetauscht.

Amazon Cognito unterstützt Sie bei der Verwaltung der Abstraktion von Identitäten über mehrere Identitätsanbieter hinweg. Die geladene Identität wird dann gegen Anmeldeinformationen in AWS STS ausgetauscht.

Konfigurieren Sie das Amazon Cognito Identity-Anmeldeinformationsobjekt

Wenn Sie noch keinen erstellt haben, erstellen Sie einen Identitätspool, den Sie mit Ihren Browserskripten in der Amazon Cognito Cognito-Konsole verwenden können, bevor Sie Ihren Amazon Cognito Cognito-Client konfigurieren. Erstellen Sie sowohl authentifizierte als auch nicht authentifizierte IAM-Rollen für Ihren Identitätspool und ordnen Sie sie zu. Weitere Informationen finden Sie unter Tutorial: Erstellen eines Identitätspools im Amazon Cognito Developer Guide.

Bei nicht authentifizierten Benutzern wurde die Identität nicht verifiziert. Daher eignet sich diese Rolle für Gastbenutzer Ihrer App oder für Fälle, in denen es egal ist, ob die Identität der Benutzer verifiziert wurde. Authentifizierte Benutzer melden sich bei Ihrer Anwendung über einen Drittanbieter an, der ihre Identität überprüft. Vergewissern Sie sich, dass Sie die Berechtigungen der Ressourcen entsprechend anpassen, damit Sie keinen Zugriff von nicht authentifizierten Benutzern darauf gewähren.

Nachdem Sie einen Identitätspool konfiguriert haben, verwenden Sie die fromCognitoIdentityPool Methode von, @aws-sdk/credential-providers um die Anmeldeinformationen aus dem Identitätspool abzurufen. Im folgenden Beispiel für die Erstellung eines Amazon S3 S3-Clients ersetzen Sie AWS_REGION durch die Region und IDENTITY_POOL_ID durch die Identitätspool-ID.

// 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. }, }) });

Die optionale logins-Eigenschaft ist eine Abbildung der Namen des Identitätsanbieters auf die Identitäts-Token für diese Anbieter. Wie Sie den Token von Ihrem Identitätsanbieter erhalten, hängt davon ab, welchen Anbieter Sie verwenden. Wenn Sie beispielsweise einen Amazon Cognito Cognito-Benutzerpool als Authentifizierungsanbieter verwenden, könnten Sie eine Methode verwenden, die der folgenden ähnelt.

// 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; };

Wechseln Sie zwischen nicht authentifizierten Benutzern und authentifizierten Benutzern

Amazon Cognito unterstützt sowohl authentifizierte als auch nicht authentifizierte Benutzer. Nicht authentifizierte Benutzer erhalten Zugriff auf Ihre Ressourcen, auch wenn sie nicht über Ihre Identitätsanbieter angemeldet sind. Dieser Grad des Zugriffs ist nützlich, um Inhalte für Benutzer anzuzeigen, bevor diese sich anmelden. Jeder nicht authentifizierte Benutzer hat eine eindeutige Identität in Amazon Cognito, obwohl er nicht einzeln angemeldet und authentifiziert wurde.

Anfänglich nicht authentifizierter Benutzer

Benutzer beginnen in der Regel mit der nicht authentifizierten Rolle, für die Sie die Eigenschaft für die Anmeldeinformationen Ihres Konfigurationsobjekts ohne eine logins-Eigenschaft festlegen. In diesem Fall könnten Ihre Standardanmeldedaten wie folgt aussehen:

// 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. });

Wechseln Sie zum authentifizierten Benutzer

Wenn sich ein nicht authentifizierter Benutzer bei einem Identitätsanbieter anmeldet und Sie über ein Token verfügen, können Sie den Benutzer von nicht authentifiziert auf authentifiziert umstellen, indem Sie eine benutzerdefinierte Funktion aufrufen, die das Anmeldeinformationsobjekt aktualisiert und das Token hinzufügt. 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; }