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

rryofs0p  于 2023-03-22  发布在  Node.js
关注(0)|答案(2)|浏览(204)

我正在使用OpenAPI和Swagger UI编写Node文档和API。API使用缓存中的API密钥进行身份验证。我在OpenAPI定义中配置了全局cookie身份验证。问题是它只发送一个cookie和请愿书,而我需要发送三个。当我使用Swagger UI发送请求时,cookie头部使用以下格式发送:“cookie1=value;cookie2=value”。
我尝试创建三个全局安全方案,每个方案对应一个需要发送的cookie,我成功地做到了,但Swagger UI使用以下格式发送cookie头:“cookie 1 =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将以与浏览器相同的格式解释它。

eyh26e7m

eyh26e7m1#

这是Swagger UI的一个已知问题:
https://github.com/swagger-api/swagger-ui/issues/4218
您可以尝试使用另一个文档呈现器,看看它是否可以正确处理cookie。

cwtwac6a

cwtwac6a2#

最后,我们对这个问题进行了如下处理:
登录端点首先需要用户身份,并具有有效值,这些值存储为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.
 */

相关问题