【问题标题】:Calling service B from service A for authentication and authorization从服务 A 调用服务 B 进行身份验证和授权
【发布时间】:2021-08-26 05:42:04
【问题描述】:

我有服务Ticketing 和服务Auth

并非所有人都可以对票证执行 CRUD。

当请求来执行票证的操作时,我需要检查用户是否具有适当的权限。

为此,我需要与服务Auth 进行通信,该服务持有用户对资源的允许权限的角色和端点。

我该如何拨打这个电话?

  1. 我应该进行同步呼叫吗?即从服务 A 直接调用 B?
  2. 使用事件总线

或者其他任何可能的方式?

另外,Auth 服务需要一些表才能与Ticketing 服务连接以获取数据。

如何解决这个问题?

【问题讨论】:

    标签: node.js architecture microservices


    【解决方案1】:

    鉴于微服务标签,我假设 TicketingAuth 是独立的微服务。

    根据描述,我还假设每个都有自己的 API。

    不太清楚的是用户如何访问Ticketing 服务。他们是否首先通过身份验证(例如,如果人类用户通过 Web 应用程序,他们是否先登录,然后以某种方式被定向到 Ticketing)。

    我假设首先执行了登录。

    一种方法可能是

    1. 在用户登录时(或调用者,如果不是人类),获取用户可以通过Auth 服务访问的授权列表。
    2. 将授权存储在 HTTP 授权标头中
    3. 在调用每个微服务时,它只需要(同步)询问Auth 服务来验证授权列表是否正确。

    适当的技术方法是JWT
    在上述场景中,当首次调用 Auth 来验证用户/调用者时,可以在 sub 声明中返回授权,或者您可以创建自己的声明来确定使用的授权。

    当用户/调用者在不同的微服务中移动时,只需对Auth 服务进行同步调用以验证用户/调用者是否已获得授权。

    同步或异步:无论直接调用/事件总线,如果需要授权检查,则需要在调用服务采取行动之前完成。否则,当调用者没有授权时,它可能会暴露数据/修改它。

    联接表:在微服务模式中,这不太可能是明智的。相反,通过 API 调用从 Auth 服务获取所需的数据并将其与调用服务一起使用(例如 Ticketing)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-19
      相关资源
      最近更新 更多