IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Authentification personnalisée et anonyme [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Points : 677
    Points
    677
    Par défaut Authentification personnalisée et anonyme
    Bonjour à tous,

    J'ai réalisé une authentification personnalisée via le cookbook de Symfony
    -> http://symfony.com/fr/doc/current/co..._provider.html

    ça fonctionne correctement.

    Je souhaites que la racine du site soit accessible de tout le monde, ainsi que des utilisateurs connectés.

    J'ai ajouté l'option anonymous: true dans mon firewall mais il persiste à vouloir que l'utilisateur soit authentifié via l'authentification perso.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    security:
        firewalls:       
            secured_area:
                pattern:    ^/
                anonymous: true
                vnfcas: ~
     
     
     
        providers:
     
            users:
                entity: { class: AcmeBundle:User}
     
     
     
        access_control:
            - { path: ^/, roles: [ROLE_ADMIN, IS_AUTHENTICATED_ANONYMOUSLY,ROLE_ALLOWED_TO_SWITCH] }
     
     
     
        encoders:
            Symfony\Component\Security\Core\User\User: plaintext
    Pareil le firewall allowed_to_switch ne fonctionne pas.

    Je vous remercie par avance de votre aide.

  2. #2
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Points : 677
    Points
    677
    Par défaut
    Bonsoir,

    Je vois que je n'ai pas inspiré grand monde avec ma question.

    J'ai avancé sur le sujet mais je n'ai toujours pas la réponse.

    J'ai rajouté dans les listeners anonymous et switchuser des petits echos ainsi que dans mon listener perso.

    Et donc je constate le pourquoi anonymous et switch user ne fonctionne pas car il passe derrière mon listener perso.

    Est ce que quelqu'un sait comment modifier la priorité des listeners des firewalls ?

    J'ai essayé le tag priority="-255" dans la définition de mon listener perso mais ça n'a rien changé.

    Je vous remercie par avance.

  3. #3
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Points : 677
    Points
    677
    Par défaut
    Bonjour,

    Un petit up en haut du fil de discussion, au cas quelqu'un aurait une idée

  4. #4
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Points : 677
    Points
    677
    Par défaut
    En lisant, les conditions d'utilisation, j'ai compris que si il n'y avait pas de réponse, c'est que la question était mal posée.

    Donc, je ne suis pas resté les bras croisés et ai continué à chercher.

    C'est dans la factory que l'on indique le momment ou le listener intervient.

    la méthode getPosition, qui doit être de type pre_auth, form, http et remember_me et qui définit le moment auquel le fournisseur est appelé ;

    Quelle est la position des listeners anonymous et switch_user ?

    Pour ma factory, j'ai essayé les 3 possibilités et quelque soit l'option, elle est toujours appelé avant anonymous et switch_user

    Une idée ?

  5. #5
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour,
    je ne savais pas que l'on pouvait passer des tableaux de roles dans les access_control.
    A mon avis c'est généralement inutile, on va plutôt utiliser la hierarchie des roles pour ce genre de choses (un utilisateur ROLE_ADMIN n'a pas moins de droit qu'un utilisateur IS_AUTHENTICATED_ANONYMOUSLY).

    access_control:
    - { path: ^/, roles: [ROLE_ADMIN, IS_AUTHENTICATED_ANONYMOUSLY,ROLE_ALLOWED_TO_SWITCH] }
    on dirait que cette config n'autorise que les utilisateurs ayant le role IS_AUTHENTICATED_ANONYMOUSLY et ROLE_ADMIN et ROLE_ALLOWED_TO_SWITCH

    Ta config devrait plutôt ressember à cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    security:
        firewalls:
            secured_area:
                # ...
                switch_user: true #on active le système du ROLE_ALLOWED_TO_SWITCH cf http://symfony.com/doc/2.0/book/security.html#impersonating-a-user
    #...
        access_control:
            - { path: ^/, role: IS_AUTHENTICATED_ANONYMOUSLY} # tout le monde
            - { path: ^/private, role: ROLE_USER}  # uniquement les utilisateurs connectés (consultation du compte, etc..)
            - { path: ^/admin/, role: ROLE_ADMIN} #uniquement pour l'admin
            # etc...
    #....
        role_hierarchy:
            ROLE_ADMIN: [ROLE_USER, ROLE_ALLOWED_TO_SWITCH] #le ROLE_ADMIN a également le ROLE_ALLOW_TO_SWITCH
    #...

  6. #6
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Points : 677
    Points
    677
    Par défaut
    Merci, pour la mise à plat de la configuration.

    Un petit rappel est toujours utile.

    Toutefois, dès que j'active mon authentification provider je passe par lui. Donc pas d'anonymous ni de switch User

    Si ça peux aider dans la compréhension, quand je vais un switch_user en mode dev, (j'ai activé la directive intercept_redirects: true ) je vois bien dans la redirection que l'utilisateur connecté est celui demandé mais dès quela je clique sur le lien rediriger -> je me retrouve en tant que moi.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    pour ma part lorsque je fais une requete du type mon/url/?_switch_user=toto sur une appli avec FOSUserBundle,
    je peux voir ça dans les logs de la requete (pas celle qui s'affiche au final, mais la précédente qui fait un redirectResponse):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Notified event "kernel.request" to listener "Symfony\Component\HttpKernel\EventListener\ProfilerListener::onKernelRequest".
    Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener::onEarlyKernelRequest".
    Notified event "kernel.request" to listener "Symfony\Bundle\FrameworkBundle\EventListener\SessionListener::onKernelRequest".
    Notified event "kernel.request" to listener "Symfony\Component\Security\Http\Firewall::onKernelRequest".
    Read SecurityContext from the session
    Reloading user from user provider.
    SELECT * FROM usr_user u0_ WHERE u0_.username_canonical = ? (["admin"])
    Username "admin" was reloaded from user provider.
    Attempt to switch to user "toto"
    SELECT FROM usr_user u0_ WHERE u0_.username_canonical = ? (["toto"]) 
    Listener "Symfony\Component\Security\Http\Firewall::onKernelRequest" stopped propagation of the event "kernel.request". 
    Listener "Symfony\Bundle\FrameworkBundle\EventListener\RouterListener" was not called for event "kernel.request".
    Listener "Symfony\Bundle\AsseticBundle\EventListener\RequestListener" was not called for event "kernel.request". 
    Notified event "kernel.response" to listener "Symfony\Component\Security\Http\Firewall\ContextListener::onKernelResponse".
    Write SecurityContext in the session 
    ........

  8. #8
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Points : 677
    Points
    677
    Par défaut
    Bonsoir,
    Pas eu le temps de comparer tes logs et les miens, mais j'ai fait un petit test, pour voir quel est l'ordre des listeners et donc c'est mon listener qui passe en premier donc comme il passe en premier, l'authentification anonymous ne passe pas.

  9. #9
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Points : 677
    Points
    677
    Par défaut
    Bonsoir,

    Ce que je soupçonnais sans me l'avouer, était que mon listener était mal foutu. Effectivement, j'ai pris un bout du début du listener de l'anonymous qui dit en français si le token NULL !== $token alors tu sort.

    Avec cette ligne supplémentaire le switch_user fonctionne. Et je comprends pourquoi.

    Maintenant, il faut que je dises dans mon listener perso, si les droits pour cet request sont IS_ANONISMOUSLY Alors tu sort.

    Je vais regarder dans le securitycontext, si l'information est disponible.

    Ce n'est pas dans le securitycontext.

    Est ce qu'il existe une méthode pour connaitre le role demander pour la request en cours ?

  10. #10
    Membre éclairé
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2011
    Messages
    477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Août 2011
    Messages : 477
    Points : 677
    Points
    677
    Par défaut
    Après avoir relu tous les listeners qui sont dans le framework, j'ai mieux compris la philosophie.

    Pour que le securitycontext prenne la valeur d'un anonymousToken, il faut qu'aucun listener aye fourni un Token.

    Je vais donc revoir ma copie de mon listener et le faire étendre une classe abstraire sur lequel est basé le login form.

    Merci pour l'aide

  11. #11
    Membre du Club
    Homme Profil pro
    Consultant technico-fonctionnel
    Inscrit en
    Juin 2012
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant technico-fonctionnel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2012
    Messages : 55
    Points : 48
    Points
    48
    Par défaut
    Salut excuse moi, au debut de la discussion tu dis avoir réussi a faire un fournisseur d'authentification personnalisé, peut tu regarder pour m'aider a ce sujet :

    ma discussion
    merci d'avance
    Choco7

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/09/2010, 12h05
  2. Réponses: 1
    Dernier message: 02/08/2010, 15h24
  3. Réponses: 1
    Dernier message: 25/01/2006, 21h44
  4. Hook et Authentification personnalisée
    Par Jeweller dans le forum XMLRAD
    Réponses: 8
    Dernier message: 20/12/2004, 12h30
  5. XMLC_PopupCalendar - authentification personnalisée
    Par Jeweller dans le forum XMLRAD
    Réponses: 10
    Dernier message: 10/12/2004, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo