Symfony和NTLM-缺少Apache标头授权

时间:2018-07-20 12:22:32

标签: apache symfony symfony-3.4

我正在运行Symfony 3.4 LTS,尝试使用NTLM身份验证时遇到问题。

作为记录,在我的服务器上我得到:

  • WordPress网站
  • 一个TYPO3网站
  • 和我新的SYMFONY网站

Wordpress和Typo3通过以下方式使用NTLM身份验证:

<?php

$headers = apache_request_headers();
// then $headers['Authorization'] contains a big string with all the needed datas

?>

..但是我无法在Symfony上使用此脚本,因为apache_request_headers()函数没有返回Authorization标头。我在Stack Overflow中进行了一些搜索,但没有任何帮助解决我的问题。

我尝试过:

  • 在我的htaccess中添加新指令:RewriteCond %{HTTP:Authorization} ^(.*) RewriteRule .* - [e=HTTP_AUTHORIZATION:%1] ..以及SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0

  • 使用$ _SERVER ['AUTH_USER'](此变量丢失)

  • 使用捆绑软件(我发现的唯一一个捆绑软件仅在Symfony 2.x上运行)
  • 将请求与$request->headers->all()一起使用,但Authorization参数仍然缺失

你有什么主意吗? 顺便说一句,我不想​​编辑我的虚拟主机文件,因为我的另外两个网站运行良好。

2 个答案:

答案 0 :(得分:0)

我猜您正在使用php-fpm而不是mod_php。

您错过了吗:

SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1

在FPM处理程序之前的apache配置中?

答案 1 :(得分:0)

我找到了解决方案。在我的代码中,我添加了:

<?php

        if (!isset($headers['Authorization']))
        {
            header('HTTP/1.1 401 Unauthorized');
            header('WWW-Authenticate: NTLM');
            exit;
        }

..在apache_request_headers()函数之后。现在,我可以访问Authorization标头。