【问题标题】:JWT Decoding at GraphQL Gateway level or Microservice level?GraphQL 网关级别或微服务级别的 JWT 解码?
【发布时间】:2020-02-19 20:54:52
【问题描述】:

我有一个使用 GraphQL 的微服务架构。它有一个 GraphQL 网关,它使用模式拼接来组合所有 GraphQL 模式。

我打算按如下方式实现身份验证和授权:

  1. 身份验证 - 令牌由第三方 (AWS Cognito) 验证
  2. 解码 - 我想在网关级别执行此操作。这是一个巨大的好处。它将消除跨多个微服务的大量逻辑。这也使得迁移变得容易,以防我们需要更改提供者(Auth0?)。加号
  3. 服务中的授权 - 所有服务必须管理的是授权和业务逻辑

这里有什么我遗漏的陷阱吗?这是个坏主意吗?

【问题讨论】:

    标签: jwt graphql microservices


    【解决方案1】:

    只要所有底层请求实际上都需要一个有效的令牌,这听起来像是一个很好的用于验证网关的用例。我要提醒的唯一一件事是不要太聪明地尝试将逻辑推到网关以避免长期耦合。例如,解码和验证 JWT 的签名在网关中是一件很棒的事情,因为您可能希望对所有路由执行相同的检查,但是尝试验证范围或执行任何每个路由检查最好在应用程序本身中处理.

    就上下文而言,我目前在我的服务前面有一个 nginx 网关,它在传递 JWT 令牌之前检查它的签名,这让底层服务假定令牌是可信的,并防止错误的请求到达应用程序服务器。

    【讨论】:

    • 感谢您的回答!是的,我使用自定义 API Gateway 请求授权器来验证令牌,如果路由是公共的,它还允许没有令牌的请求通过。我最终得到了以下架构:API Gateway Authorizer(验证和验证令牌,让我们在没有令牌的情况下发出请求)> GraphQL Gateway(将令牌传递给拼接服务)> 远程服务(解码令牌,并管理授权)
    猜你喜欢
    • 2019-01-02
    • 2019-07-26
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多