2015-06-15 74 views
0

我正在開發一個Symfony 2.7項目,該項目同時具有Web登錄界面和API的oAuth驗證。 我使用FOSUserBundle進行驗證提供程序,並使用FOSOAuthServerBundle提供oAuth功能。FOS捆綁+ FOSOAuthServerBundle防火牆配置

我下面的鏈接到這個職位的OAuth實施與FOSOauthServerBundle FOSOAuthServerBundle with FOSUserBundle - How to make it works?

我認爲是幾乎沒有指導,但安全問題是阻止我。 我在下面的方式設置防火牆對我securtiy.yml

firewalls: 
    main: 
     pattern: ^/ 
     form_login: 
      provider: fos_userbundle 
      csrf_provider: security.csrf.token_manager # Use form.csrf_provider instead for Symfony <2.4 
      login_path:   fos_user_security_login 
      check_path:   fos_user_security_check 
      #default_target_path: app_website_index 
     logout:  true 
     anonymous: true 
     logout: 
       path: fos_user_security_logout 
       #target: index 
       target: fos_user_security_login 

    oauth_token: 
       pattern: ^/oauth/v2/token 
       security: false 

    oauth_authorize: 
     pattern: ^/oauth/v2/auth 
     # Add your favorite authentication process here 
     form_login: 
      provider: fos_userbundle 
      csrf_provider: security.csrf.token_manager # Use form.csrf_provider instead for Symfony <2.4 
      login_path:   fos_user_security_login 
      check_path:   fos_user_security_check 
      #default_target_path: app_website_index 

    api: 
     pattern: ^/api 
     fos_oauth: true 
     stateless: true 
     anonymous: false # can be omitted as its default value 

access_control: 
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/admin/, role: ROLE_ADMIN } 
    - { path: ^/api, roles: [ IS_AUTHENTICATED_FULLY ] } 

的問題是,API和OAuth的防火牆是主要的^/ 下,所以它讓我想起到登錄頁面時,我嘗試訪問本地主機:8000/API /沒有登錄過,而不是文章給我的OAuth autentication錯誤:

{ 「錯誤」: 「ACCESS_DENIED」, 「ERROR_DESCRIPTION」: 「需要的OAuth2認證」}

例如,

或者一旦我得到了訪問令牌,當我嘗試訪問的資源,如:

http://localhost:8000/app.php/api/article/?access_token=THISISMYACCESSTOKEN 

我得到的fos_login而不是資源。

如果我修改主要防火牆^ /安全/ everithing工作正常,但我得到問題的網絡認證。

我的應用程序的所有控制器都處於/ secured/path中,因此更改主防火牆不是問題,如果我讓防火牆不受保護形成FOSUserBundle的^/pattern幾個錯誤。我應該爲login/login_check/logout操作創建一個特定的防火牆,把主防火牆從/ secured /或者是否有另一種方法來排除主防火牆的oauth防火牆?

回答

-1

很老的問題,但我想它這一行是因爲:

- { path: ^/api, roles: [ IS_AUTHENTICATED_FULLY ] } 

不管你用「http://localhost:8000/app.php/api/ ......」叫什麼,你將被重定向到登錄頁面。