|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : juin 2011 Messages : 9 ![]() |
Bonjour,
J'ai réalisé une petite application pour me faire la main sur symfony après avoir lu "Practical symfony" et je bloque depuis un moment sur le problème suivant. Après avoir travaillé sur les fonctionnalités, j'ai intégré la gestion des utilisateurs, l'authentification et la gestion des droits avec le plugin sfDoctrineGuardPlugin (V1.0.4). Jusque là tout va bien. Mais j'ai besoin d'utiliser un CAS pour gérer l'authentification. J'ai récupéré sur le web une classe qui permet cette authentification (https://wiki.jasig.org/display/CASC/Symfony+CAS+Client). Depuis, je peux toujours m'authentifier et accéder à l'application mais plus aucun de mes formulaires ne fonctionne : "csrf token: CSRF attack detected." J'ai donc comparé mes formulaires selon que je m'authentifie avec le plugin Symfony ou par le CAS. Dans les 2 cas le jeton _csrf_token est présent. Seule différence remarquée... Avec le CAS, mon jeton est toujours différent d'un formulaire à un autre. Sans le CAS, mon jeton est toujours le même. Le problème vient sans doute de là mais je ne connais pas bien le fonctionnement de la protection CSRF et je ne sais pas comment corriger ce problème. J'espère que vous pourrez m'aiguiller pour corriger ce problème Merci Le code de la classe d'authentification par le CAS. /lib/sfCASRequiredFilter.class.php Code :
Code :
|
||||
|
|
00
|
|
|
#2 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
L'idée en CSRF est qu'il y a, dans chaque formulaire, génération d'un jeton pour l'utilisateur, ce qui permet de vérifier que l'utilisateur est bien le même qui répond que celui qui a reçu le form, ce qui permet d'éviter de nombreuse attaques.
De tête, le jeton est stocké dans la session utilisateur. A priori, ton système d'authentification perturbe le fonctionnement normal de la classe myUser (dans lib de l'application). Cherches de ce côté là.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 9 ![]() |
Merci pour la réponse.
Je n'ai toujours pas résolu le problème mais j'ai découvert pourquoi mon jeton change a chaque formulaire. Le jeton est généré avec l'identifiant de session et c'est cet identifiant de session qui change à chaque fois. Reste à voir pourquoi ma session n'est pas conservée et comment y remédier. (je vais sans doute continuer ma fouille de la classe myUser demain) |
|
|
00
|
|
|
#4 |
![]() ![]() Michel RottaResponsable d'exploitation informatique Inscription : septembre 2005 Messages : 4 913 ![]() |
Comme dirait Firefox "Hum, c'est embarrassant !"
J'ai un peu l'impression que ton authentification se refait à chaque appel de page. Autre inconvénient, si tu changes systématiquement de session, tu n'as plus la persistance des données user d'une session à l'autre, ce qui va compliquer le fonctionnement de symphony.
__________________
Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : juin 2011 Messages : 9 ![]() |
Retour sur bug à tête reposée. Et erreur de débutant !
Et comme le ridicule ne tue pas, je poste pour clore cette discussion. L'identifiant de session change à chaque page, et pour cause... la ligne $this->getContext()->getUser()->setAuthenticated(true); est appelée à chaque fois. Il suffisait donc de modifier le test qui s'applique à cette partie du code. Merci pour ta réponse et pour les nombreuse autres du forum qui m'ont bien aidées! (on a posté en meme temps) |
|
|
00
|
|
|
#6 | |||||||||
|
Membre à l'essai
![]() Étudiant Inscription : mai 2010 Messages : 39 ![]() |
Citation:
je sais bien que cette discussion remonte à longtemps, mais il se trouve que je cherche a faire la même chose que toi, j'ai récupérer la classe sfCASRequiredFilter sur internet et j'essaye de la modifier de façon à faire la liaison entre l'utilisateur authentifié et celui présent dans ma base de données, j'ai essayé plein de truc mais ça marche pas, j'essaye de faire comme toi, mais ça plante à ce niveau : Code :
Code :
|
|||||||||
|
|
00
|
|
|
#7 |
|
Membre chevronné
![]() |
Tu es un peu vague, qu'est ce qui marche pas.
Quel est l'erreur que tu as ? PS : Tu aurais dût créer un nouveau topic et mettre celui-ci en lien car il est résolu, il y a des chances que peux de personne n'y prête attention. |
|
|
00
|
|
|
#8 |
|
Membre à l'essai
![]() Étudiant Inscription : mai 2010 Messages : 39 ![]() |
l'erreur est la suivante :
Code :
Call to undefined method myUser::signIn.
|
|
|
00
|
|
|
#9 | |
|
Membre à l'essai
![]() Étudiant Inscription : mai 2010 Messages : 39 ![]() |
Citation:
|
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com