在ASP.NET Core中如何手动生成anti forgery token
手动生成Anti Forgery Token实现方案
实现逻辑
ASP.NET 框架本身已经内置了成熟的防伪令牌处理服务,无需自己实现加密、校验逻辑,直接调用内置接口生成即可,安全性更有保障。
代码实现
适用于ASP.NET Core版本
public class TokenController : Controller { private readonly IAntiforgery _antiforgery; // 构造函数注入框架内置的防伪令牌服务 public TokenController(IAntiforgery antiforgery) { _antiforgery = antiforgery; } [HttpPost] [IgnoreAntiforgeryToken] public ActionResult Generate() { // 生成并存储令牌到当前请求上下文(会自动写入防伪Cookie) var antiforgeryTokens = _antiforgery.GetAndStoreTokens(HttpContext); // 返回前端请求需要携带的请求令牌值 return Json(antiforgeryTokens.RequestToken); } }
适用于.NET Framework MVC版本
public class TokenController : Controller { [HttpPost] [IgnoreAntiforgeryToken] public ActionResult Generate() { string cookieToken, requestToken; // 生成两段式防伪令牌 AntiForgery.GetTokens(null, out cookieToken, out requestToken); // 可根据需求返回拼接后的完整令牌,或者分别返回两个值 var token = $"{cookieToken}:{requestToken}"; return Json(token); } }
注意事项
- 前端调用接口拿到令牌后,后续需要校验的请求默认在请求头里携带
RequestVerificationToken字段,值为生成的请求令牌即可 - .NET Framework场景下手动校验令牌时,需要拆分拿到的cookieToken和requestToken,调用
AntiForgery.Validate(cookieToken, requestToken)完成校验 - 不要自定义实现令牌加密逻辑,直接使用框架内置服务即可,避免出现安全漏洞
- 生产环境需要限制Generate接口的访问权限,不要开放匿名访问
内容的提问来源于stack exchange,提问作者Mehdi
相关产品推荐
相关产品推荐

