Authentication 使用GraphQL与JWT进行身份验证
在web上搜索之后,我发现使用GraphQL时,JWT身份验证的最佳方式是将JWT令牌插入GraphQL上下文。通过这样做,解析程序可以访问它,并检查用户是否已登录、是否具有权限等Authentication 使用GraphQL与JWT进行身份验证,authentication,jwt,graphql,relay,Authentication,Jwt,Graphql,Relay,在web上搜索之后,我发现使用GraphQL时,JWT身份验证的最佳方式是将JWT令牌插入GraphQL上下文。通过这样做,解析程序可以访问它,并检查用户是否已登录、是否具有权限等 我想知道是否需要将身份验证逻辑/函数放入每个需要身份验证的解析器中。除了登录/注销/注册/放弃密码查询之外,是否有一种方法可以默认设置每个查询的身份验证(如中间件) 这个问题经常出现,但讨论得不够。我认为答案不在于技术,而在于哪种方式最适合您的需要 在采用GraphQL时,重要的是要注意: 你不必放弃休息 您可以有
我想知道是否需要将身份验证逻辑/函数放入每个需要身份验证的解析器中。除了登录/注销/注册/放弃密码查询之外,是否有一种方法可以默认设置每个查询的身份验证(如中间件) 这个问题经常出现,但讨论得不够。我认为答案不在于技术,而在于哪种方式最适合您的需要 在采用GraphQL时,重要的是要注意:
- 你不必放弃休息
- 您可以有多个GraphQL端点
登录/注销/忘记密码和整个SUBANG,考虑去旧学校。从Post+服务器端呈现开始,RESTAPI为我们提供了数十年的良好服务。许多第三方身份验证服务都基于此(Facebook登录、谷歌、OAuth2等)。为此,我倾向于避免使用GraphQL
授权 检查请求者是否被授权访问GraphQL的逻辑可概括为两个级别 GraphQL服务 基本上,您要检查请求者是否被授权使用GraphQL服务。通常更容易检查请求者是否经过身份验证,否则会完全拒绝对服务的访问。这通常通过web服务器中间件完成 有时您需要向匿名用户公开一些GraphQL查询,我倾向于使用另一个“不受限制”的GraphQL端点。该端点往往很少或没有突变,公开有限的信息子集和受限的嵌套查询 基本上,您可以查看数据并决定哪些信息/操作是公开的,哪些不是。IMO这比在每个查询路径/解析器中使用单个GraphQL端点和实现授权检查点更容易管理和保护 细粒度授权 在此阶段,所有请求者基本上都是经过身份验证的用户。我们可能需要提出以下问题:- 请求者是否与当前查看其信息的用户相同
- 请求者是当前查看其信息的用户的朋友吗
- 请求者是否是当前查看其信息的公司的成员
希望这有帮助 无需签入解析程序。您可以在服务器端添加中间件
const graphQLServer=express();
graphQLServer.use('/graphql',函数(req,res,next){
var token=req.headers.token;
if(令牌!=null&&token!=“未定义”){
//在这里进行令牌验证
next();
}否则{
//如果没有代币
//返回错误
返回资源状态(403)。发送({
成功:错,
消息:“未提供令牌。”
});
}
})