2016-05-25 1 views
15

Я написал много 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} 

Каждый имеет идея?

Большое спасибо!

+0

В прошлом, в мире Windows я имею сохраненные ключи в реестре, а затем вручную изменили безопасность в разделе реестра, чтобы они были доступны только пользователю, выполняющему запланированную задачу/процесс, который должен ее прочитать. Тогда ваша программа на C# просто считывает ключ реестра, а другие люди на машине (без доступа администратора) не смогут прочитать ключ. Это не пуленепробиваемый, но работает в простых случаях. –

+0

@DavidThomas Спасибо за предложение, но, честно говоря (несмотря на обширные комментарии!), Это не проблема безопасности для нас (а также я сильно подозреваю OP). Клиентская библиотека не будет использоваться за пределами набора пользователей, у которых в любом случае будет доступ к ключу ... –

ответ

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" } } 
      } 
+0

Это предлагаемая поправка к файлу определения swagger? Итак, ключ API будет в самом файле определения swagger? Вопрос заключается в том, как жестко закодировать его в клиентской библиотеке, сгенерированной с помощью инструмента генерации кода (https://generator.swagger.io/). –

Смежные вопросы