写点什么

ASP.NET Core 防伪令牌系统

作者:qife
  • 2025-07-03
    福建
  • 本文字数:1133 字

    阅读完需:约 4 分钟

项目标题与描述

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


办公AI智能小助手


用户头像

qife

关注

还未添加个人签名 2021-05-19 加入

还未添加个人简介

评论

发布
暂无评论
ASP.NET Core 防伪令牌系统_ASP.NET Core_qife_InfoQ写作社区