在同一层或单独的层中实施访问控制?

问题描述 投票:0回答:1

我想知道从架构的角度来执行访问控制的更好方法是什么。

最好是在常规类/方法中进行访问控制,还是最好在更高级别的单独层中实现访问控制?

我看到了两者的好处。如果它在同一层,则绝对没有办法(偶然地)规避它,但这可能会使代码变得更复杂。另一方面,如果它在单独的层中,则访问控制实现将与其余代码分开,从而使测试和推理变得更加容易。

我倾向于分层解决方案,但我不太确定。

我将不胜感激任何想法或相关链接。

architecture access-control
1个回答
0
投票

您如何在上下文中定义“图层”?

[IMO]是Spring Security在Java世界中的工作方式。它插入到Spring MVC过滤器链中,并确保在允许通过调用之前进行授权/身份验证,但是它不直接与应用程序逻辑代码耦合。您仍然可以独立地对API进行单元测试(除非您通过将Spring Security关注事项引入代码中来引入显式耦合)。您看到这是在同一个“层”中吗?

我非常谨慎地将安全检查显式地编码到每个公共方法或API端点中-感觉像是很多重复,并且很快就会变得难以维护。作为替代方案,您可以考虑使用Decorator模式在方法周围包装特定于安全性的逻辑。

最后,如果要公开一组API或微服务,则API gateway是在明确定义的单独层中实现安全性的一种选择。这确实意味着您将需要明确禁止从网关以外的任何其他来源(例如,通过防火墙规则)对API的调用。

© www.soinside.com 2019 - 2024. All rights reserved.