Ray*_*oal 3 basic-authentication swagger-ui swagger-2.0
我部署了一个完整的 API,可以使用 Swagger UI 访问。它使用基于 HTTPS 的基本身份验证,您可以轻松地点击授权按钮并输入凭据,一切都非常好用,试试吧!特征。
但是,我想使用共享的用户名和密码制作 API 的公共沙盒版本,该版本始终经过身份验证;也就是说,任何人都不应该打开授权对话框来输入凭据。
我尝试根据另一个 Stack Overflow 问题的答案输入授权,方法是将以下代码放入scriptHTML 页面的元素中:
window.swaggerUi.load();
swaggerUi.api.clientAuthorizations.add("key",
new SwaggerClient.ApiKeyAuthorization(
"Authorization", "Basic dXNlcm5hbWU6cGFzc3dvcmQ=", "header"));
Run Code Online (Sandbox Code Playgroud)
但是,当我点击Try it out!按钮时,未使用授权。
在所有端点上全局设置 auth 标头的正确方法是什么,这样用户就不必手动输入凭据?
(我知道这可能听起来像一个奇怪的问题,但就像我提到的,它是一个公共用户名/密码。)
对于使用 Swagger UI 3.x(更具体地说,v.3.13.0+)的用户,您可以使用以下方法进行自动授权:
preauthorizeBasic – 对于基本身份验证preauthorizeApiKey – 用于 API 密钥和 OAS3 承载身份验证要使用这些方法,必须在您的 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: []
Run Code Online (Sandbox Code Playgroud)
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");
}
})
Run Code Online (Sandbox Code Playgroud)
在此示例中,“basicAuth”和“api_key”是 API 定义中指定的安全方案的密钥名称。
我找到了一个解决方案,使用PasswordAuthorization而不是ApiKeyAuthorization.
正确的做法是将以下行添加到onComplete处理程序中:
swaggerUi.api.clientAuthorizations.add("basicAuth",
new SwaggerClient.PasswordAuthorization(
"8939927d-4b8a-4a69-81e4-8290a83fd2e7",
"fbb7a689-2bb7-4f26-8697-d15c27ec9d86"));
Run Code Online (Sandbox Code Playgroud)
swaggerUi被传递给回调,因此这是要使用的值。另外,请确保您的 auth 对象的名称与 YAML 文件中的名称匹配。
| 归档时间: |
|
| 查看次数: |
8773 次 |
| 最近记录: |