Security 应用程序的哪一层应该保留安全逻辑(权限、授权)?
由于最相似的问题与ASP MVC有关,我想知道一些常见的正确选择策略 让我们试着决定,它是进入业务层还是位于服务层 考虑到服务层有一个经典的远程facade接口,似乎有必要在这里进行权限检查,因为用户对象实例总是在这里(服务会话绑定到用户),并且可以进行Security 应用程序的哪一层应该保留安全逻辑(权限、授权)?,security,business-logic,n-tier-architecture,Security,Business Logic,N Tier Architecture,由于最相似的问题与ASP MVC有关,我想知道一些常见的正确选择策略 让我们试着决定,它是进入业务层还是位于服务层 考虑到服务层有一个经典的远程facade接口,似乎有必要在这里进行权限检查,因为用户对象实例总是在这里(服务会话绑定到用户),并且可以进行.hasPermission(…)调用。但这看起来像是一个业务逻辑漏洞 在业务层实现安全检查的不同方法中,我们使用“安全令牌”参数和类似的东西污染域对象接口 有什么建议可以克服这种折衷,或者你知道唯一真正的解决办法吗 我认为这个问题的答案很复杂,
.hasPermission(…)
调用。但这看起来像是一个业务逻辑漏洞
在业务层实现安全检查的不同方法中,我们使用“安全令牌”参数和类似的东西污染域对象接口
有什么建议可以克服这种折衷,或者你知道唯一真正的解决办法吗 我认为这个问题的答案很复杂,值得在早期思考一下。以下是一些指导原则 服务层是执行以下操作的好地方:
- 页面是公开的还是只对注册用户开放
- 此页面是否需要具有特定角色的用户
- 身份验证过程,包括将令牌转换为用户的内部表示
- 网络检查,如IP和垃圾邮件过滤器
- 此特定用户是否有权访问请求的记录?例如,用户应该可以访问其个人资料,但不能访问其他人的个人资料李>
- 审计请求。业务层处于描述请求细节的最佳状态,因为协议和其他细节已经在这一点上过滤掉了。您可以根据正在设置策略的业务实体进行审核
希望这能有所帮助。如果我们在服务层应用规则,服务方法将采用用户所做的参数。例如,在mvc控制器中,我将向服务发送一个用户名为productService.Update(User.Principal.Identity.Name,product)的请求;这是真的吗?您需要用户名、用户ID或用户的其他表示形式。您还可以将其用于日志记录、审核和调试。