Однако у меня есть несколько «странных» конечных точек, которые возвращают смесь общедоступной и привилегированной информации. Если запрос конкретно запрашивает личную информацию, API выполняет проверку авторизации.
Например, примерно так:
Код: Выделить всё
[AllowAnonymous]
[HttpGet]
public ActionResult GetInfo(bool includePrivateInfo)
{
if (includePrivateInfo)
{
this.authorizationService.RequireLoggedIn(); // throws, resulting in a Forbid();
}
SomeDto result = dataService.GetInfo(includePrivate); //get some data
return result;
}
Проблема в том, что я не могу заставить клиент Swagger дополнительно отправлять токен авторизации, пока AllowAnonymous находится в методе действия.
Вещи, которые я пробовал:
- Если я добавлю [AllowAnonymous] в метод GetInfo(), тогда Swagger не отправит токен авторизации с запросом к этой конечной точке, даже если я авторизован.
- Если я добавлю [Authorize] в GetInfo() (и удалю AllowAnonymous), то ASP.NET Core отклонит запрос, если вы не авторизованы в Swagger.
- Я попробовал добавить беззубый [Authorize(Policy = "Optional")] к методу, а при запуске добавлены options.AddPolicy("Optional", policy => policy.RequireAssertion(context => true));, но ASP.NET Core умнее этого и по-прежнему проверяет, прошел ли пользователь проверку подлинности первым, на каком-то более низком уровне, поэтому для него по-прежнему требуется токен аутентификации.
Подробнее здесь: https://stackoverflow.com/questions/798 ... h-nswag-ap
Мобильная версия