3

我目前正在开发一个网络地图应用程序。我正在使用 Apache 2.4、PHP、Javascript 和 Dojo(用于映射的 javascript 库)。Dojo 正在向 Web 服务发出请求(托管在 https://host/server/rest/services/... 并由我公司的另一个部门管理)。但是为了访问这些 Web 服务,需要使用 Basic 进行身份验证。

因为他们没有像他们应该的那样实现令牌身份验证(我们可以与 dojo 一起使用),所以当我们连接到应用程序以访问 web 服务中的数据时,会出现一个弹出窗口。我想配置 Apache(我的httpd.conf)以避免我们的用户出现此弹出窗口,并且我设置了一个正确的 Authorization 标头,该标头将随 Dojo 向我们的 Web 服务发出的每个请求一起发送。

我的第一个想法是用headers_module设置 Header

RequestHeader set Authorization "Basic ****" 

然后将rewrite_module与我在网上找到的一起使用:

RewriteEngine on
RewriteCond %{HTTP:Authorization} ^(.*)$ [NC]
RewriteRule /.* - [E=HTTP_AUTHORIZATION:%1]

但它似乎不起作用,因为如果我检查:

$headers = apache_request_headers();
$server = $_SERVER["HTTP_AUTHORIZATION"];

$headers包含我想要的,但$server没有

所以我继续前进并决定使用setenvif_module这似乎是一个很好的解决方案。我现在有:

RequestHeader set Authorization "Basic ****"
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

即使我不明白$1的含义和作用。

为了进一步解释,我的应用程序有一个登录页面 index.php,其中没有对 host/server/rest/services 的请求,并且 HTTP_AUTORIZATION 看起来是空的。一旦我登录到我的页面 application.php,所有请求都已发出,HTTP_AUTHORIZATION 似乎充满了我想要的“基本 ****”,但出现了一个空的 REDIRECT_HTTP_AUTHORIZATION 并且来自网络服务的弹出窗口要求用户和仍然出现密码。

你知道我错过了什么或可能做错了什么吗?
谢谢您的帮助。

4

0 回答 0