Permissions

通過 apache2 反向代理進行角色管理的身份驗證

  • September 23, 2015

最初發佈在 SO 上,但我想它更屬於這裡。歡迎提出建議、評論和理想的解決方案!(順便說一句,如果發錯地方了,我會刪除 SO Thread)

我需要設置一個反向代理來提供從外部到內部伺服器的受限訪問。以下是主要要求:

  • 將請求從https://www.example.com重定向到http://internalserver(完成)
  • 依靠簡單但經過驗證的身份驗證機制。(正在工作)
  • 通過向 URL 添加一些 GET 參數來管理使用者角色。(但如何?)
  • 伺服器正在託管一個 java 應用程序。我還沒有訪問它,它的應用程式碼是不會改變的。這應該沒關係。

我安裝並配置了mod_proxy,並且重定向工作正常。

auth 使用的是 apache2 basic auth,這在安全性方面應該足夠了。

現在,我的問題是角色管理。我需要更改請求,以便使用者 foo 具有管理員權限,而使用者 bar 沒有。它應該像設置一個 GET 參數一樣簡單"&role=admin",但我不知道在代理請求時如何執行此操作。

這些角色目前儲存在一個專用的 MySQL 數據庫中,因此只需一個請求即可獲得權限,在 PHP 中很容易完成。我的問題是,如果我呼叫 php 頁面,我不知道如何保持代理行為。我希望每個請求都附加角色參數,但需要保持請求的其餘部分不變。

我目前的代理使用虛擬主機配置(別名 .htaccess)完成所有操作,但我不知道哪種方法可行。我不能在 VHost 中執行 MySQL 請求,並且重定向到 php 頁面會 -據我所知- “破壞”代理概念,因為我會重定向,但可能會失去“其他請求參數”,這不是很清楚對我來說,因為我從未使用過代理。

libapache2-mod-auth-mysql可能是一個解決方案,但該模組似乎已停產,所以我什至無法嘗試。mod_authn_dbd 可以解決嗎?到目前為止,我還沒有設法使用它登錄,但是,無論如何,我不確定它是否能解決我添加 get 參數的需要。

我的想法不多了。

我怎樣才能實現我所需要的?我很確定有一個簡單的解決方案可以滿足這種常見需求。

唯一想到的是編寫自己的簡單代理,例如在 php/curl 上。Apache 將用作啟用 php 的 Web 伺服器,而 php/curl 將根據提供的使用者名代理請求並修改 GET 參數。您甚至可以進行啟用 cookie 的身份驗證,而不僅僅是 HTTP 身份驗證。

您也可以使用 nginx、HTTP 身份驗證和 nginx lua 模組嘗試相同的事情,但這基本上是相同的東西,減去在 lua 中編寫代理的必要性 - lua 只會決定使用者是否具有管理員角色,而 nginx 將代理請求並修改 GET 參數。

引用自:https://serverfault.com/questions/724293