16

我用 C# 编写了许多 API,并使用 Swashbuckle 创建了一个“Swagger”文档网站。

对于验证 REST 调用,我在标头中使用 API 密钥。

我创建了一个页面,允许下载任何编程语言的特定客户端,如下所述:https ://generator.swagger.io

我想让用户能够使用他自己的 API 密钥生成客户端,这样他就不需要再在代码中手动设置 API 密钥了。

在我的 Swagger JSON 中,我有这个安全定义:

"securityDefinitions": {
    "apiKey": {
        "type": "apiKey",
        "description": "API Key Authentication",
        "name": "X-ApiKey",
        "in": "header"
    }
}

在 Swagger Client Generator 的页面中,我找到了允许设置客户端选项的模型,但我找不到 API 密钥如何(以及是否)可以在客户端代码中硬编码(或任何其他类型的授权)。

GeneratorInput {
    spec (object, optional),
    options (object, optional),
    swaggerUrl (string, optional),
    authorizationValue (AuthorizationValue, optional),
    securityDefinition (SecuritySchemeDefinition, optional)
}
AuthorizationValue {
    value (string, optional),
    type (string, optional),
    keyName (string, optional)
}
SecuritySchemeDefinition {
    description (string, optional),
    type (string, optional)
}

我想我必须设置 AuthorizationValue 对象,但没有关于它的文档(或者我找不到它)。

能够让生成的客户端库向所有请求添加任意 HTTP 标头就足够了。

在这种情况下,我们可以让它添加:

X-ApiKey:{whatever the key is}

有人有想法吗?

非常感谢!

4

1 回答 1

1

似乎可以简单地将其作为参数添加到每个调用中并使用默认值 - 因此 JSON 将具有以下内容:

"post": {
                "tags": [ "user" ],
                "summary": "Creates list of users with given input array",
                "description": "",
                "operationId": "createUsersWithListInput",
                "produces": [ "application/xml", "application/json" ],
                "parameters": [
                    {
                        "in": "body",
                        "name": "body",
                        "description": "List of user object",
                        "required": true,
                        "schema": {
                            "type": "array",
                            "items": { "$ref": "#/definitions/User" }
                        }
                    },
                    {
                        "in": "header",
                        "name": "X-ApiKey",
                        "required": false,
                        "type": "string",
                        "format": "string",
                        "default": "abcdef12345"
                    }
                ],
                "responses": { "default": { "description": "successful operation" } }
            }
于 2017-08-29T23:40:53.033 回答