Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security Symfony 2-使用HTTP身份验证对话框隐藏整个网站_Security_Symfony_Firewall - Fatal编程技术网

Security Symfony 2-使用HTTP身份验证对话框隐藏整个网站

Security Symfony 2-使用HTTP身份验证对话框隐藏整个网站,security,symfony,firewall,Security,Symfony,Firewall,我正在使用Symfony 2构建一个网站 这项工作正在进行中,因此我不希望用户或搜索引擎访问它,但我的客户希望看到我的进展。我认为一个简单的解决方案是使用Symfony 2安全功能提供的机制,通过HTTP身份验证来保护整个网站 我正在使用FOSUserBundle,因为该网站将有需要注册和登录的用户 这是我的security.yml,非常有效: security: providers: fos_userbundle: id: fos_user.us

我正在使用Symfony 2构建一个网站

这项工作正在进行中,因此我不希望用户或搜索引擎访问它,但我的客户希望看到我的进展。我认为一个简单的解决方案是使用Symfony 2安全功能提供的机制,通过HTTP身份验证来保护整个网站

我正在使用FOSUserBundle,因为该网站将有需要注册和登录的用户

这是我的security.yml,非常有效:

security:
    providers:
        fos_userbundle:
            id: fos_user.user_manager

    encoders:
        "FOS\UserBundle\Model\UserInterface": sha512

    firewalls:
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
            logout:       true
            anonymous:    true     

    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, role: ROLE_ADMIN }
        - { path: ^/account, role: IS_AUTHENTICATED_FULLY }

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN
因此,我试图在其上添加其他内容,以允许网站受到HTTP身份验证的保护。 我将文件更改为:

security:
    providers:
        fos_userbundle:
            id: fos_user.user_manager
        whole_website_provider:
            users:
                ryan:  { password: ryanpass, roles: 'ROLE_USER' }           

    encoders:
        "FOS\UserBundle\Model\UserInterface": sha512

    firewalls:
        main:
            pattern: ^/
            form_login:
                provider: fos_userbundle
                csrf_provider: form.csrf_provider
            logout:       true
            anonymous:    true
        whole_website:
            pattern: ^/
            anonymous: ~
            http_basic:
                realm: "Secured Demo Area"       

    access_control:
        - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin/, role: ROLE_ADMIN }
        - { path: ^/account, role: IS_AUTHENTICATED_FULLY }
        - { path: ^/, role: ROLE_USER }

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: ROLE_ADMIN
基本上,我添加了整个网站、整个网站防火墙和额外的访问控制。 但这不起作用:当我访问网站时,我会被重定向到登录表单,就是这样

你知道我能不能做,怎么做吗


注意:我不希望使用任何Apache功能。

在我看来,您需要的不是使用HTTP身份验证来管理用户,而是使用HTTP身份验证来限制对站点的访问。不要为此使用Symfony2安全性

保持symfony2应用程序的安全性,因为它将处于生产模式,并使用apache.htaccess限制对站点的访问


文档在这里。您只需在web/.htaccess中添加一些指令,并按照文档中的说明创建一个用户/密码文件…

我在Symfony2中的解决方案,使用symfony的基本防火墙而不使用FOSUserBundle:

# app/config/security.yml
security:

    firewalls:
        secured_area:
            pattern: ^/
            anonymous: ~
            form_login:
                login_path: login
                check_path: login_check

    access_control:
        - { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        - { path: ^/admin, roles: ROLE_ADMIN }
        - { path: ^/, roles: ROLE_USER }

    providers:
        in_memory:
            memory:
                users:
                    redattore: { password: 'somePasswordHere', roles: 'ROLE_USER' }
                    admin: { password: 'somePasswordHere', roles: 'ROLE_ADMIN' }

    encoders:
        Symfony\Component\Security\Core\User\User: plaintext

    role_hierarchy:
        ROLE_ADMIN:       ROLE_USER
        ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
它对我非常有效。这是一个非常基本的配置-没有散列密码,没有数据库提供程序:节,没有https连接,所有内容在整个互联网上都是纯文本,没有注销内容和其他漂亮的功能。 我希望它能帮助你。
致以亲切的问候

谢谢佩奇。我仍然希望在应用程序级别上完成所有工作,而不是求助于Apache。我决定采纳你的建议,因为我的方式似乎并不容易,毕竟,实现其他开发人员所期望的东西是很好的。我认为如果你只需要确保访问安全,而不需要识别用户,这种方式是很好的。此外,一旦他们通过了这个临时安全措施,他们就可以看到未来的应用程序,使用相同的登录过程。如果你把整个_网站的防火墙放在第一位,会发生什么?别忘了清除缓存。@gilden:至少显示了身份验证框,但我找不到正确的身份验证方法。很抱歉,我没有时间给出正确的建议,但我猜您还需要显式设置整个_网站的用户提供程序,否则Sf2将使用第一个。我想,佩西的建议也很管用,但由于有点强迫症,我会采取困难但更优雅的解决方案: