Proteggere un'API richiedendo le chiavi API

Questa pagina si applica ad Apigee e Apigee hybrid.

Visualizza la documentazione di Apigee Edge.

Video:guarda questo breve video per un'introduzione alla protezione dell'API.

Cosa imparerai a fare

Questo tutorial spiega come:

  • Crea un proxy API che richiede una chiave API.
  • Crea un prodotto API, uno sviluppatore e un'app sviluppatore.
  • Chiama l'API con una chiave API.

È importante proteggere la tua API da accessi non autorizzati. Un modo per farlo è tramite le chiavi API.

Quando un'app invia una richiesta a un proxy API configurato per verificare una chiave API, deve fornire una chiave valida. In fase di runtime, il criterio Verifica chiave API controlla che la chiave API fornita:

  • È valido
  • Non è stato revocato
  • Corrisponde alla chiave API del prodotto API che espone le risorse richieste

Se la chiave è valida, la richiesta è consentita. Se la chiave non è valida, la richiesta genera un errore di autorizzazione.

Crea il proxy API

  1. Vai alla UI di Apigee e accedi.
  2. Seleziona la tua organizzazione utilizzando il menu a discesa nell'angolo in alto a sinistra dell'interfaccia utente.
  3. Fai clic su Sviluppa > Proxy API per visualizzare l'elenco dei proxy API.

  4. Fai clic su Crea nuova.
    Pulsante Crea proxy
  5. Nella procedura guidata Crea un proxy, seleziona Proxy inverso (il più comune).
  6. Configura il proxy come segue:
    In questo campo Fai così
    Nome del proxy Inserisci: helloworld_apikey
    Project Base Path

    Modifica in: /helloapikey

    Il percorso di base del progetto fa parte dell'URL utilizzato per inviare richieste al proxy dell'API.

    Descrizione Inserisci: hello world protected by API key
    Destinazione (API esistente)

    Inserisci: http://mocktarget.apigee.net

    Questo definisce l'URL di destinazione che Apigee richiama su una richiesta al proxy API. Questo target restituisce solo una risposta semplice: Hello, Guest!.

  7. Fai clic su Avanti.
  8. Nella pagina Criteri comuni, seleziona Chiave API. Questa opzione aggiunge automaticamente due criteri al proxy API e crea un prodotto API necessario per generare la chiave API.
  9. Fai clic su Avanti.
  10. Nella pagina Riepilogo, assicurati che sia selezionato un ambiente di deployment e fai clic su Crea ed esegui il deployment.
  11. Fai clic su Modifica proxy per visualizzare la pagina Panoramica del proxy API.

Visualizza le norme

  1. Nell'editor del proxy API, fai clic sulla scheda Sviluppa. Vedrai che sono stati aggiunti due criteri al flusso di richieste del proxy API:
    • Verifica chiave API: controlla la chiamata API per verificare che sia presente una chiave API valida (inviata come parametro di query).
    • Rimuovi apikey param. query: un criterio Assegna messaggio cherimuove la chiave API dopo che è stata controllata, in modo che non venga trasmessa e esposta inutilmente.
  2. Fai clic sull'icona del criterio Verifica chiave API nella visualizzazione del flusso e controlla la configurazione XML del criterio nella visualizzazione del codice in basso. L'elemento <APIKey> indica al criterio dove cercare la chiave API quando viene effettuata la chiamata. Per impostazione predefinita, la chiave viene cercata come parametro di query denominato apikey nella richiesta HTTP:

    <APIKey ref="request.queryparam.apikey" />

    Il nome apikey è arbitrario e può essere qualsiasi proprietà contenente la chiave API.

Prova a chiamare l'API

In questo passaggio, effettuerai una chiamata API riuscita direttamente al servizio target, quindi effettuerai una chiamata non riuscita al proxy API per vedere come viene protetto dai criteri.

  1. Operazione riuscita

    In un browser web, vai al seguente indirizzo. Si tratta del servizio di destinazione a cui il proxy API è configurato per inoltrare la richiesta, ma per il momento lo raggiungerai direttamente:

    http://mocktarget.apigee.net

    Dovresti ricevere questa risposta di successo: Hello, Guest!

  2. Errore

    Ora prova a chiamare il proxy API:

    curl -v -k https://YOUR_ENV_GROUP_HOSTNAME/helloapikey

    dove YOUR ENV_GROUP_HOSTNAME è il nome host del gruppo di ambienti. Consulta Trovare il nome host del gruppo di ambienti.

    Senza il criterio Verifica chiave API, questa chiamata restituirebbe la stessa risposta della chiamata precedente. In questo caso, però, dovresti ricevere la seguente risposta di errore:

    {"fault":{"faultstring":"Failed to resolve API Key variable request.queryparam.apikey","detail":{"errorcode":"steps.oauth.v2.FailedToResolveAPIKey"}}}

    il che significa, correttamente, che non hai passato una chiave API valida (come parametro di query).

Nei passaggi successivi riceverai la chiave API richiesta.

Aggiunta di un prodotto API

Per aggiungere un prodotto API utilizzando l'interfaccia utente di Apigee:

  1. Seleziona Pubblica > Prodotti API.
  2. Fai clic su +Crea.
  3. Inserisci i dettagli del prodotto per il tuo prodotto API.
    Campo Descrizione
    Nome Nome interno del prodotto API. Non specificare caratteri speciali nel nome.
    Nota: non puoi modificare il nome dopo aver creato il prodotto API.
    Nome visualizzato Nome visualizzato per il prodotto API. Il nome visualizzato viene utilizzato nell'interfaccia utente e puoi modificarlo in qualsiasi momento. Se non specificato, verrà utilizzato il valore Name. Questo campo viene compilato automaticamente utilizzando il valore Nome. Puoi modificare o eliminare i relativi contenuti. Il nome visualizzato può includere caratteri speciali.
    Descrizione Descrizione del prodotto API.
    Ambiente Ambienti a cui il prodotto API consentirà l'accesso. Ad esempio, test o prod.
    Accesso Seleziona Public (Pubbliche).
    Approvare automaticamente le richieste di accesso Attiva l'approvazione automatica delle richieste di chiavi per questo prodotto API da qualsiasi app.
    Quota Ignora per questo tutorial.
    Ambiti OAuth consentiti Ignora per questo tutorial.
  4. Nella sezione Operazioni, fai clic su AGGIUNGI UN'OPERAZIONE.
  5. Nel campo Proxy API, seleziona il proxy API appena creato.
  6. Nel campo Percorso, inserisci "/". Ignora gli altri campi.
  7. Fai clic su Salva per salvare l'operazione.
  8. Fai clic su Salva per salvare il prodotto API.

Aggiungere uno sviluppatore e un'app alla tua organizzazione

A questo punto, simuleremo il flusso di lavoro di uno sviluppatore che si registra per utilizzare le tue API. Uno sviluppatore avrà una o più app che richiamano le tue API e ogni app riceverà una chiave API univoca. In questo modo, come fornitore di API, avrai un controllo più granulare sull'accesso alle tue API e report più granulari sul traffico delle API per app.

Creare uno sviluppatore

Per creare uno sviluppatore:

  1. Seleziona Pubblica > Sviluppatori nel menu.
    Nota: se sei ancora nella schermata Sviluppa, fai clic sul "<" accanto a SVILUPPA per visualizzare il menu e seleziona Pubblica > Sviluppatori.
  2. Fai clic su + Sviluppatore.
  3. Inserisci quanto segue nella finestra Nuovo sviluppatore:
    In questo campo invio
    Nome Keyser
    Cognome Soze
    Nome utente keyser
    Email keyser@example.com
  4. Fai clic su Crea.

Registra un'app

Per registrare un'app per sviluppatori:

  1. Seleziona Pubblica > App.
  2. Fai clic su + App.
  3. Inserisci quanto segue nella finestra Nuova app sviluppatore:
    In questo campo Fai così
    Nome e Nome visualizzato Inserisci: keyser_app
    Developer Seleziona: Keyser Soze (keyser@example.com)
    URL di callback e Note Lascia vuoto
  4. Nella sezione Credenziali, seleziona Mai. Le credenziali di questa app non scadono mai.
  5. Fai clic su Aggiungi prodotto.
  6. Seleziona il prodotto appena creato.
  7. Fai clic su Crea.

Recupera la chiave API

Per ottenere la chiave API:

  1. Nella pagina Applicazioni (Pubblica > Applicazioni), fai clic su keyser_app.
  2. Nella pagina keyser_app, fai clic su Mostra accanto a Chiave nella sezione Credenziali. Tieni presente che la chiave è associata al prodotto che hai creato.
  3. Seleziona e copia la chiave. Lo utilizzerai nel passaggio successivo.

Chiama l'API con una chiave

Ora che hai una chiave API, puoi utilizzarla per chiamare il proxy API. Incolla la chiave API come показано, come parametro di query. Assicurati che non ci siano spazi aggiuntivi nel parametro di query.

curl -v -k https://YOUR_ENV_GROUP_HOSTNAME/helloapikey?apikey=your_api_key

Ora, quando chiami il proxy API, dovresti ricevere questa risposta: Hello, Guest!

Complimenti! Hai creato un proxy API e lo hai protetto richiedendo che nella chiamata sia inclusa una chiave API valida.

Tieni presente che in genere non è buona norma passare una chiave API come parametro di query. Ti consigliamo di passarlo nell'intestazione HTTP.

Best practice: passaggio della chiave nell'intestazione HTTP

In questo passaggio, modificherai il proxy in modo che cerchi la chiave API in un'intestazione denominata x-apikey.

  1. Modifica il proxy API. Seleziona Sviluppa > Proxy API > helloworld_apikey e vai alla visualizzazione Sviluppa.
  2. Seleziona il criterio Verifica chiave API e modifica il file XML del criterio per indicare al criterio di cercare in header anziché in queryparam:

    <APIKey ref="request.header.x-apikey"/>
  3. Salva il proxy API e utilizza Esegui il deployment per eseguirlo.
  4. Esegui la seguente chiamata API utilizzando cURL per passare la chiave API come intestazione chiamata x-apikey. Non dimenticare di sostituire il nome della tua organizzazione.

    curl -v -H "x-apikey: {api_key_goes_here}" http://YOUR_ENV_GROUP_HOSTNAME/helloapikey

Tieni presente che per completare completamente la modifica, devi anche configurare il criterio Assegna messaggio in modo da rimuovere l'intestazione anziché il parametro di query. Ad esempio:

<Remove>
  <Headers>
      <Header name="x-apikey"/>
  </Headers>
</Remove>

Argomenti correlati

Ecco alcuni argomenti relativi a prodotti e chiavi API:

La protezione delle API spesso prevede misure di sicurezza aggiuntive come OAuth, un protocollo aperto che scambia le credenziali (come nome utente e password) per i token di accesso. I token di accesso sono stringhe lunghe e casuali che possono essere trasmesse tramite una pipeline di messaggi, anche da un'app all'altra, senza compromettere le credenziali originali.

Per una panoramica degli argomenti relativi alla sicurezza, consulta Proteggere un proxy.