2012-09-01 2 views
2

나는 asp.net mvc 4를 사용하여 내 자신의 basec 인증 로직을 작성했다.HttpActionContext.Request.Headers.Authorization is null

public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext) 
    { 
     if (actionContext.Request.Headers.Authorization == null) 
     { 
      actionContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized); 
     } 
     else 
     { 
      //do staff here 
     } 
    } 

로컬 iis에서 작동합니다. 그러나 그것은 생산 역에서 작동하지 않습니다. 나는 항상 null이된다. IIS에서 기본 인증을 사용하도록 설정했습니다. 나는 Fiddler와 테스트를하고 있는데, 내 요청은 다음과 같이 보입니다 :

User-Agent: darwin/1.0 CFNetwork/548.1.4 Darwin/11.0.0 
Authorization: Basic cmFkaWt2b3N0b2tAZ21haWwuY65tJjE6QkFBREVEcHlQYmtjQkFOcXh4UmFrdG1JMUJ2bjBPYXVQVk9NcnFZMEg4V3BhakljSlk2WkJMTWtra1FIWHFrcEZmdEkyNmFEZEppYWlKVVZJOTZpUGJuMzRMc1luemJHM2FPV3paQk5DTG1Xak9FZGU3YTdGWVhVem1QeTlEWkM4cW02YWZoWkJGWkIzbGFXMTNaQjlKdQ== 
Content-Length: 10128 
Accept: application/json 
Content-Type: application/json 
Connection: keep-alive 
Host: 192.168.7.4 

왜 그런 일이 일어날 지 아무도 몰라요?

+1

동일한 문제가 있으며 나에게 IIS의 "웹 사이트"에 대해 잘못된 인증 설정이 지정되었습니다. 익명 인증을 사용하도록 설정해야합니다. – cederlof

답변

3

우선 OnActionExecuting() 대신 OnAuthorization()을 구현하십시오. OnAuthorization()OnActionExecuting() 이전에 실행됩니다. 사용자가 OnActionExecuting() 코드에 도달하기 전에도 승인 여부를 확인하는 것이 중요합니다.

그러나 답변 : 가장 가능한 상황이 <authentication>이 생산 의 web.config 파일에 "없음"으로 설정되어 있다는 점이다. 다음과 같이 변경하면 모두 설정됩니다.

<authentication mode="Forms"/>