3

是否有權利使用權利管理的最佳做法?Web API和.NET 4.5:索賠和權利

我正在使用新的.net 4.5和新的聲明類。 目前,我做這樣的事情:

new ClaimsIdentity(new List<Claim> 
        { 
         new Claim("Username", user.UserName), 
         new Claim("UserNumber", user.UserNumber.ToString()), 
         new Claim("Creation_Right", ""), 
         new Claim("Edit_Right", "") 
        } 

我添加正確的索賠沒有值。 稍後我檢查存在的權利。沒有必要有一個值(如真/假) - 如果它存在,它的隱含''。

有沒有更好的方法來做到這一點?

回答

1

也許吧。看起來您正在將認證和授權合併在一起,在認證時做出訪問策略決定。

您還可以選擇將授權組件從認證組件中分離出來。索賠代表一組有關用戶的信息,可用於做出授權決定。也就是說,您的認證步驟會產生一組聲明,並且每當您的用戶嘗試訪問某些內容時,這些聲明都會被提供給授權決策的授權組件。

這提供了一些靈活性,因爲您的授權政策可以獨立於您的索賠發行系統進行更改和演變。例如,您可能會發出一個角色聲明,將某人標識爲管理員,您也可能會發出一個身份驗證方法聲明,以聲明用戶如何登錄,例如使用智能卡或用戶名和密碼。這爲您定義訪問策略提供了強大的動力,您只需要一個管理員角色即可訪問某些資源,而其他更敏感的資源需要管理員角色並使用強大的身份驗證機制。這也意味着您可以根據上下文在多個不同的訪問策略之間切換。您的在線威士忌商店可能會在美國使用ageOver21聲明,但您的網站的加拿大版本則需要超過18個或超過19個聲明。將authZ與authN分開允許這種靈活性。

+0

嗨,也許我應該提到我使用ASP.NET Web API。身份驗證和授權在框架中分離。我將authentication-attribute添加到控制器的方法中,只有在用戶通過身份驗證時才能調用它們。在方法中,我檢查聲明並允許用戶執行。簡單的「在管理員組中」對我不起作用。我的系統有很多權利。我可以爲每一個權利添加一個組:(允許創建的組,允許刪除的組),但這不是我想的一個好主意。 – user437899