讓我們假設一個帶有分頁表的應用程序。防止無狀態環境下的休息呼叫
該表顯示了索引項目(item1,item2,... itemN)。
分頁結果由REST提供GET調用諸如/項目
的項目的細節由GET呼叫等提供/項目/ 1或/項目/ N
的問題是:這是確保訪問不允許的項目的最佳方式。
例如,
a)用戶呼叫/項目導致{1,2,3,4,5}這打印了一張 表格,其中包含指向每個詳細項目的鏈接。
b)防止呼叫/ item/6
請只有無狀態的解決方案,謝謝!
讓我們假設一個帶有分頁表的應用程序。防止無狀態環境下的休息呼叫
該表顯示了索引項目(item1,item2,... itemN)。
分頁結果由REST提供GET調用諸如/項目
的項目的細節由GET呼叫等提供/項目/ 1或/項目/ N
的問題是:這是確保訪問不允許的項目的最佳方式。
例如,
a)用戶呼叫/項目導致{1,2,3,4,5}這打印了一張 表格,其中包含指向每個詳細項目的鏈接。
b)防止呼叫/ item/6
請只有無狀態的解決方案,謝謝!
不知道我完全理解你的問題。對我來說,看起來你想擁有物品級別的授權。例如,用戶A只應該看到項目1,3和5,而用戶B應該看到項目1,2,3和6.如果是這種情況,您應該爲列表和單個項目強制執行授權約束。
如果你想要的是用戶只能訪問他之前列出的項目,那麼你並不處於無狀態的環境中。對項目的調用結果取決於先前的調用。所以你有一個國家。您可以移動狀態,將其移動到客戶端,但它仍然是狀態。
如果您想要的是第二個選項,並且希望您的服務保持大部分無狀態,請查看功能基礎安全性。基本上,您的列表需要返回客戶端需要使用的加密令牌才能訪問單個項目。
基本上,而不是隻返回物品的ID,加密碼令牌吧:
[
{ id = 1, token = 'XXX'},
{ id = 2, token = 'YYY'}
]
令牌將被組成:
您使用您的服務器私鑰簽署授權令牌,所以沒有人可以僞造它。您要求客戶端將此令牌添加到任何請求(作爲HTTP標頭)。所以服務器可以驗證客戶端已經收到授權。
您可以將該用戶名添加到令牌以確保授權不能被其他人重新使用。
請注意,我只是從內存來描述這個實現。與安全一樣,請仔細檢查我告訴你的任何內容;-)
你是對的,有一個國家。我只是不希望它被保留在服務器中。所以我喜歡來回傳遞名單的想法。爲了確保列表的安全,是否有任何來源可以指向我閱讀?我正在尋找能力基礎安全性,但它引導我進入操作系統安全。 –