2015-11-12 106 views
3

我正在使用FOSOAuthServerBundle作爲我的oauth端點。我成功地生成使用Resource Owner Password Credentials補助方法上作記號Symfony FOSOAuthServerBundle:未檢測到訪問令牌

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

現在我想用它來獲得一些受保護的資源。所以我做了:

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

承載似乎沒有被檢測到。


INFOS:

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

在標題有:

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

我也試圖通過access_token作爲查詢參數,都沒有成功。

現在我猜測config.ymlsecurity.yml有什麼不對。這裏有一些選擇的部分:

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

建議我得到:「我認爲你必須從'安全\認證\提供程序'中的供應商源'oAuthProvider'類中調試它 – Nicorr

回答

2

我終於發現是什麼原因導致的問題。我有被抵消了其他防火牆防火牆,因爲同樣的模式:

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

我也覺得在一個防火牆取得認證不可用的其他防火牆,所以減少防火牆的數量嚴格最小(一個不安全,一個安全認證等)是一個很好的做法。然後使用access_control進行精細訪問。

+0

同樣在這裏,謝謝 – insan3

+0

同樣的錯誤並通過反轉模式順序來處理它:以^/api開頭並以^ /結尾。 –