在MVC中,这两者之间的区别是什么?
它们看起来完全相同,甚至返回相同的类型/类System.Web.Security.RolePrincipal
但是有细微之处。
EG。当针对通过ClaimsPrincipal.Current生成的实例调用时,以下代码会引发各种错误
cp.FindFirst(ClaimTypes.Name); //{"Unable to connect to SQL Server database."} <--HUH!?
cp.Claims; //{"Value cannot be null.\r\nParameter name: username"}
上面的内容适用于cp而不是:
var cp = System.Web.HttpContext.Current.User
通过快速查看深入了解私人会员时,我可以看到他们都有相同的声明词典。但是,无论出于何种原因,当对ClaimsPrincipal.Current
帮助 - 为什么会这样!?这让我发疯了。
============= EDIT ==================
一定要上床睡觉了。
IPrincipal支持多种身份。它需要某种商店。 IIdentity返回ClaimsIdentity的一个实例,不需要商店。
我只是钻错了属性。他们两个的形状几乎相同,即。相同的属性和方法,让我们感到困惑。
答案 0 :(得分:9)
Identity是当前经过身份验证的用户,而principal是运行代码的安全上下文。
这篇文章是一个很好的解释,我发现它很有用http://msdn.microsoft.com/en-us/library/ftx85f8x.aspx。