如何在swagger 3.0中自动添加基本身份验证,而无需用户在授权按钮中输入?

时间:2018-03-22 07:01:01

标签: swagger swagger-ui swagger-editor openapi

我正在使用swagger 3.0,并且在swagger文档中有多个端点。

我希望用户不要每次都在授权按钮处输入凭据。

我是否可以在index.html或yaml文件中包含身份验证以自动授权用户。

感谢。

1 个答案:

答案 0 :(得分:1)

Swagger UI 3.13.0+为此提供了preauthorizeBasic方法。假设您的API定义包含Basic auth的安全方案:

swagger: '2.0'
...
securityDefinitions:
  basicAuth:
    type: basic

security:
  - basicAuth: []

您可以指定Basic auth的默认用户名和密码,如下所示:

// index.html

const ui = SwaggerUIBundle({
  url: "https://my.api.com/swagger.yaml",
  ...
  onComplete: function() {
    // "basicAuth" is the key name of the security scheme in securityDefinitions
    ui.preauthorizeBasic("basicAuth", "username", "password");
  }
})

现在,如果您单击Swagger UI中的“授权”按钮,您将看到用户名和密码已预先填写。


<小时/> 原始答案(适用于Swagger UI 3.1.6-3.12.1):

您可以将requestInterceptor添加到Swagger UI的 index.html 文件中,以便自动添加Authorization标头以“试用”请求。 Swagger UI 3.1.6及更高版本支持requestInterceptor

// index.html

const ui = SwaggerUIBundle({
  url: "http://my.api.com/swagger.yaml",
  ...
  requestInterceptor: (req) => {
    if (! req.loadSpec) {
      // Add the header to "try it out" calls but not spec fetches
      var token = btoa("username" + ":" + "password");
      req.headers.Authorization = "Basic " + token;
    }
    return req;
  }
})