Spring云:迷茫的副手
Spring Cloud: Confused Deputy
我对基于 Spring Cloud Netflix(Zuul、Eureka)、Spring Security OAuth 和 Spring Cloud Security 的生态系统微服务之间的安全下游调用有疑问。
例如,我有 WEB 应用程序 (WEB) 和以下微服务:A、B、X、Y、Z。
其中:
- 所有服务(A、B、X、Y、Z)都部署在周边并且可以直接物理访问彼此。
- API基于Netflix Zuul的网关对所有部署到边界的服务进行认证功能
- 所有服务都接受 OAuth 令牌进行授权。
并且:
- A 应该有权访问服务 X 和 Y(某些操作)
- B 应该可以访问服务 Y 和 Z(某些操作)
- 必须在经过身份验证的用户(用于授权)的上下文中调用所有服务。
并且我想解决以下问题(混淆代理问题):
- 服务 A 不应为服务 Z 执行任何操作(即使经过身份验证的用户对 Z 具有必要的权限)。
例如:
用户有权对服务 Z 执行读取、写入、删除操作。
但是服务 A 不应该能够代表经过身份验证的用户对服务 Z 执行任何操作。
- 服务 A 应该只能为服务 X 执行授权的操作。
例如:
用户有权对服务 X 执行读取、写入、删除操作。
但是服务 A 应该只能代表经过身份验证的用户对服务 X 执行读取操作。
是否有开箱即用的解决方案(使用当前技术)?
您必须记住,从逻辑上讲,执行这些操作的是用户,并且他必须已明确或隐式地授权这些操作。考虑到这一点,我至少知道一种可行的方法(cloudfoundry 中的 UAA 就是这样做的)。您可以扩展范围的命名空间以包含服务 ID,例如 "X.READ"、"Z.WRITE".
我对基于 Spring Cloud Netflix(Zuul、Eureka)、Spring Security OAuth 和 Spring Cloud Security 的生态系统微服务之间的安全下游调用有疑问。
例如,我有 WEB 应用程序 (WEB) 和以下微服务:A、B、X、Y、Z。
其中:
- 所有服务(A、B、X、Y、Z)都部署在周边并且可以直接物理访问彼此。
- API基于Netflix Zuul的网关对所有部署到边界的服务进行认证功能
- 所有服务都接受 OAuth 令牌进行授权。
并且:
- A 应该有权访问服务 X 和 Y(某些操作)
- B 应该可以访问服务 Y 和 Z(某些操作)
- 必须在经过身份验证的用户(用于授权)的上下文中调用所有服务。
并且我想解决以下问题(混淆代理问题):
- 服务 A 不应为服务 Z 执行任何操作(即使经过身份验证的用户对 Z 具有必要的权限)。
例如: 用户有权对服务 Z 执行读取、写入、删除操作。
但是服务 A 不应该能够代表经过身份验证的用户对服务 Z 执行任何操作。
- 服务 A 应该只能为服务 X 执行授权的操作。
例如:
用户有权对服务 X 执行读取、写入、删除操作。
但是服务 A 应该只能代表经过身份验证的用户对服务 X 执行读取操作。
是否有开箱即用的解决方案(使用当前技术)?
您必须记住,从逻辑上讲,执行这些操作的是用户,并且他必须已明确或隐式地授权这些操作。考虑到这一点,我至少知道一种可行的方法(cloudfoundry 中的 UAA 就是这样做的)。您可以扩展范围的命名空间以包含服务 ID,例如 "X.READ"、"Z.WRITE".