J'ai eu le même problème que vous décrivez. Le site web que je suis en train de construire peut être accessible à partir d'un téléphone mobile et à partir du navigateur, donc j'ai besoin d'une api pour permettre aux utilisateurs d'inscription, connexion et faire quelques tâches spécifiques. Cette api sera utilisé à partir d'un reste de serveur (téléphone mobile access) et à partir du navigateur. En outre, j'ai besoin de prendre en charge l'évolutivité, le même code en cours d'exécution sur les différents procédés/machines.
Parce que les utilisateurs peuvent CRÉER des ressources (aka POST/PUT actions), vous devez sécuriser votre api. Vous pouvez utiliser oauth ou vous pouvez créer votre propre solution, mais gardez à l'esprit que toutes les solutions peut être rompu si le mot de passe il est vraiment facile à découvrir. L'idée de base est d'authentifier les utilisateurs en utilisant le nom d'utilisateur, mot de passe et un jeton, alias le apitoken. Cette apitoken peut être généré à l'aide de nœud-uuid et le mot de passe peut être haché à l'aide de pbkdf2
Ensuite, vous devez enregistrer la session quelque part. Si vous l'enregistrez dans la mémoire d'un objet ordinaire, si vous tuez le serveur et de le redémarrer à nouveau, la session sera détruite. Aussi, ce n'est pas évolutif. Si vous utilisez haproxy pour équilibrer la charge entre les machines ou tout simplement si vous utilisez des travailleurs, cet état de session seront stockées dans un seul processus, de sorte que si le même utilisateur est redirigé vers un autre processus/de la machine, il aura besoin de s'authentifier à nouveau. Par conséquent, vous avez besoin de stocker la session dans un endroit commun. Ceci est généralement réalisé à l'aide de redis.
Lorsque l'utilisateur est authentifié (nom d'utilisateur+mot de passe+apitoken) générer un autre jeton pour la session, aka accesstoken. Encore une fois, avec nœud-uuid. Envoyer à l'utilisateur la accesstoken et le nom d'utilisateur. Le nom d'utilisateur (clé) et le accesstoken (valeur) sont stockés dans le redis avec et la date d'expiration, par exemple 1h.
Maintenant, chaque fois que l'utilisateur n'a aucune opération à l'aide de l'api rest, il faudra envoyer le nom d'utilisateur et le accesstoken.
Si vous autorisez les utilisateurs à l'inscription à l'aide de l'api rest, vous aurez besoin de créer un compte admin avec un admin apitoken et de les stocker dans l'application mobile (crypter nom d'utilisateur+mot de passe+apitoken) parce que les nouveaux utilisateurs ne disposent pas d'un apitoken quand ils s'inscrivent.
Le web utilise également cette api, mais vous n'avez pas besoin d'utiliser apitokens. Vous pouvez utiliser express avec un redis stocker ou d'utiliser la même technique décrite ci-dessus, mais en contournant le apitoken vérifier et retourner à l'utilisateur le nom d'utilisateur+accesstoken dans un cookie.
Si vous avez des zones privées de comparer le nom d'utilisateur avec les utilisateurs autorisés lors de l'authentification. Vous pouvez également appliquer des rôles aux utilisateurs.
Résumé: