重定向Symfony2安全中的死亡循环


Redirect loop of death in Symfony2 security

我有一个登录名为https://的管理区域。如果用户没有登录,点击route/admin应该重定向到登录页面,但我得到了一个无休止的重定向循环。不确定出了什么问题,这是安全问题。yml:

firewalls: 
        admin_login:
            pattern:  ^/admin/secured/login$
            security: false
        admin_secured_area:
            pattern: ^/admin
            provider: entity_admin
            form_login:
                check_path: /admin/secured/login_check
                login_path: /admin/secured/login
                default_target_path: /admin
            logout:
                path:   /admin/secured/logout
                target: /
    access_control:
        - { path: ^/admin/secured/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
        - { path: ^/admin, roles: ROLE_ADMIN, requires_channel: https }

谢谢你的帮助!

在防火墙中不需要"admin_login"部分。但看起来你忘记了匿名参数。。

firewalls:     
        admin_secured_area:
            anonymous: ~
            pattern: ^/admin
            provider: entity_admin
            form_login:
                check_path: /admin/secured/login_check
                login_path: /admin/secured/login
                default_target_path: /admin
            logout:
                path:   /admin/secured/logout
                target: /
    access_control:
        - { path: ^/admin/secured/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
        - { path: ^/admin, roles: ROLE_ADMIN, requires_channel: https }

正如我在评论中所说,您是否为登录用户设置了ROLE_ADMIN角色?

编辑:您的路由状态HTTPS通道也适用于管理部分吗?

快速查看后,我认为下面这样的内容应该是正确的:

firewalls: 
    admin_secured_area:
        pattern:  ^/admin
        provider: entity_admin
        form_login:
            check_path: /admin/secured/login_check
            login_path: /admin/secured/login
            default_target_path: /admin
        logout:
            path:   /admin/secured/logout
            target: /
access_control:
    - { path: ^/admin/secured/(login|login_check|logout)$, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
    - { path: ^/admin, roles: ROLE_ADMIN, requires_channel: https }

无论如何,如果这没有帮助,我建议使用内置的探查器(带有路由匹配和日志的选项卡)检查重定向,以打开它。重定向将config_dev.yml更改为:

web_profiler:
    toolbar: true
    intercept_redirects: true

Hi,这与Symfony2 $request->isSecure()在站点处于负载均衡器下时检查SSL的方式有关,PHP中存在一些不一致的头名称。配置文件需要以下内容:

trusted_proxies: [10.0.0.0/8]

它现在可以工作了,但我不知道这个设置是否存在安全问题。

^/admin/secured/login_check也应该匿名验证,因为用户在最初调用该页面时没有角色,因此循环。

删除:

admin_login:
            pattern:  ^/admin/secured/login$
            security: false