2014-10-30 56 views
0

我想使用带两个防火墙的symfony2应用程序:一个来自前端数据库的用户,另一个来自后端的内存用户。Symfony2安全配置 - 如何并行使用两个防火墙

我已阅读所有文档和各种计算器的问题,但我无法解决我的问题。

这是迄今为止我security.yml配置:

security: 
    firewalls: 
     frontend: 
      pattern: ^/ 
      provider: fe_users 
      anonymous: ~ 
      form_login: 
       username_parameter: _email 
       login_path: _login 
       check_path: _login_check 
       remember_me: true 
       default_target_path: _profile 
       #always_use_default_target_path: true 
      logout: 
       path: /logout 
       target:/
      remember_me: 
       key: MiPassphrase 
       lifetime: 1800 
       path: /.* 
       domain: ~ 
     backend: 
      pattern: ^/backend 
      provider: be_users 
      anonymous: ~ 
      http_basic: 
       realm: "" 

    access_control: 
     - { path: ^/backend$, roles: ROLE_ADMIN } 
     - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY } 

    encoders: 
     vv\xx\Entity\User: 
      algorithm: bcrypt 
     Symfony\Component\Security\Core\User\User: plaintext 

    providers: 
     fe_users: 
      entity: { class: vvxx:User, property: email } 
     be_users: 
      memory: 
       users: 
        d: { password: c, roles: 'ROLE_ADMIN' } 

与发生什么:

的前端认证工作正常。如果用户未登录到前端,则/后端的访问会将我重定向到/登录。如果用户IS登录(并通过身份验证)到前端,那么访问/后端会给我一个403访问被拒绝。永远不会出现“经典”http认证登录表单。

任何人都可以看看我的配置,并找出我在这里做错了吗?

我真的很感谢你的帮助:)

+0

您是否尝试过在每个防火墙使用相同'context'前反演防火墙秩序,地方后端?例如两个防火墙中的'context:my_project' – Javad 2014-10-30 18:14:43

+4

尝试反转防火墙的顺序,将前端放在前端 – 2014-10-30 20:05:14

+1

是的,就像@IgorPantović说的那样,你所有的路由都被'^ /'模式捕获,因此切换它们应该为你做。 – qooplmao 2014-10-30 20:34:02

回答

4

防火墙是第一匹配基础上进行匹配。限制最少的模式应该在防火墙列表中的限制较多的模式之后。目前您的frontend模式正在匹配所有内容,因此您的backend模式不会被检查。

由于伊戈尔Pantovic提示:

尝试前端