实施不可知论的讨论。OAuth2从资源服务器流向另一个
- 黑色线条显示哪些服务受auth服务器保护。
- 绿线显示了服务之间的交互(客户和订单服务需要经过数据服务,将访问数据库。独立的服务并不像其他服务)
- 红线显示特定请求流
- 数据服务不直接暴露于外部,只能由允许这样做的其他服务访问。
我假定当用户使用auth服务器进行身份验证时,客户端已经获得访问令牌。选择哪种流量(隐含的,授权码,密码)是无关紧要的。我想从客户已经获得访问令牌的角度开始讨论。
从那时起,我很清楚当客户端需要访问单个资源服务器时会发生什么。
- 也求资源服务器,并通过获得的令牌
- 资源服务器验证令牌(不相干如何)
- 如果有效,服务的要求。
因此,在该图中,如果客户端要访问“StandAlone Service”(不与任何其他资源服务器通信),该流程对我来说很清楚。
当客户端跟随图中的红线时,我遇到了麻烦。所以我需要访问一个服务(资源服务器),以便回复需要访问另一个服务(也是资源服务器)。在这种情况下流程如何?
方案1.
- “订单服务”是建立既作为资源服务器和客户端。
- 客户端使用访问令牌发出请求,但“订单服务”将获取具有自己的客户端凭证的另一个令牌,以便与“数据服务”交谈。
这里的问题,我看到它是我松散的用户权限。我将使用“订单的服务”权限执行对“数据服务”的请求,而不是用户的权限。
场景2.
- “订单服务” 是设置只能作为资源服务器。
- 客户端与使用者令牌和“订单服务”请求将向下转发同样的道理,以“数据服务”
在这里,我执行与用户的权限,但现在我看到我的“数据服务“已公开并可用于任何其他服务。 (其实我不知道的oauth2提供这样的限制。限制客户端只对特定资源服务器)
方案3.
在这里,我看到的上述情况组合,其中“订单服务”将向数据服务提供这两个令牌。用户访问令牌,以便使用正确的权限和“Order's service”客户端访问令牌执行请求,以便我知道允许该服务与“数据服务”进行通信。
实施
我使用的弹簧引导和春季安全,以建立我上面看到的oauth2组件。我已经有了一个auth服务器,一个资源服务器和一个客户端。当前的客户端与资源服务器进行通信,而不会将请求委托给其他资源服务器。
根据最佳方法我将如何去实现方面?我需要对资源服务器进行哪些更改,以便他们可以安全地进行对话?
谢谢你的时间