【发布时间】:2015-12-05 11:10:26
【问题描述】:
我正在草拟一个简单的应用程序,它将包含三个松散耦合的服务:身份验证(在 spring 安全性下使用 OAuth2)、配置文件和首选项、数据收集。我正在尝试确定保护或架构这些服务之间安全调用的最佳方式。考虑以下两个用户案例。在每种情况下,用户都已经过身份验证,并且请求将包含一个有效的 JWT 令牌到初始服务端点:
案例 1:用户想要编辑他们对首选水果的偏好。应用程序将对 Profile/Preference 服务进行经过身份验证的调用以获取他们的首选项,然后 POST 回更新的首选项。
案例 2:他们向数据收集服务发出请求,该服务将轮询杂货店 API 以获取水果价格。这需要从个人资料和偏好服务中查找他们喜欢的水果。
我的问题是,为上述案例 2 保护个人资料和偏好服务的最佳方式是什么。我觉得有三种可能的方法:
- 每个内部请求都需要包含任何身份验证 标头传递当前用户上下文
- 每个内部请求都需要在其他一些地方进行身份验证 作为 API 用户的方式
- 每个内部请求都需要到达不同的端点,即 未公开暴露并连接到内部负载均衡器中 仅限流量
这是由 Spring Boot 的一个方面提供的开箱即用的东西吗?
【问题讨论】:
-
如果出现 (3),您将在整个应用程序中创建单点故障。选项 (1) 似乎是最好的,因为那时您将使用 OAuth2 的功能并使用用户的上下文“为用户”执行操作。
标签: spring spring-security spring-boot spring-integration spring-security-oauth2