Swagger 使用招摇过市生成的客户端时,硬编码标头中的Api键值

Swagger 使用招摇过市生成的客户端时,硬编码标头中的Api键值,swagger,api-key,swashbuckle,swagger-codegen,Swagger,Api Key,Swashbuckle,Swagger Codegen,我用C#编写了许多API,并使用Swashback创建了一个“招摇过市”文档网站 对于验证REST调用,我在头中使用API密钥 我创建了一个页面,允许下载任何编程语言的特定客户端,如下所述: 我希望使用户能够使用自己的API密钥生成客户端,这样他就不需要再在代码中手动设置API密钥了 在我的Swagger JSON中,我有这样一个安全定义: "securityDefinitions": { "apiKey": { "type": "apiKey", "de

我用C#编写了许多API,并使用Swashback创建了一个“招摇过市”文档网站

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

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

我希望使用户能够使用自己的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}
有人有主意吗


非常感谢

在每次调用中使用默认值简单地将其添加为参数似乎是可行的-因此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" } }
            }

过去,在Windows世界中,我将注册表项存储在注册表中,然后手动修改注册表项上的安全性,使其仅可供运行需要读取的计划任务/进程的用户访问。然后你的C#程序只读取注册表项,而机器上的其他人(没有管理员权限)将无法读取注册表项。它不是防弹的,但在简单的情况下有效。@DavidThomas感谢您的建议,但是,老实说(尽管有大量的评论!)这对我们来说不是一个安全问题(我也强烈怀疑OP)。客户端库将不会在有权访问密钥的用户集之外共享…这是对swagger定义文件的拟议修订?那么API密钥将位于swagger定义文件本身中?问题更多的是如何将其硬编码到使用生成的客户端库中。