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>

답변:


215

방금 VS 2012에서 VS 2013으로 업그레이드했고 현재 사용자 ID (HttpContext.User.Identity)가 익명으로 전달되었습니다.

IIS 익스프레스 applicationhost.config를 변경해 보았습니다.

해결책은 웹 프로젝트의 속성을보고 프로젝트의 최상위 수준을 선택했을 때 F4 키를 눌러 프로젝트 속성을 가져 오는 것입니다. 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택하지 마십시오. 이것은 완전히 다른 것입니다.

익명 인증을 사용 안함으로 변경하고 Windows 인증을 사용으로 변경하십시오.

그레이비처럼 작동합니다 :)


10
감사합니다. 나는 그들이 그것을 '향상'으로 추가했다고 믿을 수 없다. 이것이 web.config의 목적입니다. 이제 우리는 web.config에서 보는 것을 신뢰할 수 없습니다. 훌륭한.
— trucker_jim 2014

4
IIS Express에서 실행되는 다른 응용 프로그램에 영향을 미치지 않기 때문에 이것이 허용되는 대답보다 더 나은 접근 방식이라고 생각합니다.
— niaher

무리 감사. 그것은 나에게도 그랬습니다! Visual Studio 2008 프로젝트였습니다. Visual Studio 2013으로 업그레이드했습니다.
— Rob K.

VS 2012에서는 "Use Visual Studio Development Server"를 사용했습니다. 그래서 업그레이드와 이것은 작동했습니다. 지금은 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) applicationhost.config 파일을 변경하는 AppCmd ​​명령이 있습니까? (2) 웹 프로젝트에서 F4를 누르면 익명 인증을 끄고 Windows 인증을 켤 수 있습니다. VS2012에서 그렇게하면 VS2013에서 401 무료 개발 환경이 생성되지 않습니다.
— IanT8 2013

4
@Neil, 당신은 내 하루를 구했습니다. BTW : 전원을 끌 필요는 없습니다 anonymousAuthentication. 을 켜는 것으로 충분합니다 windowsAuthentication. 이러한 설정은 웹 사이트에서 사용할 수있는 인증 메커니즘을 제어합니다.
— chiccodoro

+1뿐만 아니라 ... 내 로컬 IISExpress isntance로 잠시 동안이 잔소리 문제를 해결하려고 노력했습니다
— Jeff Lewis

아, 그렇게하는 방법입니다. 천재. 이 팁을 주셔서 감사합니다. 정말 유용합니다!
— 마이크 Gledhill

1
나는 401받지 않고 (WSE3 포함) 웹 서비스 호출을 테스트 할 수 있도록 "협상"를 제거해야
— Wolf5

41

비주얼 스튜디오 2013 VS15 (하지만 난 다른 모든 버전에 대해 동일한 경우 추측) 단지 언론 F4와는이 두 가지 속성을 변경 : - 익명 인증 : 사용 안 함 - Windows 인증 : 사용


1
감사합니다. 나는 그들이 그것을 '향상'으로 추가했다고 믿을 수 없다. 이것이 web.config의 목적입니다. 이제 우리는 web.config에서 보는 것을 신뢰할 수 없습니다. 훌륭한.
— trucker_jim 2014

1
방금 Visual Studio 2010으로의 롤백에서 저를 구했습니다!
— Julien P

2
IIS 설정에 대해 계속 이야기하는 이러한 모든 SO 게시물 중에서 이것이 # 1 질문 / 답변이 아니라고 생각할 수 없습니다
— Lost

38

프로젝트의 VS2013 F4에서 속성 창을보고 익명 액세스를 비활성화하고 "Windows 인증"을 활성화합니다.

그러면 작동합니다. 다른 것을 변경할 필요가 없습니다.


안타깝게도이 옵션은 웹 프로젝트를 디버그하려고 할 때 존재하지만 서비스 프로젝트에는 존재하지 않습니다. Grrrr ...
— Mike Gledhill

9

VS 2015는 이것을 변경합니다. 내 웹 프로젝트에 .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>

다음으로 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" />

이렇게 변경하면 기존 웹 구성 설정이 IIS Express의 applicationHost 파일에있는 내용을 재정의 할 수 있습니다.


1
이러한 변경 사항과 로그 오프가 효과적이었습니다. 알림 아이콘에서 IIS Express를 중지하고 VS를 다시 시작해도 작동하지 않기 때문에 무언가가 캐시됩니다. 이 오류는 정말 성가 시며, 새 VM 또는 개발자 PC가 구축 될 때 몇 개월 또는 반년마다 발생합니다. 항상 최대 반나절을 잃어 버리고 설정을 엉망으로 만듭니다. 문제는 이러한 설정이 즉시 수정되어야하지만 그렇지 않고 갑자기 작동 한 후에는 매우 이상하고 마음에 들지 않습니다. 그런 다음 로그 오프하는 것이 좋습니다. 다음에 발생하면 격리를 시도하지만 이것은 매우 성가신 기본값입니다.
— Tony Wall

6

웹 프로젝트의 프로젝트 속성을 수정하고 왼쪽 탭에서 "웹"을 선택한 다음 서버 드롭 다운을 "로컬 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

현재 VS에서는 작동하지 않습니다. 사용자 문서와 솔루션 .vs / config 경로 모두에서 applicationhost.config 모듈이 잠금 해제 된 경우에도 항상 잠겨 있다고 표시됩니다. 또한 이것이 유일한 장소라는 것은 사실이 아니며 속성 창의 설정은 실제로 VS 웹 프로젝트의 XML에 저장됩니다. 그러나 변경하는 것도 도움이되지 않기 때문에 중요하지 않습니다. 애플리케이션 호스트는 항상 재정의합니다. 이러한 변경 사항을 적용하려면 로그 오프가 필요했습니다.
— Tony Wall

0

F4가 항상이 패널로 이동하는 것은 아닙니다. 게다가 사진은 천 마디 말의 가치가 있다고 종종 말합니다.

여기에 이미지 설명 입력

당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.