认证与JWT使用GraphQL
网络上的一些搜索后,我发现,使用GraphQL当智威汤逊认证的最好的方法是通过将JWT令牌到GraphQL上下文。通过这样做,解析器可以访问它并检查用户是否已登录,是否具有权限等。认证与JWT使用GraphQL
我想知道是否需要将认证逻辑/功能置于需要认证的每个解析器中。有没有一种方法可以默认设置(例如中间件)对除login/logout/register/forgotpasword之外的每个查询进行的身份验证?
无需在解析器中进行检查。您可以在服务器端添加中间件。
const graphQLServer = express();
graphQLServer.use('/graphql', function(req, res, next) {
var token = req.headers.token;
if (token != null && token != 'undefined') {
//Do token verification here
next();
} else {
// if there is no token
// return an error
return res.status(403).send({
success: false,
message: 'No token provided.'
});
}
})
刚刚尝试这一点
这个问题弹出,每隔一段时间,但不足以进行了讨论。我认为答案不在于技术,而在于哪种方式最适合您的需求。
采用GraphQL,当要留神是很重要的;
- 你不必放弃对REST
- 你可以有
这是基于一些建议,我的经验与实施GraphQL
多个 GraphQL端点验证
对于登录/注销/忘记密码和整个家当,考虑去老-SCH OOL。 Form Post +服务器端渲染,REST API几十年来为我们提供了良好的服务。许多第三方认证服务都基于此(Facebook登录,Google,OAuth2等)。我倾向于避免为此使用GraphQL。
授权
的逻辑来检查请求者是否授权访问GraphQL可以推广到2级
GraphQL服务
基本上你检查,看看是否请求者被授权使用GraphQL服务。通常,更容易检查请求者是否已通过身份验证,否则完全拒绝访问服务。这通常是通过Web服务器中间件来完成的。
有时您需要向匿名用户公开一些GraphQL查询,而且我倾向于拥有另一个“无限制”的GraphQL端点。这个端点往往几乎没有或没有突变,暴露了有限的信息子集和有限的嵌套查询。
基本上,你看看数据,并决定哪些信息/操作公众和这不是。 IMO比单个GraphQL端点更容易管理和安全,并且在每个查询路径/解析器中实现授权检查点。
细粒度授权
在这个阶段基本上,所有请求者被认证的用户。我们可能需要质疑:
- 请求者是否是当前查看其信息的用户?
- 是请求者,其信息正在查看用户的朋友吗?
- 请求者是否是当前查看其信息的公司的成员?
这是投入解析器(或模型)检查逻辑真的很有意义。我个人认为,解决方案是一个很好的选择。加上DataLoader的实施仍然可以快速有效。
希望这会有所帮助!