.net 将授权放在服务层而不是Web API层
我正在用.NET核心Web API构建REST API 我的控制器只是将请求转发到服务层并返回结果.net 将授权放在服务层而不是Web API层,.net,security,asp.net-web-api,asp.net-core,authorization,.net,Security,Asp.net Web Api,Asp.net Core,Authorization,我正在用.NET核心Web API构建REST API 我的控制器只是将请求转发到服务层并返回结果 [HttpPost(nameof(Create))] public async Task<Response<ProviderDTO>> Create([FromBody] ProviderDTO provider) => await providerService.CreateAsync(provider); [HttpPost(nameof(Create)
[HttpPost(nameof(Create))]
public async Task<Response<ProviderDTO>> Create([FromBody] ProviderDTO provider)
=> await providerService.CreateAsync(provider);
[HttpPost(nameof(Create))]
公共异步任务创建([FromBody]ProviderDTO provider)
=>等待providerService.CreateAsync(提供程序);
我现在在系统中需要开始实现授权
.NETCore必须实现授权,但文档主要在Web层(控制器显然位于Web层)的上下文中讨论这些方法
我的直觉告诉我,我需要在服务层本身中实现授权,而不是将此授权放在web层上
我的一些理由包括:
IPrincipal
和iaauthorizationservice
注入我的服务并直接在其中处理授权,这是一种明智的方法吗?然后web层只需检查用户是否登录,以及一些更简单的基于策略的属性(例如,此控制器仅允许员工策略)
问题二
有没有人可以将我链接到任何资源(我做过研究,但在这方面没有太多)
PS:关于拒绝服务层中的请求,我有一个异常处理中间件,可以将自定义异常转换为HTTP响应。因此,如果发生未经授权的请求,我将抛出一些未经授权的异常,这将最终导致HTTP 403。这完全取决于我们讨论的授权类型以及实现授权所需的工作量 一般来说,将服务层和web层混合使用不是一个好主意,所以要将它们分开 Web授权是一回事——这里你是说我有一个用户,他被允许访问这个端点/页面/任何东西。如果不是这样,您甚至不调用服务层就可以节省资源,并且可以在web层拒绝请求,在过程的早期和快速拒绝请求,而不会浪费资源 接下来,您所谈论的服务层是什么?它是一个真正与数据库对话的程序,还是一个一旦从数据层获得数据就进行数据操作的程序 我的首选是有一个单独的数据层和授权层。授权层应用您需要的任何规则,然后返回其结果,这样您就知道是否需要获取任何数据。它没有链接到您的web层,它不返回HTTP代码,一般来说,它与UI端无关 这意味着,如果您有多个客户端,例如Web UI和移动UI,那么这两个客户端都将通过此层,这样就不会重复此级别的工作 更好的是,您可能希望构建一个负责返回数据的适当API,然后您所要做的就是从您拥有的任何客户机处理这件事,并且您可以在那里处理您的授权。如果您确保可以单独调用授权层,而不依赖于其他任何东西,那么您可以从多个位置调用授权层,并且可以轻松独立地对其进行测试 这是人们在构建任何东西之前要考虑的事情,一旦其他事情都完成了,安全性并不是最后添加的东西。您在构建产品时考虑到了它,因为它涉及到很多东西,并且会影响您的架构 一张所有东西如何组合在一起的图表会有所帮助
- 你们有什么样的建筑
- 你所说的授权有多重要
- 我们在谈论什么样的客户