从github问题可以看出,RSwag不支持api Key认证的多个标头。
这是我的 openapi/swagger yml,遵循 swagger 文档中的多个 API 密钥设置:
components:
securitySchemes:
apiKey:
type: apiKey
in: header
name: X-API-KEY
description: Your API Key, provided by GoApron.
userId:
type: apiKey
in: header
name: X-USER-ID
description: Your GoApron user ID
security:
- apiKey: []
userId: []
正如问题所指出的:
在测试中,我们发现 rswag 的规范帮助程序仅将 apiKey 类型的第一个条目添加到标头/查询中。
有什么方法可以在我的 API 请求中实际指定这两个标头吗?
仅向每个端点添加标头
parameters
的问题在于,它会将所有这些参数添加到文档中,而这不是应该显示身份验证标头的方式。
我想要的是一种“破解” rswag 请求规范中的请求的方法,以将这些标头作为请求的一部分发送,即使由于 rswag 限制,它们没有定义为参数。
似乎覆盖
build_request
(由submit_request
使用)可能是我最好的选择:
https://github.com/rswag/rswag/blob/master/rswag-specs/lib/rswag/specs/example_helpers.rb#L10 https://github.com/rswag/rswag/blob/master/rswag-specs/lib/rswag/specs/request_factory.rb#L14
覆盖
build_request
似乎有效,当我去覆盖它时我可以传入自定义标头:
module Rswag
module Specs
class RequestFactory
alias_method :original_build_request, :build_request
def build_request(metadata, example)
request = original_build_request(metadata, example)
request[:headers] ||= {}
# Check for custom headers specified in metadata using run_test! keyword arguments
if metadata[:custom_headers]
request[:headers].merge!(metadata[:custom_headers])
else
request[:headers].merge!(DEFAULT_HEADERS)
end
request
end
end
end
end