Authentifizieren Sie bestehende Benutzer von React-Anwendungen mithilfe von Amazon Cognito und AWS Amplify UI - AWS Prescriptive Guidance

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.

Authentifizieren Sie bestehende Benutzer von React-Anwendungen mithilfe von Amazon Cognito und AWS Amplify UI

Erstellt von Daniel Kozhemyako () AWS

Umwelt: Produktion

Technologien: Web- und mobile Apps; Sicherheit, Identität, Compliance; Unternehmensproduktivität; Analytik

AWSDienste: Amazon Cognito; AWS Amplify; Amazon Connect; Verwaltungskonsole AWS

Übersicht

Dieses Muster zeigt, wie einer vorhandenen Frontend-React-Anwendung mithilfe einer AWS Amplify UI-Bibliothek und eines Amazon Cognito Cognito-Benutzerpools Authentifizierungsfunktionen hinzugefügt werden.

Das Muster verwendet Amazon Cognito, um Authentifizierung, Autorisierung und Benutzerverwaltung für die Anwendung bereitzustellen. Es verwendet auch eine Komponente aus Amplify UI, einer Open-Source-Bibliothek, die die Funktionen der AWS Amplify Benutzeroberflächenentwicklung (UI) erweitert. Die Authenticator-UI-Komponente verwaltet Anmeldesitzungen und führt den mit der Cloud verbundenen Workflow aus, der Benutzer über Amazon Cognito authentifiziert.

Nachdem Sie dieses Muster implementiert haben, können sich Benutzer mit beliebigen der folgenden Anmeldeinformationen anmelden:

  • Benutzername und Passwort

  • Anbieter sozialer Identitäten wie Apple, Facebook, Google und Amazon

  • Identitätsanbieter für Unternehmen, die entweder SAML 2.0-kompatibel oder OpenID Connect (OIDC) -kompatibel sind

Hinweis: Um eine benutzerdefinierte Authentifizierungs-UI-Komponente zu erstellen, können Sie die Authenticator-Benutzeroberflächenkomponente im Headless-Modus ausführen.

Voraussetzungen und Einschränkungen

Voraussetzungen

Einschränkungen

  • Dieses Muster gilt nur für React-Webanwendungen.

  • Dieses Muster verwendet eine vorgefertigte Amplify-UI-Komponente. Die Lösung deckt nicht die Schritte ab, die zur Implementierung einer benutzerdefinierten UI-Komponente erforderlich sind.

Produktversionen

  • Amplify UI 6.1.3 oder höher (Gen 1)

  • Amplify 6.0.16 oder höher (Gen 1)

Architektur

Zielarchitektur

Das folgende Diagramm zeigt eine Architektur, die Amazon Cognito verwendet, um Benutzer für eine React-Webanwendung zu authentifizieren.

Amazon Cognito authentifiziert Benutzer für eine React-Webanwendung.

Tools

AWS-Services

  • Amazon Cognito bietet Authentifizierung, Autorisierung und Benutzerverwaltung für Web- und mobile Apps.

Andere Tools

  • Amplify UI ist eine Open-Source-UI-Bibliothek, die anpassbare Komponenten bereitstellt, die Sie mit der Cloud verbinden können.

  • Node.js ist eine ereignisgesteuerte JavaScript Laufzeitumgebung, die für die Erstellung skalierbarer Netzwerkanwendungen entwickelt wurde.

  • npm ist eine Softwareregistrierung, die in einer Node.js -Umgebung ausgeführt wird und verwendet wird, um Pakete gemeinsam zu nutzen oder auszuleihen und die Bereitstellung von privaten Paketen zu verwalten.

Bewährte Methoden

Wenn Sie eine neue Anwendung erstellen, empfehlen wir Ihnen, Amplify Gen 2 zu verwenden.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Erstellen Sie einen Benutzerpool.

Erstellen Sie einen Amazon Cognito Cognito-Benutzerpool. Konfigurieren Sie die Anmeldeoptionen und Sicherheitsanforderungen des Benutzerpools entsprechend Ihrem Anwendungsfall.

App-Developer

Fügen Sie einen App-Client hinzu.

Konfigurieren Sie einen Benutzerpool-App-Client. Dieser Client ist erforderlich, damit Ihre Anwendung mit dem Amazon Cognito Cognito-Benutzerpool interagieren kann.

App-Developer
AufgabeBeschreibungErforderliche Fähigkeiten

Installieren Sie die Abhängigkeiten.

Um die @aws-amplify/ui-react Pakete aws-amplify und zu installieren, führen Sie den folgenden Befehl im Stammverzeichnis Ihrer Anwendung aus:

npm i @aws-amplify/ui-react aws-amplify
App-Developer

Konfigurieren Sie den Benutzerpool.

Erstellen Sie anhand des folgenden Beispiels eine aws-exports.js Datei und speichern Sie sie im src Ordner. Die Datei sollte die folgenden Informationen enthalten:

  • AWS-Region in dem sich Ihr Amazon Cognito Cognito-Benutzerpool befindet

  • Amazon Cognito Cognito-Benutzerpool-ID

  • ID des App-Clients

// replace the user pool region, id, and app client id details const awsmobile = { "aws_project_region": "put_your_region_here", "aws_cognito_region": "put_your_region_here", "aws_user_pools_id": "put_your_user_pool_id_here", "aws_user_pools_web_client_id": "put_your_user_pool_app_id_here" } export default awsmobile;
App-Developer

Importieren und konfigurieren Sie den Amplify-Dienst.

  1. Importieren und laden Sie die Datei in der Einstiegspunktdatei der aws-exports.js Anwendung (z. B.App.js), indem Sie die folgenden Codezeilen eingeben:

    import { Amplify } from 'aws-amplify'; import awsExports from './aws-exports';
  2. Konfigurieren Sie den Amplify-Client anhand des folgenden Beispiels mithilfe der aws-exports.js Datei:

    // Configure Amplify in index file or root file Amplify.configure({ ...awsExports });

    Weitere Informationen finden Sie unter Amplify-Kategorien konfigurieren in der Amplify-Dokumentation.

App-Developer

Fügen Sie die Authenticator-UI-Komponente hinzu.

Um die Authenticator UI-Komponente anzuzeigen, fügen Sie der Einstiegspunktdatei (App.js) der Anwendung die folgenden Codezeilen hinzu:

import { Authenticator } from '@aws-amplify/ui-react'; import '@aws-amplify/ui-react/styles.css';

Hinweis: Das Beispielcode-Snippet importiert die Authenticator UI-Komponente und die Amplify UI-Datei styles.css, die erforderlich ist, wenn die vorgefertigten Designs der Komponente verwendet werden.

Die Authenticator UI-Komponente bietet zwei Rückgabewerte:

  • Angaben zum Benutzer

  • Eine Funktion, die aufgerufen werden kann, um den Benutzer abzumelden

Sehen Sie sich die folgende Beispielkomponente an:

function App() { return ( <Authenticator> {({ signOut, user }) => ( <div> <p>Welcome {user.username}</p> <button onClick={signOut}>Sign out</button> </div> )} </Authenticator> ); }

Hinweis: Eine App.js Beispieldatei finden Sie im Abschnitt Zusätzliche Informationen dieses Musters.

App-Developer

(Optional) Rufen Sie Sitzungsinformationen ab.

Nachdem ein Benutzer authentifiziert wurde, können Sie vom Amplify-Client Daten über seine Sitzung abrufen. Sie können beispielsweise das JSON Web-Token (JWT) aus der Sitzung eines Benutzers abrufen, sodass Sie die Anfragen aus seiner Sitzung an ein Backend authentifizieren können. API

Sehen Sie sich das folgende Beispiel für einen Anforderungsheader an, der Folgendes enthält: JWT

import { fetchAuthSession } from 'aws-amplify/auth'; (await fetchAuthSession()).tokens?.idToken?.toString();
App-Developer

Fehlerbehebung

ProblemLösung

Neue Benutzer können sich nicht für die Anwendung registrieren.

Stellen Sie wie folgt sicher, dass Ihr Amazon Cognito Cognito-Benutzerpool so konfiguriert ist, dass Benutzer sich selbst für den Benutzerpool anmelden können:

  • Melden Sie sich bei der AWS Management Console an und öffnen Sie dann die Amazon Cognito Cognito-Konsole.

  • Wählen Sie im linken Navigationsbereich Benutzerpools aus.

  • Wählen Sie Ihren Benutzerpool aus der Liste aus.

  • Wählen Sie unter Allgemeine Einstellungen die Option Richtlinien aus.

  • Wählen Sie Benutzern erlauben, sich selbst zu registrieren.

Die Auth-Komponente funktionierte nach dem Upgrade von Version 5 auf Version 6 nicht mehr.

Die Auth Kategorie wurde in Amplify v6 auf einen funktionalen Ansatz umgestellt und Parameter benannt. Sie müssen die Funktion jetzt APIs direkt aus dem aws-amplify/auth Pfad importieren. Weitere Informationen finden Sie unter Migration von v5 zu v6 in der Amplify-Dokumentation.

Zugehörige Ressourcen

Zusätzliche Informationen

Die App.js Datei sollte den folgenden Code enthalten:

import './App.css'; import { Amplify } from 'aws-amplify'; import awsExports from './aws-exports'; import { fetchAuthSession } from 'aws-amplify/auth'; import { Authenticator } from '@aws-amplify/ui-react'; import '@aws-amplify/ui-react/styles.css'; Amplify.configure({ ...awsExports }); let token = (await fetchAuthSession()).tokens?.idToken?.toString(); function App() { return ( <Authenticator> {({ signOut, user }) => ( <div> <p>Welcome {user.username}</p> <p>Your token is: {token}</p> <button onClick={signOut}>Sign out</button> </div> )} </Authenticator> ); } export default App;