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智能小助手)
公众号二维码

posted @ 2025-07-03 10:01  qife  阅读(37)  评论(0)    收藏  举报