我正在使用 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 以与浏览器相同的格式解释它。
这是 Swagger UI 的一个已知问题:
https://github.com/swagger-api/swagger-ui/issues/4218
您可以尝试使用其他文档渲染器,看看它是否可以正确处理 cookie。
最后我们对这个问题进行了如下处理:
登录端点需要首先是用户,具有有效值,存储为 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.
*/