簡體   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