Я написал много API в C# и создал сайт документации Swagger с использованием Swashbuckle.Hard Coding Api Значение ключа в заголовке при использовании созданного Swagger Client
Для аутентификации вызовов REST я использую ключ API в заголовке.
Я создал страницу, которая позволяет загрузить конкретный клиент для любого языка программирования как описано здесь: https://generator.swagger.io
Я хотел бы, чтобы позволить пользователю создавать клиент с его собственным ключом API, так что он не должен вручную установите ключ API в код.
В моем Swagger JSON У меня есть это определение безопасности:
"securityDefinitions": {
"apiKey": {
"type": "apiKey",
"description": "API Key Authentication",
"name": "X-ApiKey",
"in": "header"
}
}
В странице чванство Client Генератора я нашел эту модель, разрешить, чтобы настроить параметры клиентов, но я не могу найти, как (и если) 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, но нет никакой документации о том, что (или я не могу найти).
Достаточно иметь возможность иметь сгенерированный клиентский lib, добавляющий произвольный HTTP-заголовок ко всем запросам.
В этом случае мы могли бы просто его добавить:
X-ApiKey:{whatever the key is}
Каждый имеет идея?
Большое спасибо!
В прошлом, в мире Windows я имею сохраненные ключи в реестре, а затем вручную изменили безопасность в разделе реестра, чтобы они были доступны только пользователю, выполняющему запланированную задачу/процесс, который должен ее прочитать. Тогда ваша программа на C# просто считывает ключ реестра, а другие люди на машине (без доступа администратора) не смогут прочитать ключ. Это не пуленепробиваемый, но работает в простых случаях. –
@DavidThomas Спасибо за предложение, но, честно говоря (несмотря на обширные комментарии!), Это не проблема безопасности для нас (а также я сильно подозреваю OP). Клиентская библиотека не будет использоваться за пределами набора пользователей, у которых в любом случае будет доступ к ключу ... –