3

我想了解ASP.NET身份驗證和授權機制。我明白什麼是索賠&什麼是角色。在幾乎所有相關的博客文章中,或者在這裏提出的問題都建議使用聲明並避免角色。我現在很困惑。我如何使用沒有角色的聲明? (我通常在註冊後將角色分配給用戶。)索賠沒有角色?

任何幫助表示讚賞。

謝謝

回答

4

角色是權利要求太,權利要求書只是更一般。

幾乎在每一個相關的博客文章,或在這裏的問題,建議使用索賠和避免角色。

我只能推測,因爲你沒有顯示確切的鏈接,它不完全是「對角色的索賠」。

而是「在基於角色的安全模型上使用基於聲明的安全模型」。這個很容易解釋,因爲角色也是主張,使用聲明你有角色,但你也可能有其他的要求。從技術上講,如果您創建ClaimsPrincipal並添加Role聲明,那麼ASP.NET將正確識別任何您所期望的角色 - WebForms授權,MVC授權過濾器和其他基於角色的東西照常工作。

如果您需要一些技術細節,請參閱我的博客條目,其中介紹瞭如何從舊的基於角色的表單身份驗證輕鬆切換到新的基於聲明的身份驗證。

http://www.wiktorzychla.com/2014/11/forms-authentication-revisited-for-net.html

特別是,你只需要添加的角色要求這樣

var identity = new ClaimsIdentity("custom"); 
identity.AddClaim(new Claim(ClaimTypes.Name, txtLogin.Text)); 
identity.AddClaim(new Claim(ClaimTypes.Role, "admin")); 

var principal = new ClaimsPrincipal(identity); 

// write the principal to cookie 

然而,什麼權利給你是做授權基於任意索賠的能力,如「用戶是比舊的18年「或」用戶來自法國,德國或西班牙「。這種武斷的陳述並不一定會映射到「角色」,而是完美的主張。

你這樣做的授權與自定義聲明授權管理器,這裏的例子

https://msdn.microsoft.com/en-us/library/system.security.claims.claimsauthorizationmanager(v=vs.110).aspx