AspNetCoreOperationSecurityScopeProcessor от NSwag помечает все конечные точки как требующие авторизации

#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)); , но что-то не работает при его непосредственном использовании. Возможно, я неправильно его использую или что-то путаю.