Symfony基本的HTTP身份验证无法工作

3
在一个使用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}]

由于使用FastCGI运行PHP的Apache存在特定问题,需要将内容添加到位于/web/.htaccess中。但是,这已经包含在symfony/standard-edition中(并且也存在于我的.htaccess中)。
我不知道还可以尝试什么。
3个回答

4

http://php.net/manual/en/features.http-auth.php 中的一条注释建议添加以下内容:

SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0

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


2

尝试在防火墙中指定此内容:

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

希望这能帮到您。

-1

你需要这样做(换行)

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' }"的字符串。

不,当你使用花括号时,你不必换行。问题完全是其他原因(请参见答案)。 - fritzmg
昨天我自己尝试了一下,直到我插入了一个新行它才起作用! - OlivierC
一定是其他问题。在使用任何类型的括号时,YAML中不需要换行符:https://symfony.com/doc/current/components/yaml/yaml_format.html - fritzmg
我使用了你的security.yml,只需添加一行代码就可以正常工作。 - OlivierC
你的服务器环境是否使用Apache和通过FastCGI运行的PHP? - fritzmg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接