Benutzerauthentifizierung für Web- und iOS-Apps mit AWS Cognito (Teil 1)
Veröffentlicht: 2022-03-10Im Laufe der Jahre habe ich mindestens drei Benutzerverwaltungssysteme von Grund auf neu erstellt. Ein Großteil des Ansatzes kann auf einer Standardvorlage basieren, aber es gibt immer einige Schlüsselelemente, die für einen bestimmten Kunden angepasst werden müssen. Dies ist Grund genug, dass eine ganze Kategorie von Benutzerverwaltungs-, Authentifizierungs- und Autorisierungsdiensten entstanden ist, um diesen Bedarf zu decken. Dienste wie Auth0 verfügen über vollständige Lösungen, die auf Benutzer- und Identitätsverwaltung basieren und in die sich Entwickler integrieren können.
Ein Dienst, der diese Funktionalität bereitstellt, ist Cognito von Amazon Web Services (AWS). Cognito ist ein Tool , mit dem Benutzer sich für von Ihnen erstellte Web- und mobile Anwendungen registrieren und anmelden können . Zusätzlich zu dieser Funktionalität ermöglicht es auch die Offline-Speicherung von Benutzerdaten und bietet die Synchronisierung dieser Daten. Wie Amazon sagt: „Mit Amazon Cognito können Sie sich darauf konzentrieren, großartige App-Erlebnisse zu schaffen, anstatt sich Gedanken über den Aufbau, die Sicherung und Skalierung einer Lösung zu machen, die die Benutzerverwaltung, Authentifizierung und geräteübergreifende Synchronisierung übernimmt.“
Karussells unterschätzen
Karussells verdienen den schlechten Ruf, den sie sich über die Jahre erworben haben, nicht wirklich. Sie können sich als sehr effektiv erweisen und sind in vielen Formen und Größen erhältlich. Lesen Sie einen verwandten Artikel →
Letztes Jahr hat Amazon eine Ergänzung seines Cognito-Dienstes eingeführt, benutzerdefinierte Benutzerpools. Diese Funktionalität bietet jetzt das, was ich und andere Entwickler benötigen, um ein vollständiges, anpassbares, plattformübergreifendes Benutzerverwaltungssystem mit der für die meisten Anwendungsfälle erforderlichen Flexibilität zu haben. Um zu verstehen, warum, müssen wir einen kurzen Blick darauf werfen, was Benutzerverwaltung ist und welche Probleme sie löst.

In diesem Artikel werden wir einen Großteil unserer Zeit damit verbringen, durch den Prozess der Konfiguration eines Benutzerpools für unsere Bedürfnisse zu gehen. Anschließend integrieren wir diesen Benutzerpool in eine iOS-Anwendung und ermöglichen es einem Benutzer, sich anzumelden und die mit seinem Benutzerkonto verknüpften Attribute abzurufen. Am Ende haben wir eine begrenzte Demo-Anwendung, aber eine, die den Kern der Benutzerverwaltung abdeckt. Darüber hinaus wird es, nachdem dies geschehen ist, einen Folgeartikel geben, der dies etwas eingehender behandelt.
Was brauchen wir von der Benutzerverwaltung?
Wenn Sie eine mobile oder Web-App haben, was genau benötigen Sie in Bezug auf die Benutzerverwaltung? Während die Benutzeranmeldung wahrscheinlich das erste ist, woran Sie denken würden, können wir hier nicht aufhören. Wenn wir ein flexibles Benutzerverwaltungssystem wünschen, das für die meisten Anwendungsfälle von Web- und mobilen Apps geeignet ist, müsste es die folgenden Funktionen haben:
- Login mit Benutzername und Passwort;
- sicheres Passwort-Hashing und -Speicherung;
- Passwortänderungen;
- Passwortrichtlinie und -validierung;
- Auslöser des Benutzerlebenszyklus (Begrüßungs-E-Mail, Abschieds-E-Mail usw.);
- Benutzerattribute (Vorname, Nachname etc.);
- erforderliche Konfiguration und optionale Attribute pro Benutzer;
- Umgang mit vergessenen Passwörtern;
- Validierung der Telefonnummer per SMS;
- E-Mail-Verifizierung;
- API-Zugriff auf Endpunkte basierend auf Berechtigungen;
- sichere Speicherung von Zugangstoken auf Mobilgeräten;
- Offline-Speicherung von Benutzerattributen für mobile Geräte;
- Synchronisierung von Benutzerattributen für Online- und Offline-Zustände;
- Multi-Faktor-Authentifizierung.
Während die Benutzerverwaltung auf den ersten Blick wie ein Anmeldesystem erscheinen mag, muss die Funktionalität weit darüber hinausgehen, damit das System wirklich flexibel genug ist, um die meisten Anwendungsfälle zu bewältigen. Dies geht eindeutig weit über nur einen Benutzernamen und ein Passwort hinaus.
Ein weiterer Punkt ist hier hervorzuheben: Sicherheit. Eine der Anforderungen an jedes Benutzerverwaltungssystem ist, dass es kontinuierlich auf die Sicherheit des Systems als Ganzes evaluiert werden muss. Viele benutzerdefinierte Benutzerverwaltungssysteme weisen Schwachstellen auf, die einfach nicht behoben wurden. Innerhalb des letzten Jahres kam es zu Sicherheitsverletzungen in Benutzerverwaltungssystemen von Unternehmen wie Dropbox, Dailymotion, Twitter und Yahoo. Wenn Sie sich für den Aufbau einer benutzerdefinierten Lösung entscheiden, sind Sie bei der Sicherung Ihres Systems am Haken.
Geben Sie Amazon Cognito ein
Amazon Cognito ist ein Managed Service, mit dem Sie ein flexibles und skalierbares Benutzerverwaltungssystem in Ihre Web- und Mobilanwendungen integrieren können. Cognito bietet zwei unterschiedliche Möglichkeiten zur Nutzung des Dienstes: föderierte Identitäten, die eine Anmeldung über soziale Netzwerke wie Facebook ermöglichen, und Benutzerpools, die Ihnen vollständig benutzerdefinierte Benutzerverwaltungsfunktionen für eine bestimmte App oder Suite von Anwendungen bieten.
Föderierte Identitäten sind großartig, wenn Sie möchten, dass sich Benutzer bei Facebook (oder Google, Amazon usw.) anmelden können. Dies bedeutet jedoch, dass ein Teil des Benutzerverwaltungsprozesses an Facebook ausgelagert wurde. Während dies in einigen Fällen akzeptabel sein kann, möchten Benutzer ihr Facebook-Konto möglicherweise nicht mit Ihrer Anwendung verbinden. Darüber hinaus möchten Sie möglicherweise einen größeren Teil des Lebenszyklus des Benutzers direkt verwalten, und dafür sind föderierte Identitäten nicht so flexibel. Für den Zweck des heutigen Artikels konzentrieren wir uns auf Benutzerpools, da sie die Flexibilität bieten, die für eine robuste Benutzerverwaltungsplattform erforderlich ist, die für die meisten Anwendungsfälle geeignet ist. Auf diese Weise haben Sie einen Ansatz, der in fast jedem Projekt verwendet werden kann.
Da es sich um einen AWS-Service handelt, bietet die Verwendung von Cognito weitere Vorteile. Cognito kann in API Gateway integriert werden, um eine unkomplizierte Möglichkeit zur Autorisierung des API-Zugriffs basierend auf den Token bereitzustellen, die von einer Cognito-Anmeldung zurückgegeben werden. Wenn Sie außerdem bereits andere AWS-Services für Ihre mobile Anwendung nutzen, können Sie Ihren Benutzerpool als Identitätsanbieter für Ihre AWS-Anmeldeinformationen verwenden.
Wie bei jedem anderen AWS-Service fallen Kosten an. Die Preise für Cognito basieren auf monatlich aktiven Benutzern (MAUs). Die gute Nachricht für die meisten Entwickler ist, dass es ein unbegrenztes kostenloses Kontingent gibt, das bei Verwendung eines benutzerdefinierten Benutzerpools auf 50.000 MAUs begrenzt ist. Wenn Sie eine große Anwendung haben, erhalten Sie dadurch eine große Anzahl von Benutzern, um einen neuen Ansatz für die Benutzerverwaltung zu testen. Ich vermute jedoch, dass viele von Ihnen Erfahrungen gemacht haben, die niemals über 50.000 Benutzer hinausgehen werden. In diesem Fall ist die zentrale Benutzerverwaltung ziemlich kostenlos. Die einzige Ausnahme hiervon sind andere AWS-Services, die Sie im Rahmen des Benutzerverwaltungsprozesses nutzen, wie z. B. Lambda, SNS und S3.
Erstellen eines Benutzerpools
Der erste Schritt bei der Integration eines Benutzerpools in Ihre mobile Anwendung besteht darin, einen Cognito-Benutzerpool zu erstellen. Dadurch erhalten wir die Konfigurationswerte, die zum Einstecken in unsere Beispielanwendung erforderlich sind. Gehen Sie zum Erstellen eines neuen Benutzerpools durch den Assistenten, der in der Cognito-Konsole von Amazon bereitgestellt wird.
Lassen Sie uns den Prozess zum Erstellen eines Benutzerpools durchgehen. Ich muss Sie warnen, dass dies ein langwieriger Prozess ist. In vielerlei Hinsicht ist dies eine gute Sache, da es Bereiche der Flexibilität aufzeigt. Sie sollten sich jedoch eine Tasse Kaffee schnappen und sich für diese anschnallen.
1. Name
Der erste Schritt beim Erstellen eines Benutzerpools besteht darin, einen Namen für Ihren Benutzerpool festzulegen und den Ansatz auszuwählen, den Sie zum Erstellen des Benutzerpools verwenden werden. Sie können entweder die Standardeinstellungen überprüfen oder die Einstellungen „durchgehen“. Da wir gute Kenntnisse darüber haben möchten, wie der Benutzerpool konfiguriert wird, wählen Sie die Option „Step through settings“.

2. Attribute
Das Konfigurieren von Attributen erfordert ein wenig Überlegung. Für jeden Benutzerpool müssen Sie festlegen, welche Attribute im System gespeichert werden und welche erforderlich sind. Da das System erforderliche Werte erzwingt, können Sie dies später nicht mehr ändern. Am besten markieren Sie hier nur wirklich notwendige Werte als erforderlich. Wenn Sie außerdem möchten, dass sich Benutzer mit ihrer E-Mail-Adresse anmelden können, markieren Sie diese als Alias.
Wenn Sie benutzerdefinierte Werte einschließen möchten, müssen Sie dies auch hier tun. Jeder benutzerdefinierte Wert hat einen Typ, optionale Validierungsregeln und die Option, veränderlich (veränderbar) oder nicht veränderbar (unveränderbar) zu sein. Es gibt eine feste Grenze von 25 benutzerdefinierten Attributen.
Abschließend muss hier noch auf Benutzernamen hingewiesen werden. Der Wert des Benutzernamens für jeden Benutzer ist unveränderlich (unveränderlich). Das bedeutet, dass es in den meisten Fällen sinnvoll wäre, diesen Wert automatisch generieren zu lassen. Aus diesem Grund gibt es den Wert „bevorzugter Benutzername“. Wenn Sie möchten, dass Benutzer einen Benutzernamenswert haben, den sie bearbeiten können, markieren Sie einfach das Attribut „bevorzugter Benutzername“ als Alias. Wenn Sie möchten, dass sich Benutzer einfach mit ihrer E-Mail-Adresse anmelden, müssen Sie das Attribut „E-Mail“ sowohl als erforderlich als auch als Alias markieren.
Für unsere Demoanwendung habe ich mich dafür entschieden, „E-Mail“, „Vorname“ und „Nachname“ erforderlich zu machen.

3. Richtlinien
Nachdem Sie die Attribute konfiguriert haben, können Sie die Richtlinien für das Konto konfigurieren. Die erste zu konfigurierende Richtlinie ist die Kennwortrichtlinie. Die Richtlinie ermöglicht es Ihnen, sowohl die Länge als auch zu konfigurieren, ob Sie Zahlen, Sonderzeichen, Großbuchstaben oder Kleinbuchstaben benötigen. Diese Richtlinie wird sowohl für Passwörter erzwungen, die Benutzer eingeben, als auch für Passwörter, die Administratoren Benutzern zuweisen.
Die nächsten Richtlinien beziehen sich auf die Benutzerregistrierung. Bei einer öffentlichen Anwendung möchten Sie den Benutzern wahrscheinlich erlauben, sich selbst anzumelden. Abhängig von der Art der Anwendung möchten Sie jedoch möglicherweise die Anmeldung einschränken und das System nur auf Einladung verwenden. Außerdem müssen Sie konfigurieren, wie schnell diese Einladungen ablaufen, wenn sie nicht verwendet werden.
Für unsere Demo-Anwendung habe ich mich entschieden, nur die Standardwerte zu verwenden, mit der Ausnahme, dass ich nicht möchte, dass Benutzer sich selbst anmelden können. Wenn diese Werte vorhanden sind, können wir mit den Überprüfungen fortfahren.

4. Überprüfungen
Im Verifizierungsschritt können Sie die Multi-Faktor-Authentifizierung sowie die E-Mail- und Telefonverifizierung einrichten. Obwohl diese Funktion relativ einfach in der Konsole einzurichten ist, beachten Sie, dass Sie eine Ausgabenerhöhung für AWS SNS beantragen müssen, wenn Sie entweder Telefonnummern verifizieren oder Multi-Faktor-Authentifizierung verwenden möchten.
Für unsere Demoanwendung habe ich mich entschieden, nur die Standardwerte zu verwenden.

5. Nachrichtenanpassungen
In diesem Schritt können Sie die E-Mail- und SMS-Nachrichten anpassen, die Ihr Benutzerpool senden wird, sowie die E-Mail-Adressen „Von“ und „Antwort an“. Für unsere Demo-Anwendung belasse ich hier die Standardwerte und fahre fort.

6. Markierungen
Wenn Sie neu bei AWS sind, müssen Sie möglicherweise keine Tags angeben. Falls Ihre Organisation AWS jedoch regelmäßig verwendet, bieten Tags eine Möglichkeit, Ausgaben zu analysieren und Berechtigungen mit IAM zuzuweisen. Beispielsweise geben einige Organisationen Tags pro Umgebung (Entwicklung, Staging, Produktion) und pro Projekt an.
Egal, was Sie in diesem Schritt eingeben, es hat keinen Einfluss auf unsere Demoanwendung.

7. Geräte
Im nächsten Schritt können Sie festlegen, ob sich der Benutzerpool die Geräte Ihrer Benutzer merken soll. Dies ist ein zusätzlicher Sicherheitsschritt, mit dem Sie sehen können, mit welchen Geräten ein bestimmtes Konto angemeldet wurde. Dies hat einen zusätzlichen Wert, wenn Sie die Multi-Faktor-Authentifizierung (MFA) nutzen. Wenn das Gerät gespeichert wird, können Sie festlegen, dass bei jeder Anmeldung kein MFA-Token erforderlich ist.

Für die Demoanwendung habe ich mich entschieden, den Wert auf „Immer“ zu setzen.

8. App-Clients
Für jede Anwendung, für die Sie den Benutzerpool verwenden möchten (z. B. eine iOS-Anwendung, Webanwendung, Android-Anwendung usw.), sollten Sie eine App erstellen. Sie können jedoch zurückkommen und diese erstellen, nachdem der Benutzerpool erstellt wurde, sodass es nicht zwingend erforderlich ist, alle diese bereits jetzt hinzuzufügen.
Jede Anwendung hat mehrere Werte, die Sie konfigurieren können. Für diese Demoanwendung geben wir der App einen Namen und belassen dann die Standardwerte. Als Nächstes können Sie konfigurieren, welche Benutzerattribute jede App lesen und schreiben kann.

Sie können in diesem Schritt beliebige Werte festlegen, solange die E-Mail-Adresse, der Nachname und der Vorname von der Anwendung gelesen und geschrieben werden können. Achten Sie darauf, auf die Option „App-Client erstellen“ zu klicken, bevor Sie fortfahren.
9. Auslöser
Mit Triggern können Sie Lambda-Funktionen verwenden, um den Benutzerlebenszyklusprozess vollständig anzupassen. Wenn Sie beispielsweise möchten, dass sich nur Benutzer mit einer E-Mail-Adresse aus der Domäne Ihres Unternehmens anmelden können, können Sie eine Lambda-Funktion für den Auslöser „Voranmeldung“ hinzufügen, um diese Validierung durchzuführen und alle Anmeldeanfragen abzulehnen geht nicht.
Für unsere Demoanwendung werde ich keine Trigger hinzufügen.

10. Überprüfung
Mir ist klar, dass dies wie ein langwieriger und mühsamer Prozess erschienen sein mag. Bedenken Sie jedoch, dass jeder Schritt beim Erstellen eines Benutzerpools flexibel ist, sodass die Lösung für mehr Anwendungsfälle geeignet ist. Und nun zu den Neuigkeiten, auf die Sie gewartet haben: Dies ist der letzte Schritt.
Überprüfen Sie einfach die Einstellungen, um sicherzustellen, dass Sie sie für die Demoanwendung richtig konfiguriert haben. Von diesem Bildschirm aus können Sie zurückgehen und alle vorherigen Einstellungen bearbeiten. Nachdem der Benutzerpool erstellt wurde, können einige Konfigurationswerte (z. B. erforderliche Attribute) nicht mehr geändert werden.
Nachdem Ihr neuer Benutzerpool erstellt wurde, können Sie ihn nun mithilfe des AWS SDK für iOS in eine Beispiel-iOS-Anwendung integrieren.

Einrichten Ihrer iOS-Anwendung für Ihren Benutzerpool
Ich habe eine iOS-Beispielanwendung erstellt, die in Cognito integriert ist, damit sich der Benutzer an- und abmelden, seinen Vor- und Nachnamen eingeben und ein Passwort festlegen kann. Bei dieser ersten Demo ist die Benutzeranmeldung nicht enthalten, daher habe ich die Konsole von Cognito verwendet, um einen neuen Benutzer zum Testen hinzuzufügen.
Den Code für diese Anwendung finden Sie in meinem GitHub-Repository.
Abhängigkeiten konfigurieren
Diese Anwendung verwendet CocoaPods zum Verwalten von Abhängigkeiten. Zu diesem Zeitpunkt sind die einzigen Abhängigkeiten die spezifischen Teile des AWS iOS SDK, die sich auf Cognito-Benutzerpools beziehen.
(Eine vollständige Beschreibung von CocoaPods würde den Rahmen dieses Artikels sprengen, eine Ressource auf der CocoaPods-Website hilft Ihnen jedoch dabei, loszulegen, falls dieses Konzept neu für Sie ist.)
Der Inhalt des Podfiles für diese Anwendung ist unten zu sehen:
source 'https://github.com/CocoaPods/Specs.git' platform :ios, '10.0' use_frameworks! target 'CognitoApplication' do pod 'AWSCore', '~> 2.5.5' pod 'AWSCognitoIdentityProvider', '~> 2.5.5' end
Angenommen, CocoaPods ist auf Ihrem Computer installiert, können Sie einfach pod install
ausführen, und die erforderlichen Abhängigkeiten werden für Sie installiert.
Konfiguration des Benutzerpools
Im nächsten Schritt fügen Sie die Werte für Ihren Benutzerpool und Ihre Clientanwendung hinzu. Die Demoanwendung ist so konfiguriert, dass sie eine Datei CognitoApplication/CognitoConfig.plist
, aus der diese Informationen abgerufen werden. Vier Werte müssen definiert werden:
-
region
(Zeichenfolge)
Dies ist die Region, in der Sie Ihren Benutzerpool erstellt haben. Dies muss die standardmäßige Regionskennung sein, z. B.us-east-1
oderap-southeast-1
. -
poolId
(Zeichenfolge)
Dies ist die ID des Benutzerpools, den Sie erstellt haben. -
clientId
(Zeichenfolge)
Dies ist dieclientId
, die als Teil der App konfiguriert ist, die Sie an den Benutzerpool angefügt haben. -
clientSecret
(Zeichenfolge)
Dies ist dasclientSecret
, das als Teil der App konfiguriert ist, die Sie an den Benutzerpool angefügt haben.
Mit dieser Datei und den richtigen Werten kann die Demoanwendung gestartet werden. Wenn während des Starts Ausnahmen auftreten, vergewissern Sie sich, dass Sie jeden der vier unten gezeigten Werte angegeben haben und dass die Datei im richtigen Verzeichnis abgelegt wird.

plist
-Datei (Große Version anzeigen)Integration von App-Delegierten
Der Kern der Integration mit Amazon Cognito findet im AppDelegate
der Anwendung statt. Unser erster Schritt besteht darin, sicherzustellen, dass wir die Protokollierung eingerichtet und eine Verbindung zu unserem Benutzerpool hergestellt haben. Als Teil dieses Prozesses werden wir unseren AppDelegate
als Delegierten des Benutzerpools zuweisen. Für dieses grundlegende Beispiel können wir diese Logik innerhalb von AppDelegate
. Bei größeren Projekten kann es sinnvoll sein, dies an anderer Stelle zu erledigen.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // set up logging for AWS and Cognito AWSDDLog.sharedInstance.logLevel = .verbose AWSDDLog.add(AWSDDTTYLogger.sharedInstance) // set up Cognito config self.cognitoConfig = CognitoConfig() // set up Cognito setupCognitoUserPool() return true } func setupCognitoUserPool() { // we pull the needed values from the CognitoConfig object // this just pulls the values in from the plist let clientId:String = self.cognitoConfig!.getClientId() let poolId:String = self.cognitoConfig!.getPoolId() let clientSecret:String = self.cognitoConfig!.getClientSecret() let region:AWSRegionType = self.cognitoConfig!.getRegion() // we need to let Cognito know which region we plan to connect to let serviceConfiguration:AWSServiceConfiguration = AWSServiceConfiguration(region: region, credentialsProvider: nil) // we need to pass it the clientId and clientSecret from the app and the poolId for the user pool let cognitoConfiguration:AWSCognitoIdentityUserPoolConfiguration = AWSCognitoIdentityUserPoolConfiguration(clientId: clientId, clientSecret: clientSecret, poolId: poolId) AWSCognitoIdentityUserPool.register(with: serviceConfiguration, userPoolConfiguration: cognitoConfiguration, forKey: userPoolID) let pool:AWSCognitoIdentityUserPool = AppDelegate.defaultUserPool() // we need to set the AppDelegate as the user pool's delegate, which will get called when events occur pool.delegate = self }
Nachdem diese Konfiguration vorhanden ist, müssen wir die Delegatmethoden für den Benutzerpool konfigurieren. Das Protokoll, das wir implementieren, ist AWSCognitoIdentityInteractiveAuthenticationDelegate
. Dieser Delegierte wird jedes Mal angerufen, wenn sich der Benutzer anmelden, sein Passwort zurücksetzen oder einen Multi-Faktor-Authentifizierungscode angeben muss oder wenn wir den Benutzer fragen müssen, ob er möchte, dass sein Gerät gespeichert wird. Für unser Beispiel müssen wir nur die Methoden startPasswordAuthentication
und startNewPasswordRequired
:
extension AppDelegate: AWSCognitoIdentityInteractiveAuthenticationDelegate { // This method is called when we need to log into the application. // It will grab the view controller from the storyboard and present it. func startPasswordAuthentication() -> AWSCognitoIdentityPasswordAuthentication { if(self.navigationController == nil) { self.navigationController = self.window?.rootViewController as? UINavigationController } if(self.loginViewController == nil) { self.loginViewController = self.storyboard?.instantiateViewController(withIdentifier: "LoginViewController") as? LoginViewController } DispatchQueue.main.async { if(self.loginViewController!.isViewLoaded || self.loginViewController!.view.window == nil) { self.navigationController?.present(self.loginViewController!, animated: true, completion: nil) } } return self.loginViewController! } // This method is called when we need to reset a password. // It will grab the view controller from the storyboard and present it. func startNewPasswordRequired() -> AWSCognitoIdentityNewPasswordRequired { if (self.resetPasswordViewController == nil) { self.resetPasswordViewController = self.storyboard?.instantiateViewController(withIdentifier: "ResetPasswordController") as? ResetPasswordViewController } DispatchQueue.main.async { if(self.resetPasswordViewController!.isViewLoaded || self.resetPasswordViewController!.view.window == nil) { self.navigationController?.present(self.resetPasswordViewController!, animated: true, completion: nil) } } return self.resetPasswordViewController! } }
Eine wichtige Sache, die zu beachten ist, ist, dass diese beiden Methoden einen View-Controller zurückgeben, der ein bestimmtes Protokoll implementiert. Beispielsweise implementiert der LoginViewController
AWSCognitoIdentityPasswordAuthentication
, das über eine einzelne Methode verfügt, die mit den Parametern aufgerufen wird, die erforderlich sind, damit der Benutzer den Anmeldevorgang abschließen kann.
Authentifizierungsfluss
Nachdem all diese Teile in der Demoanwendung vorhanden sind, können Sie nun den Anmeldevorgang von Anfang bis Ende sehen. Die Hauptansicht der Anwendung zeigt den Benutzernamen sowie den Vor- und Nachnamen des Benutzers. Um dies zu erreichen, werden die folgenden Schritte ausgeführt:
- Im
AppViewController
rufen wir die MethodefetchUserAttributes
in der MethodeviewDidLoad
auf. Wenn der Benutzer nicht angemeldet ist, löst dies den Anmeldevorgang aus. - Die
startPasswordAuthentication
Methode inAppDelegate
wird ausgelöst. Diese Methode lädt denLoginViewController
und präsentiert ihn. - Die
getDetails
Methode vonLoginViewController
wird vom AWS SDK aufgerufen. Dazu gehört ein Objekt, das eine Instanz vonAWSTaskCompletionSource
ist, das wir verwenden können, um dem Benutzer zu ermöglichen, sich anzumelden. - Wenn der Benutzer auf die Schaltfläche „Anmelden“ klickt, übergeben wir die Anmeldeinformationen an dieses Objekt. Dadurch wird dann die Methode
didCompleteStepWithError
, und wir können das Ergebnis entsprechend behandeln. Wenn kein Fehler vorliegt, können wir den View-Controller verwerfen. - Wenn wir den Benutzer in der Konsole erstellt haben, haben wir hier einen weiteren Schritt zu erledigen. Da wir dem Benutzer ein temporäres Passwort gegeben haben, müssen sie ein dauerhafteres festlegen. Da wir außerdem den Vornamen und den Familiennamen als erforderliche Parameter festlegen, müssen wir dem Benutzer erlauben, diese ebenfalls einzugeben. Das AWS SDK erkennt dies und ruft die Methode
startNewPasswordRequired
inAppDelegate
. Dadurch wird derResetPasswordViewController
und seine Instanz vonAWSTaskCompletionSource
. - Der
ResetPasswordViewController
funktioniert fast identisch mit demLoginViewController
. Wir müssen den Benutzer lediglich nach den korrekten Werten fragen und diese Werte dann übermitteln. Sobald dieser Vorgang erfolgreich abgeschlossen ist, schließen wir den View-Controller. - Sobald der gesamte Anmeldevorgang abgeschlossen ist, speichert das SDK die von Cognito zurückgegebenen Token sicher. Dann werden wir schließlich die Benutzerdetails abrufen, und wir können diese verwenden, um den
AppViewController
mit dem Benutzernamen, dem Vornamen und dem Familiennamen des Benutzers zu füllen.

Fazit
Während der Einrichtungsprozess für den Benutzerpool mehrere Schritte umfassen kann, sind diese Schritte einfach zu navigieren. Darüber hinaus sollte der Umfang der möglichen Konfiguration Ihnen die Gewissheit geben, dass es die meisten Anwendungsfälle unterstützen kann. In meiner täglichen Arbeit bei Universal Mind habe ich mit mehreren Kunden zusammengearbeitet, die ihre bestehenden Anwendungen migrierten, um die Funktionen zu nutzen, die Cognito für die Benutzerverwaltung bietet.
Unabhängig davon, ob Sie regelmäßig ein Benutzerverwaltungssystem implementieren müssen, ist dies ein Werkzeug, das jeder Mobil- und Webentwickler in seiner Werkzeugkiste haben sollte . Im nächsten Artikel dieser Reihe werden wir damit beginnen, die Möglichkeiten von Cognito etwas eingehender zu untersuchen, indem wir eine Demoanwendung mit umfassenderen Funktionen implementieren, die mehr gängige Anwendungsfälle für die Benutzerverwaltung implementiert.
Mit ein wenig Übung können Sie alle Ihre Freunde beeindrucken, indem Sie innerhalb eines Tages eine neue Anwendung einrichten, die all diese Anwendungsfälle für die Benutzerverwaltung erfüllt. Das ist ziemlich gut für einen Arbeitstag.
Links und Ressourcen
- Amazon Cognito
- „Entwicklerressourcen“, Amazon Cognito
- AWS Mobile-SDK
- „CocoaPods-Tutorial für Swift: Erste Schritte“, Joshua Greene, raywenderlich.com