2015-11-12 1 views
3

J'utilise FOSOAuthServerBundle comme point de terminaison oauth. Je généré avec succès un jeton en utilisant la méthode d'attribution Resource Owner Password Credentials:Symfony FOSOAuthServerBundle: jeton d'accès non détecté

{ 
    "access_token": "MY-FOO-TOKEN", 
    "expires_in": ​3600, 
    "token_type": "bearer", 
    "scope": "read", 
    "refresh_token": "MY-BAR-REFRESH-TOKEN" 
} 

Maintenant, je voudrais l'utiliser pour obtenir des ressources protégées. Donc j'ai fait:

curl -X GET -H "Authorization: Bearer MY-FOO-TOKEN" "http://localhost:8000/api/a-bar-resource" 

Le porteur ne semble pas être détecté.


INFOS:

echo $this->get('security.token_storage')->getToken(); donne: AnonymousToken(user="anon.", authenticated=true, roles="")

Dans les en-têtes il y a:

["authorization"]=> /** <-- Is the lowercase OK? **/ 
    array(1) { 
    [0]=> 
    string(93) "Bearer MY-FOO-TOKEN" 
    } 

J'ai essayé aussi de passer access_token comme paramètre de requête, sans succès.

Maintenant, je suppose que quelque chose ne va pas avec le config.yml ou le security.yml. Voici quelques éléments sélectionnés

config.yml:

fos_oauth_server: 
[...] 
    service: 
     options: 
      supported_scopes: read 
     user_provider: fos_user.user_provider.username_email 

security.yml:

security: 
[...] 
    firewalls: 
     api: 
      pattern: ^/api 
      fos_oauth: true 
      stateless: true 
      anonymous: false 
    access_control: 
      - { path: ^/api, roles: [ IS_AUTHENTICATED_ANONYMOUSLY ] } 
+0

Conseil obtenu: "Je pense que vous devez le déboguer à partir de la classe source du fournisseur 'oAuthProvider' dans' Security \ Authentication \ Provider' – Nicorr

Répondre

2

j'ai finalement trouvé ce qui était à l'origine du problème. J'ai eu un pare-feu qui a été réduire à néant l'autre pare-feu, en raison de mêmes motifs:

security: 
[...] 
    firewalls: 
     other_firewall: #this one 
      pattern: ^/ 
      anonymous: true 
     api: 
      pattern: ^/api 
      fos_oauth: true 
      stateless: true 
      anonymous: true 

Je pense aussi qu'une authentification faite dans un pare-feu ne sont pas disponibles dans un autre pare-feu, diminuant ainsi le nombre de pare-feu à la stricte minimum (un non sécurisé, un avec auth, etc.) est une bonne pratique. Ensuite, en utilisant access_control pour un accès facile.

+0

Même chose ici, merci – insan3

+0

Même erreur et gérer en inversant l'ordre des modèles: commencez par ^/api et terminez par^/. –