« Se souvenir de moi » Connectez-vous pour le site Web - Problème avec les différents navigateurs / ordinateurs

StackOverflow https://stackoverflow.com/questions/4203029

Question

Je suis en train de mettre en œuvre un « Remember Me » fonctionnalité de connexion pour un site ASP.NET MVC Je construis. Je suis en train d'utiliser cette approche http://jaspan.com/improved_persistent_login_cookie_best_practice (voir en haut près « Design Miller » ) et ont fonctionner à un degré.

Ainsi, le flux de travail est la suivante:

  1. les journaux de l'utilisateur dans et est émis une chaîne aléatoire sécurisé + leur ID de base de données comme un cookie persistant (qui dure environ 30 jours). chaîne sécurisée est stockée dans la base de données à côté de leur compte utilisateur enregistrement.
  2. L'utilisateur vient plus tard vers le site où le navigateur présente le cookie de connexion, l'ID et clé sécurisée est recherché dans la base de données et si correspondance est trouvée, l'utilisateur est authentifié automatiquement.
  3. Une fois authentifié une nouvelle clé sécurisée est générée, stockée dans la base de données et nouveau cookie émis.

J'ai ce fonctionne bien, cependant, il ne fonctionne pas très bien si l'utilisateur se connecte depuis plusieurs navigateurs ou ordinateurs. Il est évident que les différents navigateurs vont se retrouver avec une clé sécurisée différente stockée dans un cookie, ainsi le flux de travail devient:

  1. L'utilisateur se connecte depuis le navigateur A, est émis une clé sécurisée comme cookie clé est stockée dans la base de données.
  2. les journaux de l'utilisateur dans le navigateur de B, est émis une autre clé sécurisée comme cookie. Key est également stockée dans la base de données, mais écrase la clé générée à partir du navigateur A.
  3. site utilisateur visite du navigateur A nouveau, le navigateur présente cookies provenant de l'étape 1. mais elle ne correspond plus à cause clé de sécurité a été remplacé à l'étape 2. si l'utilisateur doit se connecter à nouveau. Une autre nouvelle clé est générée et la clé écrase émis au navigateur B.
  4. utilisateurs visites de navigateur B à nouveau, la clé ne correspond pas, doit se connecter à nouveau etc etc.

Comment puis-je résoudre ce problème? Ai-je besoin de stocker et de maintenir plusieurs clés dans la base de données? Est-ce que je vais même sur ce la bonne façon? Je l'ai remarqué StackOverflow semble gérer et me souvient de différents navigateurs et ordinateurs.

Était-ce utile?

La solution

À la lecture de l'article que vous LIÉ, il me semble que la conception de Miller est de stocker la chaîne aléatoire et le nom d'utilisateur comme une paire dans une autre table que la table utilisateur. En utilisant la chaîne aléatoire que l'index, vous pouvez avoir plusieurs connexions simultanées du même nom d'utilisateur tout en étant raisonnablement bien protégés contre le piratage de session.

Votre description indique que vous stockez la chaîne aléatoire dans la table utilisateur, ce qui ne permettrait une connexion au moment.

Autres conseils

Vous avez besoin d'un troisième élément dans votre cookie, un jeton « série ». Cela représentera un événement de connexion. Chaque fois que l'utilisateur se connecte dans votre système, il crée une nouvelle série, qui ne change pas jusqu'à ce qu'ils se déconnectent, ou connectez-vous à nouveau. Vous avez encore votre jeton, soit sécurisé Key, qui est mise à jour à chaque demande.

Voici quelques liens pour aider à cette mise en œuvre:

problèmes de base de données lorsque ins permettant de journaux persistants multiples navigateur

Le guide définitif pour former l'authentification basée site web

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top