3

我有一个使用 Windows 身份验证的 asp.net 内部网应用程序。我几年前使用 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 中的值,但显然我做错了什么。还有其他人遇到类似的问题或看到我做错了什么吗?谢谢。

4

6 回答 6

3

确保您的<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模块,浏览器是否强制您登录都没有关系......如果没有User包含该模块,ASP.NET 将永远不会实际设置属性。

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

于 2009-08-10T15:35:11.330 回答
3

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

于 2009-07-31T22:18:29.493 回答
1

尝试添加以获得您想要的行为?在没有开启模拟的情况下,仍然以 NETWORK SERVICES 或 ASPNET 用户的名义发生很多事情

这是Hanselman 的博客文章,其中包含了另一个疯狂的想法:

于 2009-08-04T22:09:01.647 回答
0

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

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

于 2009-08-08T23:06:45.617 回答
0

一些想法:

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

您的服务器是否已从域中删除?运行应用程序池的用户是否发生了变化?域策略是否发生了变化,从而阻止服务器冒充用户进行身份验证检查(而不是委托)?

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

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

于 2009-08-04T21:59:07.423 回答
-3

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

<identity impersonate="true" />

到web.config?

于 2009-08-08T10:02:08.627 回答