Taurus.MVC WebAPI 入門開發教程5:控制器安全校驗屬性【HttpGet、HttpPost】【Ack】【Token】【MicroService】。

系列目錄

1、Taurus.MVC WebAPI  入門開發教程1:框架下載環境配置與運行。

2、Taurus.MVC WebAPI 入門開發教程2:添加控制器輸出Hello World。

3、Taurus.MVC WebAPI 入門開發教程3:路由類型和路由映射。

4、Taurus.MVC WebAPI 入門開發教程4:控制器方法及參數定義、獲取及基礎校驗屬性【Require】。

5、Taurus.MVC WebAPI 入門開發教程5:控制器安全校驗屬性【HttpGet、HttpPost】【Ack】【Token】【MicroService】。

6、Taurus.MVC WebAPI 入門開發教程6:全局控制器DefaultController與全局事件。

7、Taurus.MVC WebAPI 入門開發教程7:業務邏輯基類LogicBase的使用。

8、Taurus.MVC WebAPI 入門開發教程8:WebAPI文檔與自動化測試。

後續還有兩個系列:

1、Taurus.MVC 微服務 入門開發教程系列。

2、Taurus.MVC Web應用 入門開發教程系列。
 

前言:

 本系列還有幾篇,抓緊時間寫完,本篇介紹控制器各安全校驗屬性的使用。

1、Http請求方式屬性:【HttpGet】【HttpPost】【HttpHead】【HttpPut】【HttpDelete】

作用:

可限制該方法允許的請求類型,允許標識多個。

如果方法沒有標記,即默認允許所有請求類型。

對於控制器的方法,只需要標識上對應的屬性標籤,示例使用:

public class MSController : Controller
    {
        /// <summary>
        /// Get or Post 測試
        /// </summary>
        /// <param name="msg">post 消息</param>
        /// <param name="file" type="file">file</param>
        [HttpGet]
        [HttpPost]
        public void Hello(string msg, System.Web.HttpPostedFile file)
        {
            //MicroService.Const.HeaderKey
            if (file != null)
            {
                file.SaveAs(file.FileName);
            }
            if (Request.UrlReferrer != null)
            {
                Write("From : " + Request.UrlReferrer.ToString() + "\r\n");
            }
            Write("MicroService : " + MicroService.Config.AppRunUrl + Request.Url.LocalPath + " : " + Request.HttpMethod + " : " + msg ?? "Hello" + MicroService.Config.ServerName);
        }
}

說明:

僅允許Get或Post兩種請求方式。

2、安全控制屬性:【Ack】

作用:

1、實現自定義:控制請求頻率。

2、實現自定義:黑名單過濾。

3、實現自定義:過濾無效的攻擊請求。

該標識通常要求發起請求者在請求頭傳遞ack=xxx值,以便API獲取該值並進行分析判斷。

示例使用:

    public class MSController : Controller
    {
        public override bool CheckAck()
        {
            string ack = Query<string>("ack");
            //1、IP黑名單判斷。
            //2、重複請求判斷:檢測該標識是否請求過了。
            //3、IP請求頻繁檢測:判斷是否攻擊請求。
            return 判斷後的結果,false禁止繼續執行,true則繼續;
        }
        /// <summary>
        /// Get or Post 測試
        /// </summary>
        /// <param name="msg">post 消息</param>
        /// <param name="file" type="file">file</param>
        [HttpGet]
        [HttpPost]
        [Ack]
        public void Hello(string msg, System.Web.HttpPostedFile file)
        {
            //MicroService.Const.HeaderKey
            if (file != null)
            {
                file.SaveAs(file.FileName);
            }
            if (Request.UrlReferrer != null)
            {
                Write("From : " + Request.UrlReferrer.ToString() + "\r\n");
            }
            Write("MicroService : " + MicroService.Config.AppRunUrl + Request.Url.LocalPath + " : " + Request.HttpMethod + " : " + msg ?? "Hello" + MicroService.Config.ServerName);
        }
}

該標識可以標識在方法,或者類屬性上,對於標識上Ack的方法,會觸發CheckAck方法。

作用區域:

1、局部控制器內生效:重載CheckAck方法即可。

2、全局生效:在全局控制器DefaultController中的全局事件CheckAck方法實現。

對於安全的處理代碼,框架沒有提供,有需要可自己實現。

3、賬號授權屬性:【Token】

作用:

作爲賬號登陸後,傳遞賬號信息用於校驗與獲取信息使用。

該標識通常要求發起請求者在請求頭傳遞token=xxx值,以便API獲取該值並進行分析判斷。

示例:

    public class MSController : Controller
    {
        public override bool CheckToken()
        {
            string token = Query<string>("token");
            //進行安全驗證
            return base.CheckToken();
        }
        /// <summary>
        /// Get or Post 測試
        /// </summary>
        /// <param name="msg">post 消息</param>
        /// <param name="file" type="file">file</param>
        [HttpGet]
        [HttpPost]
        [Token]
        public void Hello(string msg, System.Web.HttpPostedFile file)
        {
            //MicroService.Const.HeaderKey
            if (file != null)
            {
                file.SaveAs(file.FileName);
            }
            if (Request.UrlReferrer != null)
            {
                Write("From : " + Request.UrlReferrer.ToString() + "\r\n");
            }
            Write("MicroService : " + MicroService.Config.AppRunUrl + Request.Url.LocalPath + " : " + Request.HttpMethod + " : " + msg ?? "Hello" + MicroService.Config.ServerName);
        }
}

用法和Ack一樣,僅是作用不同。

作用區域:

1、局部控制器內生效:重載CheckToken方法即可。

2、全局生效:在全局控制器DefaultController中的全局事件CheckToken方法實現。

框架內部有提供實現,但是不建議使用,如有需要可以參考源碼使用。

參考源碼在:https://github.com/cyq1162/Taurus.MVC/blob/master/Taurus.Core/Extend/AuthController.cs

4、微服務通訊安全屬性:【MicroService】

作用:

用於校驗微服務間的調用權限驗證,避免直接請求。

使用方式和【Ack】【Token】一樣,也有對應的方法:

    public class MSController : Controller
    {
        public override bool CheckMicroService()
        {
            string key = Query<string>(MicroService.Const.HeaderKey);
            //進行安全驗證
            return ...
        }
        /// <summary>
        /// Get or Post 測試
        /// </summary>
        /// <param name="msg">post 消息</param>
        /// <param name="file" type="file">file</param>
        [HttpGet]
        [HttpPost]
        [MicroService]
        public void Hello(string msg, System.Web.HttpPostedFile file)
        {
            //MicroService.Const.HeaderKey
            if (file != null)
            {
                file.SaveAs(file.FileName);
            }
            if (Request.UrlReferrer != null)
            {
                Write("From : " + Request.UrlReferrer.ToString() + "\r\n");
            }
            Write("MicroService : " + MicroService.Config.AppRunUrl + Request.Url.LocalPath + " : " + Request.HttpMethod + " : " + msg ?? "Hello" + MicroService.Config.ServerName);
        }
}

作用區域:

1、局部控制器內生效:重載CheckMicroService方法即可。

2、全局生效:在全局控制器DefaultController中的全局事件CheckMicroService方法實現。

該屬性的使用,在Taurus.MVC 微服務框架系列的安全篇中,會另外提到。

總結:

本篇介紹各屬性在控制器中的基本使用,各屬性都可以在各控制器類或方法中使用。

對於需要全局統一管控處理的,在全局控制中處理,可以見下一篇都得,全局的DefaultController。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章