我在 Web 应用程序前面使用 Apache httpd 作为反向代理。身份验证由模块 (mod_auth_mellon) 执行,该模块设置各种请求环境变量,其中包含有关经过身份验证的用户的详细信息(用户名、显示名称等)。
我使用 mod_headers 从传入请求中删除标头,并将其替换为 mod_auth_mellon 设置的请求环境变量的值。
RequestHeader unset mellon_uid
RequestHeader set mellon_uid "%{mellon_uid}e" env=mellon_uid
因此,任何客户端提供的mellon_uid
标头都会被丢弃。如果 mod_auth_mellon 认为用户已登录,则会mellon_uid
将新的请求标头添加到发送到 Web 应用程序的请求中。
到目前为止,我已经通过使用 mod_macro 实现了这一点:
Use Attribute uid
Use Attribute display_name
Use Attribute email
...等等,其中是一个宏,它扩展为上面提供的属性的Attribute
两个指令。RequestHeader
但是,一些用户详细信息是多值的,为此 mod_auth_mellon 设置了多个请求环境变量,形式如下:
mellon_foo_0 = first
mellon_foo_1 = second
mellon_foo_2 = third
mellon_foo_N = 3
由于属性值的数量可能有所不同,因此我不能依赖静态变量列表来进行这样的处理。
我想避免使用MellonMergeEnvVars
,而是设置以下内容:
mellon_foo = first;second;third
mellon_foo_N = 3
...因为这意味着 Web 应用程序现在必须处理正确解析mellon_foo
请求标头的复杂性,处理本身包含分号的值等。事实上,我不清楚 mod_auth_mellon 是否执行任何转义,这使得明确的解析变得不可能(如果我是对的......)
答案1
我认为,只要您只查看第一个mellon_foo_N
值,这里就不应该有任何风险,因为 mod_auth_mellon 始终会自行设置这些值,覆盖用户可能尝试发送的任何值。它也应该始终设置mellon_foo_N
,但您始终可以先取消设置以确保万无一失。