如何在GraphQL服务器中正确处理身份验证?
在查询/变异请求的Authorization标头处传递JWT令牌是否可以?
我应该使用GraphQL规范吗?
无国籍的解决方案更可取。
感谢。
答案 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是可行的方法。