2015-06-15 53 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/ ......”叫什么,你将被重定向到登录页面。