【问题标题】:Verify Antiforgery Token Inside Function在函数内部验证 Antiforgery Token
【发布时间】:2021-02-09 08:55:37
【问题描述】:

我正在使用 .netcore 3.0,目前我有一个 API 可以接受外部(没有 Antiforgery 令牌)和内部(有 Antiforgery 令牌)调用,在这种情况下,我需要在 api 方法上添加 [IgnoreAntiforgeryToken] 和根据请求判断是否检查防伪令牌。

想知道是否有在 api 函数中验证防伪令牌?提前致谢。

【问题讨论】:

    标签: asp.net-core model-view-controller .net-core antiforgerytoken


    【解决方案1】:

    据我所知,如果你想调用 Antiforgery 类来验证防伪令牌,你可以直接在你的 api 中调用 IAntiforgery 服务,然后使用 ValidateRequestAsync 来验证令牌。

    更多细节,您可以参考以下代码:

    1.在startup.cs的ConfigureServices方法中添加services.AddHttpContextAccessor();

    2.在控制器中添加以下代码:

    public class HomeController : Controller
    {
        private readonly IAntiforgery _antiforgery;
        private readonly IHttpContextAccessor _httpcontextaccessor;
        public HomeController(IAntiforgery defaultAntiforgery, IHttpContextAccessor httpcontextaccessor)
        {
          
    
            _antiforgery = defaultAntiforgery;
            _httpcontextaccessor = httpcontextaccessor;
    
        }
        public async Task<IActionResult> PrivacyAsync()
        {
    
            try
            {
                await _antiforgery.ValidateRequestAsync(_httpcontextaccessor.HttpContext);
    
            }
            catch (Exception)
            {
    
                throw;
            }
    
    
    
            return View();
        }
    
    }
    

    【讨论】:

    • 感谢您的回答,我今天早上发现并忘记更新线程。我使用类似的方法。
    【解决方案2】:

    我使用和@Brando Zhang类似的方法

    var _antiforgery=(IAntiforgery)this.HttpContext.RequestServices.GetService(typeof(IAntiforgery));
    var IsValid = _antiforgery.IsRequestValidAsync(this.HttpContext).Result;
    return IsValid;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-20
      • 1970-01-01
      • 2021-06-21
      • 1970-01-01
      • 2014-10-16
      • 2013-04-08
      • 2021-12-09
      • 2023-02-08
      相关资源
      最近更新 更多