繁体   English   中英

Symfony2项目security.yml上有多个防火墙,如何处理模式?

[英]More than one firewall at Symfony2 project security.yml, how to deal with pattern?

我正在一个需要两个防火墙或安全区域的项目中工作。 第一个防火墙/安全区域将允许使用Salesforce作为提供者的HWIOAuthBundle登录/注销,第二个防火墙/安全区域将允许通过FOSUserBundle登录/注销,因为这是针对内部sysadmin的,依此类推。 我不确定如何正确设置security.yml文件,因为我不知道如何处理pattern参数。 我已经阅读了安全参考,但对如何执行此操作一无所知。 这是我目前所拥有的:

firewalls:
        #this is the public area accessed by/from iOs app and only users registered at Salesforce as rep can login
        rep_area:
            methods: [GET, POST]
            pattern: ^/
            anonymous: true
            logout: true

        #this is the secured area accessed through web browser and only internals are allowed to login
        admin_area:
            pattern:    ^/
            anonymous:    ~

在这种情况下应如何配置pattern

更新:防火墙不起作用

这是用户回答后防火墙部分的样子:

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

    #this is the secured area accessed through web browser and only internals are allowed to login
    admin_area:
        pattern:    ^/admin
        anonymous:    ~
        form_login:
            provider: fos_userbundle
            csrf_provider: form.csrf_provider
            login_path: /login
            check_path: /login_check
            post_only: true
            always_use_default_target_path: true
            target_path_parameter: _target_path
            use_referer: false
            failure_path: null
            failure_forward: false
        logout:
            path:   fos_user_security_logout
            target: /

    #this is the public area accessed by/from iOs app and only users registered at Salesforce as rep can login
    rep_area:
        methods: [GET, POST]
        pattern: ^/
        anonymous: true
        logout: true

但是,如果我尝试http://appdev.local/app_dev.php/admin/收到此错误:

BaseNode.php行313中的InvalidConfigurationException:路径“ security.firewalls.admin_area”的无效配置:登录方式“ form_login”的check_path“ / login_check”与防火墙模式“ ^ / admin”不匹配。

为什么?

编辑2:如果FOSUserBundle和&HWIOAuth是否可以一起工作,该怎么办?

作为其他信息,我从一开始就忘了告诉我,我已经并且需要安装FOSUserBundle && HWIOAuth,并且我正试图使两者都能正常工作。 在这种情况下,这是我的routing.yml样子:

#HWIOAuthBundle
hwi_oauth_redirect:
    resource: "@HWIOAuthBundle/Resources/config/routing/redirect.xml"
    prefix:   /connect

hwi_oauth_login:
    resource: "@HWIOAuthBundle/Resources/config/routing/login.xml"
    prefix:   /login

salesforce_login:
    pattern: /login/check-salesforce

#PDOne
pd_one:
    resource: "@PDOneBundle/Controller/"
    type:     annotation
    prefix:   /

template:
    resource: "@TemplateBundle/Controller/"
    type:     annotation
    prefix:   /

#FOSUserBundle
fos_user:
    resource: "@FOSUserBundle/Resources/config/routing/all.xml"
fos_user_security:
    prefix: /admin
    resource: "@FOSUserBundle/Resources/config/routing/security.xml"

#SonataAdmin
admin:
    resource: '@SonataAdminBundle/Resources/config/routing/sonata_admin.xml'
    prefix: /admin

_sonata_admin:
    resource: .
    type: sonata_admin
    prefix: /admin

我应该如何处理FOSUserBundle和&HWIOAuth之间的前缀?

只是简单

firewalls:
    #this is the secured area accessed through web browser and only internals are allowed to login
            admin_area:
                pattern:    ^/admin
                anonymous:    ~

        #this is the public area accessed by/from iOs app and only users registered at Salesforce as rep can login
        rep_area:
            methods: [GET, POST]
            pattern: ^/
            anonymous: true
            logout: true

这是一个正则表达式,告诉symfony所有以/开头的路由^ (开始)都遵循此规则。 /admin遵循另一个规则。 防火墙将始终遵循首先匹配的任何规则。 因此,您的管理员规则必须排在第一位,否则它将不起作用。

编辑

在添加FOS UserBundle安全路由的路由设置中,尝试将/ admin附加为前缀。 可能是因为/ admin是您的规则,但为登录生成的路由是host.com/login而不是host.com/admin/login

fos_user_security:
    prefix: /admin
    resource: "@FOSUserBundle/Resources/config/routing/security.xml"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM