微服务中的输入验证取决于来自其他服务的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微服务中的输入验证取决于来自其他服务的数据相关的知识,希望对你有一定的参考价值。

我正在使用微服务设计照片管理解决方案。

  • 一项服务负责跟踪特定用户拥有的单张照片的数据。
  • 另一项服务负责相册。

我需要阻止用户将未拥有的照片添加到他的相册中。很明显,我需要对“专辑服务”进行一些验证。但有关照片所有者的信息是“照片服务”。

我想到的一个可能的解决方案是将具有相关属性的照片记录复制到“专辑服务”。但我真的不喜欢它,因为在这种情况下,“专辑服务”会有很多照片记录,而不是任何专辑。

另一种选择是从“专辑服务”到“照片服务”的同步呼叫。但这会破坏微服务范式。

问题是,实施此类验证的好方法是什么。

答案

ID为9876的用户想要将ID为1234的照片添加到相册333:

PUT /albums/333/photos/1234
user-id:9876 (in header)

相册服务调用照片服务以验证照片属于用户:

GET /photos/9876/1234 <- a bit contrived
404 Not Found

未找到表示相册服务中的照片不属于用户,因此它向调用者返回403(并且不更新相册)。

如你所说,这可能会打破微服务范式,但你已经将问题定为实时验证问题。实时问题需要实时解决方案。

如果没有期望进行实时验证,那么您可以允许用户发出将照片添加到相册的请求,然后可能稍后通过消息队列进行实际验证操作,任何否定结果通过websockets或其他通知机制返回给用户。

以上是关于微服务中的输入验证取决于来自其他服务的数据的主要内容,如果未能解决你的问题,请参考以下文章

微服务:API网关在API安全中的作用

通过多个微服务进行 JWT 授权

验证微服务架构的每个服务中的访问令牌(JWT)

使用 jwt 在微服务中进行身份验证

API网关和API微服务之间的相互认证?

无法解析来自服务器的 JSON 数据