【问题标题】:Authentication in GraphQL serversGraphQL 服务器中的身份验证
【发布时间】:2016-12-13 14:02:38
【问题描述】:

如何正确处理 GraphQL 服务器中的身份验证?

可以在查询/变异请求的 Authorization 标头中传递 JWT 令牌吗?

我应该使用 GraphQL 规范中的东西吗?

无状态解决方案更可取。

谢谢。

【问题讨论】:

标签: authentication graph authorization jwt


【解决方案1】:

前段时间我也在想同样的事情, 但显然身份验证超出了 GraphQL 试图完成的范围(参见 Github 上的对话)。

但是有一些解决方案,例如this,可以通过会话来处理它。

假设您使用express-graphql,您可以执行以下操作。

import graphQLHTTP from 'express-graphql'
app.use(`/graphql`, [aValidationFunction, graphQLHTTP(options)])

function aValidationFunction(req, res, next) {
  const { authorization } = req.headers
  // Do your validation here by using redis or whatever
  if (validUser) {
    return next()
  } else {
    return res.status(403)
  }
}

【讨论】:

    【解决方案2】:

    这取决于您的 GraphQL 使用者是网络应用还是移动应用。

    如果它是一个 web 应用程序,那么我建议坚持使用基于 session-cookie 的身份验证,因为大多数流行的 web 框架都支持这一点,并且您还可以获得 CSRF 保护。

    如果它是一个移动应用程序,那么您将需要 JWT。您可以尝试从登录响应中手动获取 cookie 标头,并将此“cookie”放入您的下一个请求中,但我遇到的问题是某些代理服务器会剥离此“cookie”,从而使您的请求未经身份验证。所以正如你所说,在每个经过身份验证的请求(GraphQL 请求)中包含 JWT 是可行的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多