在VS2013中调试时的身份验证问题-IIS Express


103

我想在Visual Studio 2013中进行调试时选择Windows用户名。我只是在使用:

httpcontext.current.user.identity.name

如果我在Dev Server上运行此程序,则运行良好;如果在Visual Studio的任何早期版本中,以调试模式运行,则也可以正常运行。

我的问题是-如果我在Visual Studio 2013上运行此命令,则会得到一个空字符串。

我的网络配置如下。

<system.web>
    <authentication mode="Windows"/>
    <identity impersonate="false"/>
    <authorization>
       <allow users="*"/>
    </authorization>
    <compilation debug="true" strict="false" explicit="true" targetFramework="4.0"/>
    <customErrors mode="Off"/>
</system.web>

Answers:


215

我刚刚从VS 2012升级到VS 2013,当前用户身份(HttpContext.User.Identity)以匿名身份通过。

我尝试更改IIS express applicationhost.config,没有区别。

解决方案是查看Web项目的属性,在选择了项目的顶层后,按F4键以获取项目属性。不要右键单击项目并选择属性,这是完全不同的。

更改为禁用匿名身份验证,并启用Windows身份验证。

像肉汁一样工作:)


10
谢谢你 我不敢相信他们将其添加为“增强”。那就是web.config的目的。现在,我们不能相信在web.config中看到的内容。辉煌。
trucker_jim 2014年

4
我认为这是比公认的答案更好的方法,因为它不会影响IIS Express上运行的其他应用程序。
niaher

谢谢你 那对我也一样!是一个Visual Studio 2008的项目我升级到Visual Studio 2013年
罗布K.

在VS 2012中,我使用了:“使用Visual Studio开发服务器”。因此,进行了升级,并且可以正常工作。即使它现在运行IIS Express。
Thomas Koelle 2014年

如果您刚刚升级到VS 2013,则此答案应该为已接受
。– Nishant

130

在研究此问题时,我找到了答案,但在互联网上找不到答案,所以我想分享一下:

我通过修改applicationhost.config文件解决了问题。我的文件保存在“ \ My Documents \ IISExpress \ config”文件夹中。

似乎VS2013忽略了我的web.config文件,并应用了不同的身份验证方法。

我不得不修改文件的这一部分,使其看起来如下所示。实际上,我只将anonymousAuthentication修改为false,将windowsAuthentication模式修改为true。

<authentication>

  <anonymousAuthentication enabled="false" userName="" />

  <basicAuthentication enabled="false" />

  <clientCertificateMappingAuthentication enabled="false" />

  <digestAuthentication enabled="false" />

  <iisClientCertificateMappingAuthentication enabled="false">
  </iisClientCertificateMappingAuthentication>

  <windowsAuthentication enabled="true">
    <providers>
      <add value="Negotiate" />
      <add value="NTLM" />
    </providers>
  </windowsAuthentication>

</authentication>

2
我必须执行此操作才能使用IIS Express在VS2013中进行调试以可靠地工作。没有这个,似乎可以正常工作一次,然后返回401。(1)是否有一个AppCmd命令将更改applicationhost.config文件,并且(2)Web项目上的F4允许我关闭“匿名身份验证”和“ Windows身份验证”。在VS2012中这样做很好,在VS2013中不会产生401免费开发环境。
IanT8

4
@Neil,您保存了我的一天。顺便说一句:没有必要关闭anonymousAuthentication。打开就足够了windowsAuthentication。这些设置控制允许网站使用哪种身份验证机制。
chiccodoro 2014年

以及+1 ...正试图用我的本地IISExpress问题解决这一困扰问题一段时间-Jeff
Lewis,

啊,那是怎么做的。天才。感谢这篇技巧,真的很有用!
Mike Gledhill 2014年

1
我不得不删除了“协商”能够没有得到一个401来测试Web服务调用(与WSE3)
Wolf5

41

在Visual Studio 2013年和VS15(但我想如果同所有其他版本)只需按下F4和改变这个两个属性: - 匿名身份验证: 禁用 - Windows身份验证: 启用


1
谢谢你 我不敢相信他们将其添加为“增强”。那就是web.config的目的。现在,我们不能相信在web.config中看到的内容。辉煌。
trucker_jim 2014年

1
您只是将我从回滚到Visual Studio 2010中救了出来!
朱利安P

2
不能相信这不是#1 questio /回答了所有的这些所谓的帖子在谈论IIS设置保持者
迷失

38

在VS2013 F4上的项目中查看属性窗口并禁用匿名访问并启用“ Windows身份验证”

然后它将起作用。无需更改其他任何东西


令人沮丧的是,此选项在您要调试Web项目时存在,但在Service项目中不存在。Grrrr ...
Mike Gledhill

9

VS 2015改变了这一点。它将一个.vs文件夹添加到我的Web项目中,并且其中存在applicationhost.config。我进行了建议的更改(窗口身份验证= true,anon = false),它开始提供用户名而不是空白。


8

打开位于C:\ Users [userid] \ Documents \ IISExpress \ config文件夹中的applicationHost.config文件。在此文件内部,将anonymousAthentication和windowsAuthentication的overrideModeDefault更改为“ Allow”

 <sectionGroup name="security">
                <section name="access" overrideModeDefault="Deny" />
                <section name="applicationDependencies" overrideModeDefault="Deny" />
                <sectionGroup name="authentication">
                    <section name="anonymousAuthentication" overrideModeDefault="Allow" />
                    <section name="basicAuthentication" overrideModeDefault="Deny" />
                    <section name="clientCertificateMappingAuthentication" overrideModeDefault="Deny" />
                    <section name="digestAuthentication" overrideModeDefault="Deny" />
                    <section name="iisClientCertificateMappingAuthentication" overrideModeDefault="Deny" />
                    <section name="windowsAuthentication" overrideModeDefault="Allow" />
                </sectionGroup>

接下来将AnonymousAuthenticationModule和WindowsAuthenticationModule的lockItem更改为“ false”

  <system.webServer>
            <modules>
                <!--
                <add name="HttpCacheModule" lockItem="true" />
-->
                <add name="DynamicCompressionModule" lockItem="true" />
                <add name="StaticCompressionModule" lockItem="true" />
                <add name="DefaultDocumentModule" lockItem="true" />
                <add name="DirectoryListingModule" lockItem="true" />
                <add name="IsapiFilterModule" lockItem="true" />
                <add name="ProtocolSupportModule" lockItem="true" />
                <add name="HttpRedirectionModule" lockItem="true" />
                <add name="ServerSideIncludeModule" lockItem="true" />
                <add name="StaticFileModule" lockItem="true" />
                <add name="AnonymousAuthenticationModule" lockItem="false" />
                <add name="CertificateMappingAuthenticationModule" lockItem="true" />
                <add name="UrlAuthorizationModule" lockItem="true" />
                <add name="BasicAuthenticationModule" lockItem="true" />
                <add name="WindowsAuthenticationModule" lockItem="false" />

进行这些更改将允许现有的Web配置设置覆盖IIS Express的applicationHost文件中的内容。


1
这些更改加上注销对我有用。缓存了一些内容,因为从通知图标停止IIS Express并重新启动VS不起作用。这个错误确实很烦人,每构建新的VM或开发人员PC每隔几个月或半年就会发生一次。它总是会导致多达半天的时间丢失,并弄乱了设置。问题是尽管这些设置应该立即修复它,但并不能解决问题,并且在玩转之后突然起作用,这很奇怪,我不喜欢这样。然后建议注销。下次发生这种情况时,我将尝试隔离,但这是一个非常烦人的默认设置。
托尼·沃尔

6

您还可以修改Web项目的项目属性,从左侧选项卡中选择“ Web”,然后将“服务器”下拉列表更改为“ Local IIS”。创建一个新的虚拟目录,并使用IIS管理器根据需要设置您的站点/应用程序池。

我更喜欢这种方法,因为通常会有一个本地IIS v目录(或站点)在本地进行测试。您也不会以这种方式影响任何其他站点。

Web项目属性


1

看来正确的答案是由上面的user3149240提供的。但是,正如Neil Watson指出的那样,applicationhost.config文件在这里起作用。

实际上,可以在“ VS属性”窗格或文件中进行更改,尽管位于其他位置。在applicationhost.config文件底部附近是一组位置元素。IIS Express的每个应用程序似乎都有其中之一。在UI中更改设置会更新文件的此部分。因此,您可以通过UI更改设置或修改此文件。

这是一个关闭匿名身份验证并启用Windows身份验证的示例:

<location path="MyApp">
    <system.webServer>
        <security>
            <authentication>
                <windowsAuthentication enabled="true" />
                <anonymousAuthentication enabled="false" />
            </authentication>
        </security>
    </system.webServer>
</location>

在VS UI中,这等效于:

Anonymous Authentication: Disabled
Windows Authentication: Enabled

在当前的VS中这是行不通的,即使用户文档和解决方案.vs / config路径中的applicationhost.config模块都已解锁,也总是会说它已被锁定。同样不是唯一的地方,属性窗口中的设置实际上存储在VS Web项目的XML中。但这并不重要,因为更改它们也无济于事,applicationhost始终会覆盖。要使这些更改生效,必须注销才能完成。
托尼·沃尔

0

F4并不总是将我带到此面板。此外,通常说一张图片值一千个字。

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.