【发布时间】:2019-03-08 20:30:52
【问题描述】:
我正在寻找最佳的授权服务架构,在应用服务层,在服务中提供通用的授权检查。
理想情况下,它应该是单一服务,授权用户对所有聚合执行操作。诸如浏览列表、读取/编辑项目、读取/编辑拥有的项目等。
我正在考虑为每个议程授权适配器的服务,通过存储库上的方法阅读解决方案,但我觉得我正在重新发明轮子。 :-)
你有什么想法或好的阅读/来源吗?
【问题讨论】:
-
你可以实现一些非常复杂的东西,但最后我觉得有像
EntityXAuthorizationService、EntityYAuthorizationService这样简单的方法,比如canDoX、canDoY和assertCanDoX和assertCanDoY非常简单,可以抽象出底层实现的所有复杂性,例如使用 ACL、权限和角色、基于规则的逻辑等。每个方法都可以有自己的签名,以便提供正确的授权上下文信息。 -
主要缺点是您不能以通用方式(例如拦截器)动态执行规则,因此您必须检查所有应用程序服务方法。但是,您永远不必与任何安全模型抽象限制作斗争,因为您可以在这些方法调用背后做任何您想做的事情,并且您的授权服务可以注入他们需要的所有协作者。
-
@voiceofunreason 有什么意见吗?
-
熟悉 asp.net core 我建议你看看IdentityServer作为认证服务和PolicyServer作为授权服务。
-
@plalx 这就是我现在的做法。我喜欢它,但如果我看到如何更好地做到这一点的聪明方法,我愿意采用它。 :-)
标签: authorization domain-driven-design access-control