首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >服务总线与认证

服务总线与认证
EN

Software Engineering用户
提问于 2017-12-03 23:37:50
回答 1查看 423关注 0票数 4

我有一个由几个应用程序组成的系统。

通常,这些应用程序需要相互交谈。

有时,在通信中使用“服务帐户”是有意义的,但其他时候,需要代表经过身份验证的用户对请求进行身份验证。

由于应用程序是异构的,因此很难让每个应用程序负责不同类型的身份验证。

理想情况下,所有应用程序都应该使用相同类型的身份验证。

我想知道服务总线是否可以简化这种集成,至少为服务到服务的通信提供公共身份验证。

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2017-12-04 09:19:53

我将随心所欲,假设您使用的是某种类型的web服务。如果我错了,请纠正我。

有许多因素,可以发挥作用,如何“可以”,因为有多种方式。通常使用微服务驱动架构,我认为这是一种在各种服务之间进行通信的简单方法。

消息总线是一个很好的开始方式。在身份验证方面,我要么拥有一个中心权限(一个单独负责授权/身份验证的服务),要么让每个服务独立于一个中央授权机构来验证一条消息(从而消除了出现单一故障源的可能性)。

中央管理服务

  1. 发布到总线的每一条消息都可以包含或表示数据的令牌或任意字符串/哈希(请参阅JavaScript网络令牌)。考虑将其作为X-授权头值传递.我将把安全问题排除在这个答案之外。您是否希望在令牌中存储实际数据或对数据的引用(并将实际数据存储在更安全的位置,如数据库)完全取决于您和您的业务需求。
  2. 当订阅特定信道的服务收到消息时,无论是通过消费还是消息代理的API调用,您都可以获取身份验证/授权令牌,并调用您的授权服务,该服务将验证令牌并返回200 or响应或401/403响应。应该由您的权威服务根据您的业务规则来决定、验证和理解此令牌。
  3. 基于上述授权服务返回的响应,消费微服务可以继续或停止执行。实际上,您已经创建了一个远程防火墙。JavaScript网络令牌包含由发起服务签名的签名。这可以由私钥甚至证书签名。检查此令牌或资源的有效性是最终目标。

如前所述,有许多不同的方法可以做到这一点,这只是许多方法中的一种。这里还有一个..。

验证服务级别

上消息的真实性

与其依赖于单一的授权点,您还可以通过证书(令牌签名证书)或在所有消费的微服务之间共享的秘密密钥对令牌进行签名。每个微服务将在使用消息和执行微服务各自的角色之前,通过尝试解码签名(通过验证证书或使用私钥,希望隐藏在某个环境中而不是代码中)来使用该消息并检查其有效性。这类似于上面的方法减去需要一个中央权力机构。不过,这种方法也有缺点。

  • 每当您更新用于验证消息的代码时,都需要对每个服务消费消息执行此操作(假设必须对生产中的多个服务应用任务关键安全热点修复!)
  • 减少模块化--现在您的服务所做的功能超出了它的预期目的,并且必须处理身份验证、授权和执行其设计的功能。

您还可以将队列服务配置为这样一种方式:您的微服务不需要成为消费者,而是您的代理可以对配置好的微服务端点展开或启动API调用。我个人还没有配置我的队列服务来完成这个任务(RabbitMQ / AWS ),但是我的一些伙伴已经这样做了。

希望这能帮上忙。

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/361791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档