【问题标题】:HTTP authentication not working with CGI enabledHTTP 身份验证在启用 CGI 的情况下不起作用
【发布时间】:2015-06-22 12:08:58
【问题描述】:

我正在使用PHP documentation 中提供的示例 #2 使用 HTTP 身份验证。
我已经成功配置了脚本,现在我可以使用我定义的凭据通过 HTTP 登录。但是,如果在我的 MAMP 中将模式从 Identical PHP version for all hosts (module) 切换到 Individual PHP version for every host (CGI),即使用户名和密码正确,脚本也会无限地询问我正确的用户名和密码。

为什么会这样?

【问题讨论】:

  • 找到这个,也许它有帮助? besthostratings.com/articles/http-auth-php-cgi.html
  • 我之前遇到过类似的问题,后来变成了关于标题的键命名。在 CGI 模式下,我无法使用 Authorization 发送我的令牌,因为在服务器端它将是空的。我的解决方法是将密钥名称更改为 CGIAuthorization。但是,这仅起作用,因为我可以访问服务器端和客户端,并且可以进行更改。
  • 正如@sanderbee 提到的,有一些good mod_rewrite workaround 值得一试

标签: php .htaccess authentication


【解决方案1】:

在阅读了数十页关于此问题的内容后,我得出结论,将 CGI 与 HTTP Digest 身份验证一起使用没有解决方法。

但是,如果您能够使用 HTTP 基本身份验证,则有一种解决方法。所以我实现了一个异常,以防服务器 API 运行 CGI,并保留我的摘要身份验证,以防服务器运行 Apache 模块。

我关注了@sanderbee 提供的link
这个link也帮助了我。

使用预定义的常量PHP_SAPI,我设法检查了服务器 API 是否正在运行 CGI,如果是,我运行基本的 HTTP 身份验证:

function admin_digest_auth(){
    if (substr(PHP_SAPI, 0, 3) == 'cgi') {
        return admin_basic_auth();
    }

    // You HTTP Digest authentication code ...
}

function admin_basic_auth(){
    // split the user/pass parts
    if(isset($_SERVER['REDIRECT_HTTP_AUTH']) && !empty($_SERVER['REDIRECT_HTTP_AUTH'])){
        list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = 
            explode(':' , base64_decode(substr($_SERVER['REDIRECT_HTTP_AUTH'], 6)));
    }

    // open a user/pass prompt
    if (!isset($_SERVER['PHP_AUTH_USER'])) {
        header('WWW-Authenticate: Basic realm="My Realm"');
        header('HTTP/1.0 401 Unauthorized');

        exit('Unauthorized');

    // validate submited user / pass
    } else {
        if($_SERVER['PHP_AUTH_USER'] !== 'admin' ||
            $_SERVER['PHP_AUTH_PW'] !== 'mypassword'){
            header('HTTP/1.1 401 Unauthorized');
            admin_basic_auth();
        }
    }
    return TRUE;
}

最后,您必须在 .htaccess 中添加这一行

RewriteEngine On
RewriteRule .* - [E=HTTP_AUTH:%{HTTP:Authorization},L]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-22
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 2016-01-22
    • 2014-12-31
    • 1970-01-01
    • 2022-01-03
    相关资源
    最近更新 更多