2015-10-07 56 views
1

我有一個使用WSFederationAuthentication管理身份驗證的Asp.net MVC應用程序。我在控制器操作中進行了一系列調用,這些調用可能導致需要再次進行身份驗證。現在,當我確定需要重新進行身份驗證時,我會拋出UnauthorizedAccessException。從異常過濾器強制聯合身份驗證重定向

我實現了一個ExceptionFilter爲捕獲這個UnauthroizedAccessException並返回一個401這裏控制器的代碼:

public void OnException(System.Web.Mvc.ExceptionContext context) 
{ 
    if (context.Exception is UnauthorizedAccessException) 
    { 
     context.Result = new HttpUnauthorizedResult("Login again."); 
     context.ExceptionHandled = true; 
     return; 
    } 
} 

的問題是,聯合身份驗證的HttpModule不重定向這個請求到STS 。用戶只收到401錯誤。 ExceptionFilter是否已經太遲以致於無法返回401?是否有另一種方法來強制用戶再次進行身份驗證?

回答

0

重定向用戶到登錄頁面是否發生UnauthroizedAccessException

public void OnException(System.Web.Mvc.ExceptionContext context) 
{ 
    if (context.Exception is UnauthorizedAccessException) 
    { 
     // Redirect to login page again 

     // 1 
     filterContext.Result = new RedirectToRouteResult(
     new RouteValueDictionary {{ "Controller", "YourController" }, 
            { "Action", "YourAction" } }); 
     // 2 
     Controller controller = filterContext.Controller as Controller; 
     if (controller != null) 
     { 
      filterContext.Cancel = true; 
      controller.HttpContext.Response.Redirect("./Login"); 
     } 

     context.ExceptionHandled = true; 
    } 
    base.OnException(filterContext); 
} 
+0

這不起作用,因爲「這」不是一個控制器。 ExceptionFilter被實現爲它自己的類,並且RedirectToAction似乎不可用。 – Corez

+0

答案已更新。 –

+0

我和上面的#1一起去了。工作很好。謝謝! – Corez