/// <summary> /// 基本用戶身份驗證(各系統可根據自己的實際需要,自定義驗證方法,此多語言模塊實現了驗證並提供參考依據) /// 詳細說明:判斷用戶是否登錄,如果未登錄則跳轉到統一登錄頁面 /// 其它:統一身份認證服務地址:http://218.201.35.212:11007/ /// 創建人:張甫軍 創建時間:2017年11月28日 16:24 /// </summary> public class AuthAttribute : AuthorizeAttribute { /// <summary> /// 自定義判斷當前用戶是否已授權 /// </summary> /// <param name="httpContext"></param> /// <returns></returns> protected override bool AuthorizeCore(HttpContextBase httpContext) { //如果已授權,則返回true if (httpContext.Request.IsAuthenticated) { return true; } else if (AuthorizedRequest(httpContext))//判斷是否已授權的請求(由統一登錄頁面授權成功后跳轉),如果已授權成功,則返回true { return true; } else { //未授權,設置狀態碼為403,並跳轉到統一登錄頁面 httpContext.Response.StatusCode = 403; return false; } } /// <summary> /// 處理未經授權的請求 /// </summary> /// <param name="filterContext"></param> protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { base.HandleUnauthorizedRequest(filterContext); //自定義403為未授權,如果狀態碼為403,就跳轉到統一登錄頁面 if (filterContext.HttpContext.Response.StatusCode == 403) { //判斷請求地址是否為空,顯然不能為空 if (filterContext.HttpContext.Request.Url != null) { //如果是ajax請求,則提示未登錄 if (filterContext.HttpContext.Request.IsAjaxRequest()) { var result = new JsonResult { Data = new CommonResultResponse { Result = false, Message = "請先登錄!" }, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; filterContext.Result = result; } else { //組裝參數,並跳轉到統一登錄頁面 //var loginUrl = "http://218.201.35.212:11007/Account/Login"; var loginUrlTest = "http://localhost:54550/Account/Login"; var appID = "IOV.Language"; var appSecret = "3r2d25fe3"; var returnUrl = filterContext.HttpContext.Server.UrlEncode(filterContext.HttpContext.Request.Url.ToString()); var redirectUrl = string.Concat(loginUrlTest, "?", "appId=" + appID, "&secret=" + appSecret, "&languageCulture=zh-CN", "&returnUrl=", returnUrl); if (filterContext.HttpContext.Request.Url != null) filterContext.Result = new RedirectResult(redirectUrl); } } } } /// <summary> /// 說明:此函數判斷是否為統一身份認證服務授權成功的回調。 /// 無論你的實現方式是什么,都應判斷當前請求是否有“accessToken”參數&是否有值,如有值,就意味着當前用戶登錄成功。 /// </summary> /// <param name="httpContext">HTTP請求信息</param> /// <returns>是否登錄成功</returns> public bool AuthorizedRequest(HttpContextBase httpContext) { if (httpContext == null || httpContext.Request == null) { return false; } //訪問令牌(由統一身份認證服務頒發) var accessToken = httpContext.Request.QueryString["accessToken"]; //當前登錄賬號 var loginID = httpContext.Request.QueryString["loginID"]; //判斷是否持有訪問令牌 if (string.IsNullOrWhiteSpace(accessToken)) { return false; } else { return true; } } }