如何处理服务到服务通信中的安全 API

How to handle secured API in service to service communication

我有一个工作的单体应用程序(部署在容器中),我想为其添加通知功能作为单独的微服务。

我计划让单体将事件发送到消息总线 (RabbitMQ),新服务将在该消息总线上接收事件,然后将通知发送给用户。为了编写通知,它需要来自 monolit 的其他用户信息,因此它将调用 monolith 的 REST API 以获取它。

问题是,访问单体 API 需要令牌形式的身份验证。我在想:

我的问题是,有哪些解决此类问题的好方法,而且,刚开始学习微服务,我首先要做的是正确的吗?

在处理内部安全问题时,您应该始终考虑部署以及 API 向外界公开的方式,API 网关可能用于简单地使其无法访问内部API秒。在这种情况下,固定令牌可能足以确保客户端获得授权。

不过,总的来说,我建议研究 OAuth2 或基于 JWT 的解决方案,因为它有助于验证调用系统的身份及其访问权限。

对于您的架构疑虑,您在构建解决方案时需要考虑以下场景:

  1. 远程调用可能会因未知原因随时失败,因此在您确定通知已成功处理之前,您不应确认通知事件。
  2. 正如您提到的 RabbitMQ,您的目标应该是使通知队列尽可能小,为此,包含用户详细信息的缓存可能有助于加快速度(并帮助您减少失败的可能性)由于外部系统不可用)。
  3. 如果您的应用程序向潜在的数百万不同用户发送大量通知,您可以考虑拥有一个通知服务可访问的用户的只读数据库副本,并直接从数据库集群中批量读取.这减少了单体的负载并将其转移到数据库层