我有一个由几个应用程序组成的系统。
通常,这些应用程序需要相互交谈。
有时,在通信中使用“服务帐户”是有意义的,但其他时候,需要代表经过身份验证的用户对请求进行身份验证。
由于应用程序是异构的,因此很难让每个应用程序负责不同类型的身份验证。
理想情况下,所有应用程序都应该使用相同类型的身份验证。
我想知道服务总线是否可以简化这种集成,至少为服务到服务的通信提供公共身份验证。
发布于 2017-12-04 09:19:53
我将随心所欲,假设您使用的是某种类型的web服务。如果我错了,请纠正我。
有许多因素,可以发挥作用,如何“可以”,因为有多种方式。通常使用微服务驱动架构,我认为这是一种在各种服务之间进行通信的简单方法。
消息总线是一个很好的开始方式。在身份验证方面,我要么拥有一个中心权限(一个单独负责授权/身份验证的服务),要么让每个服务独立于一个中央授权机构来验证一条消息(从而消除了出现单一故障源的可能性)。
如前所述,有许多不同的方法可以做到这一点,这只是许多方法中的一种。这里还有一个..。
上消息的真实性
与其依赖于单一的授权点,您还可以通过证书(令牌签名证书)或在所有消费的微服务之间共享的秘密密钥对令牌进行签名。每个微服务将在使用消息和执行微服务各自的角色之前,通过尝试解码签名(通过验证证书或使用私钥,希望隐藏在某个环境中而不是代码中)来使用该消息并检查其有效性。这类似于上面的方法减去需要一个中央权力机构。不过,这种方法也有缺点。
您还可以将队列服务配置为这样一种方式:您的微服务不需要成为消费者,而是您的代理可以对配置好的微服务端点展开或启动API调用。我个人还没有配置我的队列服务来完成这个任务(RabbitMQ / AWS ),但是我的一些伙伴已经这样做了。
希望这能帮上忙。
https://softwareengineering.stackexchange.com/questions/361791
复制相似问题