2013-12-19 66 views
1

讓我們假設一個帶有分頁表的應用程序。防止無狀態環境下的休息呼叫

該表顯示了索引項目(item1,item2,... itemN)。

分頁結果由REST提供GET調用諸如/項目

的項目的細節由GET呼叫等提供/項目/ 1或/項目/ N

的問題是:這是確保訪問不允許的項目的最佳方式。

例如,

a)用戶呼叫/項目導致{1,2,3,4,5}這打印了一張 表格,其中包含指向每個詳細項目的鏈接。
b)防止呼叫/ item/6

請只有無狀態的解決方案,謝謝!

回答

0

不知道我完全理解你的問題。對我來說,看起來你想擁有物品級別的授權。例如,用戶A只應該看到項目1,3和5,而用戶B應該看到項目1,2,3和6.如果是這種情況,您應該爲列表和單個項目強制執行授權約束。

如果你想要的是用戶只能訪問他之前列出的項目,那麼你並不處於無狀態的環境中。對項目的調用結果取決於先前的調用。所以你有一個國家。您可以移動狀態,將其移動到客戶端,但它仍然是狀態。

如果您想要的是第二個選項,並且希望您的服務保持大部分無狀態,請查看功能基礎安全性。基本上,您的列表需要返回客戶端需要使用的加密令牌才能訪問單個項目。

基本上,而不是隻返回物品的ID,加密碼令牌吧:

[ 
    { id = 1, token = 'XXX'}, 
    { id = 2, token = 'YYY'} 
] 

令牌將被組成:

  • 一個隨機數
  • EN到期日
  • 要授權的物品ID
  • 上述元素的密碼簽名

您使用您的服務器私鑰簽署授權令牌,所以沒有人可以僞造它。您要求客戶端將此令牌添加到任何請求(作爲HTTP標頭)。所以服務器可以驗證客戶端已經收到授權。

您可以將該用戶名添加到令牌以確保授權不能被其他人重新使用。

請注意,我只是從內存來描述這個實現。與安全一樣,請仔細檢查我告訴你的任何內容;-)

+0

你是對的,有一個國家。我只是不希望它被保留在服務器中。所以我喜歡來回傳遞名單的想法。爲了確保列表的安全,是否有任何來源可以指向我閱讀?我正在尋找能力基礎安全性,但它引導我進入操作系統安全。 –