Руководство по авторизации.Шаг, который вы ищете, - это аутентификация, и поскольку graphql может быть реализован с использованием контроллера API ASP.Net, вы можете реализовать аутентификацию JWT, как это было бы с любым контроллером.
Вот пример контроллера grapql, использующего атрибут Authorize.Однако вы могли бы реализовать это, используя фильтр или, если вам нужен полный контроль, пользовательское промежуточное ПО.
[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.
Надеюсь, это поможет.