2014-08-29 60 views
1

将ASP.Net Identity 2提供程序模型与普通Authorize属性结合使用。ASP.Net Identity 2,HttpRequestBase.LogonUserIdentity

匿名访问为真,Windows身份验证被禁用。

HttpRequestBase.IsAuthenticated将返回true,但HttpRequestBase.LogonUserIdentity不会返回实际的ClaimsIdentity,而是返回一个模拟用户(因为我在本地运行IIS Express)。

来自提供者的实际认证并返回的ClaimsIdentity可通过例如

HttpContext.Current.User...和/或System.Threading.Thread.CurrentPrincipal...

问:为什么不通过HttpRequestBase.LogonUserIdentity

回答

0

我第一次看到使用这个属性。 documentation表示此属性应返回当前用户的WindowsIdentity。 MVC应用程序不知道登录用户的WindowsIdentity,因为没有这样的事情。

此外在source code这个属性eventually要求服务器变量。

我通常通过ClaimsPrincipal.Current访问当前登录用户,从未见过用户从HttpRequestBase.LogonUserIdentity检索到。
HttpRequestBase.IsAuthenticatedidentical调用HttpContext.Current.User.IsAuthenticated与几个空检查。

+0

试想一下'LogonUserIdentity'这个名字就暗示着“用户身份认同”;-) – Daniel 2014-08-29 10:03:46

+0

它的确如此!名称具有误导性,同样的方式'IdentityUser.LockoutEnabled'不是用户当前被锁定的标志。命名很难并导致问题。 – trailmax 2014-08-29 10:05:31