我目前正在基于Java Spring Cloud构建基于微服务的系统。一些微服务使用PostgreSQL,其中一些使用MongoDB。 REST和JMS用于通信。计划是使用SSO和OAuth2进行身份验证
我面临的挑战是必须在域对象/实体级别上进行授权。这意味着需要某种ACL(访问控制列表)。这种架构的最佳实践是避免这样的事情,并且可能在每个微服务中的应用程序/服务层级别上具有粗粒度的安全性,但不幸的是,这是不可能的。
我的最终想法是使用Spring Security ACL并在所有微服务之间的共享数据库中使用ACL表。数据库只能由Spring基础结构或Spring api访问。数据库架构看起来稳定,不太可能发生变化。在这种情况下,我只是打破了关于在微服务之间共享数据库的规则。
我正在考虑不同类型的分布式解决方案,但留下了它们:
我真的会使用一些建议和意见如何处理架构,因为这非常棘手,而且很多事情都可能出错。
非常感谢,
的Lukas
答案 0 :(得分:1)
我没有完整清晰的授权要求。 我假设经过身份验证的用户与域对象/实体权限之间存在关联。
要考虑的一个选项是定义与您的域对象/实体权限相对应的用户属性,并实现基于属性的访问控制(ABAC)策略。
属性与存储库中的用户标识绑定并一起存储,并在执行身份验证时检索。