在VS2013中调试时的身份验证问题 - iis express

Nei*_*son 102 web-config windows-authentication iis-express visual-studio-2013

我在Visual Studio 2013中调试时试图获取Windows用户名.我只是使用:

httpcontext.current.user.identity.name
Run Code Online (Sandbox Code Playgroud)

如果我在我的开发服务器上运行它,它工作正常,如果我在任何以前版本的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>
Run Code Online (Sandbox Code Playgroud)

Tob*_*ing 215

我刚刚从VS 2012升级到VS 2013,当前用户身份(HttpContext.User.Identity)以匿名方式发布.

我试过更改IIS express applicationhost.config,没什么区别.

解决方案是查看Web项目的属性,当您选择项目的顶级时,点击F4以获取项目属性.不要右键单击项目并选择属性,这是完全不同的.

更改要禁用的匿名身份验证和要启用的Windows身份验证.

像肉汁一样工作:)

  • 谢谢你.我无法相信他们已将此作为"增强"添加.这就是web.config的用途.现在我们不能相信我们在web.config中看到的内容.辉煌. (10认同)
  • 我相信这是一种比接受的答案更好的方法,因为它不会影响在IIS Express上运行的其他应用程序. (4认同)
  • 这是一个比被接受的答案更好的答案. (4认同)

Nei*_*son 129

当我研究这个时,我找到了答案,但在互联网上找不到答案,所以我想我会分享这个:

我通过修改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>
Run Code Online (Sandbox Code Playgroud)

  • @Neil,你救了我的一天.BTW:没有必要关闭`anonymousAuthentication`.打开`windowsAuthentication`就足够了.这些设置控制允许网站使用的身份验证机制. (4认同)
  • 我必须这样做才能在VS2013中使用IIS Express进行可靠的调试.没有这个,似乎工作一次,然后401.(1)是否有一个AppCmd命令可以更改applicationhost.config文件,(2),Web Project上的F4允许我关闭匿名身份验证和Windows身份验证.在VS2012中这样做很好,在VS2013中没有产生401免费开发环境. (2认同)

Tha*_*Net 41

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

  • 不能相信这不是所有这些关于IIS设置的SO帖子中的第一个问题/答案 (2认同)

小智 39

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

然后它会工作.无需改变任何其他内容


Tom*_*ald 9

VS 2015改变了这一点.它在我的web项目中添加了一个.vs文件夹,并且applicationhost.config就在那里.我提出了建议的更改(window authentication = true,anon = false),它开始提供用户名而不是空白.


小智 8

打开位于C:\ Users [userid]\Documents\IISExpress\config文件夹中的applicationHost.config文件.在此文件中,将anonymousAthentication的overrideModeDefault和windowsAuthentication更改为"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>
Run Code Online (Sandbox Code Playgroud)

接下来将lockItem更改为AnonymousAuthenticationModule和WindowsAuthenticationModule的"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" />
Run Code Online (Sandbox Code Playgroud)

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


Sco*_*art 5

您还可以修改Web项目的项目属性,从左侧选项卡中选择"Web",然后将"服务器"下拉菜单更改为"本地IIS".创建新的虚拟目录并使用IIS管理器根据需要设置站点/应用程序池.

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

Web项目属性