2016-09-30 2 views
1

Authorize 헤더가있는 컨트롤러 동작이 호출되고 단순히보기로 리디렉션되는 경우 사용자 이름과 암호를 요청하지 않는 방법을 알아 내려고합니다. 내 Web.config의에서ASP.NET MVC에서 승인이 실패한 경우 사용자 지정 오류를 표시하는 방법

나는 내가 속한 도메인 \ 그룹으로 설정하면

[Authorize(Roles = "DOMAIN\\Group")] 
    public ActionResult Index() 
    { 
     ...controller action code here 
    } 

을 다음과 같이

<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider" cacheRolesInCookie="false"> 
    <providers> 
    <clear /> 
    <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" /> 
    </providers> 
</roleManager> 
<authentication mode="Windows" /> 
<authorization> 
    <deny users="?" /> 
</authorization> 

그런 다음, 내 컨트롤러, 나는이 작업을 접두어로하고있다 로 설정하면 응용 프로그램이 예상대로 작동합니다. 테스트를 위해 위조 그룹으로 변경하면 사용자 이름과 암호 대화 상자가 표시됩니다. 분명히 인증은 결코 일어나지 않을 것입니다. 대화 상자에서 취소를 클릭하면 401 오류 페이지로 리디렉션됩니다.

web.config 파일의 정의에 따라 Windows 사용자 만 연결할 수 있습니다. Windows 사용자가 선택한 그룹에없는 경우 사용자 이름을 묻는 대신 특정보기로 리디렉션하면됩니다. 및 암호.

답변

5

사용자 지정 특성을 만들고 HandleUnauthorizedRequest을 재정의 할 수 있습니다. 그런 다음 승인이 실패한 경우 맞춤 페이지로 리디렉션합니다.

public class CustomAuthorizeAttribute : AuthorizeAttribute 
{ 
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     if (!filterContext.HttpContext.User.Identity.IsAuthenticated) 
     { 
      base.HandleUnauthorizedRequest(filterContext); 
     } 
     else 
     { 
      filterContext.Result = new RedirectToRouteResult(new 
      RouteValueDictionary(new { controller = "Common", action = "AccessDenied" })); 
     } 
    } 
} 

[CustomAuthorize(Roles = "DOMAIN\\Group")] 
public ActionResult Index() 
{ 
    ... 
} 
+0

DOH !! 새로운 .net 및 C#을 처음 접했을 때 사용자 정의 유효성 검사 클래스를 잊어 버렸습니다. 매력처럼 작동했습니다. –

관련 문제