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 :
Quelqu'un aurait été déjà confronté à ce problème ? Merci d'avance.
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 }
Partager