通過 apache2 反向代理進行角色管理的身份驗證
最初發佈在 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 頁面會 -據我所知- “破壞”代理概念,因為我會重定向,但可能會失去“其他請求參數”,這不是很清楚對我來說,因為我從未使用過代理。
。mod_authn_dbd 可以解決嗎?到目前為止,我還沒有設法使用它登錄,但是,無論如何,我不確定它是否能解決我添加 get 參數的需要。libapache2-mod-auth-mysql
可能是一個解決方案,但該模組似乎已停產,所以我什至無法嘗試我的想法不多了。
我怎樣才能實現我所需要的?我很確定有一個簡單的解決方案可以滿足這種常見需求。
唯一想到的是編寫自己的簡單代理,例如在 php/curl 上。Apache 將用作啟用 php 的 Web 伺服器,而 php/curl 將根據提供的使用者名代理請求並修改 GET 參數。您甚至可以進行啟用 cookie 的身份驗證,而不僅僅是 HTTP 身份驗證。
您也可以使用 nginx、HTTP 身份驗證和 nginx lua 模組嘗試相同的事情,但這基本上是相同的東西,減去在 lua 中編寫代理的必要性 - lua 只會決定使用者是否具有管理員角色,而 nginx 將代理請求並修改 GET 參數。