統一身份認證服務(客戶端用戶身份驗證)


    /// <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;
            }
        }
    }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM