Как заставить Swagger отправлять API-ключ как http вместо URL-адреса
Я использую swagger с servicestack, но я получаю 401 несанкционированную ошибку из моего/ресурса URL, потому что для этого требуется ключ API.
Если я ошибаюсь, согласно документации, я должен установить поддержкуHeaderParams в true, а также значение apiKeyName и apiKey в параметрах JSON при инициализации Swagger из моего html-страницу.
Тогда я ожидал увидеть свой ключ API в заголовках HTTP-запросов, но он все еще добавляется к URL-адресу, а не в коллекцию заголовков.
Вот код, который инициализирует Swagger на моей странице HTML:
window.swaggerUi = new SwaggerUi({
discoveryUrl: "http://pathtomyservice.com/resources",
headers: { "testheader" : "123" },
apiKey: "123",
apiKeyName: "Api-Key",
dom_id:"swagger-ui-container",
supportHeaderParams: true,
supportedSubmitMethods: ['get', 'post', 'put', 'delete'],
onComplete: function(swaggerApi, swaggerUi){
if(console) {
console.log("Loaded SwaggerUI");
console.log(swaggerApi);
console.log(swaggerUi);
}
$('pre code').each(function(i, e) {hljs.highlightBlock(e)});
},
onFailure: function(data) {
if(console) {
console.log("Unable to Load SwaggerUI");
console.log(data);
}
},
docExpansion: "none"
});
К сожалению, я вообще не получаю заголовков, нет "Api-Key" или "testheader".
Ответы
Ответ 1
Я думаю, что это может быть ошибкой в swagger ui.
В качестве обходного пути я добавил в файл swagger index.html следующее:
$(function () {
$.ajaxSetup({
beforeSend: function (jqXHR, settings) {
jqXHR.setRequestHeader("YourApiKeyHeader", $("#input_apiKey").val());
}
});
});
Надеюсь, что это поможет,
Ответ 2
В swagger-ui 2.0 или выше это тривиально:
https://github.com/wordnik/swagger-ui#header-parameters
// add a new ApiKeyAuthorization when the api-key changes in the ui.
$('#input_apiKey').change(function() {
var key = $('#input_apiKey')[0].value;
if(key && key.trim() != "") {
window.authorizations.add("key", new ApiKeyAuthorization("api_key", key, "header"));
}
})
Это также гораздо более расширяемо и поддерживает настраиваемые механизмы аутентификации.
Ответ 3
вы можете попробовать это
(function () {
$(function () {
var basicAuthUI =
'<div class="input"><input placeholder="username" id="input_username" name="username" type="text" size="10"/></div>' +
'<div class="input"><input placeholder="password" id="input_password" name="password" type="password" size="10"/></div>';
$(basicAuthUI).insertBefore('#api_selector div.input:last-child');
$("#input_apiKey").hide();
$('#input_username').change(addAuthorization);
$('#input_password').change(addAuthorization);
});
function addAuthorization() {
SwaggerApi.supportHeaderParams = true;
SwaggerApi.headers = {"authentication": "test"};
var username = $('#input_username').val();
var password = $('#input_password').val();
if (username && username.trim() != "" && password && password.trim() != "") {
var basicAuth = new SwaggerClient.PasswordAuthorization('basic', username, password);
window.swaggerUi.api.clientAuthorizations.add("basicAuth", basicAuth);
console.log("authorization added: username = " + username + ", password = " + password);
}
}
})();