Symfony 2在基本身份验证后接收匿名令牌

A. *_*nez 11 authentication symfony

我有一个使用基本in_memory身份验证的Symfony 2应用程序(如安全文档中所述).登录在我们的开发环境中正常工作.但是在登台服务器上,基本身份验证似乎没有提供正确的令牌 - 如在此提供的日志文件中所见 - ; 因此我们一次又一次地获取登录弹出窗口.

我们的安全配置:

security:
    firewalls:
        secured_area:
            pattern:    ^/
            anonymous: ~
            http_basic:
                realm: "Secured Demo Area"

    access_control:
        - { path: ^/admin, roles: [ROLE_ADMIN]}

    providers:
        in_memory:
            users:
                admin: { password: admin, roles: 'ROLE_ADMIN' }

    encoders:
        Symfony\Component\Security\Core\User\User: plaintext
Run Code Online (Sandbox Code Playgroud)

这是(成功)开发环境登录的日志输出:

[2011-07-21 13:49:48] security.DEBUG: Read SecurityContext from the session [] []
[2011-07-21 13:49:48] security.DEBUG: Reloading user from user provider. [] []
[2011-07-21 13:49:48] security.DEBUG: Username "root" was reloaded from user provider. [] []
Run Code Online (Sandbox Code Playgroud)

这是登台环境登录的日志输出:

[2011-07-21 13:53:08] security.INFO: Populated SecurityContext with an anonymous Token [] []
[2011-07-21 13:53:08] security.DEBUG: Access denied (user is not fully authenticated); redirecting to authentication entry point [] []
[2011-07-21 13:53:08] security.DEBUG: Calling Authentication entry point [] []
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

小智 9

您的开发环境可能将PHP作为mod_php运行,而您的登台服务器可能正在将其作为FastCGI运行.默认情况下,当您通过HTTP basic进行身份验证时,不会在此上下文中填充PHP_AUTH_USERPHP_AUTH_PW服务器变量,这些是Symfony用于创建安全性上下文和验证密码的内容.

如果你在Apache上运行它作为FCGI,你可以解决这个问题.一种是强制FastCGI传递Authorization标头,它通常会抑制它.将其添加到其他FastCGI配置选项旁边的Apache站点定义中:

FcgidPassHeader     Authorization
Run Code Online (Sandbox Code Playgroud)

对于其他应用程序,你可能还需要浪费时间在更大程度(如描述在这里),但Symfony的刚好路过的标题应该是足够的.