You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core API自定义授权Action Filter如何校验请求头Authorization?

自定义Authorization校验Action Filter 实现方案

在现有代码基础上,补全两层分支校验、设置拦截返回结果即可满足需求,不需要额外复杂依赖:

校验逻辑拆解

  • 利用已获取的TryGetValue返回结果判断Authorization请求头是否存在
  • 请求头存在时,判断对应取值是否包含Bearer标识
  • 任意校验不通过时,直接给上下文赋值401未授权结果,阻断后续Action执行

完整实现代码

public class CustomAuthFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        bool hasAuthHeader = filterContext.HttpContext.Request.Headers.TryGetValue(
            key: "Authorization",
            value: out StringValues authHeaderValues);

        // 校验1:请求头不存在
        if (!hasAuthHeader)
        {
            filterContext.Result = new UnauthorizedObjectResult("缺少Authorization请求头");
            return;
        }

        string authValue = authHeaderValues.FirstOrDefault() ?? string.Empty;

        // 校验2:请求头值是否包含Bearer
        if (!authValue.Contains("Bearer", StringComparison.OrdinalIgnoreCase))
        {
            filterContext.Result = new UnauthorizedObjectResult("Authorization头值需包含Bearer标识");
            return;
        }

        // 校验通过,放行请求
        base.OnActionExecuting(filterContext);
    }
}

实际使用注意点

  • 校验不通过时必须手动return终止流程,否则即使设置了Result,后续过滤器与Action逻辑仍会正常执行
  • 生产环境不建议用Contains做宽松匹配,推荐替换为authValue.StartsWith("Bearer ", StringComparison.Ordinal)严格匹配标准Bearer格式(即值结构为Bearer + 空格 + 令牌字符串),避免类似MyFakeBearerToken这类无效值误通过校验
  • .NET Core中Request.Headers返回值为StringValues结构,不要强行转为单string取值,避免同名字段多值场景下的类型转换异常
  • 基础格式校验通过后,可直接截取Bearer 前缀后的令牌字符串,追加令牌签名、有效期、权限范围等深度校验逻辑

内容的提问来源于stack exchange,提问作者schwifty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 15:15:08