2016-09-27 75 views
1

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

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

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

不幸的是,它不起作用。在初始化SwaggerUi对象后,swaggerUi.api字段结果未初始化(空),因此swaggerUi.api.clientAuthorizations未定义。我尝试以不同的方式初始化这些领域,每次都失败。我也试过类似的API调用,我在讨论这个主题的线程中发现了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, 
    }); 

回答

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); 
+0

可以肯定,那样它添加标题“授权:基本XXXXXXX“(注意,新版本不希望”基本“字段存在)。问题在于它似乎解决了基本身份验证问题,而不是摘要身份验证问题(它需要用户的MD%:realm:pass)。 – McKracken