首页 > 解决方案 > Apache requestheaders 环境变量和早期

问题描述

我正在开发一个系统,该系统需要从我们公司正在开发的应用程序中为所有 URL 发送承载令牌密钥 (JWT),当需要下载附件时会出现问题,单击链接时会触发浏览器移动设备。

如您所知,这将不允许设置标头,因此如果标头是空的,我正在研究添加标头的解决方案。

现在我可以从查询字符串中获取 env 变量。

但是我需要一种方法来尽早设置 requestheader 以及 env= 值,这可能吗?

这就是我所拥有的:

RewriteCond %{QUERY_STRING} (?:^|&)token=([^&]+)
RewriteRule (.*) - [E=JW_TOKEN:%1]
RequestHeader setIfEmpty Authorization "Bearer %{JW_TOKEN}e" "env=JW_TOKEN"

我需要做的是:

RewriteCond %{QUERY_STRING} (?:^|&)token=([^&]+)
RewriteRule (.*) - [E=JW_TOKEN:%1]
RequestHeader setIfEmpty Authorization "Bearer %{JW_TOKEN}e" "env=JW_TOKEN early"

但这不起作用。

标签: apacheenvironment-variablesrequest-headers

解决方案


我对 HSTS 也有类似的问题。有条件地设置标头的最优雅的方法是(如此处所述:https ://stackoverflow.com/a/24145033/3433306 ):

Header set Strict-Transport-Security "max-age=31536000" env=HTTPS

但这不能与early标志结合使用。但是,如果没有按要求设置环境变量,我们可以提前设置标头并稍后将其删除。

Header set   Strict-Transport-Security "max-age=31536000" early
Header unset Strict-Transport-Security env=!HTTPS

在您的情况下,这将类似于以下内容(未经测试):

RewriteCond %{QUERY_STRING} (?:^|&)token=([^&]+)
RewriteRule (.*) - [E=JW_TOKEN:%1]
RequestHeader setIfEmpty Authorization "Bearer %{JW_TOKEN}e" "early"
RequestHeader unset      Authorization "env=!JW_TOKEN"

推荐阅读