2015-06-21 71 views
48

我完全不熟悉ASP.NETIdentityclaims的使用,並希望瞭解使用Roles and/or Claims時的最佳實踐。ASP.NET身份角色與聲明的最佳實踐

這一切看完後,我仍然有這樣的問題......

問:我們不再使用的角色?
問:如果是這樣,爲什麼角色仍然提供?
問:我們是否應該只使用索賠?
問:我們是否應該使用角色&索賠?

我最初的想法是我們「應該」一起使用它們。我看到Claims作爲他們支持的Roles的子類別。

例如:
角色:會計
索賠:CanUpdateLedger,CanOnlyReadLedger,CanDeleteFromLedger

問:他們打算是相互排斥?
問:或者只索賠索賠和「完全符合」索賠要好嗎?
問:那麼這裏的最佳實踐是什麼?

示例:使用角色&索賠一起
當然,你將不得不爲此編寫你自己的屬性邏輯...

[Authorize(Roles="Accounting")] 
[ClaimAuthorize(Permission="CanUpdateLedger")] 
public ActionResult CreateAsset(Asset entity) 
{ 
    // Do stuff here 

    return View(); 
} 

實例:設施排位您的索賠

[ClaimAuthorize(Permission="Accounting.Ledger.CanUpdate")] 
public ActionResult CreateAsset(Asset entity) 
{ 
    // Do stuff here 

    return View(); 
} 
+1

所以,我現在面臨着同樣的問題,你如何解決它,以及如何在應用程序中分配權限? – Loai

回答

47

角色是一個象徵性的類別,收集togethe r用戶共享相同級別的安全權限。基於角色的授權需要先識別用戶,然後確定用戶分配的角色,最後將這些角色與被授權訪問資源的角色進行比較。

相比之下,索賠是用戶標識自己的權利。換句話說,「我被允許這樣做,因爲我有這個索賠。」一般而言,基於聲明的授權包含基於角色的授權。準確地說,角色成員身份是基於身份確定的,身份只是權利要求價值的一種權利。角色本質上是一種非常特殊的要求,即「因爲我的用戶名是這個,所以我是這個角色的成員,因爲我是這個角色的成員,所以我可以訪問這個資源。」

你可以可以一致使用,或者在某些情況下使用一種類型,其他情況下使用一種類型。它主要取決於與其他系統和您的管理策略的互操作性。例如,管理員可能更容易管理分配給某個角色的用戶列表,而不是管理分配了特定「索賠」的人員。在RESTful場景中,聲明可能非常有用,您可以將聲明分配給客戶端,然後客戶端可以提出授權請求,而不是爲每個請求傳遞用戶名和密碼。

13

正如@克萊斯完美地解釋,聲稱可能是一個更具描述性和深層次的角色。我認爲他們是你的角色IDS。我有一個健身房ID,所以我屬於成員角色。我也在跆拳道課程,所以我有一個他們的要求,一個跆拳道ID。我的申請需要申報新角色以適應我的會員權利。相反,我在健身房裏可以做的每件特別的事情都有ids,而不是很多新的會員類型。這就是爲什麼索賠更適合我。

Barry Dorrans有一個很棒的解釋視頻,談論使用索賠而不是角色的優勢。他還表示,爲了向後兼容,角色仍然在.NET中。該視頻對於聲明,角色,政策,授權和身份驗證方式非常翔實。

你可以在這裏找到:ASP.NET Core Authorization with Barr Dorrans

PS。對不起我的英文語法。