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

问题描述 投票:102回答:9

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

httpcontext.current.user.identity.name

如果我在我的开发服务器上运行它,它工作正常,如果我在任何以前版本的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>
web-config windows-authentication iis-express visual-studio-2013
9个回答
214
投票

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

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

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

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

像肉汁一样工作:)


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>

41
投票

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


39
投票

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

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


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>

接下来将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" />

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


5
投票

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

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


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

0
投票

F4并不总是把我带到这个小组。此外,人们常说一张图片胜过千言万语。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.