Apache作为反向代理,身份验证从后向前传递

时间:2011-11-04 06:45:01

标签: apache authentication proxy reverse

我们有一个在Weblogic 10.3上运行的应用程序,在应用程序本身上提供了身份验证。我们希望将Weblogic放在Apache服务器之后。我们的想法是,我们将在Apache服务器上有一些公共内容,并且将通过反向代理访问应用程序。这非常标准。问题在于Apache服务器上有一些内容只有在用户登录应用程序时才能访问。所以基本上Apache服务器将在不同的URI上服务三种类型的内容:

  • / - >将包含公共信息,并将由Apache服务器
  • / myApp - >将由Apache重定向到后面的weblogic
  • / private - >将包含私有静态信息。只有在用户以前成功登录myApp时才能访问此项。

我的问题(我是Apache的新手)是否可能。我的想法是,应用程序可以在响应上放置一个cookie,指示用户是否已登录该应用程序,并且当用户尝试访问/私有时,Apache将检查该cookie。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

/公共信息没有问题,这很简单。使用ProxyPassProxyPassMatch将代理“/ myApp”反向到内部Weblogic服务器也很简单。您可能需要使用其他几个选项来确保正确设置代理主机名和cookie域。但是在“/ private”中设置静态保护的恐怖事件将会变得更加棘手。

1)您可以使用mod_rewrite检查myApp设置的cookie是否存在,如下所示:

RewriteCond %{HTTP_COOKIE} !the_name_of_the_auth_cookie
RewriteRule ^private - [F,L]

通过这样的方式检查cookie的问题在于无法验证cookie实际上是否是有效的会话。人们可以随意创建一个具有该名称的cookie,并能够访问/ private中的数据。


2)你可以设置它以便访问“/ private”中的任何内容,将请求重写为php脚本或可以检查cookie的内容以确保它是有效的会话cookie,然后提供请求的页面。类似的东西:

RewriteRule ^private/(.*)$ /cookie_check.php?file=$1  [L]

因此,当某人访问时,例如“/private/reports.pdf”,它会在内部重定向到“/cookie_check.php?file=reports.pdf”,并且可以通过这个php脚本来访问它需要的任何内容为了验证/ myApp已设置的cookie。如果cookie是有效会话,则读取“reports.pdf”文件并将其发送到浏览器,否则返回FORBIDDEN。

我认为这是处理此问题的首选方法。


3)如果你无法运行php或任何其他脚本,或者无法验证cookie(比如使用session_id或类似的数据库查找),那么你必须代理来自WebLogic。这与通过“cookie_check.php”访问“/ private”的基本概念不同,除了它是WebLogic服务器上的应用程序。就像/ myApp一样,你需要设置一个反向代理来访问它,然后这个应用程序将获取请求(已经从“/ private / some_file”内部重写)检查cookie的有效性,读取“some_file”文件在APACHE SERVER上,然后将其发送到浏览器,或发送FORBIDDEN。这是一般的想法:

ProxyPass /CheckCookie http://internal_server/check_cookie_app

RewriteCond %{REMOTE_HOST} !internal_server
RewriteRule ^private/(.*)$ /CheckCookie?file=$1 [L]

此条件通过/ CheckCookie应用程序重新路由所有不是来自“internal_server”的“/ private”请求,并且由于应用程序在“internal_server”上运行,因此它可以访问“/ private”中的文件就好了。这是一种循环方式,但如果只能在WebLogic服务器上检查/ myApp发出的会话cookie的有效性,则必须来回重新路由请求或类似的东西。