使用摘要式身份验证的Swagger UI

时间:2016-09-27 10:53:34

标签: javascript authentication swagger swagger-ui swagger-2.0

我使用Swagger生成REST API的文档。根据所写的内容,Swagger UI不支持基本身份验证(与online editor不同)。我的问题是我的一个API是一个需要摘要(甚至不是基本的)身份验证的POST。

我发现一个可能的解决方案是添加固定用户:通过javascript代码在请求中传递身份验证标头。这应该根据Swagger UI documentation轻松完成(参见Custom Header Parameters)。我报告了有罪的代码行:

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

不幸的是它不起作用。初始化SwaggerUi对象后,swaggerUi.api字段结果未初始化(null),因此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,
   });

1 个答案:

答案 0 :(得分:0)

尝试使用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);