2017-01-19 3 views
1

Я новичок в использовании swagger в качестве моего пользовательского интерфейса для тестирования и отладки и отображения документации по моим проектам веб-API.Добавление пользовательской безопасности в Swagger

В недавнем проекте (тип: ASP.NET Web API) я столкнулся с проблемой, У моего API не было никакой безопасности, так как интерфейс не понятен никому. Но мне нужно обеспечить интерфейс swagger, так как каждый может получить доступ к моей полной документации, просто добавив «Swagger» после URL-адреса api!

С тех пор как я легко добавил swagger из-под коробки swashbulckle nuget-package, я не знаю, как добавить к нему какую-либо безопасность. если бы какой-либо орган мог дать пошаговую прогулку, я бы очень это оценил.

Еще одна вещь, что я попробовал, добавив ниже линии SwaggerConfig.cs но не применять никаких специальных API-ключ, и я могу открыть чванство пользовательский интерфейс, просто введя как http://localhost:4505/swagger коснуться в моем браузере:

GlobalConfiguration.Configuration 
    .EnableSwagger(c => 
     { 
     c.ApiKey("key-11111-0000-1111-test") 
       .Description("API Key Authentication") 
       .Name("apiKey") 
       .In("header"); 

     c.EnableApiKeySupport("apiKey", "header"); 
     }); 

(обратите внимание, что я пропустил конфигурации, которые не касались вопроса из предыдущего блока кода)

Нужно ли мне применять защиту api-ключа для api, встроенного в swagger? Если да, пожалуйста, покажите простой способ сделать Это.

Обновление № 1: Я нашел хак, просто изменив адрес swagger-ui. просто добавьте эту строку в SwaggerConfig.cs:

GlobalConfiguration.Configuration 
      .EnableSwagger(c => 
       { 
        //a long list of auto generated stuff 
        //don't touch them if you don't know how to change them 
       }) 
        //next line is what you add 
        .EnableSwaggerUi("sandbox-passphrase-000000-passphrase2/swagger/{*assetPath}"); 

Тогда доступ ссылка на Swagger-интерфейс будет что-то вроде ниже:

http://your-api.com:port/sandbox-passphrase-000000-passphrase2/swagger/index

Но это не то, что я хочу, я нужно что-то вроде добавления текстового поля имени пользователя/пароля в swagger-ui для предотвращения несанкционированного доступа.

+0

ваша апи закреплен каким-либо образом? – VisualBean

+0

нет, поскольку я сказал: «У моего API нет никакой безопасности, так как его интерфейс не ясен для кого-либо», мне просто нужно защитить swagger-ui, интерфейс api скрыт, и на данный момент он не будет нуждаться в безопасности. – AmiNadimi

+0

Можете ли вы объяснить, как добавить пользовательский индексный указатель к swagger ui, и после этого, как мы можем скрыть документы в нем, а затем, где мы проверим введенное имя пользователя и пароль, пожалуйста? – AmiNadimi

ответ

-1

Я нашел еще один взлом!

  • мы будем использовать API ключ текстовое поле в развязность-интерфейса в поле пароля

enter image description here

  • то скроет главный контейнер из развязность-интерфейса с помощью простого яваскрипта кода.
  • содержимое тела скрыты, пока правильная ключевая фраза не будет введен в текстовое поле

следуйте инструкциям, приведенным ниже

1. изменения SwaggerConfig.cs, как показано ниже:

public class SwaggerConfig 
    { 
     public static void Register() 
     { 
      var thisAssembly = typeof(SwaggerConfig).Assembly; 
      GlobalConfiguration.Configuration 
       .EnableSwagger(c => 
        { 
         c.SingleApiVersion("v1", "Swagger with api key test"); 
        }) 
       .EnableSwaggerUi(c => 
        { 
        c.InjectJavaScript(thisAssembly, 
        "enterYourAPIAssemblyNameHere.swagger.swagger_script.js"); 
        }); 
     } 
    } 

2 , добавить папку в корневом каталоге вашего проекта и назовите его swagger

3. добавить файл JavaScript в папке, назовите его swagger_script.js и редактировать содержание его, как показано ниже:

var wrapper = document.getElementById("swagger-ui-container"); 
var child = wrapper; 

var parent = wrapper.parentNode; 
wrapper.parentNode.removeChild(wrapper); 

var apikey = document.getElementById("input_apiKey"); 
apikey.setAttribute('type', 'password'); 

apikey.onchange = function() { 
    var wrapper = document.getElementById("swagger-ui-container"); 
    var key = "1234567890"; 
      var enteredkey = apikey.value; 
      if (enteredkey == key) { 
       parent.appendChild(child); 
      } else { 
       child = wrapper; 
       wrapper.parentNode.removeChild(wrapper); 
      } 
} 

перейти к свойствам swagger-script.js и установить его действие сборки на Embedded Resource

"1234567890" будет вашим ключом к доступу к функциям swagger.

Мы должны сделать уже сейчас, но если вы хотите больше безопасности, просто добавьте действие в api и заставьте его возвратить хешированную строку, а затем в javascript вызовите это действие и сравните хэшированные фразы.

но, как я уже сказал, это не лучший способ справиться с этим, но все же это приемлемо как взломать!

Swashbuckle версия 5.5.3

+0

Я бы не стал считать это «защитой». Можно просто открыть консоль JS и добавить «защищенные» части назад. Или даже проще - просто используйте другой swaggerUI, чтобы открыть URL-адрес документа для чартов. –

+0

как я сказал, что это не лучший способ справиться с этим, но все же это приемлемо как взлом! – AmiNadimi

Смежные вопросы