.NetCore Webapi 接口验证请求来源

目录

[1. 验证域名来源:CORS(跨域资源共享)](#1. 验证域名来源:CORS(跨域资源共享))

[2. 验证调用方身份:API Key / Token 认证](#2. 验证调用方身份:API Key / Token 认证)

[3. 防止请求伪造:API 接口签名机制 (Sign)](#3. 防止请求伪造:API 接口签名机制 (Sign))

[4. 限制服务器 IP:IP 白名单 (IP Whitelisting)](#4. 限制服务器 IP:IP 白名单 (IP Whitelisting))

5.总结与方案推荐


如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

在 .NET Core Web API 中,验证请求来源(通常指验证客户端身份请求域名请求是否被篡改)是保障 API 安全的重要环节。

实现这一目标主要有以下几种核心方案,你可以根据具体的应用场景(如:内部系统互调、前后端分离、第三方对接)进行选择:

1. 验证域名来源:CORS(跨域资源共享)

如果你的 API 是给浏览器端(如 Vue, React)使用的,可以通过配置 CORS 策略来限制只有特定的域名可以访问你的 API。

  • 适用场景:浏览器端应用、前后端分离项目。
  • 实现方法

// 在 Program.cs 中配置

builder.Services.AddCors(options =>

{

options.AddPolicy("AllowSpecificOrigin",

policy => policy.WithOrigins("https://example.com") // 仅允许此域名访问

.AllowAnyMethod()

.AllowAnyHeader());

});

var app = builder.Build();

app.UseCors("AllowSpecificOrigin"); // 启用中间件

  • 注意 :CORS 只能防浏览器,无法防止 Postman、Curl 或后端服务器发起的伪造请求。

2. 验证调用方身份:API Key / Token 认证

为每个合法的客户端分配一个唯一的 API Key (常用于第三方对接)或使用 JWT Token (常用于用户登录)。客户端必须在请求头(如 X-API-KEY Authorization )中携带该凭证。

  • 适用场景:第三方开发者对接、前后端分离、移动端 App。
  • 实现方法(中间件验证 API Key 示例)

public class ApiKeyMiddleware

{

private readonly RequestDelegate _next;

private const string APIKEYNAME = "X-API-KEY";

public ApiKeyMiddleware(RequestDelegate next) => _next = next;

public async Task InvokeAsync(HttpContext context)

{

if (!context.Request.Headers.TryGetValue(APIKEYNAME, out var extractedApiKey))

{

context.Response.StatusCode = 401;

await context.Response.WriteAsync("API Key 缺失");

return;

}

var expectedApiKey = "预留的合法ApiKey_abcdefg"; // 实际应从配置或数据库读取

if (!expectedApiKey.Equals(extractedApiKey))

{

context.Response.StatusCode = 401;

await context.Response.WriteAsync("未授权的请求来源");

return;

}

await _next(context);

}

}

3. 防止请求伪造:API 接口签名机制 (Sign)

如果需要极高的安全性,防止请求在传输过程中被篡改,可以使用**参数签名(Signature)**机制。

  • 适用场景:开放平台、支付接口(如微信/支付宝支付)、App 后端对接。
  • 核心逻辑
    1. 分配给客户端一个 AppId AppSecret (私钥,绝不公开)。
    2. 客户端发送请求时,将 时间戳 (Timestamp) + 随机数 (Nonce) + 请求参数 + AppSecret 按照特定顺序拼接。
    3. 使用 MD5/SHA256 算法生成一个 Sign 字符串,并随请求一起发送。
    4. Web API 收到请求后,用同样的规则计算 Sign ,对比是否一致。
  • 作用 :既验证了来源(只有拥有 AppSecret 的人才能算出对的 Sign),又防了重放攻击(靠时间戳和随机数)。

4. 限制服务器 IP:IP 白名单 (IP Whitelisting)

如果你的 API 只允许特定的服务器(如合作伙伴的固定服务器、公司的公共网关)调用,可以直接限制请求的 IP 地址

  • 适用场景:服务器互调(B2B 对接)、内部微服务通信。
  • 实现方法(Action 过滤器示例)

public class IpWhitelistAttribute : ActionFilterAttribute

{

private readonly List<string> _safelist = new() { "127.0.0.1", "::1", "192.168.1.100" };

public override void OnActionExecuting(ActionExecutingContext context)

{

var remoteIp = context.HttpContext.Connection.RemoteIpAddress;

if (remoteIp == null || !_safelist.Contains(remoteIp.ToString()))

{

context.Result = new UnauthorizedObjectResult("IP 地址未授权");

return;

}

base.OnActionExecuting(context);

}

}

注意 :如果 API 部署在 Nginx 或负载均衡器后面,直接获取 RemoteIpAddress 可能是 Nginx 的 IP。此时需要配置 UseForwardedHeaders 中间件,并从 X-Forwarded-For 请求头中读取真实 IP。

5.总结与方案推荐

场景 推荐方案 安全级别
纯浏览器前端(Vue/React) CORS + JWT Token
对外开放的第三方接口 API Key + 接口签名 (Sign)
固定的企业级伙伴对接 IP 白名单 + API Key 最高

如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。

相关推荐
丿Wayne6 小时前
iOS Token 刷新实战(Actor 避免并发重复刷新)
ios·swift·token·actor·swift并发
花北城1 天前
【C#底层库】access_token授权鉴权验证
c#·鉴权·token·授权
IPdodo_1 天前
住宅 IP 与数据中心 IP 到底差在哪:用 RDAP、BGP 和多源证据做工程判定
网络·网络安全·代理模式·ip
七夜zippoe1 天前
Agent 上下文工程:Token 管理、上下文压缩与分层记忆设计
ai·agent·token·上下文压缩·分层记忆
xiaoye-duck1 天前
《Linux 网络编程》深入理解 IP 协议(一):网络层基础与 IP 协议头详解
linux·网络·ip
九章云极DataCanvas2 天前
让大模型少做重复计算 九章云极开源分布式KV Cache系统DingoCache
人工智能·开源·token·九章智算云
zander2583 天前
知识分享平台项目复习第二天:登录模块中的双令牌与刷新安全(2)
xss·csrf·cors·登录模块·cookie的三个属性
宝桥南山3 天前
Microsoft Fabric - 简单尝试一下Microsoft Fabric .NET SDK
microsoft·微软·.net·.netcore·powerbi·fabric
SoStraw3 天前
从零接入 webrpc:按这份最小清单跑通双端,再写业务
sdk·p2p·入门·token·webrpc·opensession·senddata