是在GraphQL网关级别还是在微服务级别进行JWT解码?

时间:2019-10-23 14:58:05

标签: jwt graphql microservices

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

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

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

我在这里有什么陷阱吗?这可能是个坏主意吗?

1 个答案:

答案 0 :(得分:1)

听起来很不错,只要所有基础请求实际上都需要有效令牌,就可以将其很好地用于网关验证。我唯一要注意的是不要对尝试推向网关的逻辑过于机灵,以避免长期耦合。例如,在网关中解码和验证JWT的签名是一件很棒的事,因为您可能希望对所有路由执行相同的检查,但是尝试验证范围或执行任何按路由检查最好在应用程序本身中处理

对于上下文,我目前在我的服务之前有一个Nginx网关,在传递JWT令牌之前检查它的签名,这使基础服务假定该令牌是可信任的,并防止不良请求击中应用程序服务器。 / p>