Spring云:迷茫的副手

Spring Cloud: Confused Deputy

我对基于 Spring Cloud Netflix(Zuul、Eureka)、Spring Security OAuth 和 Spring Cloud Security 的生态系统微服务之间的安全下游调用有疑问。

例如,我有 WEB 应用程序 (WEB) 和以下微服务:A、B、X、Y、Z。

其中:

并且:

  1. A 应该有权访问服务 X 和 Y(某些操作)
  2. B 应该可以访问服务 Y 和 Z(某些操作)
  3. 必须在经过身份验证的用户(用于授权)的上下文中调用所有服务。

并且我想解决以下问题(混淆代理问题):

  1. 服务 A 不应为服务 Z 执行任何操作(即使经过身份验证的用户对 Z 具有必要的权限)。

例如: 用户有权对服务 Z 执行读取、写入、删除操作。

但是服务 A 不应该能够代表经过身份验证的用户对服务 Z 执行任何操作。

  1. 服务 A 应该只能为服务 X 执行授权的操作。

例如:

用户有权对服务 X 执行读取、写入、删除操作。

但是服务 A 应该只能代表经过身份验证的用户对服务 X 执行读取操作。

是否有开箱即用的解决方案(使用当前技术)?

您必须记住,从逻辑上讲,执行这些操作的是用户,并且他必须已明确或隐式地授权这些操作。考虑到这一点,我至少知道一种可行的方法(cloudfoundry 中的 UAA 就是这样做的)。您可以扩展范围的命名空间以包含服务 ID,例如 "X.READ"、"Z.WRITE".