Gestion des utilisateurs avec AWS Cognito - (1/3) Configuration initiale

The Complete AWS Web Boilerplate - Tutoriel 1A

Table des matières principale Cliquez ici Partie A: Configuration initiale Partie B: Fonctionnalité de base Partie C: Dernières étapes pour devenir pleinement opérationnel

Téléchargez le Github ici.

introduction

La configuration de l'authentification des utilisateurs peut prendre des années, mais c'est une pierre angulaire essentielle de toute application de production. Il existe des options telles que AuthO et PassportJS, mais elles ont soit des courbes d'apprentissage difficiles, nécessitent une maintenance continue, soit sont vulnérables aux erreurs du programmeur car elles nécessitent une configuration automatique. Si seulement il y avait un service de gestion des utilisateurs pratique, personnalisable, sécurisé et hautement évolutif sur le cloud.

Présentation d'Amazon Cognito et des identités fédérées. Cognito est la solution AWS de gestion des profils utilisateur et les identités fédérées vous aident à suivre vos utilisateurs sur plusieurs connexions. Intégré à l'écosystème AWS, AWS Cognito ouvre un monde de possibilités pour le développement frontal avancé, car les rôles Cognito + IAM vous donnent un accès sécurisé sélectif à d'autres services AWS. Vous souhaitez autoriser l'accès au compartiment S3 uniquement à des utilisateurs connectés spécifiques? Connectez simplement une connexion Cognito avec un rôle IAM autorisé à accéder au bucket, et maintenant votre bucket est sécurisé! Mieux encore, le niveau gratuit vous donne 50000 utilisateurs actifs par mois, vous n'aurez donc pas à vous soucier de payer plus avant d'être prêt à exploser.

Ce passe-partout est une application Web React-Redux qui possède toutes les fonctionnalités d'AWS Cognito et des identités fédérées pré-intégrées. Utilisez ce passe-partout si vous avez une application que vous souhaitez développer avec un service d'authentification prêt pour la production dès le début. En effet, c'est un tableau de bord puissant pour votre prochaine grande idée.

Accédez à AWS Cognito sur la console AWS pour commencer!

Configuration initiale - Cognito

Nous allons configurer AWS Cognito, qui est un pool de connexion personnalisé (comme la connexion par e-mail). Cognito N'EST PAS un gestionnaire de connexion pour tout type de connexion (comme Facebook et Gmail), uniquement pour les connexions personnalisées.

Commençons par créer un pool d'utilisateurs en cliquant sur «Gérer vos pools d'utilisateurs». Un pool d'utilisateurs est un groupe d'utilisateurs qui remplissent la même désignation. Si vous faisiez un clone Uber, vous créeriez 2 groupes d'utilisateurs - un pour les conducteurs et un pour les coureurs. Pour l'instant, créons juste 1 nouveau pool d'utilisateurs appelé "App_Users". L'écran de configuration devrait ressembler à ceci:

Nous allons parcourir ce processus étape par étape, alors entrez le nom du pool de "App_Users" et cliquez sur "Parcourir les paramètres". L'étape suivante est «Attributs», où nous définissons les attributs que nos «App_Users» auront.

Nous, maintenant, nous voulons seulement avoir un email, un mot de passe et un «agentName». L'email est notre identifiant unique pour un utilisateur et le mot de passe est un champ obligatoire (c'est pourquoi vous ne le voyez pas dans la liste des attributs standard). Nous voulons que les utilisateurs puissent avoir un nom de code pour passer, alors configurons "agentName" est un attribut personnalisé. Nous n'utilisons «agentName» que pour montrer comment ajouter des attributs personnalisés. Faites défiler vers le bas et vous verrez l'option pour ajouter des attributs personnalisés.

À la date de rédaction de ce didacticiel, vous ne pouvez pas revenir en arrière et modifier les attributs personnalisés (même si AWS semble pouvoir le faire), alors assurez-vous de bien faire les choses la première fois! Si vous devez modifier les attributs, vous devrez créer un nouveau pool d'utilisateurs. Espérons qu'AWS résoudra bientôt ce problème. Quoi qu'il en soit, passez aux politiques de compte!

Nous pouvons donc voir ici que nos mots de passe peuvent être imposés pour exiger certains caractères. Il serait évidemment plus sûr d'exiger un mélange de différents types de caractères, mais les utilisateurs n'aiment souvent pas cela. Pour un terrain d'entente, il suffit d'exiger que le mot de passe comprenne plus de 8 caractères et inclue au moins 1 chiffre. Nous souhaitons également que les utilisateurs puissent s'inscrire eux-mêmes. Les autres parties ne sont pas si importantes, alors passons à l'étape suivante: les vérifications.

Cette partie est sympa, on peut facilement intégrer l'authentification multi-facteurs (MFA). Cela signifie que les utilisateurs doivent s'inscrire avec un e-mail ainsi qu'une autre forme d'authentification telle qu'un numéro de téléphone. Un code PIN serait envoyé à ce numéro de téléphone et l'utilisateur l'utiliserait pour vérifier son compte. Nous n'utiliserons pas MFA dans ce didacticiel, juste une vérification par e-mail. Réglez MFA sur «off» et cochez uniquement «Email» comme méthode de vérification. Nous pouvons laisser le «AppUsers-SMS-Role» (rôle IAM) qui a été rempli, car nous ne l'utiliserons pas mais pourrons l'utiliser à l'avenir. Cognito utilise ce rôle IAM pour être autorisé à envoyer des messages texte SMS utilisés dans MFA. Puisque nous n'utilisons pas MFA, nous pouvons passer à: Personnalisation des messages.

Lorsque les utilisateurs reçoivent leurs e-mails de vérification de compte, nous pouvons spécifier le contenu de cet e-mail. Ici, nous avons créé un e-mail personnalisé et placé par programme dans le code PIN de vérification représenté par {####}. Malheureusement, nous ne pouvons pas transmettre d'autres variables telles qu'un lien de vérification. Pour ce faire, nous devrons utiliser une combinaison d'AWS Lambda et d'AWS SES.

Faites défiler la page dans l'étape Personnalisations de message et nous pouvons ajouter nos propres adresses FROM et REPLY-TO par défaut. Pour ce faire, nous devons vérifier un e-mail dans AWS SES, ce qui est facile et très rapide à configurer. Dans un nouvel onglet, accédez à la page d'accueil de la console AWS en cliquant sur le cube orange en haut à gauche. Sur la page d'accueil de la console, recherchez SES (Simple Email Service). Cliquez pour accéder à la page SES, puis cliquez sur le lien Adresses e-mail dans le menu de gauche.

Cliquez ensuite sur «Vérifier une nouvelle adresse», puis saisissez l'adresse e-mail que vous souhaitez vérifier.

Connectez-vous maintenant à votre e-mail et ouvrez l'e-mail depuis AWS. Cliquez sur le lien dans l'e-mail pour vérifier et vous serez redirigé vers la page AWS SES. Vous avez vérifié un e-mail avec succès! C'était facile.

Maintenant que c'est fait, revenons à AWS Cognito et passons à: Balises.

Il n'est pas obligatoire d'ajouter des balises à un groupe d'utilisateurs, mais c'est certainement utile pour gérer de nombreux services AWS. Ajoutons simplement une balise pour 'AppName' et définissons-la sur une valeur de 'MyApp'. Nous pouvons maintenant passer à: Appareils.

Nous pouvons choisir de mémoriser les appareils de nos utilisateurs. Je sélectionne généralement «Toujours» car la mémorisation des appareils des utilisateurs est à la fois gratuite et ne nécessite aucun codage de notre part. Les informations sont également utiles, alors pourquoi pas? Étape suivante: Apps.

Nous voulons que certaines applications aient accès à notre pool d'utilisateurs. Ces applications ne sont présentes nulle part ailleurs sur l'écosystème AWS, ce qui signifie que lorsque nous créons une «application», il s'agit d'un identifiant uniquement Cognito. Les applications sont utiles car nous pouvons avoir plusieurs applications accédant au même pool d'utilisateurs (imaginez une application clone Uber et une application de test de conduite gratuite). Nous définirons le jeton d'actualisation sur 30 jours, ce qui signifie que chaque tentative de connexion renverra un jeton d'actualisation que nous pouvons utiliser pour l'authentification au lieu de nous connecter à chaque fois. Nous désactivons «Générer le secret du client» car nous avons l'intention de nous connecter à notre pool d'utilisateurs depuis le front-end au lieu du back-end (ergo, nous ne pouvons pas garder de secrets sur le front-end car ce n'est pas sécurisé). Cliquez sur «Créer une application», puis sur «Étape suivante» pour passer à: Déclencheurs.

Nous pouvons déclencher diverses actions dans l'authentification des utilisateurs et le flux de configuration. Rappelez-vous comment nous avons dit que nous pouvions créer des e-mails de vérification de compte plus complexes à l'aide d'AWS Lambda et d'AWS SES? C'est là que nous mettrions cela en place. Dans le cadre de ce didacticiel, nous n'utiliserons aucun déclencheur AWS Lambda. Passons à la dernière étape: la révision.

Nous passons ici en revue toutes les configurations d'installation que nous avons effectuées. Si vous êtes sûr de ces informations, cliquez sur «Créer un pool» et notre pool d'utilisateurs Cognito sera généré!

Prenez note de l'ID us-east-1_6i5p2Fwaodu pool dans l'onglet Détails du pool.

Et l'identifiant du client d'application 5jr0qvudipsikhk2n1ltcq684bdans l'onglet Applications. Nous aurons besoin de ces deux éléments dans notre application côté client.

Maintenant que Cognito est configuré, nous pouvons configurer des identités fédérées pour plusieurs fournisseurs de connexion. Dans ce didacticiel, nous ne couvrons pas les spécificités de la connexion FB car elle n'entre pas dans le cadre de cette série de didacticiels. Cependant, l'intégration de FB Login est super facile et nous montrerons comment cela se fait dans la section ci-dessous.

Configuration initiale - Identités fédérées

Ensuite, nous voulons configurer des «identités fédérées». Si nous avons une application qui autorise plusieurs fournisseurs de connexion (Amazon Cognito, Facebook, Gmail..etc) au même utilisateur, nous utiliserions les identités fédérées pour centraliser toutes ces connexions. Dans ce didacticiel, nous utiliserons à la fois notre connexion Amazon Cognito, ainsi qu'une connexion Facebook potentielle. Accédez à Identités fédérées et lancez le processus de création d'un nouveau pool d'identités. Donnez-lui un nom approprié.

Développez maintenant la section «Fournisseurs d'authentification» et vous verrez l'écran ci-dessous. Sous Cognito, nous allons ajouter le pool d'utilisateurs Cognito que nous venons de créer. Copiez et collez l'ID de groupe d'utilisateurs et l'ID de client d'application dont nous avons noté précédemment.

Et si nous voulions une connexion Facebook pour le même pool d'identité utilisateur, nous pouvons aller dans l'onglet Facebook et entrer simplement notre identifiant d'application Facebook. C'est tout ce qu'il y a à faire sur la console AWS!

Enregistrez le pool d'identité et vous serez redirigé vers l'écran ci-dessous où les rôles IAM sont créés pour représenter le pool d'identité fédéré. Le rôle IAM non authentifié est destiné aux utilisateurs non connectés et la version authentifiée est destinée aux utilisateurs connectés. Nous pouvons accorder à ces rôles IAM l'autorisation d'accéder à d'autres ressources AWS telles que les compartiments S3 et autres. C'est ainsi que nous améliorons la sécurité en intégrant notre application dans tout l'écosystème AWS. Continuez pour terminer la création de ce pool d'identités.

Vous devriez maintenant voir l'écran ci-dessous après avoir créé avec succès le pool d'identités. Il ne vous reste plus qu'à noter 1 chose qui est l'identifiant du pool d'identité (c'est-à-dire us-east-1:65bd1e7d-546c-4f8c-b1bc-9e3e571cfaa7) que nous utiliserons plus tard dans notre code. Génial!

Quittez tout et revenez à l'écran principal d'AWS Cognito. Si nous entrons dans la section Cognito ou dans la section Identités fédérées, nous voyons que nous avons les 2 pools nécessaires mis en place. AWS Cognito et AWS Federated Identities sont prêts à l'emploi!

C'est tout pour la mise en place! Avec ces 2 pools, nous pouvons intégrer le reste de notre code dans le service d'authentification complet d'Amazon et réaliser une gestion des utilisateurs de haut niveau. C'était beaucoup plus facile que OAuth + Passport.js personnalisé! Si vous aimez ce que vous avez vu jusqu'à présent, continuez à lire! N'oubliez pas qu'après avoir appris cela une fois, ce sera très facile à l'avenir, donc cela vaut vraiment la peine d'investir du temps. Rendez-vous dans la section suivante!

Table des matières principale Cliquez ici Partie A: Configuration initiale Partie B: Fonctionnalité de base Partie C: Dernières étapes pour une mise en œuvre complète Ces méthodes ont été partiellement utilisées dans le déploiement de renthero.ca