我一直在使用Windows身份验证一个asp.net Intranet应用程序。 我创建的应用程序年前VS 2005,和windows身份验证位是完美的工作。 我的web.config具有以下(内配置 - > system.web元素):
<authentication mode="Windows" />
<authorization>
<deny users="?"/>
</authorization>
我在Firefox测试以确认证书是必需的,而且确实提示我为我的网络凭据第一次访问该网站时,如果它们是无效的,我拒绝。
然而,当我尝试访问HttpContext.Current.User.Identity,对象有名称和AuthenticationType和认证=假空字符串。 我想我可能需要环视interwebs后,为使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文件没有一个<clear/>
在标签<httpModules>
部分。 如果没有WindowsAuthentication
模块,它并不重要,如果浏览器迫使你登录或不... ASP.NET将永远不会实际设置的User
属性,而不该模块包括在内。
的订购httpModules
也显著,特别是我认为WindowsAuthentication
模块需要出庭 AnonymousIdentification
之一。
尝试添加得到你想要的行为? 模拟时未开启,很多还是网络服务的名称或ASPNET用户下发生
这里是Hanselman的博客帖子有来考虑其他疯狂的想法:
一些想法:
在该网站上的配置,拉起了“ASP.NET配置设置”对话框。 在“身份验证”选项卡,为“身份验证模式”设置为“窗口”()? 在“应用程序”选项卡中,没有“本地模拟”被置(我想应该是选中)。
难道你的服务器获得下车域? 难道在运行应用程序池更改的用户? 难道域策略改变,防止服务器假冒的身份验证检查(未授权)的目的用户?
您是否尝试过重新安装为您的网站asp.net扩展? (这本身就是一个很大的话题。)
您可以以编程方式检查HttpContext.SkipAuthorization标志。
你在哪里检查该用户? 在请求周期有授权之前发生的一些事件被解雇。
如果你是在Vista,Windows 7或Windows测试服务器2008可以有其他的不同,因为ASP.Net和IIS管道集成在IIS 7的默认配置。
你有没有尝试添加身份假冒 :
<identity impersonate="true" />
在web.config中?