2010-06-29 157 views
4

环境是IIS 7集成管道,ASP.NET 4.0。我配置了.aspx页面中没有匿名身份验证和Windows身份认证:Windows身份验证成功,但IsAuthenticated == false

当我请求的页面,一个普通的Windows身份验证(NTLM /协商)质询响应情况,并最终返回页面。

我有一个处理PostAuthorize事件的HttpModule。正如预期的那样,只有挑战 - 响应认证成功并授权访问页面时才会引发此事件。

但是,Request.IsAuthenticated属性为false;和HttpContext.Current.User.Identity反映了未经身份验证的用户(.Name返回空字符串)。有趣的是,Request.ServerVariables [“LOGON_USER”]确实会返回经过身份验证的Windows用户的值。

我一直认为,一旦用户通过了认证(并获得授权,就此而言),请求将反映被认证;并且该请求的用户/身份将被正确设置。

有关为什么不是这种情况的任何想法?

感谢,

甄子丹

+0

启用模拟并查看您得到的内容。 – 2010-06-29 15:31:25

回答

1

事实证明,当你在Web.config中启用窗体身份验证Windows身份验证的本地处理工作。但是,Windows身份验证的托管部分 - 只有在Web.config中启用Windows身份验证时才会发生将身份验证的Windows用户与表示该用户的IIdentity派生对象关联的情况。看起来我必须依赖于Request.ServerVariables [“LOGON_USER”]值。

3

windows在IIS中启用了身份验证,并将身份验证模式设置为我的web.config文件中的窗口。

<authentication mode="Windows">  
    </authentication> 

我的网站是要求凭据,它工作正常。但在使用

HttpContext.User.Identity.Name 

检查空字符串 或者 HttpContext.User.Identity.IsAuthenticated是假的;

我使用请求.ServerVariables["LOGON_USER"].Tostring();获取登录用户凭据。

它为我工作,感谢发布soccerdad。

+0

欢迎来到Venu,当你的声望增长时,你将能够发表评论。否则答案只是为了回答这个问题。干杯! – Sergio 2013-06-27 10:31:15

+4

这不是一个答案,而是一个评论soccerdad的答案。 – 2014-05-30 07:54:13