当前位置: 首页 > article >正文

asp.net core 入口 验证token,但有的接口要跳过验证

asp.net core 入口 验证token,但有的接口要跳过验证

在ASP.NET Core中,你可以使用中间件来验证token,并为特定的接口创建一个属性来标记是否跳过验证。以下是一个简化的例子:

  1. 创建一个自定义属性来标记是否跳过验证:
    public class SkipTokenValidationAttribute : Attribute
    {
        public bool Skip { get; set; } = false;
    }

  2. 创建中间件来验证token:
    public class TokenValidationMiddleware
    {
        private readonly RequestDelegate _next;
     
        public TokenValidationMiddleware(RequestDelegate next)
        {
            _next = next;
        }
     
        public async Task Invoke(HttpContext context)
        {
            var endpoint = context.Features.Get<IEndpointFeature>()?.Endpoint;
            if (endpoint != null)
            {
     var actionMethod = "";//[control]/[action]
     var controllerActionDescriptor = endpoint.Metadata.GetMetadata<ControllerActionDescriptor>();
     if (controllerActionDescriptor != null)
     {
         actionMethod = controllerActionDescriptor.AttributeRouteInfo?.Template;//.ControllerName;
     }
                var skipAttr = endpoint.Metadata.GetMetadata<SkipTokenValidationAttribute>();
                 if (skipAttr?.Skip != null && skipAttr?.Skip != true)
                {
                    var token = "";// context.Request.Query.
     if(context.Request.Query!=null && context.Request.Query.ContainsKey("token"))
     {
         token = context.Request.Query["token"].ToString().Trim();
     }
     if (context.Request.Form!=null && context.Request.Form.ContainsKey("token"))
     {
         token = context.Request.Form["token"].ToString().Trim();
     }
     if(!string.IsNullOrEmpty(token))
     {
         //验证token...
     }
     else
     {
         context.Response.StatusCode = 401;
         return;
     }
     // 验证token的逻辑
     //var token = context.Request.Headers["Authorization"].FirstOrDefault()?.Split(" ").Last();
     //if (token != null)
     //{
     //    // 验证token的逻辑
     //    // 如果token无效,返回未授权的错误
     //    context.Response.StatusCode = 401;
     //    return;
     //}
                }
            }
     
            await _next(context);
        }
    }

  3. 注册中间件:在Startup.cs中的Configure方法中添加中间件(注意要写在app.UseRouting()之后):
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        // 其他中间件配置...
     
        app.UseMiddleware<TokenValidationMiddleware>();
     
        // 其他中间件配置...
    }

  4. 使用SkipTokenValidationAttribute属性来标记那些不需要验证token的接口:
    //[ApiController] //有这个,好像接口字符参数都必须填写值
    [Route("[controller]")]
    [SkipTokenValidation]//控制下所有接口都要验证
    public class SkipTokenController : ControllerBase
    {
        // 这个接口会跳过token验证
        [HttpGet]
        [SkipTokenValidation(Skip = true)]
        public IActionResult SkipValidation()
        {
            return Ok("This endpoint is skipping token validation.");
        }
     
        // 这个接口需要token验证
        [HttpGet("validate")]
        public IActionResult ValidateToken()
        {
            return Ok("This endpoint is requiring token validation.");
        }
    }

    以上代码展示了如何在ASP.NET Core中创建一个中间件来验证token,并根据接口是否需要跳过验证来处理请求。在实际应用中,你需要替换验证token的逻辑以满足你的安全需求


http://www.kler.cn/news/367371.html

相关文章:

  • keepalived+web 实现双机热备
  • 在GeoTools中的Shapefile属性表读取效率之Shp与Dbf对比
  • CSP-S 2024 游记
  • 低代码平台如何通过AI赋能,实现更智能的业务自动化?
  • es实现自动补全
  • 开源数据库 - mysql - 组织结构(与oracle的区别)
  • 无人机之自主降落系统篇
  • 鲁班猫的一些踩坑
  • Anaconda 虚拟环境 conda 下载 pytorch
  • 【深搜算法】(第四篇)
  • [0154].第5节:IDEA中创建Java Web工程
  • Python自动化发票处理:使用Pytesseract和Pandas从图像中提取信息并保存到Excel
  • 每天一题:洛谷P2041分裂游戏
  • 通过火山云API来实现:流式大模型语音对话
  • java脚手架系列9-统一权限认证gateway
  • 基于MWORKS的蓝桥杯「智能装备数字化建模大赛」正式发布,首期培训本周六开启
  • C++结合图形编程与物联网:你更偏向哪种方式来学习信息学奥赛?
  • 如何应对 Android 面试官 -> ANR 如何优化?线上 ANR 如何监控?
  • 计算机网络:网络层 —— IPv4 地址与 MAC 地址 | ARP 协议
  • <Project-11 Calculator> 计算器 0.5 液体、长度、温度单位 转换器 liquid_measures HTML JS
  • 【NIPS24】【Open-Ended Object Detection】VL-SAM
  • 【从零开始】2. Dell PowerEdge 人工智能服务搭建(番外篇)
  • 【MySQL】索引和事务
  • mongodb 导入导出索引--查询慢问题
  • 4404 - 提高:二分与三分:曲线(三分)
  • 企业数据高效集成案例:钉钉到MySQL的数据同步