Dot-Net

限制對記錄的訪問。基於聲明的權限是個好主意

  • June 10, 2015

在 .net 基於聲明的身份框架中

如果我想限制使用者對一個帳戶進行操作(查看或編輯),比如說一個帳戶,一個特定帳戶 #123456。(我說的是商業實體,比如銀行帳戶。)創建索賠是個好主意嗎對於他們可以查看或編輯的每個帳戶?

在一個集合中有很多聲明有什麼缺點嗎?系統管理員可能有權訪問系統中的所有帳戶,從而創建數百個索賠(每個帳戶可能不止一個)

大型聲明集的最直接後果是性能下降,因為令牌在網路中所有相關係統之間來回交換。例如,預設情況下,WIF 會序列化令牌並將它們放入 cookie 中。因此,在實踐中,您可以在其中儲存的數據量也受到限制。還有其他方法可以解決這個問題,但潛在的問題仍然存在。

第二個考慮因素是您將在誰和哪裡管理使用者和帳戶之間的關聯。如果這是特定於應用程序的事情,那麼您不太可能將這些關聯推送到中央 STS(索賠發行人)。您最終將獲得 2 個 STS:一個辨識使用者(和身份提供者:IdP)和一個特定於應用程序的 STS,它將 IdP 頒發的令牌轉換為應用程序支持的東西(包括特定使用者的帳戶列表)

話雖如此,使用者和他的帳戶之間的關聯可能是可以在許多應用程序中重用的東西,那麼將它放在專門的 STS 之後可能是有意義的。

第三個考慮因素是潛在的不必要的資訊披露。應用程序可能只需要知道使用者 X 是否有權訪問帳戶 123。通過提供使用者 X 有權訪問的所有帳戶的列表,您將披露更多所需的資訊。

作為一般準則,聲明更適合“粗粒度”屬性。在您可以使用基礎設施優化的應用程序中,“細粒度”訪問控制可能會得到更好的處理。

這是一個極端的例子:想像一個文件系統。您會將使用者有權訪問的文件的名稱編碼為聲明嗎?不太可能,因為您最終可能會獲得數百萬…

另一個極端的例子:如果你想在數據庫中實現行級安全。您會將每個使用者的 row_id 編碼為聲明嗎?再次不太可能,因為可能有很多,它是非常特定於應用程序的,還因為使用數據庫查詢解決行過濾可能更容易(而且效率更高)(這是基礎架構優化的一個範例)

引用自:https://stackoverflow.com/questions/2979034