0

백엔드 서버 호출 용 웹 API2와 클라이언트 측 코드 용 Angularj를 사용하여 MVC5 웹 응용 프로그램을 작성합니다. 응용 프로그램이 Windows 인증을 사용 중입니다. 웹 API 컨트롤러의 일부 메서드에 대해 특정 사용자 역할에 대한 권한 부여 특성을 설정했습니다. 문제는 인증에 실패하면 사용자가 로그인 할 수 있도록 Windows 보안 대화 상자를 팝업하는 것입니다. 이 대화 상자가 나타나지 않도록하고 특정 URL로 리디렉션하거나 오류 상태 코드 및 오류 메시지를 다시 표시하는 방법이 있습니까?Windows 인증을 사용하여 302 리디렉션을 방지하는 방법

온라인으로 검색 한 결과 Windows 인증이 아닌 OWIN 인증에 대한 해결책을 찾았습니다.

답변

0

WWW-Authenticate 헤더를 제거 할 수있는 Asp.Net 웹 API에서 메시지 처리기를 만들면 브라우저가 팝업을 표시하지 않습니다.이 수준에서 많은 사용자 정의를 수행 할 수 있습니다. 당신이 메시지 핸들러를 소유 만들려면

당신은이 작품

public class MyHandler : DelegatingHandler 
{ 
     protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
     { 

       //Your code goes here 
       var response = await base.SendAsync(request,cancellationToken); 
       if(response.StatusCode == HttpStatusCode.Unauthorized) 
       { 
        // remove WWW-Authenticate from the header and add Location header to redirect to a page 
        OR 
       // Create a new response and then return that response 
       } 
       return response; 

     } 

} 
+0

아래처럼 DelegatingHandler을 확장 할 필요가있다. 감사! – user1214916

+0

새로운 응답을 작성하면 제대로 작동하지만 401 상태를 유지하려면 어떻게해야합니까? 나는 응답을 보았다. 헤더들 .WwwAuthenticate는 비어 있고 응답이다. 위치는 널이다. – user1214916