authentication - 使用 JWT 与 Asp.net 核心进行 GraphQL 身份验证
问题描述
我正在使用GraphQL for .NET包的 graphql。但我不明白如何在 graphql 查询或突变中使用 JWT 进行身份验证。
我阅读了有关授权的指南,但我无法完成。
我需要 GraphQL 方面的帮助以进行 .NET 身份验证。
任何帮助将不胜感激。
谢谢
解决方案
该指南围绕授权。您正在寻找的步骤是身份验证,并且由于可以使用 ASP.Net API 控制器实现 graphql,因此您可以像使用任何控制器一样实现 JWT 身份验证。
这是一个使用 Authorize 属性的示例 grapql 控制器。但是,您可以使用过滤器来实现这一点,或者如果您想要完全控制,自定义中间件。
[Route("api/[controller]")]
[ApiController]
[Authorize]
public class GraphQLController : ControllerBase
{
private readonly IDocumentExecuter executer;
private readonly ISchema schema;
public GraphQLController(IDocumentExecuter executer, ISchema schema)
{
this.executer = executer;
this.schema = schema;
}
[HttpPost]
public async Task<ActionResult<object>> PostAsync([FromBody]GraphQLQuery query)
{
var inputs = query.Variables.ToInputs();
var queryToExecute = query.Query;
var result = await executer.ExecuteAsync(o => {
o.Schema = schema;
o.Query = queryToExecute;
o.OperationName = query.OperationName;
o.Inputs = inputs;
o.ComplexityConfiguration = new GraphQL.Validation.Complexity.ComplexityConfiguration { MaxDepth = 15};
o.FieldMiddleware.Use<InstrumentFieldsMiddleware>();
}).ConfigureAwait(false);
return this.Ok(result);
}
}
public class GraphQLQuery
{
public string OperationName { get; set; }
public string Query { get; set; }
public Newtonsoft.Json.Linq.JObject Variables { get; set; }
}
在 Startup.cs 中,我配置了 JWT 不记名令牌身份验证。
希望这可以帮助。
推荐阅读
- opencv - 不支持标签数据类型 = 19
- vue.js - 在 nuxt.js 中包含引导程序
- android - 使用 ArrayList 创建 Intent
- batch-file - 用批处理文件打开2个程序,我自己退出另一个程序后如何杀死一个程序?
- javascript - 避免使用 Javascript 重新加载页面的链接
- r - 使用列数不确定的 replace_na()
- python - Pandas - 不同时间窗的移动平均线
- python - 当初始化器值设置为张量时,为什么我会得到随机值?
- telegram - Telegrap API(不是 bot api),列出聊天中的所有服务消息
- angular - Angular:将json获取响应转换为具有函数的类