• 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
        {
            /// 
            /// Get or Post 测试
            /// 
            /// post 消息
            /// file
            [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则继续;
            }
            /// 
            /// Get or Post 测试
            /// 
            /// post 消息
            /// file
            [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();
            }
            /// 
            /// Get or Post 测试
            /// 
            /// post 消息
            /// file
            [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 ...
            }
            /// 
            /// Get or Post 测试
            /// 
            /// post 消息
            /// file
            [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。

  • 相关阅读:
    RapidLayout:中英文版面分析推理库
    【Python基础篇】字符串的拼接
    【备考网络工程师】如何备考2023年网络工程师之错题集篇(3)
    任意版本JLink驱动官方下载详解
    Hashing to elliptic curve算法改进
    ASP.NET Core 6框架揭秘实例演示[10]:Options基本编程模式
    计算机毕业设计ssm+vue基本微信小程序的高速公路服务区充电桩在线预订系统
    【广州华锐互动】利用AR远程指导系统进行机械故障排查,实现远程虚拟信息互动
    5分钟教你搭建邮件服务器的实用指南
    OpenAI ChatGPT 能取代多少程序员的工作?导致失业吗?
  • 原文地址:https://www.cnblogs.com/cyq1162/p/16532332.html