2009-07-31 6 views
3

Windows 인증을 사용하는 asp.net 인트라넷 응용 프로그램이 있습니다. 나는 VS 2005로 수년 전에 응용 프로그램을 만들었고 Windows 인증 비트가 완벽하게 작동했습니다.Windows 인증을 사용하여 HttpContext.Current.User를 사용할 수 없습니다.

<authentication mode="Windows" /> 
    <authorization> 
     <deny users="?"/> 
    </authorization> 

나는 자격 증명이 필요하다는 것을 확인하기 위해 파이어 폭스에서 이것을 테스트, 그리고 실제로 나는 때 처음으로 내 네트워크 자격 증명을 묻는 메시지가 있어요 : - (> system.web 요소 구성 내부) 내 Web.config의 다음과 같은있다 사이트에 액세스하고 유효하지 않은 경우 거부됩니다.

그러나 HttpContext.Current.User.Identity에 액세스하려고하면 개체에 Name 및 AuthenticationType에 대한 빈 문자열이 있고 Authenticated = false가됩니다. interwebs를 둘러보고 WindowsTokenRoleProvider를 활성화해야한다고 생각했는데 아무 것도 변경되지 않았습니다.

<roleManager defaultProvider="WindowsProvider" enabled="true" cacheRolesInCookie="false"> 
     <providers> 
      <clear/> 
      <add name="WindowsProvider" type="System.Web.Security.WindowsTokenRoleProvider"/> 
     </providers> 
    </roleManager> 

두 가지 나는 내가이 일을 변환 마법사를 통해 VS 2008 프로젝트를 업그레이드 보았다 마지막 시간 이후 했어, 내 동료가 수도 있지만 나는 또한 몇 달 동안 내려 놔 여기저기서 일했습니다. 나는 내 User.Identity에 영향을 미치는 유일한 것이 위에서 언급 한 web.config의 값이지만, 분명히 잘못된 것을하고 있다고 확신했습니다. 다른 사람이 비슷한 문제가 발생하거나 내가 잘못하고있는 것을 보았습니까? 감사.

+0

IE에서 테스트 해 보셨습니까? –

+0

그래 ... IE에서도 테스트되었습니다. 내가 Firefox를 언급 한 유일한 이유는 IE가 자동으로 자격 증명을 전달하기 때문이며 FF는 프롬프트를 통해 로그인하도록 강제하기 때문입니다. 그것이 내가 익명 액세스를 차단하고 있다는 것을 알 수있는 방법이지만, 여전히 User.Identity에 대한 빈 정보를 얻고 있습니다. – Rich

+0

"HttpContext.Current.User.Identity에 액세스하려고 시도 할 때"라고 말하면 페이지 라이프 사이클의 어느 시점에 너 이거하는거야? – Bullines

답변

2

나는 사이트/가상의 IIS에서 익명 액세스가 해제되어 있어야합니다.

+0

나는 익명 액세스를 끄고 (선택하지 않음) IIS에서 통합 Windows 인증을 선택했습니다. – Rich

0

몇 가지 아이디어 :

사이트 구성에서 'ASP.NET 구성 설정'대화 상자를 엽니 다. '인증'탭에서 '인증 모드'가 'Windows'()로 설정되어 있습니까? '응용 프로그램'탭에서 '로컬 명의 도용'이 설정됩니다 (선택하지 않아야한다고 생각합니다).

서버가 도메인에서 제외 되었습니까? 앱 풀을 실행하는 사용자가 변경 되었습니까? 도메인 정책이 변경되어 서버가 인증 확인을 위해 사용자를 사칭하는 것을 방지합니다 (위임이 아닌)?

사이트에 asp.net 확장 프로그램을 다시 설치해 보셨습니까?

프로그래밍 방식으로 HttpContext.SkipAuthorization 플래그를 확인할 수 있습니다.

1

원하는 동작을 얻으려고 추가 하시겠습니까? 가장이 켜져 있지 않은 경우, 여전히 많은 네트워크 서비스의 이름 또는 ASPNET 사용자

에서 발생 그리고 여기에 마음에 온 다른 미친 아이디어가 Hanselman blog post입니다 :

-2

당신이 identity impersonation을 추가하는 시도 되세요 :

<identity impersonate="true" /> 

the web.config?

0

어디에서이 사용자를 확인하십니까? 요청주기에는 승인이 이루어지기 전에 해고되는 이벤트가 있습니다.

Vista, Windows 7 또는 Windows Server 2008에서 테스트하는 경우 ASP.Net 및 IIS 파이프 라인이 IIS 7의 기본 구성에 통합되어 있기 때문에 다른 점이있을 수 있습니다.

+0

코드가 실행되기 전에 로그인해야하므로 자격 증명이 전달됩니다. 사용자에 대한 내 검사가 Page_Load에 있었고 기억합니다 ... 최근까지는 괜찮 았습니다. 이것은 Vista 개발 컴퓨터와 Server 2003을 실행하는 두 개의 서로 다른 서버에서 테스트되고 있습니다. 감사합니다. – Rich

3

<httpModules> 섹션이 지워지지 않았는지 확인하십시오.

<httpModules> 
     <!-- ... --> 
     <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" /> 
     <!-- ... --> 
     <add name="AnonymousIdentification" type="System.Web.Security.AnonymousIdentificationModule" /> 
     <!-- ... --> 
    </httpModules> 

여기서 중요한 요소는 WindowsAuthentication입니다 : 시스템의 web.config 파일은 다음과 같은 조각을 포함해야한다. 파일이 귀하의 %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\CONFIG\Web.config에 있는지 확인하십시오. 또한 자신의 웹 사이트와 "상위"사이트 사이트 또는 폴더에 나타나는 모든 web.config 파일에 섹션에 <clear/> 태그가 없는지 확인하십시오. WindowsAuthentication 모듈이 없으면 브라우저가 강제로 로그인해야하는지 여부는 중요하지 않습니다. ASP.NET은 실제로이 모듈이 포함되어 있지 않은 경우 User 속성을 설정하지 않습니다. httpModules

주문도 중요하다, 특히 나는 WindowsAuthentication 모듈이AnonymousIdentification 일 전에 를 표시해야합니다 생각합니다.

관련 문제