Benutzerverwaltung mit AWS Cognito - (1/3) Ersteinrichtung

Das vollständige AWS Web Boilerplate - Tutorial 1A

Hauptinhaltsverzeichnis Klicken Sie hier Teil A: Ersteinrichtung Teil B: Die Kernfunktionalität Teil C: Letzte Schritte bis zur Vollständigkeit

Laden Sie den Github hier herunter.

Einführung

Das Einrichten der Benutzerauthentifizierung kann ewig dauern, ist jedoch ein wesentlicher Eckpfeiler jeder Produktions-App. Es gibt Optionen wie AuthO und PassportJS, aber sie haben entweder harte Lernkurven, erfordern eine kontinuierliche Wartung oder sind anfällig für Programmiererfehler, da sie selbst eingerichtet werden müssen. Wenn es nur einen praktischen, anpassbaren, sicheren und hoch skalierbaren Benutzerverwaltungsdienst in der Cloud gäbe.

Einführung in Amazon Cognito und Federated Identities. Cognito ist die AWS-Lösung zum Verwalten von Benutzerprofilen. Mit Federated Identities können Sie Ihre Benutzer über mehrere Anmeldungen hinweg verfolgen. AWS Cognito ist in das AWS-Ökosystem integriert und bietet eine Vielzahl von Möglichkeiten für die erweiterte Front-End-Entwicklung, da Sie mit Cognito + IAM-Rollen selektiv und sicher auf andere AWS-Services zugreifen können. Möchten Sie den S3 Bucket-Zugriff nur auf bestimmte angemeldete Benutzer zulassen? Verbinden Sie einfach ein Cognito-Login mit einer IAM-Rolle, die den Zugriff auf den Bucket ermöglicht, und jetzt ist Ihr Bucket sicher! Das Beste ist, dass Sie mit der kostenlosen Stufe monatlich 50.000 aktive Benutzer erhalten, sodass Sie sich keine Sorgen mehr machen müssen, bis Sie zum Boom bereit sind.

Dieses Boilerplate ist eine React-Redux-Web-App, in der alle Funktionen von AWS Cognito und Federated Identities vorintegriert sind. Verwenden Sie dieses Boilerplate, wenn Sie eine App haben, die Sie von Anfang an mit einem produktionsbereiten Authentifizierungsdienst entwickeln möchten. In der Tat ist dies ein leistungsstarkes Launchpad für Ihre nächste großartige Idee.

Gehen Sie auf der AWS-Konsole zu AWS Cognito, um loszulegen!

Ersteinrichtung - Cognito

Wir werden AWS Cognito einrichten, einen benutzerdefinierten Anmeldepool (z. B. Anmeldung mit E-Mail). Cognito ist KEIN Login-Manager für jede Art von Login (wie Facebook und Google Mail), nur für benutzerdefinierte Logins.

Erstellen Sie zunächst einen Benutzerpool, indem Sie auf "Benutzerpools verwalten" klicken. Ein Benutzerpool ist eine Gruppe von Benutzern, die dieselbe Bezeichnung erfüllen. Wenn Sie einen Uber-Klon erstellen würden, würden Sie zwei Benutzerpools erstellen - einen für Fahrer und einen für Fahrer. Lassen Sie uns zunächst nur einen neuen Benutzerpool mit dem Namen "App_Users" erstellen. Der Setup-Bildschirm sollte folgendermaßen aussehen:

Wir werden diesen Prozess Schritt für Schritt durchgehen. Geben Sie also den Poolnamen "App_Users" ein und klicken Sie auf "Step through settings". Der nächste Schritt ist "Attribute", in dem wir die Attribute definieren, die unsere "App_Users" haben werden.

Wir möchten jetzt nur noch eine E-Mail, ein Passwort und einen "Agentennamen" haben. Die E-Mail ist unsere eindeutige Kennung für einen Benutzer und das Passwort ist ein Pflichtfeld (weshalb Sie es nicht in der Liste der Standardattribute sehen). Wir möchten, dass Benutzer einen Codenamen haben können. Legen Sie also fest, dass "Agentenname" ein benutzerdefiniertes Attribut ist. Wir verwenden nur "agentName", um zu zeigen, wie benutzerdefinierte Attribute hinzugefügt werden. Scrollen Sie nach unten und Sie sehen die Option, benutzerdefinierte Attribute hinzuzufügen.

Ab dem Datum, an dem dieses Tutorial geschrieben wurde, können Sie die benutzerdefinierten Attribute nicht mehr ändern (obwohl AWS dies anscheinend zu können scheint). Stellen Sie also sicher, dass Sie dies beim ersten Mal richtig machen! Wenn Sie Attribute ändern müssen, müssen Sie einen neuen Benutzerpool erstellen. Hoffentlich behebt AWS dieses Problem bald. Wie auch immer, weiter zu den Kontorichtlinien!

So können wir hier sehen, dass unsere Passwörter erzwungen werden können, um bestimmte Zeichen zu erfordern. Natürlich wäre es sicherer, eine Mischung verschiedener Zeichentypen zu benötigen, aber das gefällt den Benutzern oft nicht. Für einen Mittelweg muss das Kennwort lediglich mehr als 8 Zeichen lang sein und mindestens 1 Nummer enthalten. Wir möchten auch, dass Benutzer sich anmelden können. Die anderen Teile sind nicht so wichtig, also fahren wir mit dem nächsten Schritt fort: Überprüfungen.

Dieser Teil ist cool, wir können problemlos Multi-Faktor-Authentifizierung (MFA) integrieren. Dies bedeutet, dass Benutzer sich mit einer E-Mail sowie einer anderen Form der Authentifizierung wie einer Telefonnummer anmelden müssen. Eine PIN würde an diese Telefonnummer gesendet und der Benutzer würde sie verwenden, um sein Konto zu verifizieren. Wir werden MFA in diesem Tutorial nicht verwenden, sondern nur eine E-Mail-Bestätigung. Stellen Sie MFA auf "Aus" und aktivieren Sie nur "E-Mail" als Überprüfungsmethode. Wir können die ausgefüllte „AppUsers-SMS-Rolle“ (IAM-Rolle) belassen, da wir sie nicht verwenden, aber möglicherweise in Zukunft verwenden werden. Cognito verwendet diese IAM-Rolle, um zum Senden von in MFA verwendeten SMS-Textnachrichten berechtigt zu sein. Da wir kein MFA verwenden, können wir fortfahren mit: Nachrichtenanpassungen.

Wenn Benutzer ihre Kontobestätigungs-E-Mails erhalten, können wir angeben, was in dieser E-Mail enthalten ist. Hier haben wir eine benutzerdefinierte E-Mail erstellt und programmgesteuert in die Bestätigungs-PIN eingefügt, die als dargestellt wird {####}. Leider können wir keine anderen Variablen wie einen Verifizierungslink übergeben. Um dies zu erreichen, müssten wir eine Kombination aus AWS Lambda und AWS SES verwenden.

Scrollen Sie im Schritt "Nachrichtenanpassungen" die Seite nach unten, und Sie können unsere eigenen Standardadressen "FROM" und "REPLY-TO" hinzufügen. Dazu müssen wir eine E-Mail in AWS SES überprüfen, die einfach und sehr schnell einzurichten ist. Wechseln Sie in einem neuen Tab zur AWS-Konsolen-Homepage, indem Sie oben links auf den orangefarbenen Würfel klicken. Suchen Sie auf der Konsolen-Homepage nach SES (Simple Email Service). Klicken Sie hier, um zur SES-Seite zu gelangen, und klicken Sie dann im linken Menü auf den Link E-Mail-Adressen.

Klicken Sie anschließend auf "Neue Adresse überprüfen" und geben Sie die E-Mail-Adresse ein, die Sie überprüfen möchten.

Melden Sie sich jetzt bei Ihrer E-Mail an und öffnen Sie die E-Mail von AWS. Klicken Sie zur Überprüfung auf den Link in der E-Mail, und Sie werden erneut zur AWS SES-Seite weitergeleitet. Sie haben eine E-Mail erfolgreich verifiziert! Das war einfach.

Nun kehren wir zu AWS Cognito zurück und fahren fort mit: Tags.

Das Hinzufügen von Tags zu einem Benutzerpool ist nicht obligatorisch, aber es ist definitiv nützlich für die Verwaltung vieler AWS-Services. Fügen wir einfach ein Tag für 'AppName' hinzu und setzen es auf den Wert 'MyApp'. Wir können jetzt fortfahren mit: Geräte.

Wir können uns entscheiden, uns an die Geräte unserer Benutzer zu erinnern. Normalerweise wähle ich "Immer", da das Erinnern an Benutzergeräte kostenlos ist und keine Codierung unsererseits erfordert. Die Informationen sind auch nützlich, warum also nicht? Nächster Schritt: Apps.

Wir möchten, dass bestimmte Apps Zugriff auf unseren Benutzerpool haben. Diese Apps sind nirgendwo anders im AWS-Ökosystem vorhanden. Wenn wir also eine „App“ erstellen, handelt es sich um eine Nur-Cognito-Kennung. Apps sind nützlich, da mehrere Apps auf denselben Benutzerpool zugreifen können (stellen Sie sich eine Uber-Klon-App und eine kostenlose Fahrprüfungs-Übungs-App vor). Wir setzen das Aktualisierungstoken auf 30 Tage, was bedeutet, dass jeder Anmeldeversuch ein Aktualisierungstoken zurückgibt, das wir zur Authentifizierung verwenden können, anstatt uns jedes Mal anzumelden. Wir deaktivieren "Client-Geheimnis generieren", weil wir uns vom Front-End statt vom Back-End in unseren Benutzerpool einloggen möchten (daher können wir keine Geheimnisse im Front-End behalten, da dies unsicher ist). Klicken Sie auf "App erstellen" und dann auf "Nächster Schritt", um fortzufahren: Auslöser.

Wir können verschiedene Aktionen in der Benutzerauthentifizierung und im Setup-Ablauf auslösen. Erinnern Sie sich, wie wir gesagt haben, dass wir mit AWS Lambda und AWS SES komplexere E-Mails zur Kontobestätigung erstellen können? Hier würden wir das einrichten. Für den Umfang dieses Tutorials werden keine AWS Lambda-Trigger verwendet. Fahren wir mit dem letzten Schritt fort: Überprüfen.

Hier überprüfen wir alle von uns vorgenommenen Setup-Konfigurationen. Wenn Sie sich bei diesen Informationen sicher sind, klicken Sie auf "Pool erstellen" und unser Cognito-Benutzerpool wird generiert!

Notieren Sie sich die Pool-ID us-east-1_6i5p2Fwaoauf der Registerkarte Pool-Details.

Und die App-Client-ID 5jr0qvudipsikhk2n1ltcq684bauf der Registerkarte Apps. Beides benötigen wir in unserer clientseitigen App.

Nachdem Cognito eingerichtet ist, können wir Verbundidentitäten für mehrere Anmeldeanbieter einrichten. In diesem Tutorial werden die Besonderheiten der FB-Anmeldung nicht behandelt, da sie nicht in den Umfang dieser Tutorialserie fallen. Die Integration von FB Login ist jedoch sehr einfach und wir werden im folgenden Abschnitt zeigen, wie es gemacht wird.

Ersteinrichtung - Verbundidentitäten

Als nächstes wollen wir "Federated Identities" einrichten. Wenn wir eine App haben, mit der mehrere Anmeldeanbieter (Amazon Cognito, Facebook, Gmail usw.) für denselben Benutzer verfügbar sind, würden wir Federated Identities verwenden, um alle diese Anmeldungen zu zentralisieren. In diesem Tutorial verwenden wir sowohl unser Amazon Cognito-Login als auch ein potenzielles Facebook-Login. Gehen Sie zu Verbundidentitäten und beginnen Sie mit dem Erstellen eines neuen Identitätspools. Gib ihm einen passenden Namen.

Erweitern Sie nun den Abschnitt "Authentifizierungsanbieter" und Sie sehen den folgenden Bildschirm. Unter Cognito fügen wir den soeben erstellten Cognito-Benutzerpool hinzu. Kopieren Sie die zuvor notierte Benutzerpool-ID und App-Client-ID und fügen Sie sie ein.

Und wenn wir uns für denselben Benutzeridentitätspool bei Facebook anmelden möchten, können wir auf die Registerkarte Facebook gehen und einfach unsere Facebook-App-ID eingeben. Das ist alles, was es auf der AWS-Konsole gibt!

Speichern Sie den Identitätspool, und Sie werden zum folgenden Bildschirm weitergeleitet, in dem IAM-Rollen zur Darstellung des Verbundidentitätspools erstellt werden. Die nicht authentifizierte IAM-Rolle ist für nicht angemeldete Benutzer und die authentifizierte Version für angemeldete Benutzer. Wir können diesen IAM-Rollen die Berechtigung erteilen, auf andere AWS-Ressourcen wie S3-Buckets und dergleichen zuzugreifen. Auf diese Weise erreichen wir mehr Sicherheit durch die Integration unserer App in das gesamte AWS-Ökosystem. Fahren Sie mit der Erstellung dieses Identitätspools fort.

Nach dem erfolgreichen Erstellen des Identitätspools sollte nun der folgende Bildschirm angezeigt werden. Sie müssen jetzt nur noch eine Sache notieren, nämlich die Identity Pool ID (dh us-east-1:65bd1e7d-546c-4f8c-b1bc-9e3e571cfaa7), die wir später in unserem Code verwenden werden. Toll!

Beenden Sie alles und kehren Sie zum AWS Cognito-Hauptbildschirm zurück. Wenn wir den Abschnitt Cognito oder Federated Identities betreten, sehen wir, dass wir die 2 erforderlichen Pools eingerichtet haben. AWS Cognito und AWS Federated Identities sind einsatzbereit!

Das ist alles für die Einrichtung! Mit diesen beiden Pools können wir den Rest unseres Codes in den vollständigen Authentifizierungsdienst von Amazon integrieren und eine erstklassige Benutzerverwaltung erreichen. Das war viel einfacher als benutzerdefinierte OAuth + Passport.js! Wenn Ihnen das gefällt, was Sie bisher gesehen haben, lesen Sie weiter! Denken Sie daran, dass es in Zukunft sehr einfach sein wird, nachdem Sie dies einmal gelernt haben. Es lohnt sich also auf jeden Fall, Zeit zu investieren. Wir sehen uns im nächsten Abschnitt!

Hauptinhaltsverzeichnis Klicken Sie hier Teil A: Ersteinrichtung Teil B: Die Kernfunktionalität Teil C: Letzte Schritte zur vollständigen EntwicklungDiese Methoden wurden teilweise bei der Bereitstellung von renthero.ca verwendet