如果存在GET参数,则使用openAM cert auth设置apache代理 - 设置头

时间:2013-10-07 11:48:37

标签: apache authentication http-headers certificate openam

OpenAM中基于证书的身份验证需要设置http标头X-Client-Cert。我想使用apache作为反向代理并设置此标头,当url是/ openam / UI / Login?module = PKI时。

/ openam / UI / Login用于用户名和密码验证。

我有这个配置:

...
  ProxyPass / balancer://mycluster/ 
  ProxyPassReverse / balancer://mycluster/ 

  RequestHeader set X-Client-Cert ""

  <Location "/openam/UI/Login/PKI">
    RequestHeader set X-Client-Cert  "%{SSL_CLIENT_CERT}s"
    SSLVerifyDepth 10
    SSLVerifyClient require
  </Location>

  RewriteRule /openam/UI/Login/PKI balancer://mycluster/openam/UI/Login?module=PKI [P]
...

它可以做到这一点,但成本是重写的 / openam / UI /登录?模块= PKI 至 / openam / UI /登录/ PKI 我不喜欢它。

如果没有重写,你可以建议我怎么做吗?

感谢。

2 个答案:

答案 0 :(得分:2)

使用apache2.4我可以用:

<If "%{QUERY_STRING} =~ /module=PKI/">
    RequestHeader set X-Client-Cert  "%{SSL_CLIENT_CERT}s"
    SSLVerifyDepth 10
    SSLVerifyClient require
<Else>
    RequestHeader set X-Client-Cert ""
</If>

答案 1 :(得分:0)

我认为使用SetEnvIfRequestHeader的组合可以实现这一点。

使用SetEnvIf设置一个变量,表明URI是针对正确的路径:

SetEnvIf Request_URI "/openam/UI/Login?module=PKI" x_client_cert=1

并使用env=[!]variable参数添加RequestHeader

RequestHeader set X-Client-Cert "%{SSL_CLIENT_CERT}s" x_client_cert=1

我的语法可能略有错误 - 尤其可能是第二个(URI)参数转义为SetEnvIf的格式,但这种方法应该可行。

文档链接:

http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html#setenvif

http://httpd.apache.org/docs/2.2/mod/mod_headers.html#requestheader