Apache剥离“Authorization”头信息

19

我在使用 Apache 2.2.15 服务器时遇到了一些小问题。 我在上面运行 Django 应用程序,使用 mod_wsgi 模块。我启用了 WSGIPassAuthorization On,这使得基本身份验证正常工作。但是我最近实现了 OAuth2.0 来保护我的 API(隐式授权),我认为 Apache 不会让它通过,因为它的格式是“Authorization: Bearer token”。我想“Bearer”是问题所在,尽管我不知道该如何避免。

我尝试了:

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
在httpd.conf、.htaccess(设置了AllowOverride All后)以及我的虚拟主机中,都没有作用,无论如何都不起作用。我整天在网上搜索,除了这两种方法,没有找到其他解决方案。
提前致谢!
编辑:
OS : RedHatEL6.4
Apache : 2.2.15
Django: 1.6.6 w/ django-oauth-toolkit
Python: 2.7.8

我不确定关于 .htaccess,但几乎可以肯定它正在读取 httpd.conf(在这个文件中的修改会影响服务器的行为)。但是,在文件中有没有特定的位置应该放这些代码呢?顺便说一下,非常感谢您的回答,我刚刚检查过,mod_proxy 已经激活。我尝试过使用 apachectl restartapachectl stop; apachectl start 重启了 Apache 服务,但还是无法解决这个问题 :/。 - Martin Latrille
如果您想阅读有关在RH服务器上配置Apache的简单教程,请参见此处 - JustSteveKing
1
我的虚拟主机在conf.d/mysite.conf文件中 ;) ! 刚刚尝试了service httpd restart,但是没有解决问题,不过好在以后可以知道这个方法。从现在开始我会只修改mysite.conf,并且感谢你的帮助和教程链接! - Martin Latrille
因为我感到绝望,尽了我所能的一切,以防万一哈哈。不会再这样做了先生,我保证。 - Martin Latrille
1
明白了!再次感谢! - Martin Latrille
显示剩余4条评论
3个回答

43

我解决了我的问题,最终发现与我的Apache配置完全无关。所以,如果你在寻找一个解决相同问题的答案,下面的其中一种解决方案应该可以解决:

配置 WSGI:

WSGIPAssAuthorization On

配置 .htaccess 文件:

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

您可以将这两个内容放入您的httpd/conf.d/project.conf文件中!


6
需要在.htaccess文件中添加如下内容:SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0。这将为HTTP身份验证设置必要的环境变量。 - simo
@simo 这对我很有帮助。 - Volt
@simo @Volt - RewriteRuleSetEnvIf指令实际上执行相同的操作(将环境变量HTTP_AUTHORIZATION设置为Authorization头的内容),因此只需要其中之一即可。 - piit79
只需在Apache配置中添加“WSGIPAssAuthorization On”,现在它可以正常工作了。谢谢! - Dave
我建议使用 RewriteCond %{HTTP:Authorization} ^(.+) 而不是 ... ^(.*),以避免在头部不存在时进行匹配。 - mh8020
显示剩余4条评论

12

为增强安全性以防止脚本查看用户名、密码等信息,几个模块将剥离Authorization头部,除非开发人员明确启用该功能。如果您只需在.htaccess中添加以下行,则许多此类模块将允许此标头:CGIPassAuth on(来源:Apache文档StackOverflow


谢谢,花了一整天来调试这个问题! - Richard Hunter

1
为了解决这个问题,我只需要在/etc/apache2/sites-available/mySite.conf文件中添加WSGIPassAuthorization On,如下所示:
        ...
                </Files>
        </Directory>

        WSGIPassAuthorization On

        WSGIScriptAlias / /home/X/wsgi.py
        WSGIDaemonProcess sepanta_dev python-path=/home/X python-home=/home/X/venv
        ...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接