GraphQL服务器中的身份验证

时间:2016-08-07 20:36:09

标签: authentication graph authorization jwt

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

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

我应该使用GraphQL规范吗?

无国籍的解决方案更可取。

感谢。

2 个答案:

答案 0 :(得分: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)
  }
}

答案 1 :(得分:0)

这取决于您的GraphQL使用者是webapp还是mobileapp。

如果它是一个webapp,那么我建议坚持使用基于会话cookie的身份验证,因为大多数流行的Web框架都支持此功能,并且您还可以获得CSRF保护。

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