Nota

Integra streaming OCI con altri metodi di autorizzazione mediante OCI API Gateway

Introduzione

Spesso abbiamo bisogno delle nostre applicazioni per utilizzare i servizi REST Oracle Cloud Infrastructure (OCI). Esistono diversi modi per garantire la sicurezza tra i componenti, garantendo che l'applicazione possa eseguire l'autenticazione in modo sicuro al servizio backend.

Nella maggior parte dei casi, questo task è nativo all'interno di Oracle Cloud, in quanto esistono diversi modi per proteggere la rete e l'accesso ai servizi esistenti. Solo alcune impostazioni e hai finito. Tuttavia, ci sono casi in cui l'applicazione può offrire ulteriori requisiti di sicurezza e connettività. Il caso d'uso di questa esercitazione soddisfa un'esigenza molto comune nello scenario ibrido o multicloud (on-premise connesso a Oracle Cloud o Oracle Cloud connesso a un altro cloud).

Presentiamo il seguente scenario:

Pertanto, il tutorial fornisce la seguente soluzione:

Nota: il codice Funzioni OCI può essere scaricato qui: OAuthOCIService-fn.zip.

Obiettivi

Prerequisiti

Task 1: configurare OAuth2 con Oracle Identity Cloud Service

  1. Ottenere i parametri del gateway API OCI: iniziamo a configurare il meccanismo OAuth2. È necessario integrare l'istanza del gateway API OCI in un provider di identità configurando Oracle Identity Cloud Service da Oracle Cloud come provider di identità.

    • Andare all'istanza del gateway API OCI e copiare il nome host. Queste informazioni verranno utilizzate nella configurazione del server delle risorse di Oracle Identity Cloud Service nel passo successivo.

      img.png

  2. Crea un'applicazione risorsa: è necessario creare un responsabile autorizzazioni OAuth2 per l'applicazione. Possiamo farlo con Oracle Identity Cloud Service in Oracle Cloud.

    1. Nella console OCI, andare a Identità e sicurezza e selezionare Federazione.

      img.png

    2. Fare clic su OracleIdentityCloudSevice.

      img.png

    3. Fare clic sul collegamento Console di Oracle Identity Cloud Service per l'istanza di Oracle Identity Cloud Service.

      img.png

    4. Creeremo due applicazioni. Fare clic su Applicazioni e servizi.

      img.png

    5. Nelle applicazioni, fare clic su Aggiungi.

      img.png

    6. Selezionare Applicazione riservata per avviare la configurazione del server delle risorse.

      img.png

    7. Verrà configurata la prima applicazione. Immettere un Nome nell'applicazione del server delle risorse e fare clic su Successivo.

      img.png

    8. Fare clic su Salta per dopo. È necessario configurare solo la risorsa.

      img.png

    9. Immettere il nome host del gateway API ottenuto nel passo 1.

      img.png

    10. Fare clic su Aggiungi ambito e immettere le informazioni sull'ambito.

      img.png

    11. Rivedere le informazioni sull'ambito, fare clic su Avanti due volte e fare clic su Fine.

      img.png

    12. Fare clic su Attiva per attivare l'applicazione.

      img.png

  3. Creazione di un'applicazione client.

    1. In Applicazioni, fare clic su Aggiungi.

      img.png

    2. Selezionare Applicazione riservata per avviare la configurazione del server delle risorse.

      img.png

    3. Immettere un nome per l'applicazione e fare clic su Successivo.

      img_1.png

    4. Selezionare Configure the application as a client now per abilitare le configurazioni per l'applicazione client. Selezionare Credenziali client, Asserzione JWT e Per conto di.

      img.png

      Nota: se si desidera convalidare OAuth2 nel codice funzione, è necessario impostare il flag Introspeziona. Verrà abilitato il servizio API REST Oracle Identity Cloud Service /oauth2/v1/introspect.

      img_10.png

    5. Scorrere verso il basso e fare clic su Aggiungi ambito.

      img.png

    6. Trovare l'applicazione risorsa creata prima di (oauth_resource_server) e fare clic su Aggiungi.

      img.png

    7. È possibile visualizzare l'ambito aggiunto all'applicazione. Fare clic su Avanti.

      img.png

      Nota: prendere nota del valore dell'ambito. Sarà necessario utilizzarlo per richiedere un token.

    8. Saltare le finestre Risorse e Criterio livello Web. In Autorizzazione, selezionare Applica privilegi come autorizzazione e fare clic su Fine.

      img.png

    9. Prendere nota delle informazioni Client ID e Client Secret. Avrai bisogno di questo per ottenere il tuo token.

      img.png

    10. Fare clic su Attiva per attivare l'applicazione e il responsabile autorizzazioni OAuth2 è pronto per il test.

      img_1.png

  4. Ottieni un token: ora è possibile eseguire il test del responsabile autorizzazioni OAuth2 per ottenere il token.

    1. Comporre l'URL per il responsabile autorizzazioni. Per ottenere questo risultato, ottenere l'URL di Oracle Identity Cloud Service nel browser. Nell'URL di Oracle Identity Cloud Service è possibile visualizzare uno dei seguenti elementi: https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/ui/v1/adminconsole.

    2. Sarà necessario il collegamento URL fino a oraclecloud.com, che è l'endpoint radice. Ad esempio, https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com.

    3. È necessario aggiungere il percorso di autenticazione oAuth. Questo URL verrà eseguito come richiesta REST POST. Ad esempio, https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token. È necessario immettere alcuni parametri per richiedere il token.

    4. Immettere le credenziali come Autenticazione di base, ID client e Segreto client.

      img.png

    5. Nel contenuto del corpo immettere i valori grant_type e ambito. Tenere presente che l'ambito è stato acquisito nella configurazione di Oracle Identity Cloud Service.

      img.png

    6. Fare clic su Invia ed eseguire la richiesta POST e visualizzare il token.

      img_2.png

Task 2: configurare le funzioni OCI per chiamare l'API SDK OCI

  1. Comprendere le funzioni OCI e il gateway API OCI: è una best practice per esporre i tuoi servizi tramite un gateway API OCI. È possibile eseguire l'autenticazione ignorando le credenziali dal gateway API OCI ai servizi backend, ma se l'autenticazione backend non era il metodo appropriato per l'applicazione client, è possibile eseguire alcune configurazioni a livello di gateway API OCI.

    In questo passo, analizziamo in che modo OCI API Gateway può aiutarci a integrare l'autenticazione OAuth2 e la richiesta per qualsiasi servizio OCI, come lo streaming OCI tramite le funzioni OCI.

    Le funzioni OCI possono eseguire il job per produrre l'autenticazione/autorizzazione corretta e passare al servizio OCI senza dover passare le credenziali utente o le chiavi private alle applicazioni consumer. Alcuni servizi nel servizio OCI non possono eseguire l'autenticazione utilizzando il metodo OAuth2, quindi possiamo farlo con OCI Functions. Per creare e distribuire le funzioni OCI, vedere Avvio rapido delle funzioni OCI.

    In questo esempio, il servizio di streaming OCI può eseguire l'autenticazione tramite la chiave privata OCI in IAM OCI tramite il metodo draft-cavage-http-signatures-08 e i consumer possono eseguire l'autenticazione tramite OAuth2.

  2. Comprendere il codice: questo codice verrà utilizzato con il gateway API OCI. Nella distribuzione API, l'endpoint di streaming OCI verrà configurato nel gateway API OCI e verrà passato come parametro di autorizzazione HEADER. Pertanto, puoi utilizzare questa funzione per molti servizi in ogni distribuzione del gateway API OCI di cui hai bisogno.

    img_12.png

    • Questa funzione in Python creerà una data e un'ora nel formato per l'autenticazione. La data e l'ora devono essere generate una sola volta e utilizzate in due punti. All'intestazione Date nella richiesta di streaming OCI e nell'intestazione HEADER crittografato Signature.

      img_1.png

    • Funzione per la cifratura della firma. L'assembly consiste nell'utilizzare la chiave privata dell'utente IAM OCI con SHA-256 e quindi in base64.

      img_2.png

    • La cifratura della firma verrà utilizzata nell'intestazione completa della autorizzazione.

      img_3.png

    • Questo è il codice di convalida del token Oracle Identity Cloud Service OAUTH2. È necessario configurare il file config.json con i parametri dell'applicazione Oracle Identity Cloud Service.

      img_13.png

    • Questo è l'inizio della funzione e inizializza alcune informazioni dalla sicurezza IAM OCI e dalle variabili di streaming OCI create per questa distribuzione API (streaming_host e oci_region).

      img_4.png

    • Questa è la parte principale di questa funzione, ci sono due parti.

      Nella prima parte viene ottenuto il token passato nella richiesta del gateway API. Successivamente, viene chiamata la funzione auth_idcs() per convalidare il token in Oracle Identity Cloud Service. Prima di generare la stringa draft-cavage-http-signatures-08, convalidare il token Oracle Identity Cloud Service. Se non si tratta di un token valido, la risposta restituirà un errore 401 non autorizzato.

      Nella seconda parte, creeremo due valori. La data (d) con il formato data verrà utilizzata nella creazione della firma (a). I rdata creeranno la risposta per la funzione con i valori di autorizzazione e data che verranno utilizzati dal gateway API OCI per l'autenticazione in OCI Streaming.

      img_15.png

    • Qui è possibile generare un log in OCI Observability e questo passo è facoltativo. Immettere l'OCID (Oracle Cloud Identifier) per il log. È necessario creare un log personalizzato in precedenza.

      Nota: per creare un log personalizzato in OCI Observability, vedere Use OCI API Gateway, Functions and Observability to Validate JSON Content and Monitor API Headers and Body.

      img_6.png

    • Questo è il passo finale e restituisce un'autenticazione valida.

      img_7.png

    Si tratta delle librerie requirements.txt che dovranno essere caricate in questa funzione (fn).

    requirements.txt
    ---------------------
    fdk>=0.1.54
    requests
    oci
    cryptography
    six
    PyJWT
    py3_lru_cache
    simplejson
    

    Questo è il file config.json.

    img_14.png

    Questo è il file di configurazione OCI. È possibile copiare questo file dall'installazione CLI OCI, ma è importante modificare la sezione key_file e rimuovere il percorso dell'installazione CLI OCI. Verrà utilizzato nel codice Python per generare la stringa crittografica draft-cavage-http-signatures-08.

    img_16.png

    Prima di distribuire la funzione, creare due variabili e immettere i valori OCID di streaming OCI e area OCI in questo modo.

    fn config app <function-app> streaming_host ocid1.stream.oc1.iad.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqhgw275qp7a
    fn config app <function-app> oci_region us-ashburn-1
    

    Distribuire la funzione e configurarla nel gateway API OCI.

Task 3: configurare una distribuzione del gateway API

Nota: sviluppare una funzione e chiamarla in OCI API Gateway. Vedere Funzioni OCI: Convalida una chiave API con API Gateway.

  1. Configurare il servizio OCI API Gateway. In questo esempio verrà configurato un servizio di streaming OCI. Nelle informazioni di base, immettere il prefisso del percorso come /20180418/streams/ più l'OCID dell'istanza di streaming.

    Ad esempio: /20180418/streams/ocid1.stream.oc1.iad.xxxxxxxxxxxxxxxxxxxxxxxxxxxx

    img.png

  2. In Autenticazione, selezionare Autenticazione singola e Funzione autore. Selezionare il compartimento e la funzione Oracle come get-authorization.

    img.png

  3. Configurare i parametri HEADER della richiesta.

    Header Parameter 1
    Context table=request.headers
    Header name=Date
    Argument name=Date
    
    Header Parameter 2
    Context table=request.headers
    Header name=token
    Argument name=token
    
  4. Per configurare HEADER per i parametri di Oracle Identity Cloud Service, è necessario fare clic su Mostra criteri di richiesta di instradamento.

    img.png

  5. Nelle trasformazioni HEADER, fare clic su Modifica e immettere Comportamento in Overwrite in entrambi i parametri, Nome intestazione rispettivamente Authorization, Date e Valori rispettivamente ${request.auth[authorization]} e ${request.auth[date]}. I valori ${request.auth[authorization]} e ${request.auth[date]} sono i valori restituiti dal codice funzione Python e verranno passati come HEADER per il servizio backend.

    img.png

Task 4: configurare il gruppo e i criteri OCI

Per configurare i criteri per lo streaming OCI, vedere Policy di streaming OCI ed è possibile utilizzare i criteri comuni, vedere Policy comuni.

Task 5: eseguire il test dell'API

È possibile simulare la richiesta dell'applicazione OAuth2 per il servizio di distribuzione dei modelli in OCI Streaming.

  1. Ottenere il token e passare l'ID client e il segreto client al provider di Oracle Identity Cloud Service.

    Verb: POST
    URL: https://idcs-xxxxxxxxxxxxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token
    BODY (x-www-form-urlencoded):
    scope: xxxxxxxxxxxxxxxxxxx.apigateway.us-ashburn-1.oci.customer-oci.com/super-scope
    grant_type: client_credentials
    HEADER
    Authorization: clientID:clientSecret\*
    
    - convert your clientID:clientSecret to a base64 value
    

    img_2.png

  2. Eseguire il test della richiesta in OCI API Gateway. Immettere l'endpoint di distribuzione del gateway API e selezionare POST per la richiesta REST. È necessario dichiarare sei HEADER nel corpo della richiesta.

    Content-Type: application/json
    access-control-allow-origin: *
    access-control-allow-method: POST,PUT,GET,HEAD,DELETE,OPTIONS
    access-control-allow-credentials: true
    Date: put an actual date in this format -> Thu, 21 Dec 2023 13:53:59 GMT
    token: put your <access_token> here*
    
    * Remember that your token have 1 hour duration.
    

    img_9.png

    Ed ecco il risultato.

    img_11.png

    Nei log è possibile visualizzare i payload per la logica di autorizzazione del codice personalizzato.

    img_8.png

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.