【问题标题】:Why are $_SERVER["PHP_AUTH_USER"] and $_SERVER["PHP_AUTH_PW"] not set?为什么 $_SERVER["PHP_AUTH_USER"] 和 $_SERVER["PHP_AUTH_PW"] 没有设置?
【发布时间】:2013-01-21 08:37:36
【问题描述】:

在开始之前,我想指出,我浏览了 Stack Overflow 并发现了其他类似的问题 - PHP_AUTH_USER not set?HTTP Auth via PHP - PHP_AUTH_USER not set? - 这些都指出身份验证 $_SERVER 变量不会如果''Server API''设置为''CGI/FCGI'',但我检查了我的''phpinfo()''输出并且我的''Server API''设置为''Apache 2.0 Handler''。

好的,我有一个简单的脚本如下:

<?php
    echo "Username: " . $_SERVER["PHP_AUTH_USER"] . ", Password: " . $_SERVER["PHP_AUTH_PW"];
?>

...我通过以下方式远程调用:

wget -v --http-user=johnsmith --http-password=mypassword http://www.example.com/myscript.php

...但只输出:

Username: , Password:

我还尝试使用 PHP cURL 调用脚本并适当地设置身份验证参数,如下所示:

 curl_setopt($ch, CURLOPT_USERPWD, "johnsmith:mypassword");

...但我得到与上面相同的输出。

知道我做错了什么吗?也许我还需要启用/配置其他东西?

【问题讨论】:

  • 您发送的响应代码是否正确?
  • 谢谢 Iganacio,您能详细说明您的意思吗?

标签: php web-services authentication basic-authentication


【解决方案1】:

对于 PHP-CGI:

在 .htaccess 中添加:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
</IfModule>

并在脚本的开头添加以下内容:

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));

【讨论】:

    【解决方案2】:

    感谢 Naktibalda 在 irc.freenode.net 上 ##php 的帮助,我终于找到了答案

    以下页面总结了该问题:http://php.net/manual/en/features.http-auth.php

    引用相关位:

    从 PHP 4.3.0 开始,为了防止有人编写脚本,该脚本会泄露通过传统外部机制进行身份验证的页面的密码,如果为该特定身份启用了外部身份验证,则不会设置 PHP_AUTH 变量页面和安全模式已启用。无论如何,REMOTE_USER 可用于识别经过外部验证的用户。因此,您可以使用 $_SERVER['REMOTE_USER']。

    ...

    PHP 使用 AuthType 指令的存在来确定外部身份验证是否有效。

    【讨论】:

      【解决方案3】:

      试过之前的建议,没用,也发现了

      CGIPassAuth On 
      

      是建议的 htaccess 添加的更新版本,但这对我仍然不起作用,而是我使用了

      SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
      

      (必须在您的根 htaccess 文件中)然后在 php 文件中

      list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['REDIRECT_HTTP_AUTHORIZATION'], 6)));
      

      如果有人仍然有问题,我建议他们检查服务器变量,因为数据可能在不同的变量中,您正在寻找以基本开头的东西

      【讨论】:

        【解决方案4】:

        应该是这样的

        echo "Username: " . $_SERVER[PHP_AUTH_USER] . ", Password: " . $_SERVER[PHP_AUTH_PW];
        

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-03
        相关资源
        最近更新 更多