ClaimsPrincipal.Current vs. HttpContext.Current.User?

Alw*_*wyn 10 model-view-controller asp.net-mvc claims-based-identity wif azure-acs

在MVC中这两个有什么区别?

它们看起来完全相同,它们甚至返回相同的类型/类别,System.Web.Security.RolePrincipal但有细微之处.

例如.当针对通过ClaimsPrincipal.Current生成的实例调用时,以下代码会引发各种错误

cp.FindFirst(ClaimTypes.Name); //{"Unable to connect to SQL Server database."} <--HUH!?
cp.Claims; //{"Value cannot be null.\r\nParameter name: username"}
Run Code Online (Sandbox Code Playgroud)

当cp是这样时,上面的工作:

var cp = System.Web.HttpContext.Current.User
Run Code Online (Sandbox Code Playgroud)

通过快速查看向私人成员钻取时,我可以看到他们都有相同的声明字典.但无论出于何种原因,公共财产在被召回的对象被召唤时都会受到打击ClaimsPrincipal.Current

帮助 - 这是为什么!?这真让我抓狂.

=============编辑==================

一定是上床睡觉的时候了.

IPrincipal支持多种身份.它需要某种商店.IIdentity返回ClaimsIdentity的实例,不需要商店.

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

hut*_*oid 9

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

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