#c# #asp.net-core #swagger #openapi #nswag
#c# #asp.net-core #swagger #openapi #nswag
Вопрос:
У меня настроена пользовательская схема авторизации следующим образом:
services.AddAuthentication("ClientApp")
.AddScheme<ClientAppAuthenticationOptions, ClientAppAuthenticationHandler>("ClientApp", null);
Тогда у меня есть следующая конфигурация документа NSwag OpenAPI:
services.AddOpenApiDocument((settings, provider) =>
{
settings.DocumentName = "openapi";
settings.AddSecurity("ClientApp", Enumerable.Empty<string>(), new OpenApiSecurityScheme
{
Type = OpenApiSecuritySchemeType.ApiKey,
Description = "Authentications used for client apps, such as Mmcc.Stats.TpsMonitor",
Name = "X-Auth-Token",
In = OpenApiSecurityApiKeyLocation.Header
});
settings.OperationProcessors.Add(
new AspNetCoreOperationSecurityScopeProcessor("ClientApp")
);
// ...
}
Я оформил действия в своих контроллерах с помощью [AllowAnonymous]
и [Authorize(AuthenticationSchemes = "ClientApp")]
, однако NSwag помечает все мои конечные точки как требующие ClientApp
авторизации в пользовательском интерфейсе ReDoc без учета декораторов. Почему?
Ответ №1:
Я исправил это, изменив свой код на этот:
settings.DocumentProcessors.Add(
new SecurityDefinitionAppender("ClientApp",
new OpenApiSecurityScheme
{
Type = OpenApiSecuritySchemeType.ApiKey,
Description = "Authentications used for client apps, such as Mmcc.Stats.TpsMonitor",
Name = "X-Auth-Token",
In = OpenApiSecurityApiKeyLocation.Header
}));
settings.OperationProcessors.Add(new AspNetCoreOperationSecurityScopeProcessor("ClientApp"));
Комментарии:
1. Извлеките код: github.com/RicoSuter/NSwag/blob/master/src /…
2. Была такая же проблема, не работал с
.AddSecurity
, но работал с добавлением вручнуюSecurityDefinitionAppender
кDocumentProcessors
, как показано выше3. Очень странно, похоже, что
.AddSecurity
это просто оболочка дляsettings.DocumentProcessors.Add(new SecurityDefinitionAppender(name, globalScopeNames, swaggerSecurityScheme));
, но что-то не работает при его непосредственном использовании. Возможно, я неправильно его использую или что-то путаю.