我的項目我正在使用WIF (但這對於這個問題的上下文並不重要,您可以使用替代框架來處理您的身份驗證問題是關於在執行ajax請求時處理身份驗證失敗的問題)。從ClaimsAuthenticationManager
繼承和處理認證儘管如此,在我來說,我已經寫了自定義服務器的邏輯:在使用WIF和jQuery Ajax請求時ASP.NET MVC 3中的會話Cookie過期處理
public override IClaimsPrincipal Authenticate(string resourceName, IClaimsPrincipal incomingPrincipal)
{
if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated)
{
// add some custom claims
}
return incomingPrincipal;
}
現在,當我刪除所有會話Cookie,結束然後再輸入任何頁面,我重定向到由WIF提供的登錄頁面,並且我被要求再次登錄。一切都按預期工作。
但是,如果我做一個Ajax請求相反,我有一個錯誤,這是由該截獲:
$(document).ready(function() {
$.ajaxSetup({
error: function (XMLHttpRequest, textStatus, errorThrown) {
// do something
}
});
});
不幸的是XMLHttpRequest
對象不返回任何有意義的信息,在此基礎上我可以以其他方式處理這種錯誤。在這種特殊情況下,我只想讓應用程序重定向到登錄頁面 - 正常請求所做的一樣。
雖然AJAX調用執行時,從Authenticate
ClaimsAuthenticationManager
被調用的方法。 Identity.IsAuthenticated
返回false,方法結束並全部完成。即使BaseController
的OnAuthorization
方法未被調用,所以我無法將任何狀態傳遞給ajax結果對象。
protected override void OnAuthorization(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest() && !User.Identity.IsAuthenticated)
{
//do something, for example pass custom result to filterContext
}
base.OnAuthorization(filterContext);
}
如何解決難題?