我使用 Apache httpd 作為 Web 應用程式前面的反向代理。身份驗證由模組 (mod_auth_mellon) 執行,該模組設定各種請求環境變量,其中包含有關經過身份驗證的使用者的詳細資訊(使用者名稱、顯示名稱等)。
我使用 mod_headers 從傳入請求中刪除標頭,並將其替換為 mod_auth_mellon 設定的請求環境變數的值。
RequestHeader unset mellon_uid
RequestHeader set mellon_uid "%{mellon_uid}e" env=mellon_uid
因此,任何客戶端提供的mellon_uid
標頭都會被丟棄。如果 mod_auth_mellon 認為使用者已登錄,則新的mellon_uid
請求標頭將會加入到傳送到 Web 應用程式的請求中。
到目前為止,我已經透過使用 mod_macro 使其變得易於管理:
Use Attribute uid
Use Attribute display_name
Use Attribute email
……等等,哪裡Attribute
有一個擴展為兩個的宏RequestHeader
是一個宏,可擴展為上面提供的屬性的
但是,某些使用者詳細資料是多值的,mod_auth_mellon 為此設定多個以下形式的請求環境變數:
mellon_foo_0 = first
mellon_foo_1 = second
mellon_foo_2 = third
mellon_foo_N = 3
由於屬性的值的數量可能會有所不同,因此我不能依賴靜態變數列表來進行這樣的處理。
我想避免使用MellonMergeEnvVars
,而是設定以下內容:
mellon_foo = first;second;third
mellon_foo_N = 3
……因為這意味著 Web 應用程式現在必須處理正確解析mellon_foo
請求標頭、處理本身包含分號的值等的複雜性。不可能(如果我是對的......)
答案1
我認為只要您只查看第一個mellon_foo_N
值,這裡就不應該有任何風險,因為 mod_auth_mellon 將始終自行設定這些值,從而覆蓋用戶可能嘗試發送的任何值。它也應該始終設置mellon_foo_N
,但您可以始終在最初取消設定以確保確定。