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

2024-01-13

我部署了整个 API,并可通过 Swagger UI 进行访问。它使用基于 HTTPS 的基本身份验证,人们可以轻松点击“授权”按钮并输入凭据,并且通过“尝试一下!”一切都可以很好地工作!特征。

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

我尝试根据另一个 Stack Overflow 问题的答案输入授权,方法是将以下代码放入scriptHTML 页面上的元素:

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

然而,当我击中Try it out!按钮未使用授权。

在所有端点上全局设置身份验证标头的正确方法是什么,以便用户无需手动输入凭据?

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


如果您使用Swagger UI v.3.13.0或更高版本,您可以使用以下方法自动授权端点:

  • preauthorizeBasic– 用于基本身份验证
  • preauthorizeApiKey– 用于 API 密钥和 OpenAPI 3.x Bearer 身份验证

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

openapi: 3.0.0
...
components:
  securitySchemes:

    basicAuth:
      type: http
      scheme: basic

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

    bearerAuth:
      type: http
      scheme: bearer

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

Call preauthorizeNNN来自onComplete处理程序,就像这样:

// index.html

const ui = SwaggerUIBundle({
  url: "https://my.api.com/swagger.yaml",
  ...

  onComplete: function() {

    // Default basic auth
    ui.preauthorizeBasic("basicAuth", "username", "password");

    // Default API key
    ui.preauthorizeApiKey("api_key", "abcde12345");

    // Default Bearer token
    ui.preauthorizeApiKey("bearerAuth", "your_bearer_token");
  }
})

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Swagger UI 自动授权所有端点? 的相关文章

随机推荐