NSwag для Asp.Net Web Api 2 показывает безопасность в графическом интерфейсе - PullRequest
0 голосов
/ 24 января 2019

Мы установили nswag в наш проект, и пока он работает нормально.

Но все наши функции защищены с помощью API-ключа.

когда я смотрю на демонстрационную страницу от Swagger, я вижу блокировку в конце каждого вызова API, где мне нужно авторизоваться (я думаю, это блокировка)

https://petstore.swagger.io/#/

enter image description here

В нашей локальной установке мы получили кнопку «Авторизовать», и мы можем установить ключ, но я не знаю, как активировать знак блокировки в вызовах API? Нужно ли установить атрибут?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Настройки генератора устарели, и при использовании AddOpenAPIDocument (Swagger V3 + / OpenAPI) произойдет сбой.

Вместо этого вам необходимо добавить аналогичные настройки в документ. https://github.com/RSuter/NSwag/wiki/AspNetCore-Middleware#enable-api-key-authorization

services.AddOpenApiDocument(document => 
{
    document.DocumentProcessors.Add(
        new SecurityDefinitionAppender("apikey", new SwaggerSecurityScheme
        {
            Type = SwaggerSecuritySchemeType.ApiKey,
            Name = "api_key",
            In = SwaggerSecurityApiKeyLocation.Header
        })
    );
});
0 голосов
/ 24 января 2019

Решением было установить GeneratorSettings.OperationProcessors для ApiKey только с этой опцией, с которой он работал.в моем global.asax в Application_Start.

  app.UseSwaggerUi3(typeof(WebApiApplication).Assembly, settings =>
            {

                settings.MiddlewareBasePath = "/swagger";
                settings.GeneratorSettings.DocumentProcessors.Add(new SecurityDefinitionAppender("ApiKey", new SwaggerSecurityScheme
                {
                    Type = SwaggerSecuritySchemeType.ApiKey,
                    Name = "X-API-KEY",
                    In = SwaggerSecurityApiKeyLocation.Header
                }));
                settings.GeneratorSettings.OperationProcessors.Add(new OperationSecurityScopeProcessor("ApiKey"));
            });
...