微服务中的服务器到服务器通信

Server to Server communication in microservices

我正在研究微服务架构,但我在这方面面临一些挑战。

首先让我简要介绍一下架构。

  1. 用户登录并获得一个签名令牌,该令牌将用于调用所有 REST APIS.

  2. 会有很多 API 服务器,其中 API 使用 Spring 安全措施保护并根据用户角色授权。

  3. 服务必须相互交互以获取 get/update 信息。

  4. 每项服务都有权通过身份验证服务器验证令牌问题。

问题:-

  1. 如果用户登录并且使用相同的令牌并将其传递给每个经过验证的服务,一切都会正常工作across.So,服务不需要在传递令牌时相互信任。

  2. 现在,问题是有些服务需要在不登录的情况下从服务器本身调用。假设是服务器到服务器调用。服务将如何验证和授权来自其他服务的调用。

我读到了 spring 微服务,但 Zuul 也不是这里的救世主,因为每个 API 服务器都嵌入了 spring 安全性,而不仅仅是 API 网关。

一个解决方案可以是每个服务都有自己的默认用户,该用户具有某些角色,用于登录->获取令牌->使用令牌调用其他服务器api。

你能给我一些服务器到服务器调用的指示吗,其中每个服务器都使用 spring 安全性进行身份验证和授权。

谢谢。

在 OAuth2 中,有一个专门用于服务器到服务器授权的流程(Client Credentials Grant Flow)。调用服务是第二个(资源服务器)的常规客户端,因此它必须获取令牌并使用它。

简而言之,客户端告诉授权服务器他是谁(使用它的客户端id/app id),授权服务器给它一个令牌,可以用来查询资源服务器。

我有一个法语资源 here,序列图是英文的,应该会有帮助。您可以轻松找到有关此流程的更多信息。

有关 Spring 安全特定内容,请参阅 spring-security-oauth2 doc

理想情况下,在微服务架构中我们不应该在一个服务中调用其他服务。我们应该使用 Publisher/Subscriber 方法进行服务器到服务器的通信。

即使您希望这样做,只需将Auth-Token作为Header传递给下游服务,其中令牌将再次经过身份验证,因此一旦通过身份验证就会给出响应。