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

时间:2016-06-16 08:46:04

标签: java spring microservices spring-cloud-netflix

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

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

  1. 用户登录并获取一个签名令牌,用于呼叫所有REST APIS。

  2. 将会有很多API服务器使用Spring安全性来保护API,并根据用户角色进行授权。

  3. 服务必须相互交互才能获取/更新信息。

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

  5. 问题: -

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

    2. 现在,问题是有些服务需要从服务器本身调用而无需登录。让我们说服务器到服务器的调用。服务如何验证和授权来自其他服务的呼叫。

    3. 我读到了关于spring微服务但是Zuul也不是这里的救星,因为每个API服务器都嵌入了spring security,而不仅仅是API网关。

      一个解决方案可能是每个服务都有自己的默认用户,其中包含用于登录的担保角色 - >获取令牌 - >使用令牌调用其他服务器API。

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

      感谢。

2 个答案:

答案 0 :(得分:1)

理想情况下,在微服务架构中,我们不应该在服务中调用其他服务。我们应该使用发布者/订阅者方法进行服务器到服务器的通信。

即使您希望这样做,只需将Auth-Token作为用于向下游服务验证服务的标头传递,其中令牌将再次进行身份验证,从而提供响应经过身份验证。

答案 1 :(得分:0)

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

简而言之,客户端告诉授权服务器谁(使用其客户端ID / app id),授权服务器为其提供一个令牌,可用于查询资源服务器。

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

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