繁体   English   中英

HttpContext.Current.User未填充启用Windows身份验证

[英]HttpContext.Current.User not populated with Windows Authentication enabled

我有一个使用Windows身份验证的asp.net Intranet应用程序。 我几年前用VS 2005创建了应用程序,并且Windows身份验证位工作得很好。 我的web.config有以下内容(内部配置 - > system.web元素):

    <authentication mode="Windows" />
    <authorization>
        <deny users="?"/>
    </authorization>

我在Firefox中对此进行了测试以确认是否需要凭据,实际上我在首次访问网站时提示我输入网络凭据,如果它们无效,我会被拒绝。

但是,当我尝试访问HttpContext.Current.User.Identity时,该对象具有Name和AuthenticationType的空字符串,以及Authenticated = false。 我想我可能需要在查看互联网后启用WindowsTokenRoleProvider,这并没有改变任何东西。

    <roleManager defaultProvider="WindowsProvider" enabled="true" cacheRolesInCookie="false">
        <providers>
            <clear/>
            <add name="WindowsProvider" type="System.Web.Security.WindowsTokenRoleProvider"/>
        </providers>
    </roleManager>

自从我上次看到它工作以来我做过的两件事就是通过转换向导将项目升级到VS 2008,我也把它放了几个月,而我的同事可能已经在这里或那里工作了。 我很确定影响我的User.Identity的唯一因素是上面提到的web.config中的值,但显然我做错了。 其他人遇到类似问题或看到我做错了什么? 谢谢。

我相信您需要确保在IIS中为站点/虚拟关闭匿名访问。

确保尚未清除<httpModules>部分。 您机器的web.config文件应该包含这样的代码段:

    <httpModules>
        <!-- ... -->
        <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" />
        <!-- ... -->
        <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" />
        <!-- ... -->
    </httpModules>

这里的重要元素是WindowsAuthentication 确保它位于%SystemRoot%\\Microsoft.NET\\Framework\\v2.0.50727\\CONFIG\\Web.config文件中。 此外,请确保您自己的网站和“父”网站站点或文件夹中显示的任何web.config文件在其<httpModules>部分中没有<clear/>标记。 如果没有WindowsAuthentication模块,浏览器是否强制您登录并不重要......如果不包含此模块,ASP.NET将永远不会实际设置User属性。

httpModules排序也很重要,特别是我认为WindowsAuthentication模块需要出现 AnonymousIdentification模块之前

尝试添加以获得您想要的行为? 如果未启用模拟,则会以NETWORK SERVICES或ASPNET用户的名义进行大量操作

这是汉塞尔曼博客文章中出现的另一个疯狂想法:

一些想法:

在站点配置上,启动“ASP.NET配置设置”对话框。 在“身份验证”标签上,“身份验证模式”是否设置为“Windows”()? 在“应用程序”选项卡上,“本地模拟”已设置(我认为应该取消选中)。

您的服务器是否已从域中删除? 运行应用程序池的用户是否更改了? 域策略是否发生更改,阻止服务器模拟用户进行身份验证(而不是委派)?

您是否尝试过为您的网站重新安装asp.net扩展? (这本身就是一个很大的话题。)

您可以通过编程方式检查HttpContext.SkipAuthorization标志。

你在哪里检查这个用户? 在请求周期中,在授权发生之前会触发一些事件。

如果您在Vista,Windows 7或Windows Server 2008上进行测试,则可能存在其他差异,因为ASP.Net和IIS管道已集成在IIS 7的默认配置中。

您是否尝试过添加身份模拟

<identity impersonate="true" />

到web.config?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM