J'ai eu le même problème que vous décrivez. Le site Web que je construis est accessible à partir d'un téléphone mobile et du navigateur, j'ai donc besoin d'une API pour permettre aux utilisateurs de s'inscrire, de se connecter et d'effectuer certaines tâches spécifiques. De plus, je dois prendre en charge l'évolutivité, le même code s'exécutant sur différents processus / machines.
Parce que les utilisateurs peuvent CRÉER des ressources (alias actions POST / PUT), 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 peuvent être cassées si le mot de passe est vraiment facile à découvrir. L'idée de base est d'authentifier les utilisateurs en utilisant le nom d'utilisateur, le mot de passe et un jeton, alias l'apitoken. Cet apitoken peut être généré en utilisant node-uuid et le mot de passe peut être haché en utilisant pbkdf2
Ensuite, vous devez enregistrer la session quelque part. Si vous l'enregistrez en mémoire dans un objet simple, si vous tuez le serveur et le redémarrez à nouveau, la session sera détruite. De plus, ce n'est pas évolutif. Si vous utilisez haproxy pour équilibrer la charge entre les machines ou si vous utilisez simplement des travailleurs, cet état de session sera stocké dans un seul processus, donc si le même utilisateur est redirigé vers un autre processus / machine, il devra s'authentifier à nouveau. Par conséquent, vous devez stocker la session dans un endroit commun. Cela se fait généralement à l'aide de redis.
Lorsque l'utilisateur est authentifié (nom d'utilisateur + mot de passe + apitoken), générez un autre jeton pour la session, alias accesstoken. Encore une fois, avec node-uuid. Envoyez à l'utilisateur l'accesstoken et l'ID utilisateur. L'ID utilisateur (clé) et le jeton d'accès (valeur) sont stockés dans redis avec et expirent le temps, par exemple 1h.
Maintenant, chaque fois que l'utilisateur effectue une opération à l'aide de l'API de repos, il devra envoyer l'ID utilisateur et le jeton d'accès.
Si vous autorisez les utilisateurs à s'inscrire à l'aide de l'API de repos, vous devrez créer un compte administrateur avec un apitoken administrateur et les stocker dans l'application mobile (crypter nom d'utilisateur + mot de passe + apitoken) car les nouveaux utilisateurs n'auront pas d'apitoken quand ils s'inscrivent.
Le Web utilise également cette API, mais vous n'avez pas besoin d'utiliser des apitokens. Vous pouvez utiliser express avec un magasin redis ou utiliser la même technique que celle décrite ci-dessus, mais en contournant le contrôle apitoken et en renvoyant à l'utilisateur l'identifiant utilisateur + accesstoken dans un cookie.
Si vous disposez d'espaces privés, comparez le nom d'utilisateur avec les utilisateurs autorisés lors de leur authentification. Vous pouvez également appliquer des rôles aux utilisateurs.
Résumé:

Une alternative sans apitoken serait d'utiliser HTTPS et d'envoyer le nom d'utilisateur et le mot de passe dans l'en-tête d'autorisation et de mettre en cache le nom d'utilisateur dans redis.