项目标题与描述
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();
复制代码
然后可以在中间件管道中使用:
使用说明
基本使用
// 获取令牌
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 智能小助手)公众号二维码
办公AI智能小助手
评论