Проверка подлинности GraphQL с использованием ядра Asp.net с использованием JWT - PullRequest
0 голосов
/ 31 мая 2018

Я использую для GraphQL для .NET пакет для graphql.Но я не мог понять, как мне выполнить аутентификацию с помощью JWT в запросе или мутации graphql.

Я прочитал руководство об авторизации , но не смог выполнить.

Мне нужна помощь с аутентификацией GraphQL для .NET.

Любая помощь будет оценена.

Спасибо

1 Ответ

0 голосов
/ 09 августа 2018

Руководство по авторизации.Шаг, который вы ищете, - это аутентификация, и поскольку 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.

Надеюсь, это поможет.

...