首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用多个提供者、多个防火墙和多个主机的Symfony 2安全问题

使用多个提供者、多个防火墙和多个主机的Symfony 2安全问题
EN

Stack Overflow用户
提问于 2014-11-21 13:42:01
回答 1查看 598关注 0票数 0

我在设置Symfony 2的安全性方面有一些问题。我现在的security.yml里有这个

代码语言:javascript
复制
security:
encoders:
    Acme\AdminBundle\Entity\AdminUsers:
        algorithm: bcrypt
    Acme\UserBundle\Entity\Users:
        algorithm: bcrypt

role_hierarchy:
    ROLE_USER:        ROLE_USER
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: [ ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH ]

providers:
    provider_admin:
        entity: { class: AdminBundle:AdminUsers, property: username }
    provider_user:
        entity: { class: UserBundle:Users, property: username }

firewalls:
    dev:
        pattern:  ^/(_(profiler|wdt)|css|images|js)/
        security: false

    login:
        pattern: ^/login$
        security: false
        anonymous: ~

    recover:
        pattern: ^/(recover-password|generate-hash)$
        security: false
        anonymous: ~

    secured_area:
        pattern:   ^/
        provider: provider_admin
        host: admin.example.dev
        form_login:
          check_path: /login_check
          login_path: /login
          always_use_default_target_path: false
          default_target_path: /
          username_parameter: _username
          password_parameter: _password
        logout:
          path:   /logout
          target: /
        anonymous: ~

    public_secured_area:
        pattern:   ^/dashboard
        host: app.example.dev
        provider: provider_user
        form_login:
          check_path: /dashboard/login_check
          login_path: /login
          always_use_default_target_path: false
          default_target_path: /dashboard
          username_parameter: _username
          password_parameter: _password
        logout:
          path:   /public/logout
          target: /login
        anonymous: ~

access_control:
    - { path: ^/dashboard/*, roles: ROLE_USER }
    - { path: ^/*, roles: ROLE_ADMIN }

正如您所看到的,我有两个不同的提供者,两个不同的防火墙和两个不同的主机。这是因为我需要记录app.example.dev上的users表和admin.example.dev上的AdminUsers表中的用户。

这就是我的admin routing.yml中的内容:

代码语言:javascript
复制
login:
  path: /login
  host: admin.example.dev
  defaults: { _controller: UserBundle:Security:login }
login_check:
  path: /login_check
  host: admin.example.dev
logout:
  path: /logout
  host: admin.example.dev

这就是我的应用程序 routing.yml中的内容

代码语言:javascript
复制
public_login:
  path: /login
  host: app.example.dev
  defaults: { _controller: PublicBundle:Default:login }

public_login_check:
  path: /dashboard/login_check
  host: app.example.dev

public_logout:
  path: /dashboard/logout
  host: app.example.dev

现在它的设置方式在管理端一切都正常工作。在应用程序端,注销不起作用,上面写着:

代码语言:javascript
复制
Unable to find the controller for path "/dashboard/logout". Maybe you forgot to add the matching route in your routing configuration?
404 Not Found - NotFoundHttpException

它们似乎是以类似的方式设置的,但是解决方案是让我在应用程序中设置一个实际的控制器。注销路由,添加一个带有实际注销的注销操作,并将代码重定向以使其工作。这说明我出了点问题。知道那是什么吗?

此外,登录一开始也不起作用,因为我在access_control部分的security.yml文件中的两个条目被反转,直到我再次读取文档,并且我理解其中的路径需要从特殊到一般列出。

因此,我的第二个问题是:没有办法将access_control条目绑定到某个防火墙,或者至少连接到主机上吗?

编辑:虽然我得到了答案,见下文,但我仍然想了解我的最后一个问题,以上两段,是一个有效的。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-11-21 15:02:29

更改public_secured_area防火墙如下:

代码语言:javascript
复制
public_secured_area:
    ...
    logout:
      path:   /dashboard/logout
      target: /login
    anonymous: ~

或者像这样改变应用程序的路由:

代码语言:javascript
复制
public_logout:
  path: /public/logout
  host: app.example.dev

路由和注销路径都应该是相同的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27062762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档