如何使用Swagger UI自动授权所有端点?

时间:2017-07-19 20:01:49

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

我已经使用Swagger UI部署并访问了整个API。它使用基于身份验证的基本身份验证,并且可以轻松点击授权按钮并输入凭据,并且可以很好地尝试使用它!特征

但是,我想使用共享的用户名和密码创建API的公共沙盒版本,该版本始终经过身份验证;也就是说,任何人都不应该打开授权对话框来输入凭证。

我尝试根据另一个StackOverflow问题的答案输入授权,方法是将以下代码放在HTML页面的script元素中:

window.swaggerUi.load();
swaggerUi.api.clientAuthorizations.add("key", 
  new SwaggerClient.ApiKeyAuthorization(
  "Authorization", "Basic dXNlcm5hbWU6cGFzc3dvcmQ=", "header"));

但是,当我点击Try it out!按钮时,不会使用授权。

在所有端点上全局设置auth标头的正确方法是什么,以便没有用户必须手动输入凭据?

(我知道这可能听起来像一个奇怪的问题,但就像我提到的那样,它是一个公共用户名/密码。)

2 个答案:

答案 0 :(得分:3)

对于那些使用Swagger UI 3.x(更具体地说,v.3.13.0 +)的人 - 您可以使用以下方法自动授权:

  • preauthorizeBasic - 适用于基本身份验证
  • preauthorizeApiKey - 用于API密钥

要使用这些方法,必须在API定义中定义相应的安全方案。例如:

openapi: 3.0.0
...
components:
  securitySchemes:

    basicAuth:
      type: http
      scheme: basic

    api_key:
      type: apiKey
      in: header
      name: X-Api-Key

security:
  - basicAuth: []
  - api_key: []

preauthorizeNNN处理程序调用{​​{1}},如下所示:

onComplete

在此示例中,“basicAuth”和“api_key”是API定义中指定的安全方案的密钥名称。

答案 1 :(得分:1)

我找到了一个解决方案,使用PasswordAuthorization代替ApiKeyAuthorization

正确的做法是将以下行添加到onComplete处理程序中:

      swaggerUi.api.clientAuthorizations.add("basicAuth",
        new SwaggerClient.PasswordAuthorization(
          "8939927d-4b8a-4a69-81e4-8290a83fd2e7",
          "fbb7a689-2bb7-4f26-8697-d15c27ec9d86"));

swaggerUi被传递给回调,因此这是要使用的值。另外,请确保您的auth对象的名称与YAML文件中的名称匹配。