【问题标题】:Apache as reverse proxy with authentication passed from back to frontApache 作为反向代理,身份验证从后到前传递
【发布时间】:2011-11-04 06:45:01
【问题描述】:

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

  • / -> 将包含公共信息,并将由 Apache 提供服务器
  • /myApp -> 会被Apache重定向到后面的weblogic
  • /private -> 将包含私有静态信息。仅当用户之前已成功登录 myApp 时,才应访问此内容。

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

有什么想法吗?

【问题讨论】:

    标签: apache authentication proxy reverse


    【解决方案1】:

    / 公开信息没问题,直截了当。使用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 以确保它是有效的session 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”中的文件就好了.这是一种迂回的做法,但如果 /myApp 发出的会话 cookie 的有效性只能在 WebLogic 服务器上检查,您将不得不来回重新路由请求或类似的东西。

    【讨论】:

    • 谢谢!!。绝对最好的选择是 2。我想我会准备应用程序,因此在对应用程序发出的每个请求中,一个具有超时时间的加密 cookie 将被注入到页面(在一个级别域中),并且当访问 /private 时它将解密cookie,检查超时,如果没问题,向用户显示页面。唯一的问题是主页(公共和私人部分)将使用 Drupal,所以我需要检查如何设置 Drupal 以查找该 cookie。
    猜你喜欢
    • 1970-01-01
    • 2018-07-04
    • 2011-06-28
    • 2012-10-17
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    相关资源
    最近更新 更多