2015-10-24 54 views
0

我爲MVC5 Web API 2,ASP.NET應用程序使用無狀態設計。C#ASP.NET MVC - 在Owin cookie中存儲組權限

用戶角色由管理員通過選擇權限來創建。 爲應用程序中的每個用戶分配一個自定義用戶角色,一個角色可以在用戶之間共享。

剃刀視圖基於用戶角色的權限進行構建。 根據用戶角色的權限,可以使用MVC和API控制器。

對於服務器的每個請求,需要處理用戶權限。 我能想到的2種方法來做到這一點:

  1. Store中的角色要求的用戶角色的ID和執行數據庫查詢,以檢索每個頁面加載/請求的權限。
  2. 在用戶登錄時,檢索分配給用戶角色的所有權限,將它們串行化爲JSON並將它們存儲在Authentication聲明中。然後在每個頁面加載/請求中,將JSON反序列化回對象並處理權限。

哪個更好?

選項1比選項2慢很多。 是否存在將權限存儲在cookie中的安全風險? 有沒有更好的或替代的解決方案,快速和安全。

回答

3

在cookie中存儲權限和其他合理的數據是總是一個非常糟糕的想法,因爲它很容易操縱它們。信任cookie需要額外的服務器端檢查,這會破壞將其存儲在cookie中的目的。

只有信任受控制的數據(即數據庫中的數據),您纔會更好。

根據您的應用程序,只有在性能影響過大時確實需要訪問它們時,纔可能有用地懶惰地評估權限。請記住,您可以利用諸如Redis之類的內容來大幅提升性能。

再次,根據您的應用程序,我可能會選擇1,因爲它是更安全的方式。