Добавить заголовок запроса (JWT Token) при загрузке swagger.json с помощью Swashbuckle - PullRequest
0 голосов
/ 13 сентября 2018

Краткая история:

Как мне убедить Swagger UI отправлять заголовок authorization при изменении Spec (конечная точка сваггера), если пользователь прошел аутентификацию в swagger-ui?

Более длинная история:

Я добавил oauth2 к чванству.

    services.AddSwaggerGen(c =>
    {
        foreach (var item in list)
        {
            c.SwaggerDoc($"1.0-{item.Name}", new Info
            {
                Title = $"1.0-{item.Title}",
                Version = $"1.0-{item.Version}"
            });
        }
        c.AddSecurityRequirement(new Dictionary<string, IEnumerable<string>>
        {
                { "oauth2", new string[] { } }
        });
        c.AddSecurityDefinition("oauth2", new OAuth2Scheme
        {
            Type = "oauth2",
            Flow = "password",
            TokenUrl = this.Configuration["Domain"] + "api/authorization/token"
        });
        c.IncludeXmlComments(Directory.GetCurrentDirectory() + @"/Files/Web.xml");
    });

Отображается кнопка Authorize, и я могу войти с именем пользователя и паролем.
Когда я вызываю любой метод контроллера API (GET, POST, PUT, DELETE), заголовок authorization добавляется к Request headers:

accept: text/plain
Accept-Encoding: gzip, deflate, br
Accept-Language: en-GB,en;q=0.9,en-US;q=0.8,sl;q=0.7
authorization: Bearer eyJhbGciOiJIUzI1NiIsInR...
Cache-Control: no-cache

Но когда я меняю спецификацию: screenshot новый запрос на сервер для файла swagger.json (конечная точка чванства).
Проблема в том, что этот запрос не имеет заголовка auhorization. Как добавить этот заголовок при запросе конечной точки сваггера?

Я пытаюсь следовать официальной документации для фильтрации результатов по аутентифицированному пользователю. (Показать пустой результат для неавторизованного пользователя.)
Примерно так:

app.UseSwagger(c =>
{
    c.PreSerializeFilters.Add((swaggerDoc, httpReq) =>
    {
        var isLoggedIn = httpReq.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier);
    });
});

Но заявки пустые, потому что заголовок authorization отсутствует.

...