gpt4 book ai didi

asp.net-core - 如何在无 View Web API 中配置防伪保护

转载 作者:行者123 更新时间:2023-12-04 11:11:49 46 4
gpt4 key购买 nike

我正在使用 ASP.NET Core 实现 REST API。除了使用 cookie 进行身份验证之外,它是无状态的,因此容易受到跨站点请求伪造 (CSRF) 攻击。
幸运的是,ASP.NET Core 提供了一种保护方法: Prevent Cross-Site Request Forgery (XSRF/CSRF) attacks in ASP.NET Core
由于我的应用程序没有任何 View 或页面,因此我仅使用 services.AddControllers() 中的 Startup 配置我的 Controller 。
当点击归属于 [ValidateAntiForgeryToken] 的 REST 端点时,我收到以下异常:

System.InvalidOperationException: No service for type 'Microsoft.AspNetCore.Mvc.ViewFeatures.Filters.ValidateAntiforgeryTokenAuthorizationFilter' has been registered.


使用 services.AddControllersWithViews() 注册我的 Controller 会使这个错误消失,因为它在内部注册了适当的服务。
根据 docs :

Antiforgery middleware is added to the Dependency injection container when one of the following APIs is called in Startup.ConfigureServices:

AddMvc

MapRazorPages

MapControllerRoute

MapBlazorHub


在我看来,所有这些方法都以 View 为中心(除了我在 MapControllerRoute 中的 Configure 方法中执行的 Startup ,但它没有帮助)并且缺少服务的一部分命名空间是 ViewFeatures 。这让我感到困惑,因为在我的理解中,尽管我正在开发一个没有 View 的纯 Web API,但需要处理 CSRF。
我的理解有误吗?不涉及 View 时如何配置CSRF保护?

最佳答案

我会建议远离默认的 ValidateAntiForgeryToken 属性
所有繁重的工作都由 services.AddAntiforgery() 完成,而 ValidateAntiForgeryToken 只是调用 antiforgery.ValidateRequestAsync()
你可以为它创建你自己的过滤器并注册它等等,但是看看这个简洁的实现,你可以简单地在所有 POST api 方法中注入(inject)一个 IAntiforgery 的实例
https://github.com/dotnet/AspNetCore.Docs/blob/main/aspnetcore/security/anti-request-forgery/sample/AngularSample/Startup.cs

关于asp.net-core - 如何在无 View Web API 中配置防伪保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62347212/

46 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com