Гость
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Авторизация Swashbuckle / 11 сообщений из 11, страница 1 из 1
06.11.2020, 06:19
    #40015828
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация Swashbuckle
В ConfigureServices прописано:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "blablabla", Version = "v1" });
    c.IncludeXmlComments(xmlPath);

    c.AddSecurityDefinition("Jwt Bearer", new OpenApiSecurityScheme {
        Description = "Standard Authorization header using the Bearer scheme. " +
            "Example: 'Bearer {token}'",

        In = ParameterLocation.Header,
        Name = "Authorization",
        Type = SecuritySchemeType.ApiKey
    });
});


Кнопка "Authorization" в Swagger UI появляется и нормально работает. Но при выполнении запроса header с токеном не добавляется (это видно по строке с командой curl).

Что я еще упустил?
...
Рейтинг: 0 / 0
06.11.2020, 08:54
    #40015835
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация Swashbuckle
fkthat
Что я еще упустил?


нет фильтра, ты только определение настроил

почекай эту статейку: https://ppolyzos.com/2017/10/30/add-jwt-bearer-authorization-to-swagger-and-asp-net-core/
...
Рейтинг: 0 / 0
06.11.2020, 11:26
    #40015881
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация Swashbuckle
hVostt,

Про фильтр я в курсе. У меня фильтр тоже стоял, но с фильтром было тоже хрен.

Оказалось, что фильтр надо добавлять с параметрами, хотя в примерах ничего об этом нет, пришлось самому догадываться.

А ссылка твоя из каменного века, у них там свашбукль еще первой версии, хотя крайняя уже 5.6.3 :))
...
Рейтинг: 0 / 0
06.11.2020, 11:38
    #40015884
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация Swashbuckle
hVostt,

У меня вот еще вопрос. Если я помечаю в контроллере акцию как

Код: c#
1.
[ProducesResponseType(StatusCodes.Status400BadRequest)]


то NSwag мне автоматически выдаёт схему ответа в соответствие с RFC7807 и это очень найс, потому что ASP.NET Core при возврате из акции BadRequest() как раз в соответствие с этой схемой HTTP-ответ и формирует.

Но свабакл так не делает (выдаёт только код 400 без схемы ответа). Можно ли его как-то это заставить сделать?
...
Рейтинг: 0 / 0
06.11.2020, 13:41
    #40015933
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация Swashbuckle
fkthat
А ссылка твоя из каменного века, у них там свашбукль еще первой версии, хотя крайняя уже 5.6.3 :))


Да я знаю, важен принцип, он не изменился )
С докой плохо у швабуля, но зато он сам работает хорошо.
...
Рейтинг: 0 / 0
06.11.2020, 13:44
    #40015934
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация Swashbuckle
fkthat
то NSwag мне автоматически выдаёт схему ответа в соответствие с RFC7807 и это очень найс, потому что ASP.NET Core при возврате из акции BadRequest() как раз в соответствие с этой схемой HTTP-ответ и формирует.


Там нет никакой магии, это какой-то коробочный фильтр.. который при чём делает не очень корректные предположения, так как не описано, что ты возвращаешь ProblemDetails.

fkthat
Но свабакл так не делает (выдаёт только код 400 без схемы ответа). Можно ли его как-то это заставить сделать?


..который точно также можно бросить и в швабле.

Только вот исходя из твоего определения типа ответа нет явного описания какого типа ответ будет вовзращён с ошибкой 400. Т.е. швабль здесь делает как раз корректно.

Лучше такие ответы описать в базовом классе контроллера, или через конфиг швабля.
Вариантов масса.
...
Рейтинг: 0 / 0
06.11.2020, 14:01
    #40015948
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация Swashbuckle
как-то так можно:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
//(базовый класс контроллера)
using...
namespace MyApi.Controllers
{
    [Authorize]
    [Produces("application/json")]
    [Route("api/[controller]")]
    [ResponseCache(Location = ResponseCacheLocation.None, NoStore = true)]
    [ApiController]
    public abstract class MyApiControllerBase : ControllerBase, IMyApiControllerBase
    {
        [NonAction]
        public virtual BadRequestObjectResult BadRequestDetails(string title)
        {
            return HttpContext.BadRequestDetails(new ProblemDetails { Title = title });
        }

        [NonAction]
        public virtual BadRequestObjectResult BadRequestDetails(ProblemDetails details)
        {
            return HttpContext.BadRequestDetails(details);
        }
    }
}

//IMyApiControllerBase
using Microsoft.AspNetCore.Mvc;
namespace MyApi.Controllers
{
    public interface MyIApiControllerBase
    {
        BadRequestObjectResult BadRequestDetails(string title);
    }
}
...
Рейтинг: 0 / 0
06.11.2020, 14:02
    #40015949
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация Swashbuckle
очепятка вышла
Код: c#
1.
public interface IMyApiControllerBase
...
Рейтинг: 0 / 0
06.11.2020, 14:23
    #40015959
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация Swashbuckle
Нашел, в общем.

Код: c#
1.
2.
3.
4.
5.
6.
[ProducesResponseType(typeof(ValidationProblemDetails), StatusCodes.Status400BadRequest)]
....
....
    // и возвращать не BadRequest(ModelState), а
    return ValidationProblem(ModelState);
}


И это даже лучше, т.к. и NSwag и Swashbuckle на указание просто 400 возвращают немного отличающуюся от asp.net core схему, а при явном указании типа все четко. (Правда, как заставить свабукла вообще хоть что-то возвращать я так и не нарыл).
...
Рейтинг: 0 / 0
06.11.2020, 14:30
    #40015962
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация Swashbuckle
Konst_One,

Что еще за HttpContext.BadRequestDetails? Даже в 5.0 такого метода нет.

За использование HttpContext без IHttpContextAccessor надо наказывать минимум сутками рефакторинга самого гнусного говнокода
...
Рейтинг: 0 / 0
06.11.2020, 15:05
    #40015974
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Авторизация Swashbuckle
исправляемся потихоньку, копипастил с одного предыдущего проекта =)
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Авторизация Swashbuckle / 11 сообщений из 11, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]