Symfony基本HTTP身份验证不起作用

时间:2016-11-21 16:18:50

标签: php apache .htaccess symfony authentication

在使用Symfony 2.8.14的项目中,我使用非常基本的设置在Symfony中启用基本HTTP身份验证,如http://symfony.com/doc/2.8/security.html

中所述

security.yml

security:

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

    providers:
        in_memory:
            memory:
                users:
                    myuser: { password: mypassword, roles: 'ROLE_USER' }

    firewalls:
        default:
            anonymous: ~
            http_basic: ~

    access_control:
        - { path: ^/myroute, roles: ROLE_USER }

在本地服务器上访问/myroute时,系统会提示我使用HTTP基本身份验证提示。但是,输入正确的凭据后,它会不断向我显示提示。

在远程服务器上输入正确的凭据后,将会有无限的“重定向”到具有401状态代码的相同路由。

两台服务器都通过FastCGI运行带有PHP的Apache 2.4。还有其他线程建议添加

# Sets the HTTP_AUTHORIZATION header removed by apache
RewriteCond %{HTTP:Authorization} .
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

/web/.htaccess由于Apache通过FastCGI运行PHP的特定问题。但是,这已经合并到symfony/standard-edition中(并且也存在于我的.htaccess中)。

我不知道还有什么可以尝试。

3 个答案:

答案 0 :(得分:4)

http://php.net/manual/en/features.http-auth.php上的其中一条说明建议添加:

SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0

这有帮助。看来.htaccess的默认symfony/standard-edition配置是不够的(至少在某些环境中)。

答案 1 :(得分:1)

尝试在防火墙下指定:

firewalls:
    default:
        pattern:      ^/myroute
        anonymous: false
        provider: in_memory

希望这个帮助

答案 2 :(得分:0)

你必须这样做(转到新行)

providers:
    in_memory:
        memory:
            users:
                myuser:
                    { password: mypassword, roles: 'ROLE_USER' }

或者您也可以像这样探索数组

providers:
    in_memory:
        memory:
            users:
                myuser:
                    password: mypassword
                    roles: 'ROLE_USER'

否则myuser被视为一个值为" {password:mypassword,roles:' ROLE_USER' }"