【问题标题】:Symfony2 Security Configuration - How to use two firewalls side by sideSymfony2 安全配置 - 如何并排使用两个防火墙
【发布时间】:2014-10-30 18:03:38
【问题描述】:

我想使用带有 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。如果用户登录(并通过身份验证)到前端,则 /backend 的访问会给我一个 403 访问被拒绝。 “经典”的 http 身份验证登录表单永远不会出现。

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

非常感谢您的帮助:)

【问题讨论】:

  • 您是否尝试过在每个防火墙中使用相同的context?例如context: my_project 在两个防火墙中
  • 尝试反转防火墙顺序,将后端放在前端之前
  • 是的,就像@IgorPantović 所说,您的所有路线都被^/ 模式捕获,因此切换它们应该可以为您完成。
  • 很好,成功了!非常感谢你们!我认为该规则仅对 access_control 很重要,但不知道它也适用于防火墙。有人想发布答案以便我接受吗?
  • 它现在可以在 localhost 中运行,但是服务器上的 http 身份验证完全失败 - 没有输入显示,路由可访问:/

标签: php security symfony authentication


【解决方案1】:

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

正如伊戈尔·潘托维奇所说:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-28
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    相关资源
    最近更新 更多