security - Symfony2 http_basic 安全性拒绝有效凭据

标签 security symfony basic-authentication

我使用 Symfony Standard 2.0.0BETA1 并尝试配置与 this book chapter 完全相同的 http_basic 身份验证

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

providers:
    main:
        users:
            foo: { password: testing, roles: ROLE_USER }

firewalls:
    main:
        pattern:    /.*
        http_basic: true
        logout:     true

access_control:
    - { path: /.*, role: ROLE_USER }

问题是当我尝试打开一个页面并提交用户名“foo”和密码“testing”时,它只是循环并无限地询问我的凭据或显示错误页面。

重现问题的步骤:
  • http://symfony.com/doc/current/book/security/overview.html#configuration 复制安全配置并将其传递到 security.yml 文件
  • 刷新应用首页
  • 输入有效凭据

  • 预期行为是查看主页,但显示凭据提示。

    有谁知道为什么会发生这种情况以及如何解决?

    最佳答案

    在 Apache 下,PHP 作为 cgi/fastCGI 破坏了 http 基本身份验证

    有一个解决方法:

    app_dev.php

    if( !isset($_SERVER['PHP_AUTH_USER']) )
    {
        if (isset($_SERVER['HTTP_AUTHORIZATION']) && (strlen($_SERVER['HTTP_AUTHORIZATION']) > 0))
        {
            list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
            if( strlen($_SERVER['PHP_AUTH_USER']) == 0 || strlen($_SERVER['PHP_AUTH_PW']) == 0 )
            {
                unset($_SERVER['PHP_AUTH_USER']);
                unset($_SERVER['PHP_AUTH_PW']);
            }
        }
    }
    

    web/.htaccess
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L] 
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteRule ^(.*)$ app.php [QSA,L]
    </IfModule>
    

    来源:symfony github issue

    关于security - Symfony2 http_basic 安全性拒绝有效凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5989201/

    相关文章:

    java - 如何使用 xAgent 创建自定义的经过身份验证的 API 请求?

    database - 为双因素身份验证存储 "backup codes"的最佳方法?

    iOS 每次将 App 发送到后台时都会对其进行截图 - 我将如何保护我的 App?

    php - Symfony 3 - 不允许访问 app_dev.php

    web-services - 如何通过主干验证和使用外部 api?

    asp.net-mvc - 如何使用授权属性进行 ASP.NET Web API 集成测试

    security - GLassfish SSL 配置页面级别

    security - 与仅用于登录的 SSL 的安全通信?

    php - 如何在 Twig 中使用 PHP 模板引擎而不是 Silex 中的 Twig 语法

    mysql - 从 2 个表中获取数据,在 Doctrine 上没有关系