Пользовательский интерфейс Swagger с дайджест-аутентификацией

Я использую Swagger для создания документации по моему REST API. Согласно тому, что написано вокруг, пользовательский интерфейс Swagger не поддерживает базовую аутентификацию (в отличие от онлайн-редактора). Моя проблема в том, что один из моих API-интерфейсов — это POST, для которого требуется дайджест (даже не базовая) аутентификация.

Возможное решение, которое я нашел, состоит в том, чтобы добавить фиксированный заголовок аутентификации user:pass в запрос через код javascript. Это легко сделать в соответствии с документацией Swagger UI (см. Пользовательские параметры заголовка). Я сообщаю инкриминируемую строку кода:

swaggerUi.api.clientAuthorizations.add("key", new SwaggerClient.ApiKeyAuthorization("Authorization", "XXXX", "header"));

К сожалению, это не работает. Поле swaggerUi.api становится неинициализированным (нулевым) после того, как я инициализирую объект SwaggerUi, и, как следствие, swaggerUi.api.clientAuthorizationsне определено. Я пытался инициализировать такие поля по-разному, но каждый раз терпел неудачу. Я также пробовал аналогичные вызовы API, которые я нашел в обсуждениях этой темы, но ни один из них не сработал. У кого-нибудь есть идеи по этому поводу? Документация не особенно ясна по этому поводу.

Для полноты я сообщаю фрагмент js, где я инициализирую Swagger UI

  var urlPush = "./doc_push.yaml";
  window.swaggerUiPush = new SwaggerUi({
        url: urlPush,
        dom_id: "swagger-ui-container-push",
        supportedSubmitMethods: ['get', 'post', 'put', 'delete', 'patch'],
        onFailure: function(data) {
          log("Unable to Load SwaggerUI");
        },
        docExpansion: "list",
        jsonEditor: false,
        defaultModelRendering: 'model',
        showRequestHeaders: false,
   });

person McKracken    schedule 27.09.2016    source источник


Ответы (1)


Попробуйте использовать SwaggerClient.PasswordAuthorization вместо SwaggerClient.ApiKeyAuthorization -

 var username = $('#input_username').val();
 var password = $('#input_password').val();
 var basicAuth = new SwaggerClient.PasswordAuthorization('basic', username, password);
 window.swaggerUi.api.clientAuthorizations.add("basicAuth", basicAuth);
person Sampada    schedule 28.09.2016
comment
Наверняка таким образом он добавляет заголовок Authorization: Basic XXXXXXX (будьте осторожны, новая версия не хочет, чтобы поле «basic» присутствовало). Проблема в том, что это, похоже, решает проблему базовой аутентификации, а не проблему дайджест-аутентификации (для которой требуется MD% пользователя: область: пароль). - person McKracken; 28.09.2016