ASP.NET Core 防伪令牌系统
项目标题与描述
ASP.NET Core Antiforgery 是一个用于生成安全令牌以防止跨站请求伪造(CSRF/XSRF)攻击的系统。它是 ASP.NET Core 框架的一部分,提供了完整的防伪令牌生成、验证和管理功能。
核心功能包括:
- 防伪令牌的生成和验证
- Cookie 和表单令牌管理
- 中间件集成
- 灵活的配置选项
功能特性
- 令牌生成:生成安全的防伪令牌对(包含Cookie令牌和请求令牌)
- 令牌验证:验证传入请求中的防伪令牌有效性
- 中间件支持:提供开箱即用的防伪中间件
- 灵活配置:可自定义Cookie设置、令牌字段名等
- 身份集成:支持与ASP.NET Core身份系统集成
- 扩展性:可通过接口自定义令牌存储、序列化等行为
安装指南
ASP.NET Core Antiforgery 已包含在 ASP.NET Core 框架中。要使用它,只需在Startup中添加服务注册:
services.AddAntiforgery();
然后可以在中间件管道中使用:
app.UseAntiforgery();
使用说明
基本使用
// 获取令牌
var token = antiforgery.GetAndStoreTokens(context);
// 在表单中使用
<form>
<input name="@token.FormFieldName" type="hidden" value="@token.RequestToken" />
</form>
// 验证请求
await antiforgery.ValidateRequestAsync(context);
端点验证
app.MapPost("/todo", [ValidateAntiForgeryToken] ([FromForm] Todo todo) => Results.Ok(todo));
自定义配置
services.AddAntiforgery(options =>
{
options.Cookie.Name = "MyAntiforgeryCookie";
options.HeaderName = "X-CSRF-TOKEN";
});
核心代码
防伪令牌生成
public AntiforgeryToken GenerateCookieToken()
{
return new AntiforgeryToken()
{
// SecurityToken will be populated automatically.
IsCookieToken = true
};
}
令牌验证中间件
public async Task InvokeAwaited(HttpContext context)
{
try
{
await _antiforgery.ValidateRequestAsync(context);
context.Features.Set(AntiforgeryValidationFeature.Valid);
}
catch (AntiforgeryValidationException e)
{
context.Features.Set<IAntiforgeryValidationFeature>(new AntiforgeryValidationFeature(false, e));
}
await _next(context);
}
令牌序列化
public AntiforgeryToken Deserialize(string serializedToken)
{
var unprotectedBytes = _cryptoSystem.Unprotect(tokenBytes);
var stream = serializationContext.Stream;
stream.Write(unprotectedBytes, offset: 0, count: unprotectedBytes.Length);
stream.Position = 0L;
var reader = serializationContext.Reader;
var token = Deserialize(reader);
// ...
}
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
公众号二维码


浙公网安备 33010602011771号