我会添加评论,但声誉不允许。
我很久以前就遇到过这个问题,并且认为它与PHP / Apache配置有关。授权标头在某些PHP / Apache配置中访问您的应用程序之前会被剥离。解决方案是添加重写到.htaccess(或虚拟服务器)。
我不记得我的解决方案的具体细节,但将其添加到.htaccess可能会有所帮助:
RewriteEngine On RewriteCond %{HTTP:Authorization} ^(.*) RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
我有另一个使用它的应用程序(Symfony框架):
RewriteEngine On RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
您是否也尝试过基本授权 - 看看是否有效?像这样创建一个标题:
$username = 'username'; $password = 'password'; $auth = base64_encode($username.':'.$password); $auth_header = 'Basic '.$auth;
如果你使用上面的代码,$ auth_header将是“Basic dXNlcm5hbWU6cGFzc3dvcmQ =”
并且您的完整标题将是'授权:基本dXNlcm5hbWU6cGFzc3dvcmQ ='
如果你在标题中发送它,在PHP中你可以使用:
var_dump('username is: '.$_SERVER['PHP_AUTH_USER'] . ' and password is: ' . $_SERVER['PHP_AUTH_PW']);
这至少可以指出你正确的方向。
我看到的另一件事是,上面的测试代码看起来像是在设置响应头,但var_dumping请求头?我假设您的测试涉及单独的文件/应用程序/浏览器发送您尝试转储的实际请求。
我还发现,在使用基本授权时,浏览器可能会发送OPTIONS运行前请求,在发送后续授权请求之前,可能还需要在服务器端处理。