2015-05-05 3 views
0

В моей веб-службе ServiceStack у меня есть глобальный фильтр запросов, который проверяет заголовки на наличие ключа API (X-FooKey), это проверка предотвращает загрузку пользовательского интерфейса Swagger/Postman. Я создал ужасный хак для Postman для работы, проверяя тип dto и сравнивая его с dto для Postman, опять же, не очень надежный. С другой стороны, Swagger - это беспорядок, и я действительно не хочу имитировать то, что я сделал с Postman, поэтому я открыт для предложений.Как заставить плагины Swagger/Postman работать, когда служба защищена ключом API

В конечном счете, я хотел бы, чтобы оба плагина могли автоматически предоставлять ключ, но это, скорее всего, влечет за собой PR, который, учитывая мои временные ограничения, нереалистичен.

Спасибо, Стивен

ответ

3

В нашем проекте мы имели один и тот же вопрос. Мы используем плагин swagger для servicestack и имеем собственный заголовок запроса для ключа API. Мы решили это довольно легко, редактируя swagger-ui/index.html. Недостатком является то, что вы не можете позволить файлу обновляться с помощью nuget или слить вручную.

удлиняет форму HTML с дополнительным входом для ключа API

<form id='api_selector'> 
    <div id="login-logout"> 
     <div class='input'><input placeholder="api_key" id="input_apiKey" name="apiKey" type="text" /></div> 
     <div class='input'><input placeholder="username" id="input_username" name="username" type="text" /></div> 
     <div class='input'><input placeholder="password" id="input_password" name="password" type="password" /></div> 
     <div class='input'><a id="login" href="#">Login</a></div> 
    </div> 
</form> 

В на яваскрипт кусков изменить apiKeyName:

window.swaggerUi = new SwaggerUi({ 
    apiKey: "", 
    apiKeyName: "x-fookey" 
}); 

А затем измените функцию входа:

$('#login').on('click', function (event) { 
    event.preventDefault(); 

    var apiKey = $('#input_apiKey').val(); 
    var username = $('#input_username').val(); 
    var password = $('#input_password').val(); 

    $.ajax({ 
     url: '../api/auth/credentials', 
     type: 'POST', 
     data: { 
      UserName: username, 
      Password: password 
     }, 
     beforeSend: function (xhr) { 
      xhr.setRequestHeader('X-FooKey', apiKey); 
     } 
    }); 
}); 

В нашем API нам нужен только заголовок apikey для запроса на вход. Чтобы добавить его в каждый запрос, см. Этот вопрос: How to get Swagger to send API key as a http instead of in the URL

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

  • Нет связанных вопросов^_^