Swagger 使用招摇过市生成的客户端时,硬编码标头中的Api键值
我用C#编写了许多API,并使用Swashback创建了一个“招摇过市”文档网站 对于验证REST调用,我在头中使用API密钥 我创建了一个页面,允许下载任何编程语言的特定客户端,如下所述: 我希望使用户能够使用自己的API密钥生成客户端,这样他就不需要再在代码中手动设置API密钥了 在我的Swagger JSON中,我有这样一个安全定义: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
"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定义文件本身中?问题更多的是如何将其硬编码到使用生成的客户端库中。