Nota

Personalizza la tua sicurezza API utilizzando OCI API Gateway e OCI Functions

Introduzione

Scopri la perfetta sinergia tra le funzioni di Oracle Cloud Infrastructure (OCI) e il gateway API OCI per implementare un metodo di autenticazione personalizzato per le tue API e come le funzioni possono recuperare argomenti dal gateway API.

OCI API Gateway

Il servizio OCI API Gateway ti consente di pubblicare le API con endpoint privati accessibili dall'interno della tua rete e che puoi esporre con indirizzi IP pubblici se desideri che accettino il traffico Internet. Gli endpoint supportano la convalida delle API, la trasformazione delle richieste e delle risposte, il CORS, l'autenticazione e l'autorizzazione e la limitazione delle richieste.

Il servizio gateway API OCI consente di creare uno o più gateway API in una subnet regionale per elaborare il traffico dai client API e instradarlo ai servizi backend. Puoi utilizzare un singolo gateway API per collegare più servizi backend (come OCI Load Balancer, istanze di OCI Compute e OCI Functions) in un unico endpoint API consolidato.

Funzioni OCI

OCI Functions è una piattaforma completamente gestita, multi-tenant, altamente scalabile, on-demand e Functions-as-a-Service. Si basa su OCI di livello aziendale e si basa sul motore open source Fn Project. Utilizza OCI Functions quando vuoi concentrarti sulla scrittura di codice per soddisfare le esigenze aziendali.

Nota:

Obiettivo

Prerequisiti

Task 1: Impostazione dei gruppi dinamici

Eseguire il login a OCI Console, accedere al dominio, fare clic su Gruppi dinamici e creare gruppi con le informazioni riportate di seguito.

Task 2: Creare criteri

Andare a OCI Console, andare a Criteri e creare criteri con le informazioni riportate di seguito.

Task 3: Creare un OCI Container Registry

  1. Andare alla console OCI, andare a Servizi sviluppatore, Container e artifact, selezionare Container di registro e fare clic su Crea repository per creare un repository privato per l'immagine della funzione.

    • Nome repository: immettere functions/authorizationfunctionjava.

      creazione repository

  2. Controllare i repository e prendere nota dello spazio di nomi.

    spazio di nomi repository

  3. Aprire OCI Cloud Shell in cui installare l'interfaccia CLI OCI e Docker e procedere con il login al registro. Controlla qual è l'URL corretto per la tua regione. In questa esercitazione viene utilizzato Brasile orientale (San Paolo) dove l'URL del registro è gru.ocir.io.

    docker login -u 'yourRepositoryNamespace/oracleidentitycloudservice/yourUserLogin' gru.ocir.io
    Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
    

    login docker

Task 4: creare funzioni OCI Java come funzione del responsabile autorizzazioni

Nota: assicurarsi di selezionare la subnet privata.

  1. Andare a OCI Console, andare a Servizi per sviluppatori, Funzioni, Applicazioni e fare clic su Crea applicazione.

    crea applicazione

  2. Avviare OCI Cloud Shell in cui sono installati Docker, l'interfaccia CLI OCI e l'interfaccia CLI Fn Project ed eseguire i comandi riportati di seguito per inizializzare la funzione.

    Nota: se sono stati eseguiti i task, il comando di login Docker avrebbe dovuto essere già stato eseguito. In caso contrario, procedere con il passo di login Docker nel task 3.

    Andare alla console OCI, andare a Servizi per sviluppatori, Funzioni, Applicazioni, selezionare l'applicazione e fare clic su Introduzione. Eseguire i comandi seguenti.

    fn list context
    fn use context sa-saopaulo-1
    fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID
    fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/functions
    

    Nota: in questa esercitazione viene utilizzata l'area Est del Brasile (San Paolo). Se si utilizza un'area diversa, è necessario modificare la posizione del registro.

  3. Scaricare il codice di esempio della funzione Java da qui: authorizationfunctionjava.tar, caricarlo in OCI Cloud Shell e quindi estrarre il file.

    # check your file is there
    ls -lrt
    # create your directory
    mkdir authorizationfunctionjava
    # unzip the file
    tar -xvf authorizationfunctionjava.tar -C authorizationfunctionjava
    cd authorizationfunctionjava/
    

    decomprimi file tar

    Questo semplice codice Java riceve due parametri token e customer. Recupera inoltre un terzo parametro da una variabile di ambiente di sistema definita nella configurazione della funzione.

    Nota: assicurarsi che i nomi dei parametri nel metodo handleRequest(input input) siano uguali ai nomi utilizzati nella configurazione del gateway API. Ciò garantisce che il gateway API passi correttamente i parametri alla funzione del responsabile autorizzazioni.

    codice java

    Questo snippet di codice convalida l'input e restituisce una risposta specifica.

    convalida

    result

    Per ulteriori informazioni sul formato e sui parametri di risposta richiesti, vedere Creazione di una funzione del responsabile autorizzazioni.

  4. Eseguire il comando seguente per creare il codice e distribuire la funzione.

    cd authorizationfunctionjava/
    ls -lart
    fn deploy --app chafikFunctions
    

    creare

    creare

  5. Crea diverse configurazioni per memorizzare le credenziali del cliente per il test della convalida della funzione.

    Nota: queste variabili di configurazione vengono utilizzate come variabili di ambiente di sistema all'interno del codice di esempio Java fornito in questa esercitazione. È tuttavia possibile modificare il codice funzione per utilizzare un approccio alternativo, ad esempio Fn RuntimeContext. Per ulteriori informazioni, vedere Utilizzo di Fn RuntimeContext con funzioni.

    Nome/chiave segreto Valore
    FN_AAA_KEY 123.456
    FN_BBB_KEY 898.989
    FN_ORACLE_KEY ABCD1234
  6. È possibile configurare queste impostazioni tramite OCI Console passando a Servizi per sviluppatori. In Funzioni, fare clic su Applicazioni, selezionare l'applicazione, quindi selezionare la funzione. Nella pagina dei dettagli della funzione, fare clic su Configurazione.

    configurazione

    Oppure

    Eseguire i comandi fn.

    fn config function --help
    
    MANAGEMENT COMMAND
    fn config function - Store a configuration key for this function
    
    USAGE
    fn [global options] config function <app-name> <function-name> <key> <value>
    
    DESCRIPTION
    This command sets the configuration of a specific function for an application.
    
    fn config function chafikFunctions authorizationfunctionjava FN_ORACLE_KEY ABCD1234
    
  7. Eseguire il comando seguente per richiamare la funzione.

    # Invoke the function to check if it's working as expected
    echo -n '{"data" : {"customer":"ORACLE", "token": "ABCD1234"}}' | fn invoke chafikFunctions authorizationfunctionjava
    

    Nota: il richiamo iniziale potrebbe richiedere fino a un minuto per riscaldare la funzione. Controllare la configurazione per eventuali impostazioni aggiuntive. Per ulteriori informazioni, vedere Riduzione della latenza iniziale mediante l'accesso concorrente con provisioning eseguito.

    Eseguire il test con dati validi e non validi per verificare le risposte della funzione.

    richiama funzione

Task 5: creare un gateway API OCI e un'API Mock per utilizzare la funzione Authorizer

Nota: assicurarsi di selezionare la subnet pubblica.

  1. Andare a OCI Console, accedere a Servizi per sviluppatori, Gestione API, Gateway e fare clic su Crea gateway.

    crea applicazione

  2. Andare alla pagina Dettagli gateway e annotare il nome host.

    nome host gateway

  3. Crea una distribuzione nel gateway API. In Informazioni di base, immettere le seguenti informazioni.

    • Prefisso percorso: immettere /authFunction.

    Nota: il nome host e il prefisso percorso del gateway API verranno utilizzati per formare l'endpoint API.

    informazioni di base

  4. In Autenticazione, immettere le informazioni riportate di seguito.

    • Selezionare Autenticazione singola.

    • Selezionare Funzione autorezer.

    • Applicazione Oracle Functions: selezionare l'applicazione creata nel task 4.

    • Funzione Oracle: selezionare la funzione creata nel task 4.

    • Selezionare Funzione del provider di autorizzazioni per più argomenti.

    • Argomenti della funzione: immettere le informazioni riportate di seguito.

      Tabella contesto Nome intestazione Nome argomento
      request.headers cliente cliente
      request.headers token token

    Nota Il nome intestazione fa riferimento alle informazioni incluse nell'intestazione della richiesta quando si richiama l'endpoint API. Il nome dell'argomento è il nome del parametro inviato alla funzione del responsabile autorizzazioni. Fare riferimento al codice Java nel task 4.3.

    autenticazione singola

    argomenti della funzione

  5. In Cicli, creare un singolo instradamento per un test mock con le informazioni riportate di seguito.

    • Percorso: immettere /mock.
    • Metodi: selezionare GET.
    • Opzione backend: selezionare Modifica backend singolo aggiunto.
    • Tipo backend: selezionare Risposta stock.

    instradamento

  6. In Cicli definire la risposta di spostamento e fare clic su Avanti.

    • Codice stato: immettere 200.
    • Corpo: immettere {"mensagem" : "ok"}.
    • Nome intestazione: selezionare Tipo di contenuto.
    • Valore intestazione: selezionare application/json; charset=UTF-8.

    mock

  7. In Rivedi, verificare la configurazione e fare clic su Salva modifiche per completare la creazione della distribuzione.

  8. Eseguire il comando curl per eseguire il test dell'interfaccia API.

    # Invoke using <Verb Defined in Route> with the endpoint like: <API Gateway Hostname> + <Deployment Path Prefix> + <Route Path>
    # Send parameters, such as customer and token, in the Header with values configured in Task 4 - Step 5
    curl -i -H "customer: AAA" -H "token: 123456" -X GET https://yourapigatewayhosta.your-region.oci.customer-oci.com/authFunction/mock
    

    richiama funzione

    Se si richiama con informazioni non valide, la risposta sarà HTTP/1.1 401 Non autorizzato.

    401 stato

Task 6: utilizzare OCI API Gateway per recuperare parametri e ambito dalle funzioni del responsabile autorizzazioni

Nota Fare riferimento al codice Java scaricato nel task 4. Questo task spiega come utilizzare result.context e result.scope all'interno del gateway API.

  1. Recupera i valori di contesto dalle funzioni del responsabile autorizzazioni.

    variabile di contesto

    Si consideri uno scenario in cui è necessario recuperare le informazioni dalla funzione del responsabile autorizzazioni e utilizzarle all'interno del gateway API. Ad esempio, è possibile utilizzare un token di autorizzazione per richiamare un servizio backend.

    Nota: in questa dimostrazione del laboratorio le informazioni vengono restituite nell'intestazione della risposta.

  2. Andare a OCI Console, andare a Servizi per sviluppatori, Gestione API, Gateway e selezionare il gateway. Fare clic su Distribuzioni, selezionare la distribuzione creata nel task 5 e fare clic su Modifica.

    modifica distribuzione

  3. Passare a Cicli di instradamento e fare clic su Mostra criteri di risposta instradamento.

    risposta percorso

  4. In Criteri di risposta, in Trasformazioni intestazione, fare clic su Aggiungi per continuare.

    Aggiungi, pulsante

  5. Nella pagina Trasformazioni dell'intestazione della risposta configurare il gateway API come mostrato nell'immagine riportata di seguito e fare clic su Applica modifiche.

    Entrambi i parametri del codice Java verranno inclusi nelle intestazioni di risposta API.

    • Nome intestazione: questo campo specifica il nome dell'attributo di intestazione nella risposta API.
    • Valori: questo campo specifica il nome dell'attributo recuperato dalla funzione del responsabile autorizzazioni.

    Utilizzare il formato riportato di seguito:

    ${request.auth[attributeNameFromAuthorizerFunction]}
    
    #examples
    ${request.auth[valor01]}
    ${request.auth[valor02]}
    

    impostazione intestazione

  6. Rivedere l'impostazione della risposta intestazione. Fare clic su Successivo per controllare le modifiche e fare clic su Salva modifiche per applicarle.

    impostazione intestazione assegno

  7. Eseguire il test dell'API ed esaminare le intestazioni delle risposte.

    risposta intestazione

  8. Chiariamo come utilizzare i valori di ambito di una funzione del responsabile autorizzazioni per migliorare la sicurezza.

    Nota: nel contesto dell'autorizzazione, scope fa riferimento alle autorizzazioni o ai livelli di accesso specifici concessi a un utente o a un'applicazione.

    variabile di contesto

    La funzione del responsabile autorizzazioni restituisce tutti gli ambiti disponibili (nel nostro esempio, questo è non modificabile) per questa chiamata API.

    Per alcuni cicli nella distribuzione del gateway API, è possibile consentire solo ambiti specifici per migliorare la sicurezza.

    Andare a OCI Console, andare a Servizi per sviluppatori, Gestione API, Gateway e selezionare il gateway. Fare clic su Distribuzioni, selezionare la distribuzione creata nel task 5 e fare clic su Modifica.

    modifica distribuzione

  9. Passare a Cicli e fare clic su Mostra criteri richiesta di instradamento.

    richiesta di instradamento

  10. In Criteri di richiesta, in Autorizzazione, fare clic su Modifica.

    modifica pulsante

  11. In Criterio di autorizzazione, selezionare Qualsiasi come Tipo di autorizzazione, aggiungere tutto l'ambito consentito restituito dalla funzione del responsabile autorizzazioni e fare clic su Applica modifiche.

    criterio di autorizzazione

  12. In Revisione rivedere le modifiche, fare clic su Avanti e quindi su Salva modifiche per applicare le modifiche.

    criterio di autorizzazione

  13. Eseguire il test dell'API e verificare che funzioni. Gli ambiti vengono restituiti dalla funzione del responsabile autorizzazioni.

    test riuscito

  14. Modificare il gateway API per utilizzare un ambito non restituito dalla funzione del responsabile autorizzazioni.

    Rivedere le modifiche, fare clic su Avanti, quindi su Salva modifiche per applicare le modifiche.

    ambito non riuscito

  15. Eseguire il test dell'API e verificare il risultato.

    criterio di autorizzazione

    La risposta sarà uno stato http 404 Non trovato.

    Verificare che le funzioni del responsabile autorizzazioni funzionino correttamente, poiché vengono restituite entrambe le intestazioni. Tuttavia, il backend di instradamento non riesce a causa della convalida dell'autorizzazione dell'ambito nei criteri di richiesta.

Conferme

Altre risorse di apprendimento

Esplora altri laboratori su docs.oracle.com/learn o accedi a più contenuti gratuiti sulla formazione su Oracle Learning YouTube channel. Inoltre, visita education.oracle.com/learning-explorer per diventare un Oracle Learning Explorer.

Per la documentazione del prodotto, visita l'Oracle Help Center.