Symfony2安全配置 - 如何并排使用两个防火墙

时间:2014-10-30 18:03:38

标签: php security symfony authentication

我想使用带有2个防火墙的symfony2应用程序:一个用于前端数据库的用户,另一个用于后端的内存用户。

我已经阅读了所有文档和各种stackoverflow问题,但我无法解决我的问题。

到目前为止,这是我的 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' }

会发生什么:

前端身份验证工作正常。如果用户未登录前端,/ backend的访问会将我重定向到/ login。如果用户IS登录(并通过身份验证)到前端,则/ backend的访问会使我拒绝访问403。 A"经典" http身份验证登录表永远不会出现。

任何人都可以查看我的配置并弄清楚我在这里做错了什么吗?

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

1 个答案:

答案 0 :(得分:4)

防火墙在第一场比赛的基础上进行匹配。限制较少的模式应该在防火墙列表中的限制性更强的模式之后。目前,您的frontend模式符合所有内容,因此永远不会检查您的backend模式。

正如伊戈尔·潘托维奇所暗示的那样:

  

尝试反转防火墙顺序,在前端之前放置后端