【问题标题】:Azure B2C Microservice Authentication and GraphQL LayerAzure B2C 微服务身份验证和 GraphQL 层
【发布时间】:2020-04-03 02:37:27
【问题描述】:

我们很少有 UI 使用的微服务。 Azure B2C 是我们的身份验证提供商。每个微服务 (API) 都需要一个访问令牌,并且需要与数据库对话以进行授权。此数据库具有基于角色的访问权限。

这就是今天的样子:

这样我们有两个问题:

  1. 由于 Azure B2C 不允许将多个资源的范围添加到一个访问令牌中,因此我们必须获取多个访问令牌。
  2. 我们现在处于 UI 需要调用两个或更多 API 才能在一页上显示数据的阶段。

我们想将 GraphQL 用作 API 网关。像这样的:

所有微服务都放置在私有 vnet 中,并且只允许 GraphQL API 与它们通信。 GraphQL 层处理所有身份验证和授权。

现在的问题是:

  1. 您认为这种方法有什么问题吗?
  2. 是否可以使用客户端和密钥在 GraphQL 层和其他 API 之间进行通信?或者 Azure B2C 中是否有一项规定可以在 GraphQL 层不请求单个访问令牌的情况下执行此验证?
  3. 向此添加 Azure API 管理有哪些额外优势(除了日志记录、分析、速率限制等)?我需要担心 SSL 终止吗?

【问题讨论】:

    标签: node.js oauth-2.0 graphql microservices azure-ad-b2c


    【解决方案1】:

    选项 2 看起来不错。

    一种常见的模式是 UI 调用专用的“入口点”API,然后协调对专用网络中微服务的调用 - 如第二张图所示。

    • 例如,在线销售 UI 仅调用在线销售 API

    这也有助于将 UI 特定要求排除在微服务之外并保持职责清晰。

    在 OAuth 术语中,正如您所说,将有一个资源 - 入口点 API - 您应该只需要一个访问令牌。

    然后可以将入口点 API 的令牌(或其声明)直接转发到微服务,并在需要时用于识别那里的用户。

    我会避免为微服务获取额外的令牌,而只是根据用户数据库中的角色强制执行授权。

    在某些情况下,强制执行诸如“不允许在线销售 API 调用 Payroll 微服务”之类的规则也可能有意义。

    我个人会使用与微服务相同的技术来开发入口点 API。

    【讨论】:

      猜你喜欢
      • 2022-11-03
      • 2019-06-25
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 2016-12-07
      • 2018-04-12
      相关资源
      最近更新 更多