【发布时间】:2021-04-25 04:54:28
【问题描述】:
我正在我的 Web API 中实现 Resource-based authorization in ASP.NET Core。
我想强制程序员在每个控制器方法中始终调用_authorizationService.AuthorizeAsync。
如果某些控制器方法完成但没有至少调用一次 AuthorizeAsync,我如何确保返回 403 Unauthorized 响应?
我还可以考虑使用属性或其他方式将控制器方法显式标记为无需授权即可使用。主要思想是应用“全部拒绝,然后允许一些”的原则,并防止仅仅因为有人忘记添加AuthorizeAsync 调用而造成安全漏洞。
【问题讨论】:
-
为什么要在操作方法中进行身份验证?只需使用
[Authorize](或您自己的派生版本),您就可以强制将其应用于您的应用程序。 -
如果这是适用于所有路由的一般授权要求,那么您应该调整默认策略以接受该要求,以便在您使用
[Authorize]时自动发生。否则,您始终可以添加 MVC 授权过滤器。 -
@DavidG 我不能使用 [Authorize] 因为它不支持我需要的用例(引用微软文章:“如果您根据 CRUD(创建,读取、更新、删除)操作”...)。在这种情况下,基于资源的授权似乎是我对任何资源应用通用 CRUD 身份验证规则的最佳选择。
标签: asp.net-core asp.net-core-mvc authorization