如何使用 Swagger UI 在标头中发送多个 cookie?

问题描述 投票:0回答:2

我正在使用 OpenAPI 和 Swagger UI 在 Node 中编写文档和 API。 API 使用缓存中的 API 密钥进行身份验证。我在我的 OpenAPI 定义中配置了全局 cookie 身份验证。问题是它只发送一个带有请愿书的 cookie,而我需要发送三个。当我使用 Swagger UI 发送请求时,使用以下格式发送 cookie 标头:“cookie1=value;cookie2=value”。

我尝试创建三个全局安全方案,一个用于我需要发送的每个 cookie,我设法做到了,但是 Swagger UI 使用以下格式发送 cookie 标头:“cookie1=value&cookie2=value”并返回身份验证即使使用正确的值也会出错。

这是我swagger.json中的配置:

...
"components": {
  "securitySchemes": {
    "cookieAuth": {
      "name": "user",
      "type": "apiKey",
      "in": "cookie"
    }
  }
},
"security": [
  {
    "cookieAuth": []
  }
],
...

这是我尝试的第二种方法:

...
"components": {
  "securitySchemes": {
    "user": {
      "name": "user",
      "type": "apiKey",
      "in": "cookie"
    },
    "password": {
      "name": "user",
      "type": "apiKey",
      "in": "cookie"
    },
    "hashFunc": {
      "name": "user",
      "type": "apiKey",
      "in": "cookie"
    }
  }
},
"security": [
  {
    "user": [],
    "password": [],
    "hashFunc": []
  }
],
...

我真正需要的是知道如何配置它,以便 Swagger UI 以与浏览器相同的格式解释它。

node.js swagger-ui openapi
2个回答
1
投票

这是 Swagger UI 的一个已知问题:
https://github.com/swagger-api/swagger-ui/issues/4218

您可以尝试使用其他文档渲染器,看看它是否可以正确处理 cookie。


0
投票

最后我们对这个问题进行了如下处理:

登录端点需要首先是用户,具有有效值,存储为 cookie,然后他们可以测试任何剩余的端点,这些端点将使用存储的 cookie。注销将清除存储的 cookie。

最后swagger的配置是这样的:

/**
 *  @swagger
 *  definitions:
 *    loginObj:
 *      type: object
 *      properties:
 *        user: string
 *        password: string
 *        hashFunction: string
 */

/**
 *  @swagger
 *  /login:
 *    post:
 *        summary: Requests for authentication for a given user and password
 *        requestBody:
 *          required: true
 *          content:
 *            'application/json':
 *              schema:
 *                $ref: '#/definitions/loginObj'
 *              example:
 *                user: user
 *                password: password
 *                hashFunction: plain/sha256
 *        responses:
 *          "200":
 *            description: >
 *              Returns success response with a data value as true.
 *              The login information cookie is returned to the cookie header. You need to include this cookie in subsequent requests.
 *            headers:
 *              Set-Cookie:
 *                schema:
 *                  type: string
 *                  example: user=user; password=12345; hashFunction=sha256
 *          "500":
 *            description: Returns standard error with an `errorMsg` on failure.
 */
© www.soinside.com 2019 - 2024. All rights reserved.