2016-05-25 23 views
15

Ho scritto molte API in C# e creato un sito Web di documentazione "Swagger" utilizzando Swashbuckle.Codice hard Key Api Valore chiave nell'intestazione quando si utilizza un client Swagger generato

Per le chiamate REST autentiche utilizzo una chiave API nell'intestazione.

ho creato una pagina che consente di scaricare un client specifico per qualsiasi linguaggio di programmazione, come documentato qui: https://generator.swagger.io

vorrei per consentire all'utente di generare un cliente con la propria chiave API in modo che non ha bisogno di imposta manualmente la chiave API nel codice.

Nel mio Swagger JSON ho questa definizione di sicurezza:

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

Nella pagina di Swagger Cliente Generator ho trovato questo modello che permette di impostare le opzioni di clienti, ma non riesco a trovare come (e se) l'API la chiave può essere codificata (o qualsiasi altro tipo di autorizzazione) nel codice client.

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) 
} 

suppongo devo impostare oggetto AuthorizationValue ma non v'è alcuna documentazione su questo (o io non riesco a trovarlo).

Sarebbe sufficiente essere in grado di avere la lib client generata aggiungere un'intestazione HTTP arbitraria a tutte le richieste.

Nel qual caso potremmo avere aggiungere:

X-ApiKey:{whatever the key is} 

Chiunque ha un'idea?

Grazie mille!

+0

In passato, in un mondo di Windows, ho chiavi memorizzate nel registro, quindi modificato manualmente la sicurezza sulla chiave di registro per essere accessibile solo all'utente che sta eseguendo l'operazione pianificata/processo che deve leggerlo. Quindi il tuo programma C# legge semplicemente la chiave di registro, e altre persone sulla macchina (senza accesso amministratore) non saranno in grado di leggere la chiave. Non è a prova di proiettile ma funziona in casi semplici. –

+0

@DavidThomas Grazie per il suggerimento ma, onestamente (nonostante i commenti estesi!) Questo non è un problema di sicurezza per noi (e anche io sospetto fortemente per l'OP). La libreria client non sarà condivisa al di fuori del gruppo di utenti che avrebbero comunque accesso alla chiave ... –

risposta

1

sembra di lavorare per aggiungere semplicemente come parametro per ogni chiamata con un valore predefinito - in modo che il JSON sarebbe avere qualcosa di simile:

"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

Questa è una modifica proposta al file di definizione swagger? Quindi la chiave API sarebbe nel file di definizione swagger stesso? La domanda è più su come codificarlo su una libreria client generata usando [lo strumento di generazione del codice] (https://generator.swagger.io/). –

Problemi correlati