【问题标题】:Authorization service design (application service)授权服务设计(应用服务)
【发布时间】:2019-03-08 20:30:52
【问题描述】:

我正在寻找最佳的授权服务架构,在应用服务层,在服务中提供通用的授权检查。

理想情况下,它应该是单一服务,授权用户对所有聚合执行操作。诸如浏览列表、读取/编辑项目、读取/编辑拥有的项目等。

我正在考虑为每个议程授权适配器的服务,通过存储库上的方法阅读解决方案,但我觉得我正在重新发明轮子。 :-)

你有什么想法或好的阅读/来源吗?

【问题讨论】:

  • 你可以实现一些非常复杂的东西,但最后我觉得有像EntityXAuthorizationServiceEntityYAuthorizationService 这样简单的方法,比如canDoXcanDoYassertCanDoXassertCanDoY 非常简单,可以抽象出底层实现的所有复杂性,例如使用 ACL、权限和角色、基于规则的逻辑等。每个方法都可以有自己的签名,以便提供正确的授权上下文信息。
  • 主要缺点是您不能以通用方式(例如拦截器)动态执行规则,因此您必须检查所有应用程序服务方法。但是,您永远不必与任何安全模型抽象限制作斗争,因为您可以在这些方法调用背后做任何您想做的事情,并且您的授权服务可以注入他们需要的所有协作者。
  • @voiceofunreason 有什么意见吗?
  • 熟悉 asp.net core 我建议你看看IdentityServer作为认证服务和PolicyServer作为授权服务。
  • @plalx 这就是我现在的做法。我喜欢它,但如果我看到如何更好地做到这一点的聪明方法,我愿意采用它。 :-)

标签: authorization domain-driven-design access-control


【解决方案1】:

您正在寻找的是外部化动态授权,也称为基于属性的访问控制 (ABAC)。在 ABAC 中,有一个架构定义了一个通用授权服务,您可以查询该服务以获得基于策略(通常写在)和属性(如用户角色、许可、数据敏感性)的授权决策(允许/拒绝),等等……

美国国家标准与技术研究院 NIST 有一篇关于 ABAC 的精彩文章:https://csrc.nist.gov/publications/detail/sp/800-162/final

【讨论】:

  • 好文章,谢谢。我说的是应用内,比如说域级别的授权检查。
【解决方案2】:

您可以看看 Keycloak,一个用于身份和访问管理的开源工具:

https://www.keycloak.org/docs/latest/authorization_services/index.html

【讨论】:

  • 好文章,谢谢(太)。我说的是应用内,比如说域级别的授权检查。
  • 嗯,我认为根据最佳实践,授权应该在应用程序级别完成,说明允许哪些用户角色运行每个用例(应用程序服务)。我从未在域级别进行过授权,因此无法为您提供帮助。对不起。
猜你喜欢
  • 2016-05-19
  • 2014-06-24
  • 2015-01-21
  • 2022-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-04
相关资源
最近更新 更多