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 :

FOSOAuthServerbundle pas de User quand log en tant que client


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Points : 40
    Points
    40
    Par défaut FOSOAuthServerbundle pas de User quand log en tant que client
    Bonjour,

    Je suis en train de mettre en place des web services avec système d'authentification OAuth2 en utilisant les bundles FOSRestBundle et FOSOAuthServerBundle, dans l'optique d'être utilisés pour deux applications mobiles. Tout semble bien fonctionner mais j'ai un problème que je n'arrive pas à régler :

    Il y a deux types d'authentifications, une en tant que client et une en tant qu'utilisateur (grant type client_credentials et password). J'ai laissé les deux ouverts car certaines fonctions comme la vérification de version et la création d'un utilisateur doivent pouvoir se faire en étant authentifiés uniquement en tant que client, et d'autres comme la récupération des informations de profil de l'utilisateur actuellement connecté, qui nécessitent d'être identifié en tant qu'utilisateur.

    Ca fonctionne bien mais le problème c'est que l'on peut rentrer dans les fonctions utilisateurs en étant authentifié en tant que client.

    Un example concret :
    /api/check-version doit être accessible en tant que client et utilisateur
    /api/users quant à lui doit être accessible uniquement s'il y a un utilisateur d'authentifié
    Or lorsqu'on est authentifié en tant que client l'access_token laisse rentrer dans /api/users, et lorsque je fais un $this->getUser() il me retourne, à juste titre, NULL et je voudrais si c'est possible l'empêcher d'aller à cette adresse s'il n'y a pas d'utilisateur d'authentifié.

    La solution simpliste serait de faire une vérification sur ce $this->getUser(), mais il faudrait le faire dans toutes les fonctions et j'imagine qu'il y a un moyen plus simple de le faire...


    Voici mon security.yml :
    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
    24
    25
    26
     
    security:
        firewalls:
            oauth_token:
                pattern:    ^/%webservices_prefix%/oauth/v2/token
                security:   false
     
            oauth_authorize:
                pattern:    ^/%webservices_prefix%/oauth/v2/auth
                form_login:
                    provider: fos_userbundle
                    login_path: /%webservices_prefix%/oauth/v2/auth_login
                    check_path: /%webservices_prefix%/oauth/v2/auth_login_check
                anonymous: true
     
            api:
                pattern:    ^/%webservices_prefix%/v
                fos_oauth:  true
                stateless:  true
                anonymous:  false
     
    ...
     
     
    - { path: ^/%webservices_prefix%/*/check-version, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/%webservices_prefix%/,          role: IS_AUTHENTICATED_FULLY }
    Quelqu'un aurait été déjà confronté à ce problème ? Merci d'avance.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Points : 40
    Points
    40
    Par défaut
    Up, personne ? ^^

  3. #3
    Membre averti
    Avatar de phpiste
    Homme Profil pro
    Développeur Senior
    Inscrit en
    Septembre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 251
    Points : 445
    Points
    445
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    J'ai trouver cesi :

    https://bshaffer.github.io/oauth2-se...verview/scope/

    Validate your scope

    Configuring your scope in the server class will ensure requested scopes by the client are valid. However, there are two steps required to ensure the proper validation of your scope. First, the requested scope must be exposed to the resource owner upon authorization. In this library, this is left 100% to the implementation. The UI or whathaveyou must make clear the scope of the authorization being granted. Second, the resource request itself must specify what scope is required to access it:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    php
    // https://api.example.com/resource-requiring-postonwall-scope
    $request = OAuth2\Request::createFromGlobals();
    $response = new OAuth2\Response();
    $scopeRequired = 'postonwall'; // this resource requires "postonwall" scope
    if (!$server->verifyResourceRequest($request, $response, $scopeRequired)) {
      // if the scope required is different from what the token allows, this will send a "401 insufficient_scope" error
      $response->send();
    }
    apparament si je comprend bien ce qu'il disait, l'implémentation de la logique d'accées à la ressource est délégué à l'implémentation de Oauth et non pas dans la lib elle même

    avec les listeners tu peux faire quelques choses de centralisé en écoutant les deux evenements dispatché
    dans FOS\OAuthServerBundle\Controller\AuthorizeController


    • OAuthEvent :: PRE_AUTHORIZATION_PROCESS
    • OAuthEvent :: POST_AUTHORIZATION_PROCESS,


    enfin je crois comme toi qu'il y'a une methode plus simple que ça

    Ahmed

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Points : 40
    Points
    40
    Par défaut
    Salut,

    J'ai un peu de mal à comprendre... là ça dépend vraiment de la fonction appelée, par exemple dans /api/user il faut que la personne soit authentifiée en tant qu'utilisateur et non pas en tant que client. Je ne vois pas vraiment quoi faire dans les listeners que tu as donné :/

    M'enfin je pense que je vais le faire à la main, un service qui vérifie si un user est connecté et qui sera appelé dans toutes les fonctions qui ont besoin d'un utilisateur, si quelqu'un a une meilleur solution je suis preneur ^^

    Merci pour tes recherches en tout cas, c'est sympa

  5. #5
    Membre averti
    Avatar de phpiste
    Homme Profil pro
    Développeur Senior
    Inscrit en
    Septembre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 251
    Points : 445
    Points
    445
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par nayro57 Voir le message
    si quelqu'un a une meilleur solution je suis preneur ^^
    dans FOS\OAuthServerBundle\Controller\AuthorizeController y'a des evenements qui sont dispatché en pre post AUTHORIZATION

    tu purra les écouter pour faire un traitement générale et centralisé au lieu passer par le service qui sera appelé dans toutes les fonctions qui ont besoin d'un utilisateur !!!!

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Points : 40
    Points
    40
    Par défaut
    Du genre en post authorization, regarder quelle fonction est appelée, et faire une vérification du user à cet endroit pour une liste de fonction ? J'aime beaucoup l'idée ! ^^A voir comment récupérer la fonction demandée, ou regarder l'url via la request tout simplement ?

    Merci beaucoup en tout cas, je vais creuser de ce côté là

  7. #7
    Membre averti
    Avatar de phpiste
    Homme Profil pro
    Développeur Senior
    Inscrit en
    Septembre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur Senior
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 251
    Points : 445
    Points
    445
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par nayro57 Voir le message
    A voir comment récupérer la fonction demandée, ou regarder l'url via la request tout simplement ?
    voir avec l'event dispatcher et comment intercepter les évenements envoyés via ce composants

    sinon j'ai lu quelques discussions qui pourrait être utiles:

    https://github.com/FriendsOfSymfony/...dle/issues/201

    http://stackoverflow.com/questions/2...thserverbundle

    Ahmed

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2013
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 97
    Points : 40
    Points
    40
    Par défaut
    Je vais lire tout ça, merci bien

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/04/2014, 10h34
  2. [SP-2007] mon probleme est de connecter en tant que client
    Par mouna2010 dans le forum SharePoint
    Réponses: 6
    Dernier message: 24/07/2009, 12h29
  3. desactivé bouton fermer tant que tt n'est pas saisi
    Par mat75019 dans le forum Access
    Réponses: 7
    Dernier message: 11/04/2006, 21h34
  4. y'a pas les données quand je veux imprimer
    Par StyleXP dans le forum Bases de données
    Réponses: 38
    Dernier message: 25/03/2006, 20h15
  5. [] [Winsock] Pb si je me déconnecte en tant que client
    Par vbcasimir dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 29/04/2003, 19h42

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