2013-06-28 9 views
3

IIS 7.5에서 통합 모드로 실행되는 .NET MVC 3 인트라넷 응용 프로그램을 구축하고 있습니다. Windows 인증은 웹 사이트에 대한 액세스를 제어하는 ​​데 사용됩니다. Windows 인증 모듈이 사용 가능하며 다른 모든 인증 모듈은 사용 불가능합니다.ASP.NET에서 Windows 인증 로그에 실패한 이벤트가 발생 했습니까? (Windows 인증 실패에 대한 세부 정보 로깅)

현재 사용자가 부적절한 자격 증명을 제공하면 Windows 인증 모듈이 자격 증명을 올바르게 거부하고 로그인 프롬프트를 다시 표시합니다. 이렇게 3 번 수행하면 표준 .NET 401 인증되지 않은 액세스 페이지가 표시됩니다. 이것은 예상되고 바람직합니다.

내 목표 : 실패한 인증 시도의 세부 정보를 내 자신의 사용자 지정 이벤트 로그에 기록 할 수 있습니다. 특히, 로그인 시도에서 사용 된 사용자 이름을 캡처합니다. (보안상의 이유로 비밀번호를 캡처하는 것이 불가능할 수도 있음을 인정합니다.)

내 목표가 가능합니까?

나는 이미 근무하고 IHttpModule 모듈을 내장하고이처럼 WindowsAuthenticationModule에 이벤트 핸들러로 추가 한 :

myWindowsAuthenticationModule.Authenticate += WindowsAuthentication_Authenticate; 

하지만 내 코드는 시도에서 실패한 로그의 경우 호출되지 않습니다 아마도 WindowsAuthenticationModule에서 이미 로그인이 실패로 결정되어 내 모듈을 호출 할 필요가 없기 때문일 수 있습니다. 내 모듈 이 성공적인 로그인 시도 후에 호출되기 때문에 내 이벤트 처리기가 올바르게 설정되었는지 확신합니다.

내가 아는 한 WindowsAuthenticationModule은 인증이 실패 할 때 발생하는 이벤트를 노출하지 않으므로 옵션이 해제됩니다.

아이디어가 있으십니까? 아니면 해결책이없는 나무를 짖고 있습니까?

답변

3

동일한 문제가 발생하여 Windows 인증 이벤트가없는 것처럼 보였습니다. Authenticate 이벤트는 양식과 창에 공통적으로 발생합니다.

그러나 이것에 대한 해결책을 찾았습니다!

http://www.codeproject.com/Articles/11202/Redirecting-to-custom-401-page-when-quot-Access-de

원래 기사에서 UPDATE

protected void Application_EndRequest(Object sender, EventArgs e) 
{ 
HttpContext context = HttpContext.Current; 
if (context.Response.Status.Substring(0,3).Equals("401")) 
{ 
    if(User.Identity.IsAuthenticated) 
    { 
     // this means user is authenticated, but 401 still returned 
     // which means no access to page or whatever you are trying to access? 
    } 
} 
} 

UPDATE2 나는 또한이 솔루션은 모든 경우에 작동하지 않는 것을 발견

. 나는 다른 환경에서 테스트를하고 있었기 때문에 나를 위해 일하고 있었지만 다른 사람들에게는 그렇지 않았습니다.

기본적으로 IIS는이 코드를 실행하지 않고 자체 오류 페이지 만 반환하기 때문에 IIS가 응용 프로그램 오류를 처리하도록 지시하고 싶습니다.

<httpErrors existingResponse="PassThrough"> 
</httpErrors> 

이제 IIS는 더 이상의 사용자 지정 오류를 반환하지 않으며 응용 프로그램에서 처리해야합니다.401, 403, 405 등

+0

+1 혁신적인 아이디어는 있지만 문제를 해결하지는 못합니다. 사용자가 로그인했지만 자신의 계정에 액세스하려는 객체에 대한 액세스 권한이없는 경우 (예 : 액세스 권한이없는 고객 계정 액세스) 내 앱은 401 응답을 반환합니다. 따라서 모든 401에 대해 이러한 해결 방법을 적용하는 것은 의미가 없습니다. 또한 웹 사이트에서 임의로 로그인 페이지로 이동하면 내 사용자에게 동일한 권한을 부여하지 않으므로 싫어합니다. 당신은 아이디어가 나는 Http substatus 코드 (예 : 401.XX)가 Windows Auth 대 다른 401s를 구별하는 데 유용 할 수 있는지 연구해야한다고 생각했습니다. –

+0

1 년 후 .... :) 글쎄, 원래 질문에서 당신은 단지 내 로그인 제안에 도움이되어야 로그인 실패에 대한 질문. 하지만 추가 요구 사항은 추가 체크가 아닌가? 원래 응답에 코드를 추가했습니다 – Pavdro

+0

1 년 전 ... 이상한! 내 SO받은 편지함에 어제 새 알림이 있었는데 그 때가 귀하의 회신을 보았습니다. 나는 작년에 원래 통보를 놓쳤을 것입니다. 귀하의 회신에 다시 한번 감사드립니다! –