ClaimsPrincipal.Current vs. HttpContext.Current.User?

时间:2013-10-29 07:33:35

标签: asp.net-mvc model-view-controller wif claims-based-identity azure-acs

在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的一个实例,不需要商店。

我只是钻错了属性。他们两个的形状几乎相同,即。相同的属性和方法,让我们感到困惑。

1 个答案:

答案 0 :(得分:9)

Identity是当前经过身份验证的用户,而principal是运行代码的安全上下文。

这篇文章是一个很好的解释,我发现它很有用http://msdn.microsoft.com/en-us/library/ftx85f8x.aspx