Authentification des utilisateurs pour les applications Web et iOS avec AWS Cognito (partie 1)

Publié: 2022-03-10
Résumé rapide ↬ Les développeurs et les organisations recherchent un moyen d'avoir plus d'agilité avec les solutions mobiles. Il y a un désir de réduire le temps entre l'idée et le test. En tant que développeur, je me heurte souvent à un obstacle qui peut ralentir la construction initiale d'une hypothèse mobile : la gestion des utilisateurs.

Au fil des ans, j'ai construit au moins trois systèmes de gestion des utilisateurs à partir de zéro. Une grande partie de l'approche peut être basée sur un passe-partout, mais il y a toujours quelques éléments clés qui doivent être personnalisés pour un client particulier. C'est une préoccupation suffisante pour qu'une catégorie entière de services de gestion, d'authentification et d'autorisation des utilisateurs ait vu le jour pour répondre à ce besoin. Des services comme Auth0 ont des solutions complètes basées sur la gestion des utilisateurs et des identités que les développeurs peuvent intégrer.

Un service qui fournit cette fonctionnalité est Cognito d'Amazon Web Services (AWS). Cognito est un outil permettant aux utilisateurs de s'inscrire et de se connecter aux applications Web et mobiles que vous créez. En plus de cette fonctionnalité, il permet également le stockage des données utilisateur hors ligne et assure la synchronisation de ces données. Comme l'indique Amazon, "Avec Amazon Cognito, vous pouvez vous concentrer sur la création d'excellentes expériences d'application au lieu de vous soucier de la création, de la sécurisation et de la mise à l'échelle d'une solution pour gérer la gestion des utilisateurs, l'authentification et la synchronisation entre les appareils".

Sous-estimer les carrousels

Les carrousels ne méritent pas vraiment la mauvaise réputation qu'ils ont acquise au fil des ans. Ils peuvent s'avérer très efficaces et se présentent sous de nombreuses formes et tailles. Lire un article connexe →

L'année dernière, Amazon a introduit un ajout à son service Cognito, des groupes d'utilisateurs personnalisés. Cette fonctionnalité fournit désormais ce dont moi et d'autres développeurs avons besoin pour disposer d'un système de gestion des utilisateurs complet, personnalisable et multiplateforme, avec la flexibilité nécessaire pour s'adapter à la plupart des cas d'utilisation. Pour comprendre pourquoi, nous devons examiner rapidement ce qu'est la gestion des utilisateurs et les problèmes qu'elle résout.

Plus après saut! Continuez à lire ci-dessous ↓
AWSCognito
Diagramme du groupe d'utilisateurs personnalisé Cognito (Afficher la grande version)

Dans cet article, nous passerons la majorité de notre temps à parcourir le processus de configuration d'un groupe d'utilisateurs pour nos besoins. Ensuite, nous allons intégrer ce pool d'utilisateurs à une application iOS et permettre à un utilisateur de se connecter et de récupérer les attributs associés à son compte utilisateur. À la fin, nous aurons une application de démonstration limitée, mais qui gère le cœur de la gestion des utilisateurs. De plus, une fois que cela sera en place, il y aura un article de suivi qui approfondira un peu cette question.

De quoi avons-nous besoin de la gestion des utilisateurs ?

Si vous avez une application mobile ou web, de quoi avez-vous exactement besoin en termes de gestion des utilisateurs ? Bien que la connexion de l'utilisateur soit probablement la première chose à laquelle vous pensez, nous ne pouvons pas nous arrêter là. Si nous voulons un système de gestion des utilisateurs flexible qui fonctionnerait pour la plupart des cas d'utilisation d'applications Web et mobiles, il faudrait qu'il ait les fonctionnalités suivantes :

  • connexion par nom d'utilisateur et mot de passe ;
  • hachage et stockage sécurisés des mots de passe ;
  • changements de mot de passe ;
  • politique et validation des mots de passe ;
  • déclencheurs du cycle de vie de l'utilisateur (e-mail de bienvenue, e-mail d'adieu, etc.) ;
  • attributs de l'utilisateur (prénom, nom, etc.) ;
  • configuration requise et attributs facultatifs par utilisateur ;
  • traitement des mots de passe oubliés ;
  • validation du numéro de téléphone par SMS ;
  • vérification de l'E-mail;
  • Accès API aux points de terminaison en fonction des autorisations ;
  • stockage sécurisé de jeton(s) d'accès sur des appareils mobiles ;
  • stockage hors ligne d'attributs d'utilisateurs pour appareils mobiles ;
  • synchronisation des attributs utilisateur pour les états en ligne et hors ligne ;
  • authentification multi-facteurs.

Bien que la gestion des utilisateurs puisse à première vue ressembler à un système de connexion, la fonctionnalité doit aller bien au-delà pour que le système soit suffisamment flexible pour gérer la plupart des cas d'utilisation. Cela va clairement bien au-delà d'un simple nom d'utilisateur et d'un mot de passe.

Un élément supplémentaire doit être appelé ici : la sécurité. L'une des exigences de tout système de gestion des utilisateurs est qu'il doit être continuellement évalué pour la sécurité du système dans son ensemble. De nombreux systèmes de gestion des utilisateurs personnalisés présentent des vulnérabilités qui n'ont tout simplement pas été corrigées. Au cours de la dernière année, il y a eu des failles de sécurité dans les systèmes de gestion des utilisateurs d'entreprises telles que Dropbox, Dailymotion, Twitter et Yahoo. Si vous choisissez de créer une solution personnalisée, vous êtes libre de sécuriser votre système.

Entrez Amazon Cognito

Amazon Cognito est un service géré qui vous permet d'intégrer un système de gestion des utilisateurs flexible et évolutif dans vos applications Web et mobiles. Cognito propose deux manières distinctes d'utiliser le service : les identités fédérées, qui permettent la connexion via des réseaux sociaux tels que Facebook, et les groupes d'utilisateurs, qui vous offrent des capacités de gestion des utilisateurs entièrement personnalisées pour une application ou une suite d'applications spécifique.

Les identités fédérées sont idéales si vous souhaitez que les utilisateurs puissent se connecter avec Facebook (ou Google, Amazon, etc.), mais cela signifie qu'une partie du processus de gestion des utilisateurs aura été sous-traitée à Facebook. Bien que cela puisse être acceptable dans certains cas, les utilisateurs peuvent ne pas souhaiter connecter leur compte Facebook à votre application. En outre, vous souhaiterez peut-être gérer directement une plus grande partie du cycle de vie de l'utilisateur, et pour cela, les identités fédérées ne sont pas aussi flexibles. Pour les besoins de l'article d'aujourd'hui, nous nous concentrerons sur les groupes d'utilisateurs, car ils offrent la flexibilité nécessaire à une plate-forme de gestion des utilisateurs robuste qui s'adapterait à la plupart des cas d'utilisation. De cette manière, vous aurez une approche qui peut être utilisée dans la plupart des projets.

Comme il s'agit d'un service AWS, l'utilisation de Cognito présente d'autres avantages. Cognito peut s'intégrer à API Gateway pour fournir un moyen simple d'autoriser l'accès à l'API en fonction des jetons renvoyés par une connexion Cognito. De plus, si vous exploitez déjà d'autres services AWS pour votre application mobile, vous pouvez utiliser votre groupe d'utilisateurs comme fournisseur d'identité pour vos informations d'identification AWS.

Comme pour tout autre service AWS, il y a un coût. La tarification de Cognito est basée sur les utilisateurs actifs mensuels (MAU). La bonne nouvelle pour la plupart des développeurs est qu'il existe un niveau gratuit indéfini plafonné à 50 000 MAU lors de l'utilisation d'un groupe d'utilisateurs personnalisé. Si vous avez une grande application, cela vous donnera un grand nombre d'utilisateurs pour piloter une nouvelle approche de la gestion des utilisateurs. Cependant, je soupçonne que beaucoup d'entre vous ont des expériences qui ne dépasseront jamais 50 000 utilisateurs. Dans ce cas, la gestion des utilisateurs de base sera pratiquement gratuite. La seule exception à cette règle concerne les autres services AWS dont vous tirerez parti dans le cadre du processus de gestion des utilisateurs, tels que Lambda, SNS et S3.

Création d'un groupe d'utilisateurs

La première étape de l'intégration d'un groupe d'utilisateurs dans votre application mobile consiste à créer un groupe d'utilisateurs Cognito. Cela nous donnera les valeurs de configuration nécessaires pour nous connecter à notre exemple d'application. Pour créer un nouveau groupe d'utilisateurs, parcourez l'assistant fourni dans la console Cognito d'Amazon.

Passons en revue le processus de création d'un groupe d'utilisateurs. Je dois vous avertir que c'est un long processus. À bien des égards, c'est une bonne chose car cela montre des zones de flexibilité. Cependant, vous aurez envie de prendre une tasse de café et de vous attacher pour celui-ci.

1. Nom

La première étape de la création d'un groupe d'utilisateurs consiste à définir un nom pour votre groupe d'utilisateurs et à sélectionner l'approche que vous adopterez pour créer le groupe d'utilisateurs. Vous pouvez soit revoir les valeurs par défaut, soit « parcourir » les paramètres. Parce que nous voulons avoir une bonne connaissance pratique de la configuration du groupe d'utilisateurs, choisissez l'option "Parcourir les paramètres".

Étape 1 de la création d'un groupe d'utilisateurs
L'étape initiale de la création d'un groupe d'utilisateurs (Voir la grande version)

2. Attributs

La configuration des attributs nécessitera un peu de réflexion. Pour chaque groupe d'utilisateurs, vous devrez déterminer quels attributs seront stockés dans le système et lesquels sont requis. Étant donné que le système appliquera les valeurs requises, vous ne pouvez pas modifier cela ultérieurement. La meilleure approche ici consiste à ne marquer ici que les valeurs vraiment essentielles, selon les besoins. De plus, si vous souhaitez que les utilisateurs puissent se connecter avec leur adresse e-mail, assurez-vous de marquer celle-ci comme alias.

Si vous souhaitez inclure des valeurs personnalisées, vous devrez également le faire ici. Chaque valeur personnalisée aura un type, des règles de validation facultatives et une option pour être modifiable (modifiable) ou non modifiable (inchangeable). Il existe une limite stricte de 25 attributs personnalisés.

Enfin, un point doit être fait ici sur les noms d'utilisateur. La valeur du nom d'utilisateur pour chaque utilisateur est immuable (inchangeable). Cela signifie que, dans la plupart des cas, faire en sorte que cette valeur soit générée automatiquement aurait du sens. C'est pourquoi la valeur "nom d'utilisateur préféré" existe. Si vous souhaitez que les utilisateurs aient une valeur de nom d'utilisateur qu'ils peuvent modifier, marquez simplement l'attribut "nom d'utilisateur préféré" comme alias. Si vous souhaitez que les utilisateurs se connectent simplement avec leur adresse e-mail, assurez-vous de marquer l'attribut "email" comme obligatoire et comme alias.

Pour notre application de démonstration, j'ai choisi de rendre "email", "prénom" et "nom de famille" obligatoires.

Étape 2 de la création d'un groupe d'utilisateurs
Configuration des attributs utilisateur pour le groupe d'utilisateurs (Afficher la grande version)

3. Politiques

Après avoir configuré les attributs, vous pourrez configurer les politiques du compte. La première politique à configurer est la politique de mot de passe. La stratégie vous permet de configurer à la fois la longueur et si vous avez besoin de chiffres, de caractères spéciaux, de lettres majuscules ou minuscules. Cette politique sera appliquée à la fois aux mots de passe saisis par les utilisateurs et aux mots de passe que les administrateurs attribuent aux utilisateurs.

Les politiques suivantes concernent l'inscription des utilisateurs. Pour une application publique, vous souhaiterez probablement autoriser les utilisateurs à s'inscrire eux-mêmes. Cependant, selon le type d'application, vous souhaiterez peut-être restreindre l'inscription et faire en sorte que le système soit uniquement sur invitation. De plus, vous devrez configurer la rapidité avec laquelle ces invitations expireront si elles ne sont pas utilisées.

Pour notre application de démonstration, j'ai choisi d'utiliser uniquement les valeurs par défaut, à l'exception du fait que je ne souhaite pas que les utilisateurs puissent s'inscrire par eux-mêmes. Avec ces valeurs en place, nous pouvons procéder à des vérifications.

Étape 3 de la création d'un groupe d'utilisateurs
Configuration des politiques pour le groupe d'utilisateurs (Afficher la grande version)

4. Vérifications

L'étape de vérifications vous permet de mettre en place une authentification multi-facteurs, ainsi qu'une vérification par e-mail et par téléphone. Bien que cette fonctionnalité soit relativement facile à configurer dans la console, notez que vous devrez demander une augmentation des dépenses pour AWS SNS si vous souhaitez vérifier les numéros de téléphone ou utiliser l'authentification multifacteur.

Pour notre application de démonstration, j'ai choisi d'utiliser uniquement les valeurs par défaut.

Étape 4 de la création d'un groupe d'utilisateurs
Configuration des vérifications pour le groupe d'utilisateurs (Afficher la grande version)

5. Personnalisations des messages

Cette étape vous permet de personnaliser les e-mails et SMS que votre groupe d'utilisateurs enverra, ainsi que les adresses e-mail "de" et "répondre à". Aux fins de notre application de démonstration, je vais laisser les valeurs par défaut ici et continuer.

Étape 5 de la création d'un groupe d'utilisateurs
Configuration des messages de cycle de vie pour le groupe d'utilisateurs (Afficher la grande version)

6. Balises

Si vous débutez avec AWS, vous n'aurez peut-être pas besoin de spécifier de balises. Toutefois, si votre organisation utilise régulièrement AWS, les balises permettent d'analyser les dépenses et d'attribuer des autorisations avec IAM. Par exemple, certaines organisations spécifient des tags par environnement (développement, staging, production) et par projet.

Peu importe ce que vous entrez dans cette étape, cela n'affectera pas notre application de démonstration.

Étape 6 de la création d'un groupe d'utilisateurs
Ajout de balises pour le groupe d'utilisateurs (Voir la grande version)

7. Appareils

L'étape suivante vous permet de définir si le groupe d'utilisateurs se souviendra des appareils de votre utilisateur. Il s'agit d'une étape de sécurité supplémentaire qui vous permet de voir avec quels appareils un compte spécifique a été connecté. Cela a une valeur supplémentaire lorsque vous utilisez l'authentification multifacteur (MFA). Si l'appareil est mémorisé, vous pouvez choisir de ne pas exiger de jeton MFA à chaque connexion.

Aux fins de l'application de démonstration, j'ai choisi de définir la valeur sur "Toujours".

Étape 7 de la création d'un groupe d'utilisateurs
Configuration de la gestion des appareils pour le groupe d'utilisateurs (Afficher la grande version)

8. Clients d'application

Pour chaque application pour laquelle vous souhaitez utiliser le groupe d'utilisateurs (telle qu'une application iOS, une application Web, une application Android, etc.), vous devez créer une application. Cependant, vous pouvez revenir et les créer après la création du groupe d'utilisateurs, il n'est donc pas nécessaire d'ajouter tout cela pour l'instant.

Chaque application a plusieurs valeurs que vous pouvez configurer. Pour cette application de démonstration, nous donnerons un nom à l'application, puis laisserons les valeurs par défaut. Ensuite, vous pouvez configurer les attributs utilisateur que chaque application peut lire et écrire.

Étape 8 de la création d'un groupe d'utilisateurs
Configuration des applications clientes pour le groupe d'utilisateurs (Afficher la grande version)

Vous pouvez définir les valeurs de votre choix à cette étape, tant que l'adresse e-mail, le nom de famille et le prénom sont tous lisibles et inscriptibles par l'application. Assurez-vous de cliquer sur l'option "Créer un client d'application" avant de continuer.

9. Déclencheurs

Avec les déclencheurs, vous pouvez utiliser les fonctions Lambda pour personnaliser entièrement le processus du cycle de vie de l'utilisateur. Par exemple, si vous souhaitez que seuls les utilisateurs disposant d'une adresse e-mail du domaine de votre entreprise puissent s'inscrire, vous pouvez ajouter une fonction Lambda pour le déclencheur « Pré-inscription » afin d'effectuer cette validation et de rejeter toute demande d'inscription qui ne passe pas.

Pour notre application de démonstration, je n'ajouterai aucun déclencheur.

Étape 9 de la création d'un groupe d'utilisateurs
Configuration des déclencheurs pour le groupe d'utilisateurs (Afficher la grande version)

10. Révision

Je me rends compte que cela aurait pu sembler un processus long et ardu. Mais gardez à l'esprit que chaque étape de la création d'un groupe d'utilisateurs offre une flexibilité qui permet à la solution de s'adapter à davantage de cas d'utilisation. Et maintenant, pour les nouvelles que vous attendiez : c'est la dernière étape.

Vérifiez simplement les paramètres pour vous assurer que vous les avez correctement configurés pour l'application de démonstration. À partir de cet écran, vous pouvez revenir en arrière et modifier n'importe lequel des paramètres précédents. Une fois le groupe d'utilisateurs créé, certaines valeurs de configuration (telles que les attributs obligatoires) ne peuvent pas être modifiées.

Une fois votre nouveau groupe d'utilisateurs créé, vous pouvez maintenant procéder à leur intégration dans un exemple d'application iOS à l'aide du kit AWS SDK pour iOS.

Étape 10 de la création d'un groupe d'utilisateurs
Examen final du pool d'utilisateurs avant la création (Voir la grande version)

Configuration de votre application iOS pour votre groupe d'utilisateurs

J'ai créé un exemple d'application iOS qui s'intègre à Cognito pour permettre à l'utilisateur de se connecter, de se déconnecter, d'entrer son prénom et son nom et de définir un mot de passe. Pour cette démo initiale, l'inscription des utilisateurs n'est pas incluse, j'ai donc utilisé la console de Cognito pour ajouter un nouvel utilisateur à tester.

Le code de cette application se trouve dans mon référentiel GitHub.

Configuration des dépendances

Cette application utilise CocoaPods pour gérer les dépendances. À ce stade, les seules dépendances sont les éléments spécifiques du kit SDK AWS iOS qui se rapportent aux groupes d'utilisateurs Cognito.

(Une description complète de CocoaPods dépasse le cadre de cet article, cependant, une ressource sur le site Web de CocoaPods vous aidera à être opérationnel, au cas où ce concept serait nouveau pour vous.)

Le contenu du Podfile pour cette application peut être vu ci-dessous :

 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

En supposant que CocoaPods est installé sur votre machine, vous pouvez simplement exécuter pod install et les dépendances nécessaires seront installées pour vous.

Configuration du groupe d'utilisateurs

L'étape suivante consiste à inclure les valeurs de votre groupe d'utilisateurs et de votre application cliente. L'application de démonstration est configurée pour utiliser un fichier, CognitoApplication/CognitoConfig.plist , à partir duquel extraire ces informations. Quatre valeurs doivent être définies :

  • region (chaîne)
    Il s'agit de la région dans laquelle vous avez créé votre groupe d'utilisateurs. Il doit s'agir de l'identifiant de région standard, tel que us-east-1 ou ap-southeast-1 .
  • poolId (chaîne)
    Il s'agit de l'ID du groupe d'utilisateurs que vous avez créé.
  • clientId (chaîne)
    Il s'agit du clientId configuré dans le cadre de l'application que vous avez attachée au groupe d'utilisateurs.
  • clientSecret (chaîne)
    Il s'agit du clientSecret qui est configuré dans le cadre de l'application que vous avez attachée au groupe d'utilisateurs.

Avec ce fichier et les valeurs appropriées en place, l'application de démonstration peut être lancée. Si des exceptions se produisent lors du lancement, assurez-vous que vous avez inclus chacune des quatre valeurs indiquées ci-dessous et que le fichier est placé dans le bon répertoire.

Configuration de plist dans Xcode
Configuration du groupe d'utilisateurs dans Xcode avec le fichier plist (Voir la grande version)

Intégration du délégué d'application

Le cœur de l'intégration avec Amazon Cognito se produit au sein de l' AppDelegate de l'application. Notre première étape consiste à nous assurer que nous avons configuré la journalisation et que nous nous sommes connectés à notre groupe d'utilisateurs. Dans le cadre de ce processus, nous attribuerons notre AppDelegate en tant que délégué du groupe d'utilisateurs. Pour cet exemple de base, nous pouvons conserver cette logique dans AppDelegate . Pour les projets plus importants, il peut être judicieux de gérer cela ailleurs.

 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 }

Une fois cette configuration en place, nous devons configurer les méthodes déléguées pour le groupe d'utilisateurs. Le protocole que nous implémentons est AWSCognitoIdentityInteractiveAuthenticationDelegate . Ce délégué sera appelé chaque fois que l'utilisateur devra se connecter, réinitialiser son mot de passe ou fournir un code d'authentification multifacteur ou si nous devons demander à l'utilisateur s'il souhaite que son appareil soit mémorisé. Pour notre exemple, nous avons seulement besoin d'implémenter les startPasswordAuthentication et 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! } }

Une chose clé à noter est que ces deux méthodes renvoient un contrôleur de vue qui implémente un protocole spécifique. Par exemple, le LoginViewController implémente AWSCognitoIdentityPasswordAuthentication , qui a une seule méthode qui est appelée avec les paramètres nécessaires pour permettre à l'utilisateur de terminer le processus de connexion.

Flux d'authentification

Avec toutes ces pièces en place dans l'application de démonstration, vous pouvez maintenant voir le processus de connexion fonctionner du début à la fin. La vue principale de l'application affiche le nom d'utilisateur ainsi que le prénom et le nom de l'utilisateur. Pour que cela se produise, les étapes suivantes se produisent :

  1. Dans AppViewController , nous appelons la méthode fetchUserAttributes dans la méthode viewDidLoad . Si l'utilisateur n'est pas connecté, cela déclenchera le processus de connexion.
  2. La méthode startPasswordAuthentication dans AppDelegate sera déclenchée. Cette méthode charge le LoginViewController et le présente.
  3. La méthode getDetails de LoginViewController est appelée par le kit SDK AWS. Cela inclut un objet qui est une instance de AWSTaskCompletionSource , que nous pouvons utiliser pour permettre à l'utilisateur de tenter de se connecter.
  4. Lorsque l'utilisateur appuie sur le bouton "Connexion", nous transmettons les informations d'identification de connexion à cet objet. Cela appellera alors la méthode didCompleteStepWithError et nous pourrons gérer le résultat en conséquence. S'il n'y a pas d'erreur, nous pouvons rejeter le contrôleur de vue.
  5. Si nous avons créé l'utilisateur dans la console, nous aurons une autre étape à gérer ici. Étant donné que nous avons donné à l'utilisateur un mot de passe temporaire, il devra en définir un plus permanent. De plus, étant donné que nous définissons le prénom et le nom de famille comme paramètres obligatoires, nous devons également autoriser l'utilisateur à les saisir. Le kit SDK AWS le détectera et appellera la méthode startNewPasswordRequired dans AppDelegate . Cela présentera le ResetPasswordViewController et définira son instance de AWSTaskCompletionSource .
  6. Le ResetPasswordViewController fonctionne presque de la même manière que le LoginViewController . Nous devons simplement demander à l'utilisateur les valeurs correctes, puis soumettre ces valeurs. Une fois ce processus terminé avec succès, nous fermons le contrôleur de vue.
  7. Une fois l'ensemble du processus de connexion terminé, le SDK stockera en toute sécurité les jetons renvoyés par Cognito. Ensuite, nous allons enfin récupérer les détails de l'utilisateur, et nous pouvons les utiliser pour remplir l' AppViewController avec le nom d'utilisateur, le prénom et le nom de famille.

L'application de travail avec l'authentification fonctionne
L'exemple d'application de travail, montrant le nom d'utilisateur et les métadonnées

Conclusion

Bien que le processus de configuration du groupe d'utilisateurs puisse comporter plusieurs étapes, ces étapes sont faciles à parcourir. De plus, le nombre de configurations possibles devrait vous donner l'assurance qu'il peut prendre en charge la majorité des cas d'utilisation. Dans mon travail quotidien chez Universal Mind, j'ai travaillé avec plusieurs clients qui déplacent leurs applications existantes pour tirer parti des fonctionnalités fournies par Cognito pour la gestion des utilisateurs.

Que vous ayez besoin ou non de mettre en place régulièrement un système de gestion des utilisateurs, il s'agit d'un outil que tout développeur mobile et web devrait avoir dans sa boîte à outils . Dans le prochain article de cette série, nous commencerons à explorer un peu plus les capacités de Cognito en implémentant une application de démonstration plus complète qui implémente davantage de cas d'utilisation courants de gestion des utilisateurs.

Avec un peu de pratique, vous pouvez aller impressionner tous vos amis en mettant en place une nouvelle application qui satisfait tous ces cas d'utilisation de gestion des utilisateurs en une journée. C'est plutôt bien pour une journée de travail.

Liens et ressources

  • Amazon Cognito
  • « Ressources pour les développeurs », Amazon Cognito
  • Kit de développement logiciel AWS Mobile
  • "Tutoriel CocoaPods pour Swift : Premiers pas", Joshua Greene, raywenderlich.com