微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 SOA 环境中处理内部服务到服务的身份验证

如何解决如何在 SOA 环境中处理内部服务到服务的身份验证

我正在构建一个 SOA 架构,它由一个简单的基于 Nginx 的 API 网关组成,该网关根据前缀将来自浏览器客户端的调用转发到适当的后端 API,例如:

  • /auth/login调用路由到身份验证服务上的 login 端点
  • /users/update/widget-1调用路由到用户服务上的 update 端点

每项服务都有自己的数据存储区,并遵循 SOLID 设计原则。我使用队列上的事件来让服务了解发生在他们都知道的数据上的有趣事情。例如,用户服务和身份验证服务都需要存储用户的电子邮件地址,因为它用于身份验证和发送电子邮件。因此,当用户的电子邮件发生更改时,我会将“用户电子邮件更改”事件排队到用户事件队列中。身份验证服务订阅此队列并使用该事件来使自己保持最新状态。

对于简单的事件,我可以在事件中包含足够的细节以避免需要更多信息。但是,提前想一想,如果用户发生了很多变化并且我有一个订阅每种事件类型的数据仓库,该怎么办。我不想开始有大型事件 - 我宁愿只包含足够的信息供感兴趣的服务使用该事件来触发呼叫以询问更多详细信息。

所以这个例子中的顺序是:

  1. 客户端使用 JWT 不记名令牌同步调用 user update
  2. 用户更新服务验证 JWT 并使用它来执行更新
  3. 用户更新服务向队列生成用户更新”事件,其中包含用户 ID
  4. Datawarehouse 接收事件并调用用户服务上的“获取用户详细信息”端点以获取更新的完整详细信息。

如何验证“内部服务调用”?我无法使用原始 JWT,因为内部请求是异步发生的,并且调用服务没有 JWT。当数据仓库请求用户详细信息时,它甚至可能不再有效。感觉就像我需要一些“内部”JWT - 例如,在这种情况下,答案是数据仓库服务能够使用自己的私钥生成自己的 JWT,然后用户服务使用数据仓库检查签名服务的公钥?在这种情况下,这是否意味着每个服务都必须知道可以调用它的所有其他服务?

如果有帮助,我当前的实现将 Lumen 用于带有 jwt-auth 包的服务,以在 API 级别检查 JWT。

感谢任何建议,谢谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。