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.