Proteggi un'API con OAuth

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

Cosa imparerai a fare

  • Scarica ed esegui il deployment di un proxy API di esempio.
  • Creare un proxy API protetto da OAuth.
  • Crea un prodotto, uno sviluppatore e un'app.
  • Scambia le credenziali per un token di accesso OAuth.
  • Chiamare un'API con un token di accesso.

Questo tutorial mostra come proteggere un'API con OAuth 2.0.

OAuth è un protocollo di autorizzazione che consente alle app di accedere alle informazioni per conto di agli utenti senza richiedere loro di divulgare il loro nome utente e la loro password.

Con OAuth, le credenziali di sicurezza (come nome utente/password o chiave/segreto) vengono scambiate per un token di accesso. Ad esempio:

joe:joes_password (username:password) o
Nf2moHOASMJeUmXVdDhlMbPaXm2U7eMc:unUOXYpPe74ZfLEb (key:segreto)

diventa qualcosa del tipo:

b0uiYwjRZLEo4lEu7ky2GGxHkanN

Il token di accesso è una stringa casuale di caratteri ed è temporaneo (dovrebbe scadere dopo per un periodo di tempo relativamente breve), quindi passarlo per autenticare un utente nel flusso di lavoro di un'app è molto più sicuro rispetto alla trasmissione delle credenziali vere e proprie.

Il protocollo OAuth 2.0 specifica definisce diversi meccanismi, chiamati "tipi di concessioni", per la distribuzione dell'accesso di token per le app. Il tipo di autorizzazione più basilare definito da OAuth 2.0 è chiamato "client credenziali". In questo tipo di autorizzazione, i token di accesso OAuth vengono generati in cambio del client , che sono coppie chiave/segreto utente, come nell'esempio riportato sopra.

Il tipo di concessione delle credenziali client in Edge viene implementato utilizzando i criteri nei proxy API. R il flusso OAuth tipico prevede due passaggi:

  • Chiama il proxy API 1 per generare un token di accesso OAuth dal client e credenziali. Un criterio OAuth 2.0 sul proxy API gestisce questa operazione.
  • Chiama il proxy API 2 per inviare il token di accesso OAuth in una chiamata API. La Il proxy API verifica il token di accesso utilizzando un criterio OAuth 2.0.

Che cosa ti serve

  • Un account Apigee Edge. Se non ne hai ancora uno, puoi registrarti seguendo le indicazioni stradali. alla pagina Creazione di un modello Apigee Account Edge.
  • cURL installato sulla tua macchina per effettuare chiamate API dalla riga di comando.

Scarica ed esegui il deployment di un'API per la generazione di token proxy

In questo passaggio creerai il proxy API che genera un token di accesso OAuth da un consumer key e consumer secret inviati in una chiamata API. Apigee fornisce un proxy API di esempio in questo modo. Ora scaricherai ed eseguirai il deployment del proxy, per poi utilizzarlo più avanti nel tutorial. (tu potresti creare facilmente questo proxy API. Questo passaggio di download e deployment è utile e mostrarti quanto è facile condividere i proxy già creati.

  1. Scarica il file "oauth" file ZIP del proxy API di esempio in qualsiasi directory del file di un sistema operativo completo.
  2. Vai all'indirizzo https://apigee.com/edge e accedi.
  3. Seleziona Sviluppo > Proxy API nella barra di navigazione a sinistra.
  4. Fai clic su + Proxy.
    Pulsante Crea proxy
  5. Nella procedura guidata Crea proxy, fai clic su Carica bundle proxy.
  6. Scegli il file oauth.zip che hai scaricato e fai clic su Avanti.
  7. Fai clic su Crea.
  8. Al termine della build, fai clic su Modifica proxy per visualizzare il nuovo proxy. nell'editor proxy API.
  9. Nella pagina Panoramica dell'editor proxy API, fai clic sul menu a discesa Deployment. e seleziona test. Questo è l'ambiente di test nella tua organizzazione.

    Al prompt di conferma, fai clic su Esegui il deployment.
    Quando fai di nuovo clic sul menu a discesa Deployment, un'icona verde indica che il proxy è il deployment nell'ambiente di test.

Complimenti! Hai scaricato ed eseguito il deployment di un'API per la generazione di token di accesso proxy alla tua organizzazione Edge.

Visualizza il flusso e il criterio OAuth

Diamo un'occhiata più da vicino ai contenuti del proxy API.

  1. Nell'editor del proxy API, fai clic sulla scheda Sviluppo. Sulla sinistra Barra di navigazione, con due criteri. Vedrai anche due POST dei flussi nella sezione Proxy Endpoints.
  2. Fai clic su AccessTokenClientCredential in Proxy Endpoints.

    Nella visualizzazione Codice XML, vedrai un Flow chiamato AccessTokenClientCredential:

    <Flow name="AccessTokenClientCredential">
        <Description/>
        <Request>
            <Step>
                <Name>GenerateAccessTokenClient</Name>
            </Step>
        </Request>
        <Response/>
        <Condition>(proxy.pathsuffix MatchesPath "/accesstoken") and (request.verb = "POST")</Condition>
    </Flow>
    

    Un flusso è una fase di elaborazione in un proxy API. In questo caso, il flusso viene attivato una determinata condizione è soddisfatta (chiamato flusso condizionale). La condizione, definiti in l'elemento <Condition>, indica che se viene effettuata la chiamata proxy API la risorsa /accesstoken e il verbo di richiesta è POST, quindi eseguire il criterio GenerateAccessTokenClient, che genera l'accesso di accesso.

  3. Ora diamo un'occhiata al criterio che verrà attivato dal flusso condizionale. Fai clic sull' Icona del criterio GenerateAccessTokenClient nel diagramma di flusso.

    Nella Visualizzazione codice viene caricata la seguente configurazione XML:

    <OAuthV2 name="GenerateAccessTokenClient">
        <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type -->
        <Operation>GenerateAccessToken</Operation>
        <!-- This is in millseconds, so expire in an hour -->
        <ExpiresIn>3600000</ExpiresIn>
        <SupportedGrantTypes>
            <!-- This part is very important: most real OAuth 2.0 apps will want to use other
             grant types. In this case it is important to NOT include the "client_credentials"
             type because it allows a client to get access to a token with no user authentication -->
            <GrantType>client_credentials</GrantType>
        </SupportedGrantTypes>
        <GrantType>request.queryparam.grant_type</GrantType>
        <GenerateResponse/>
    </OAuthV2>
    

    La configurazione include:

    • <Operation>, che può essere uno dei vari valori predefiniti, che cosa farà il criterio. In questo caso, genererà un accesso di accesso.
    • Il token scadrà 1 ora (3600000 millisecondi) dopo essere stato generato.
    • In <SupportedGrantTypes>, il token OAuth Il valore di <GrantType> dovrebbe essere utilizzato (client_credentials) (scambio di una chiave utente e di un segreto con un token OAuth).
    • Il secondo elemento <GrantType> indica al criterio dove cercare la chiamata API per il parametro del tipo di autorizzazione, come richiesto dalla specifica OAuth 2.0. (questo sarà visualizzato più avanti nella chiamata API). Il tipo di concessione può essere inviato anche nella richiesta intestazione (request.header.grant_type) o come parametro del modulo (request.formparam.grant_type).

Al momento non devi fare altro con il proxy API. Nei passaggi successivi, utilizzerai questo proxy API per generare un token di accesso OAuth. Ma prima devi eseguire alcune altre cose:

  • Crea il proxy API che vuoi effettivamente proteggere con OAuth.
  • Crea alcuni altri artefatti che produrranno la chiave utente e il segreto utente devi scambiare un token di accesso.
di Gemini Advanced.

Crea il proxy API protetto da OAuth

Informazioni sul "mocktarget"

Il servizio mocktarget è ospitato su Apigee e restituisce dati semplici. Nella Infatti, puoi accedervi da un browser web. Provalo facendo clic di seguito:

http://mocktarget.apigee.net/ip

Il target restituisce ciò che dovresti vedere quando alla fine chiami questo proxy API.

Puoi anche visitare http://mocktarget.apigee.net/help per vedere altre risorse API che sono disponibili nella simulazione.

Ora creerai il proxy API da proteggere. Questa è la chiamata API restituisce un elemento. In questo caso, il proxy API chiamerà il servizio mocktarget di Apigee per restituire il tuo indirizzo IP. MA, potrai vederlo solo se passi un accesso OAuth valido con la tua chiamata API.

Il proxy API che crei qui includerà un criterio che verifica la presenza di un token OAuth nel richiesta.

  1. Seleziona Sviluppo > Proxy API nella barra di navigazione a sinistra.
  2. Fai clic su + Proxy.
    Pulsante Crea proxy
  3. Nella procedura guidata Crea un proxy, seleziona Inverti proxy (più comune). e fai clic su Avanti.
  4. Configura il proxy con quanto segue:
    In questo campo fai questo
    Nome proxy Inserisci: helloworld_oauth2
    Percorso di base del progetto

    Cambia in: /hellooauth2

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

    API esistente

    Inserisci: https://mocktarget.apigee.net/ip

    Definisce l'URL di destinazione che Apigee Edge richiama in una richiesta all'API proxy.

    Descrizione Inserisci: hello world protected by OAuth
  5. Fai clic su Avanti.
  6. Nella pagina Norme comuni:
    In questo campo fai questo
    Sicurezza: autorizzazione Seleziona OAuth 2.0
  7. Fai clic su Avanti.
  8. Nella pagina Host virtuali, fai clic su Avanti.
  9. Nella pagina Crea, assicurati che sia selezionato l'ambiente di test e fai clic su Crea ed esegui il deployment.
  10. Nella pagina Riepilogo, viene confermato che il nuovo proxy API sia stato creato correttamente e che il deployment del proxy API sia stato eseguito nel test completamente gestito di Google Cloud.
  11. Fai clic su Modifica proxy per visualizzare la pagina Panoramica per il proxy API.
    Tieni presente che questa volta viene eseguito automaticamente il deployment del proxy API. Fai clic sul pulsante menu a discesa per assicurarti che accanto a "test" sia presente un punto di deployment verde completamente gestito di Google Cloud.

Visualizza i criteri

Diamo un'occhiata più da vicino a ciò che hai creato.

  1. Nell'editor del proxy API, fai clic sulla scheda Sviluppo. Puoi vedere che due criteri sono stati aggiunti al flusso di richiesta del proxy API:
    • Verify OAuth v2.0 Access Token (Verifica token di accesso OAuth v2.0): controlla la chiamata API da effettuare e assicurarsi che sia presente un token OAuth valido.
    • Rimuovi autorizzazione intestazione: un criterio AssegnaMessage che rimuove il token di accesso dopo averlo controllato, in modo che non venga passato al servizio di destinazione. Se il servizio di destinazione necessitasse del token di accesso OAuth, non dovresti utilizzare queste norme).
  2. Fai clic sull'icona Verify OAuth v2.0 Access Token (Verifica token di accesso OAuth v2.0) nella visualizzazione del flusso e guarda il codice XML sottostante nel riquadro del codice.

    <OAuthV2 async="false" continueOnError="false" enabled="true" name="verify-oauth-v2-access-token">
        <DisplayName>Verify OAuth v2.0 Access Token</DisplayName>
        <Operation>VerifyAccessToken</Operation>
    </OAuthV2>
    

    Nota che <Operation> è VerifyAccessToken. La L'operazione definisce cosa deve fare il criterio. In questo caso, verrà eseguita la verifica per un token OAuth valido nella richiesta.

Aggiungi un prodotto API

Per aggiungere un prodotto API utilizzando la UI di Apigee:

  1. Seleziona Pubblica > Prodotti basati su API.
  2. Fai clic su + Prodotto API.
  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. Ad esempio, helloworld_oauth2-Product
    Nome visualizzato Nome visualizzato del prodotto API. Il nome visualizzato viene utilizzato nell'interfaccia utente e puoi modificare in qualsiasi momento. Se non specificato, verrà utilizzato il valore Name (Nome). Questo campo viene compilato automaticamente utilizzando il valore Name; puoi modificarne o eliminarne i contenuti. Il nome visualizzato può includere caratteri speciali. Ad esempio, helloworld_oauth2-Product.
    Descrizione Descrizione del prodotto API.
    Ambiente Ambienti a cui il prodotto API consentirà l'accesso. Seleziona l'ambiente in cui hai eseguito il deployment del proxy API. Ad esempio, test.
    Accesso Seleziona Pubblico.
    Approva 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. Nel campo proxy API, seleziona il proxy API appena creato.
  5. Nel campo Percorso, inserisci "/". Ignora gli altri campi.
  6. Fai clic su Salva.

Aggiungi uno sviluppatore e un'app al tuo organizzazione

Successivamente, simulerai il flusso di lavoro di uno sviluppatore che si registra per utilizzare le tue API. Idealmente, gli sviluppatori dovrebbero registrare se stessi e le loro app tramite il tuo portale per gli sviluppatori. In questo passaggio, tuttavia, dovrai aggiungere uno sviluppatore e un'app come amministratore.

Uno sviluppatore avrà una o più app che chiamano le tue API e a ogni app viene assegnato un chiave e segreto utente. Questa chiave/segreto per app fornisce inoltre al provider API un controllo più granulare sull'accesso alle tue API e report di analisi più granulari sull'API poiché Edge sa quale sviluppatore e app appartengono a un determinato token OAuth.

Crea uno sviluppatore

Creiamo uno sviluppatore di nome Nigel Tufnel.

  1. Seleziona Pubblica > Sviluppatori nel menu.
  2. Fai clic su + Sviluppatore.
  3. Inserisci quanto segue nella finestra Nuovo sviluppatore:
    In questo campo Invio
    Nome Nigel
    Cognome Tufnel
    Nome utente nigel
    Email nigel@example.com
  4. Fai clic su Crea.

Registra un'app

Creiamo un'app per Nigel.

  1. Seleziona Pubblica > App.
  2. Fai clic su + App.
  3. Inserisci quanto segue nella finestra Nuova app:
    In questo campo fai questo
    Nome e Nome visualizzato Inserisci: nigel_app
    Developer Fai clic su Sviluppatore e seleziona: Nigel Tufnel (nigel@example.com)
    Callback URL (URL di callback) e Notes Lascia vuoto
  4. In Prodotti, fai clic su Aggiungi prodotto.
  5. Seleziona helloworld_oauth2-Product.
  6. Fai clic su Crea.

Ottieni il consumer key e consumer secret

Ora riceverai la chiave utente e il segreto utente che verranno scambiati con un OAuth token di accesso.

  1. Assicurati che venga visualizzata la pagina nigel_app. In caso contrario, nella pagina App (Pubblica > App), fai clic su nigel_app.
  2. Nella pagina nigel_app, fai clic su Mostra nella sezione Chiave. e Secret. Nota che la chiave/segreta sono associata a "helloworld_oauth2-Product" creato automaticamente in precedenza.

  3. Seleziona e copia la chiave e il secret. Incollali in modo temporaneo di testo. Le utilizzerai in un passaggio successivo, durante la quale chiami il proxy API che scambia queste credenziali con un token di accesso OAuth.

Prova a chiamare l'API per ottenere il tuo indirizzo IP (errore!)

Solo per i calci, prova a chiamare il proxy API protetto che dovrebbe restituire il tuo indirizzo IP . Esegui questo comando cURL in una finestra del terminale, sostituendo Edge nome dell'organizzazione. La parola test nell'URL è tuo dell'organizzazione, quello in cui hai eseguito il deployment dei proxy. Il percorso di base del proxy è /hellooauth2, lo stesso percorso di base specificato al momento della creazione del proxy. Nota che stai Non trasmettere un token di accesso OAuth nella chiamata.

curl https://ORG_NAME-test.apigee.net/hellooauth2

Poiché il proxy API ha il criterio Verify OAuth v2.0 Access Token (Verifica token di accesso OAuth v2.0) verificando la presenza di un token OAuth valido nella richiesta, la chiamata non dovrebbe riuscire con il seguente codice messaggio:

{"fault":{"faultstring":"Invalid access token","detail":{"errorcode":"oauth.v2.InvalidAccessToken"}}}

In questo caso, l'errore è positivo. Significa che il tuo proxy API è molto più sicuro. Solo attendibile le app con un token di accesso OAuth valido possono chiamare questa API.

Richiedere un token di accesso OAuth

Ora vediamo il grande vantaggio. Stai per usare la chiave e il segreto che ti copiati e incollati in un file di testo per scambiarli con un token di accesso OAuth. Sei ora effettuerai una chiamata API al proxy API campione che hai importato, oauth, genererà un token di accesso all'API.

Utilizzando la chiave e il secret, effettua la seguente chiamata cURL (tieni presente che il protocollo https), sostituendo il nome dell'organizzazione Edge, la chiave e secret dove indicato:

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" \
"https://ORG_NAME-test.apigee.net/oauth/client_credential/accesstoken?grant_type=client_credentials" \
-d "client_id=CLIENT_KEY&client_secret=CLIENT_SECRET"

Tieni presente che se utilizzi un client come Postman per effettuare la chiamata, client_id e client_secret si trovano nel corpo dell' e deve essere x-www-form-urlencoded.

Dovresti ricevere una risposta simile alla seguente:

{
  "issued_at" : "1466025769306",
  "application_name" : "716bbe61-f14a-4d85-9b56-a62ff8e0d347",
  "scope" : "",
  "status" : "approved",
  "api_product_list" : "[helloworld_oauth2-Product]",
  "expires_in" : "3599", //--in seconds
  "developer.email" : "nigel@example.com",
  "token_type" : "BearerToken",
  "client_id" : "xNnREu1DNGfiwzQZ5HUN8IAUwZSW1GZW",
  "access_token" : "GTPY9VUHCqKVMRB0cHxnmAp0RXc0",
  "organization_name" : "myOrg",
  "refresh_token_expires_in" : "0", //--in seconds
  "refresh_count" : "0"
}

Hai ricevuto il tuo token di accesso OAuth. Copia il valore access_token (senza le virgolette) e incollalo nel tuo file di testo. Potrai usarlo a breve.

Cosa è successo?

Ricordi in precedenza che quando esaminavi il flusso condizionale nella oauth, quello che indica se l'URI della risorsa è /accesstoken e il verbo di richiesta è POST, per eseguire il GenerateAccessTokenClient criterio OAuth che genera un token di accesso? Il tuo cURL soddisfaceva queste condizioni, pertanto è stato eseguito il criterio OAuth. Ha verificato la tua chiave utente e segreto utente e li ha scambiati con un token OAuth che scade dopo un'ora.

Chiamata all'API con un token di accesso (operazione riuscita)

Ora che disponi di un token di accesso, puoi utilizzarlo per chiamare il proxy API. Fai in modo che dopo la chiamata cURL. Sostituisci il nome dell'organizzazione Edge e il token di accesso.

curl https://ORG_NAME-test.apigee.net/hellooauth2 -H "Authorization: Bearer TOKEN"

A questo punto dovresti ricevere una chiamata al proxy API che restituisce il tuo indirizzo IP. Ad esempio:

{"ip":"::ffff:192.168.14.136"}

Puoi ripetere la chiamata API per quasi un'ora, dopodiché il token di accesso scadono. Per effettuare la chiamata dopo un'ora, devi generare un nuovo token di accesso utilizzando passaggi precedenti.

Complimenti Hai creato un proxy API e lo hai protetto richiedendo l'invio di una richiesta Il token di accesso OAuth deve essere incluso nella chiamata.

Argomenti correlati