JeuWeb - Crée ton jeu par navigateur
Authentification persistante - Comment faîtes-vous ? - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Authentification persistante - Comment faîtes-vous ? (/showthread.php?tid=2960)



Authentification persistante - Comment faîtes-vous ? - Sephi-Chan - 23-05-2011

Hello,

La question est simple : comment faites-vous pour garder l'utilisateur connecté toujours ?
Quelle session ou quel cookie créez-vous, etc.


Voilà ma solution :

Chaque utilisateur dispose d'un authentication token unique (très important) que je génère à la création du compte. Une fois le compte crée et à chaque fois que le joueur s'authentifie, je crée un cookie nommé authentication_token dans lequel je mets ledit token (ce cookie est marqué HttpOnly).

Ensuite, mon application expose une méthode current_user qui est disponible dans les contrôleurs et les vues (mais pas dans les modèles, ça n'aurait aucun sens) que voici :


def authentication_token
@authentication_token ||= cookies.includes?(:authentication_token) && cookies[:authentication_token]
end

def current_user
@current_user ||= authentication_token && User.find_by_authentication_token(authentication_token)
end

Son rôle est simple, elle vérifie que le cookie existe, si oui, elle cherche l'utilisateur qui possède ce token. Le résultat de la requête (un objet User ou nil) est mis en cache (juste pour la durée du script) dans une variable d'instance de mon contrôleur pour éviter d'avoir autant de fois la requête que d'appels à cette méthode.

Le petit bonus de cette technique : je peux déconnecter le joueur en changeant simplement son authentication token dans la base de données.


RE: Authentification persistante - Comment faîtes-vous ? - niahoo - 24-05-2011

Est-ce que ce n'est pas facilement usurpable ton truc ?


RE: Authentification persistante - Comment faîtes-vous ? - Sephi-Chan - 24-05-2011

Pas plus qu'un identifiant de session.
L'utilisation d'un cookie protégé contre l'accès par Javascript (grâce au HttpOnly) limite beaucoup les risques d'usurpation par failles XSS.

Et toi, comment tu fais ? Smile


RE: Authentification persistante - Comment faîtes-vous ? - niahoo - 24-05-2011

ah oui effectivement je ne m'étais pas attardé sur httponly. comment tu exprimes ce réglage, c'est un second header ?

sinon moi euuuh je ne sais pas en fait, c'est le framework qui gère ça. ! faudra que je regarde comment ils se débrouille oui.


RE: Authentification persistante - Comment faîtes-vous ? - Sephi-Chan - 24-05-2011

Avant j'utilisais des frameworks pour l'authentification (d'abord Authlogic, puis Devise), mais maintenant je fais ça plus simplement.

Pour le mode HttpOnly, ça se fait à l'écriture du cookie, qui a alors la tronche suivante (dans la requête HTTP) :


Set-Cookie: foo=bar; path=/; HttpOnly



RE: Authentification persistante - Comment faîtes-vous ? - niahoo - 24-05-2011

et bin j'avoue quene pas se soucier des inscriptions ni rien c'est quand même pratique


RE: Authentification persistante - Comment faîtes-vous ? - Sephi-Chan - 28-05-2011

J'ai mis la main sur deux articles qui traitent de cette question et la technique semble bonne.

Le premier est de Charles Miller et date de 2004 : Persistent Login Cookie Best Practice.
Le second est signé par Barry Jaspan et date de 2006 : Improved Persistent Login Cookie Best Practice. Il propose une amélioration du concept.

Les deux techniques partent du principe que les pages les plus sensibles nécessitent une véritable authentification. En ce qui me concerne, les pages sensibles sont celles de changement d'email et de mot de passe : dans les deux cas je demande le mot de passe actuel.