即使启用了Windows身份验证,HttpContext.Current.User也为null

时间:2009-11-02 20:37:23

标签: asp.net iis-7 windows-authentication

在Windows Server 2008下的IIS7中,我有一个匿名访问和Windows身份验证的虚拟目录。在我的web.config中,我有:

<authentication mode="Windows"/>
<authorization>
            <allow roles="MYGROUP"/>
            <deny users="*"/>
</authorization>

<system.webServer>
    <!-- IIS7 security settings -->
    <security>
        <authorization>
                <add accessType="Deny" users="*"/>
                <add accessType="Allow" roles="MYGROUP"/>
        </authorization>
    </security>
</system.webServer>

然而,当我从IE访问default.aspx并在Global.asax.vb Application_AuthenticateRequest()中设置断点时,我得到一个空的HttpContext.Current.User,我期待我自己的身份。这几乎就像匿名访问一样?

我该怎么做才能解决这个问题?一切似乎都适用于IIS6。

4 个答案:

答案 0 :(得分:25)

应用程序池移回经典的答案只是推迟了问题。

而是单独留下应用程序池并将验证检查从Application_AuthenticateRequest()移到管道中的下一个函数:

Application_AuthorizeRequest(object sender, EventArgs e)

到那时,集成的应用程序池已完成Windows身份验证,您无法从null收到HttpContext.Current.User

可以找到管道here(由CarlosAg提供的链接)。

可以在asp website message lifecycle page上找到管道的可视化。在控制器部分,检查两个绿色框“验证过滤器”和“授权过滤器”。这些是你正在搞乱的领域。

答案 1 :(得分:2)

II7已集成身份验证。您可以通过在IIS的基本设置中将应用程序池更改回经典来将其设置回旧类型。

*注意这只是一个解释和示例,您可能希望使用集成身份验证并执行不同的操作。

答案 2 :(得分:1)

如果您不使用ssl或您自己的安全性,则必须启用匿名访问。

答案 3 :(得分:1)

使用IIS 7和asp.net 4.0,用户在 Application_AuthenticateRequest()(对象发件人,EventArgs e)中仍然 null 。我必须将所有身份验证逻辑放在 Application_PostAuthenticateRequest()(对象发送者,EventArgs e)中。您可以在此处查看示例context-user-is-null-in-application-authenticaterequest-via-windows-auth-in-asp