自定義應用程序特定的與安全性相關的HTTP標頭是否違反了關注點分離,這是否被認爲是不好的做法?我意識到使用自定義頭來控制服務將緊密夫婦客戶端與服務實施。或者在這種情況下,控制安全框架的行爲。在這裏我準備用這些自定義標題的背景是這樣的:自定義安全HTTP標頭是否違反了關注點分離
我們使用基於令牌的認證,其中token有固定的壽命,並且新的令牌每次發出驗證的客戶端調用Web API。 SPA客戶端可以調用與AJAX服務器,兩種環境下
- 用戶操作(導航和提交)
- 自動刷新(當前視圖以固定間隔重新獲取數據)現在
,如果用戶當頁面打開時,會話永不過期,因爲每個自動獲取都會生成新的令牌。 不知何故,我們需要將用戶操作與服務器端的自動刷新區分開來,並且僅針對用戶操作發出新令牌。
我實現基於WebSocket的刷新將是一個解決方案,但我們決定堅持定時AJAX調用由於具體事宜。另一種解決方案是將令牌刷新作爲單獨的端點提供,但這會違反客戶的DRY原則,並且使用Spring Security進行設置會更麻煩。
唯一剩下的選擇是將用戶/自動信息嵌入到請求本身中,並且使用標頭似乎是一個可行的選項。某個標題的存在會阻止令牌刷新。易於使用幾行代碼實現。
我只關心,如果夫妻的客戶太多與服務實現。從技術上講,它不會將客戶端與服務耦合,而是前面的安全過濾器,從而泄漏用戶界面中的安全問題。理想的安全措施對用戶界面應該是透明的,所以新的客戶端可以在不知道安全性的情況下進行編碼(特別是在使用cookie的情況下)。
另一方面,此解決方案不具有破壞性或變化性。這是一個可選功能。通過客戶端使用它,安全性得到增強,但在任何情況下都不會降低(從服務器的角度來看,就像它一樣)。現在的問題是,使用可選標題來增強安全性的原則是違反的,在這種情況下它是一個有效的解決方案嗎?
在我的選擇的安全性應透明最大化,但我不明白怎麼就不能在這種情況下泄露在客戶端的安全問題。
這是否意味着,用戶必須在24小時後重新進行身份驗證,即使是他/她正在使用系統不停止?另外,如何比僅使用一個具有長固定生命週期的單一(非刷新)令牌更安全?如果攻擊者可以竊取短命的訪問令牌,爲什麼他不能竊取刷新令牌?有什麼機制可以防止這種情況發生? –
這是正確的。這是更安全的,因爲如果令牌以某種方式受到泄露(由後端泄露,或者如果您的後端受到攻擊並且訪問令牌可以以某種方式顯示),則它只會持續1小時。這不是一個萬無一失的方法,但是這個想法是,短壽命的令牌更安全,因爲它們的活躍壽命較短,因此不易受永久折衷影響。這就是爲什麼OAuth使用靜態的API密鑰啓動VS Basic驗證的原因。 – rdegges
但是,如果攻擊者獲取刷新令牌,他仍然可以模擬用戶並獲得新的訪問令牌,對吧?所以我還不知道如何使用兩個令牌來提高安全性。這比僅使用一個具有長生命週期的單個令牌更好,並且以與刷新令牌相同的方式進行存儲? –