MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Quelle est la meilleure façon d'authentifier et d'autoriser une solution web et API telle que MERN Stack ?

La meilleure stratégie d'autorisation dépend de la portée de vos applications à court ou à long terme.

Web monolithique ou simple avec connexion privée

Par exemple, si vous n'aurez qu'un simple site Web (MERN) avec un backend simple (api rest) ou une application monolithique comme celle-ci exemple mern avec une connexion interne ou privée dans votre organisation, votre stratégie d'autorisation pourrait être aussi simple que :

  • (1*) /login express route qui reçoit l'utilisateur/mot de passe, les valide dans la base de données et renvoie le jeton jwt classique et un tableau d'options (routes réactives) auxquelles l'utilisateur doit avoir accès
  • l'application Web (réagir) doit rendre les pages dont les itinéraires correspondent aux itinéraires reçus
  • l'application Web doit envoyer le jeton reçu à tout appel de point de terminaison de repos d'API
  • lorsque l'API reçoit l'invocation de React Web, doit valider l'existence du jeton en tant qu'en-tête. S'il n'existe pas, doit renvoyer une erreur 403.
  • (2*) Si un jeton existe, vous devez essayer de le valider (bien formé, non expiré, signature correcte, etc.).
  • (3*)S'il s'agit d'un jeton valide, vous devez effectuer une dernière validation :l'utilisateur avec le rôle "invité" est-il autorisé à exécuter un DELETE à un endpoint /user/100 .
  • (4*) La solution classique consiste à avoir des tables dans votre base de données comme :user, roles, user_roles, role_permission, permission_option. La table d'options doit avoir enregistré tous vos points de terminaison API et sa méthode. Cela pourrait également être utilisé pour créer la relation entre les routes Web de l'utilisateur <:>. Vérifiez ceci

Exigences modernes

Les grandes organisations modernes ont besoin :

  • Connexions aux réseaux sociaux
  • Utilisateurs internes/externes
  • Connexions non interactives (robots, planificateurs, etc.)
  • Plusieurs applications Web
  • Plusieurs applications mobiles
  • Beaucoup d'Api Rest

Dans ce cas, l'application MERN n'est pas un bon choix car elle est TOUT-EN-UN. La stratégie courante pour mettre en œuvre les exigences précédentes consiste à déployer plusieurs artefacts sur plusieurs serveurs :

  • application Web (react, vue, angular, linkstart, etc.)
  • apis rest (nodejs + expres, java, python, etc.)
  • authentification/autorisation :plate-forme/fournisseur oauth2, plates-formes d'identité/d'accès, etc.

Si tel est votre cas, vous devez diviser votre application MERN en plusieurs artefacts déployables :Web, API et sécurité.

Oauth2

Peu importe si vous vous souciez uniquement de la connexion ou de la façon d'assurer l'authentification et l'autorisation pour vos sites Web, apis et peut-être vos applications mobiles, vous aurez besoin de :OAUTH2

Vous pouvez développer votre propre plate-forme de sécurité en tenant compte de (1*), (2*), (3*) et (4*) ou utiliser quelque chose comme :

  • auth0
  • porte-clés, etc

Plus de détails ici :https://stackoverflow.com/a/62049409

Vos questions

  • quelle méthode pensez-vous être la meilleure ?
    • Je pense que si vous utilisez auth0, vous économiserez du temps et des efforts. Avec auth0, vous avez juste besoin d'une simple application express, avec quelques points de terminaison comme /login, /callback, etc. Ou si vous utilisez auth0 + passeport.js, ces points de terminaison sont gérés par passeport.js
    • Je vous conseille de revoir le fonctionnement du flux OAUTH2 avant d'utiliser auth0 avec/sans passeport. Ce lien m'a beaucoup aidé.
  • Quelle est la différence entre 2 et 3,
    • Comme je l'ai lu, auth0 et d'autres plates-formes offrent un service de gestion des utilisateurs ou peuvent se connecter à votre service d'utilisateurs (AD/LDAP, base de données, api, etc.). Alors
  • Existe-t-il un moyen de mettre en œuvre des règles dans le passeport (par exemple, rediriger les nouveaux utilisateurs lors de la première connexion)
    • Oui. Vous pouvez ajouter une logique lorsque le rappel est redirigé dans votre nodejs avec ou sans passeport.
  • Si j'implémente Passport avec MongoDB et que ma base de données compte des centaines d'utilisateurs, comment puis-je les gérer ?
    • Aujourd'hui, la base de données prend en charge un grand nombre de lignes. Donc, pour votre base de données de production, essayez de l'optimiser ou de la surveiller. Une autre option consiste à embaucher un administrateur de base de données pour effectuer ces tâches.

Références