Краткая история:
Как мне убедить 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
Но когда я меняю спецификацию:
новый запрос на сервер для файла swagger.json
(конечная точка чванства).
Проблема в том, что этот запрос не имеет заголовка auhorization
. Как добавить этот заголовок при запросе конечной точки сваггера?
Я пытаюсь следовать официальной документации для фильтрации результатов по аутентифицированному пользователю. (Показать пустой результат для неавторизованного пользователя.)
Примерно так:
app.UseSwagger(c =>
{
c.PreSerializeFilters.Add((swaggerDoc, httpReq) =>
{
var isLoggedIn = httpReq.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier);
});
});
Но заявки пустые, потому что заголовок authorization
отсутствует.