1

爲了避免犛牛剃鬚,我會盡量提供儘可能多的上下文。在Apache中配置代理以刪除身份驗證

我們有一個內部應用程序,也可在公共互聯網上使用。這個應用程序運行在IBM i上的幾個Apache實例上 - 大多數這些實例都需要http基本認證,除了一個實例充當「歡迎頁面」。這個「歡迎頁面」沒有身份驗證,但作爲一個導航中心,用戶可以轉到應用程序的其他部分(具有身份驗證並在不同的Apache實例上運行)的鏈接。

我們還有一些存儲在Confluence(一個wiki應用程序)中的文檔,它運行在一個單獨的服務器上。這個wiki應用程序可以在不需要驗證的情況下顯示文檔,但是如果您進行了驗證,則可以選擇編輯文檔(當然,假設您有權這樣做)。但關鍵在於文檔在不需要驗證的情況下可見。

我的問題是:我們希望Confluence中的文檔可以在主應用程序內部訪問(無論是在內部還是通過互聯網訪問時),但由於文檔有點敏感,我們不希望它可以訪問整個互聯網。

我們提出的解決方案是使用反向代理 - 我們在主應用程序上配置Apache實例,以便主應用程序上/help/的請求代理到合流應用程序。因此,Confluence應用程序不直接暴露於Internet。

但這是問題出現的地方。

如果我們只是代理/help/通過不需要身份驗證的主要應用Apache實例,則該文檔可從沒有問題的主要應用 - 但因爲你不需要身份驗證,這是提供給大家上互聯網也是如此 - 所以這是一個不行。

如果我們通過主要應用程序通過主要應用程序的Apache實例來代理'/ help /',那麼好像基本認證信息從主應用程序服務器傳遞到Confluence服務器上,然後我們得到一個認證失敗,因爲不是每個使用主應用程序的人在Confluence服務器上都有一個帳戶。 (對於那些做的,它工作正常 - 但大多數用戶不會有一個Confluence帳戶)。

所以(可能犛牛剃鬚從這個角度提出警告),卻彷彿與HTTP基本驗證打交道時,如果從服務器上配置了代理配置到服務器B,並設置將服務器A上的代理配置爲需要http基本認證,然後該認證信息直接傳遞給服務器B,並且在這種情況下,服務器B抱怨,因爲它不期望認證信息。

我對該問題的解決方案是設置2級代理 - 使用需要身份驗證的Apache實例也需要代理身份驗證/help/,但代理服務器(服務器C)有/help/。此服務器C不需要身份驗證,但不會暴露於Internet。並且服務器C配置爲將/help/代理到實際的Confluence服務器。

我在proxy-chain-auth的基礎上這樣做了一個環境變量,它似乎表明默認情況下,如果您有代理鏈,認證信息不會自動沿着鏈發送。

唉,這沒有奏效 - 我得到一個認證錯誤,似乎表明Server C事實上代理了認證信息,儘管我沒有設置proxy-chain-auth

所以,這是我的犛牛剃毛之旅。

我只是想設置一個配置,使我們存儲在Confluence上的文檔需要某種認證,但認證來自主應用程序,而不是來自Confluence。

(沒有要求通過互聯網訪問它,因爲Confluence服務器可以被其網絡上的任何人查看而沒有問題,所以這些都不會成爲問題)。

我希望我的問題已經夠清楚了 - 我實在不介意指向不同的方向來實現主要目標,但我不能改變主應用程序(或Confluence)從使用HTTP基本認證。

想法,任何人?

PS。爲了從Confluence服務器中檢索文檔,我實際上使用它們的REST API來檢索頁面內容 - 我不知道它是否有任何相關性,但我只是想明確說明它是否適用。

回答

2

事實證明,問題的解決方案非常簡單。

對於我的第二個不需要身份驗證的代理,我必須更改Apache配置以刪除任何授權標頭。

RequestHeader unset Authorization 

這會停止從第二個代理傳遞到Confluence的認證信息。