Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpContext.Current.User未使用启用的Windows身份验证填充_C#_.net_Asp.net_Web Config_Windows Authentication - Fatal编程技术网

C# HttpContext.Current.User未使用启用的Windows身份验证填充

C# HttpContext.Current.User未使用启用的Windows身份验证填充,c#,.net,asp.net,web-config,windows-authentication,C#,.net,Asp.net,Web Config,Windows Authentication,我有一个使用windows身份验证的asp.net intranet应用程序。我在几年前用VS2005创建了这个应用程序,windows身份验证位工作得非常好。My web.config具有以下内容(内部配置->system.web元素): 我在Firefox中对此进行了测试,以确认凭据是必需的,事实上,当我第一次访问站点时,系统会提示我输入网络凭据,如果这些凭据无效,我将被拒绝 但是,当我尝试访问HttpContext.Current.User.Identity时,对象的Name和Auth

我有一个使用windows身份验证的asp.net intranet应用程序。我在几年前用VS2005创建了这个应用程序,windows身份验证位工作得非常好。My web.config具有以下内容(内部配置->system.web元素):


我在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中关闭对站点/虚拟机的匿名访问。

一些想法:

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

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

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


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

是否尝试添加以获得所需的行为?当模拟未打开时,仍会以网络服务或ASPNET用户的名义发生很多事情

下面是另一个疯狂的想法:你有没有尝试添加:



转到web.config?

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

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

请确保您的
部分未被清除。您机器的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文件的
部分中没有
标记。如果没有
WindowsAuthentication
模块,浏览器是否强制您登录并不重要。。。如果不包含此模块,ASP.NET将永远不会实际设置
用户
属性


httpModules
的排序也很重要,特别是我认为
WindowsAuthentication
模块需要出现在
匿名身份验证
模块之前。

是的……也在IE中测试过。我提到Firefox的唯一原因是IE自动传递您的凭据,而FF强制您通过提示符登录。这就是为什么我知道我正在阻止匿名访问,但当你说“当我尝试访问HttpContext.Current.User.Identity时”,我仍然会得到User.Identity的空白信息,你在页面生命周期的哪一点这样做?页面加载。请记住,我被迫提供凭据(在IE中自动发生,但在Firefox中我必须登录)。星期一,当我按照其他帖子中的建议重新开始工作时,我将使用模拟设置。我关闭了匿名访问(未选中),并在IIS中选择了集成的windows身份验证。我需要在执行任何代码之前登录,因此我的凭据将被传递。我对该用户的检查一直在页面加载中,请记住……直到最近,这一切都很顺利。这是在我的Vista开发机器上以及两台运行Server2003的不同服务器上测试的。谢谢
<identity impersonate="true" />
    <httpModules>
        <!-- ... -->
        <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" />
        <!-- ... -->
        <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" />
        <!-- ... -->
    </httpModules>