Configurare le applicazioni in Oracle Identity Cloud Service

Per garantire il corretto funzionamento dell'autenticazione, è necessario utilizzare la stessa istanza di Oracle Identity Cloud Service che protegge l'applicazione Oracle Fusion Applications Cloud Service e Oracle PaaS ( Oracle Visual Builder ) o HTML5 personalizzata. In Oracle Identity Cloud Service è necessario creare un'applicazione da utilizzare per l'autenticazione del client.

In questo scenario è necessario separare le materie di Oracle Functions più Oracle API Gateway dall'interazione tra le entità di Oracle Functions e Oracle Fusion Applications Cloud Service, proteggendo entrambe le entità utilizzando Oracle Identity Cloud Service come entità separate anziché utilizzare la stessa applicazione Oracle Identity Cloud Service per entrambe.

In genere, le applicazioni di estensione Oracle SaaS scritte dai clienti Oracle eseguono alcune logiche complesse. Ad esempio, uno scenario comune consiste nel recuperare i dati da Oracle Fusion Applications Cloud Service, elaborarli in qualche modo ed eseguire il push dei dati in Oracle Fusion Applications Cloud Service in un altro target, ad esempio un database.

Di conseguenza, è presente un'architettura con due applicazioni Oracle Identity Cloud Service:

  • Un'applicazione che protegge Oracle Functions come risorsa e come client sicuro di Oracle Fusion Applications Cloud Service.
  • Un'applicazione che protegge l'istanza di Oracle Fusion Applications Cloud Service come risorsa.

Le istruzioni fornite in questo articolo guida l'utente attraverso il processo di creazione e configurazione della prima applicazione per proteggere Oracle Functions. La seconda applicazione deve esistere già: è necessario creare e configurare un'applicazione per consentire la federazione tra Oracle Fusion Applications Cloud Service e Oracle PaaS.

Questa impostazione consente di configurare regole o criteri diversi per accedere alle funzioni rispetto a tali regole o criteri per un client sicuro al fine di raggiungere Oracle Fusion Applications Cloud Service. In questa configurazione, il token di accesso in entrata per il gateway API richiede solo l'accesso autorizzato a Oracle Functions per richiamare la funzione, ma non deve necessariamente avere le stesse autorizzazioni necessarie per accedere all'istanza di Oracle Fusion Applications Cloud Service. L'applicazione Oracle Visual Builder richiede un'applicazione Oracle Identity Cloud Service associata che genererà il token di accesso per raggiungere il gateway API. Questa applicazione Oracle Identity Cloud Service sarà il client della risorsa gateway funzioni/API.

Gli scambi di token visualizzati nel diagramma dell'architettura forniscono un layer di protezione aggiuntivo per propagare l'identità nel caso di una funzione client di una risorsa Oracle Fusion Applications Cloud Service, simile al processo di asserzione OAuth di Oracle WebLogic con Oracle Identity Cloud Service utilizzato in estensioni SaaS supportate meno recenti, come ad esempio quelle che utilizzano Oracle Java Cloud Service.

Ciò potrebbe significare che in alcuni casi d'uso l'applicazione Oracle Identity Cloud Service utilizzata per generare il token per Oracle Functions potrebbe avere solo ambiti di risorse per le funzioni ma non per Oracle Fusion Applications Cloud Service. In questo caso, Oracle Functions non potrà riutilizzare il token per richiamare Oracle Fusion Applications Cloud Service, ma è valido per raggiungere Oracle Functions. È pertanto possibile implementare flussi logici in cui alcuni utenti o funzioni non hanno accesso, mentre altre attività, in base alla logica aziendale, ai ruoli e ai privilegi utente o ad altri criteri.

In altri casi d'uso, Oracle Functions può includere codice per richiedere un token di accesso per Oracle Fusion Applications Cloud Service utilizzando i certificati e l'utente passati nella richiesta dal gateway API.

Creare un'applicazione per Oracle Functions in Oracle Identity Cloud Service

In Oracle Identity Cloud Service è necessario creare un'applicazione riservata da utilizzare per l'autenticazione del client Oracle Functions.

All'interno della stessa istanza di Oracle Identity Cloud Service federata con l'istanza di Oracle Fusion Applications Cloud Service, creare un'applicazione riservata e assicurarsi che la configurazione del client sia configurata in modo da abilitare le autorizzazioni Credenziali client, Asserzione JWT e Proprietario risorsa.

  1. Accedere a Servizi personali di Oracle Cloud, fare clic su Utenti e quindi su Console identità.
  2. Selezionare la scheda Applicazioni e fare clic su Aggiungi. Quindi fare clic su Applicazione riservata.
  3. Nella pagina Dettagli della procedura guidata Aggiungi applicazione riservata assegnare un nome alla nuova applicazione. Se lo si desidera, è possibile impostare altri valori, quali la descrizione, l'icona, le impostazioni di visualizzazione e le tag. Fare clic su Successivo.
  4. Nella pagina Client selezionare Configura questa applicazione come client.
    Nella pagina vengono visualizzate opzioni aggiuntive. Impostarli nel modo seguente:
    • Tipi di concessione consentiti: selezionare il proprietario della risorsa, le credenziali client e l'asserzione JWT.
    • Abilitare Consenti URL non HTTPS.
    • In questo caso d'uso non è necessario un URL di reindirizzamento.
    • Tipo di client: lasciare selezionata l'opzione Riservato.
  5. Nella sezione Risorse selezionare Registra risorse. Impostare il valore dell'audience principale sul nome host dell'istanza di gateway API generato nella console di Oracle Cloud Infrastructure quando è stata creata l'istanza di Gatway API.
    In Oracle Cloud Infrastructure è possibile selezionare il gateway, selezionare la scheda Informazioni gateway per visualizzare il nome host dell'istanza nella scheda.
  6. In Ambiti fare clic su per aggiungere un ambito e aggiungere un valore per l'URL di base per la distribuzione che utilizza il criterio di autorizzazione JWT del gateway API. Ad esempio, /saasextension.
    Questo ambito verrà utilizzato per consentire all'applicazione di accedere alle risorse Oracle Functions. Se necessario, è possibile aggiungere altri ambiti per risorse aggiuntive.
  7. Non è necessario concedere l'accesso alle interfacce API di amministrazione.
  8. Fare clic su Successivo per andare alla pagina Risorse, quindi fare di nuovo clic su Avanti per accedere alla pagina Autorizzazione.
  9. Nella pagina Autorizzazione, fare clic su Fine.
    La notifica di aggiunta applicazione viene visualizzata con l'ID client e il segreto client. Tenere presente questi valori per utilizzarli in seguito. Quando si chiude la notifica, l'applicazione viene visualizzata.
  10. Fare clic sul pulsante Attiva a destra del nome dell'applicazione.

Preparare ed eseguire il test dell'applicazione Oracle Identity Cloud Service

Configurare l'applicazione Oracle Identity Cloud Service Confidential per connettersi all'applicazione corrispondente all'istanza di Oracle Fusion Applications Cloud Service in uso, quindi eseguire il test dell'applicazione.

In questa procedura, configurare le risorse dell'applicazione Oracle Identity Cloud Service appena creata per aggiungere un ambito per l'applicazione Oracle Fusion Applications Cloud Service, quindi verificare che un account utente autorizzato dal sistema PaaS Oracle possa ottenere un token per l'istanza di Oracle Fusion Applications Cloud Service.
  1. Accedere a Servizi personali di Oracle Cloud, fare clic su Utenti e quindi su Console identità.
  2. Selezionare la scheda Applicazioni, quindi individuare e selezionare l'applicazione appena creata per Oracle Functions.
  3. Modificare il criterio di emissione token. Impostare Risorse autorizzate su Tutte.
  4. Aggiungere una risorsa per Oracle Applications Cloud (Fusion) con l'ambito dell'applicazione Fusion (non è necessario che sia protetta).
  5. Verificare di disporre di un account utente esistente sia in Oracle PaaS che in Oracle Fusion Applications Cloud Service con privilegi sufficienti per accedere ai dati a cui verrà eseguita una query utilizzando una chiamata API REST. Ad esempio, il ruolo di amministratore vendite potrebbe essere sufficiente.
  6. Eseguire il test dell'applicazione generando un token di accesso utilizzando queste credenziali utente. È possibile generare il token di accesso utilizzando la funzione Token di richiesta Postman specificando come ambito il valore di Destinatari principali della risorsa Dal di Oracle Identity Cloud Service Oracle Fusion Applications Cloud Service Application OAuth. Per questo test semplice, utilizzare le credenziali della password come Tipo di autorizzazione per utilizzare il nome utente come oggetto nel token generato. In un ambiente di produzione è possibile utilizzare le credenziali client in cui il client fornirà le informazioni utente. L'URL del token di accesso è formato dall'URL dell'host Oracle Identity Cloud Service e dall'aggiunta di /oauth2/v1/token. Ad esempio, https://<il cloud di identità hostname.identity.oraclecloud.com>/oauth2/v1/token.
Se si lavora in modo corretto, è necessario ricevere un token JWT come risposta, che è possibile utilizzare in un richiamo all'endpoint dell'API REST di Oracle Fusion Applications Cloud Service e ricevere lo stesso output. Ad esempio:
curl --location --request GET 'https://<your fusion instance>.<domain>.com/fscmRestApi/resources/11.13.18.05/expenses' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer <JWT_TOKEN>'
Questa query curl deve restituire i dati delle spese.

Configurare l'applicazione Oracle Functions Oracle Identity Cloud Service come client sicuro

È necessario disporre di un certificato che l'applicazione Oracle Identity Cloud Service deve utilizzare come client sicuro per effettuare richieste OAuth a Oracle Functions. Se non si dispone già di un certificato disponibile, è possibile generare un certificato con firma automatica da utilizzare durante lo sviluppo.

Lo script genSelfSignedKeypair.sh fornito può essere utilizzato per generare una chiave se non ne dispone già una. Eseguire lo script specificando i valori tenant e alias chiave. In questo esempio sono stati forniti mytenant come nome tenant e fnassertionkey come alias della chiave.

  1. Se necessario, utilizzare lo script fornito con gli esempi di codice per il playbook di questa soluzione per generare un certificato:
    $ ./genSelfSignedKeypair.sh --tenant mytenant  --keyalias fnassertionkey
    ==============================================
    Generating Self Signed Certificates in Kesytore
     
     
    General Properties:
    -------------------------------
    ==> Workdir: ./genCertsDir
    ==> Tenant Name: mytenant
    ==> Key Alias: fnassertionkey
     
    Keystore Properties:
    -------------------------------
    ==> Store Type: PKCS12
    ==> Key Algorithm: RSA
    ==> Key Size: 2048
    ==> Validity time(days): 1825
    ==> Sign Algorithm: SHA256withRSA
    ==> dname: CN=mytenant FN Assertion, O=mycompany, L=mylocation, ST=mystate, C=mycountry
     
    Passwords:
    [*] Keystore Password:
    [*] PrivateKey Password:
     
    Generate keypair in keystore ./genCertsDir/mytenant-keystore.p12 ...
    Generating 2,048 bit RSA key pair and self-signed certificate (SHA256withRSA) with a validity of 1,825 days
        for: CN=mytenant FN Assertion, O=mycompany, L=mylocation, ST=mystate, C=mycountry
    [Storing ./genCertsDir/mytenant-keystore.p12]
    Export public certificate with alias fnassertionkey from generated keystore (openssl) ...
    Certificate stored in file <./genCertsDir/mytenant-fnassertionkey-cert.pem>
    Extract Private Key in PKCS8 format from generated keystore (openssl) ...
    Self Signed certificate generated successfully
    ==============================================
    Files generated:
    ==> ./genCertsDir/mytenant-keystore.p12
    ==> ./genCertsDir/mytenant-fnassertionkey-cert.pem [Stored in Keystore]
    ==> ./genCertsDir/mytenant-fnassertionkey-pkcs8-key.pem [Stored in Keystore]
    ==============================================

    I file generati verranno utilizzati nel codice funzione e nella configurazione dell'applicazione Oracle Identity Cloud Service:

    • mytenant-keystore.p12: keystore generato da utilizzare nel codice per estrarre i certificati utilizzati per il processo di asserzione.
    • mytenant-fnassertionkey-cert.pem: certificato pubblico da utilizzare nella configurazione dell'applicazione Oracle Identity Cloud Service.

    Il terzo file pem non è necessario immediatamente, ma una versione simile verrà estratta dal keystore mytenant-keystore.p12 nel codice e viene esportato per riferimento:

    • mytenant-fnassertionkey-pkcs8-key. pem: una chiave privata in formato PKCS8
  2. Configurare l'applicazione Oracle Functions Oracle Identity Cloud Service con il tipo di client sicuro e aggiungere un certificato utilizzando l'alias della chiave del certificato. Accedere a Servizi personali di Oracle Cloud, fare clic su Utenti e quindi su Console identità.
  3. Selezionare la scheda Applicazioni e l'applicazione Oracle Identity Cloud Service creata in precedenza per l'accesso a Oracle Functions.
  4. Nella sezione Configurazione client, individuare il campo Certificato, immettere l'alias utilizzato per il certificato (nell'esempio precedente era fnassertionkey) e fare clic sul pulsante Importa per importare il file mytenant-fnassertionkey-cert.pem.

Importare le informazioni del keystore in Oracle Cloud Infrastructure Vault

Il processo di asserzione con Oracle Functions richiederà l'uso del keystore e delle password importati. Per una maggiore sicurezza e evitare di usare password non codificate e segrete, puoi sfruttare Oracle Cloud Infrastructure Vault.

Il servizio Oracle Cloud Infrastructure Vault consente di cifrare e memorizzare i dati riservati in modo sicuro. È possibile memorizzare le password del keystore e delle chiavi pubbliche in un Vault e quindi farvi riferimento mediante l'SDK Oracle Cloud Infrastructure nel backend Oracle Functions per eseguire l'operazione di assegnazione. È inoltre possibile cifrare e memorizzare il file JKS in sicurezza.

Nella sezione Prima di iniziare la riproduzione di questa soluzione, è stato richiesto di impostare l'ambiente Oracle Functions, ad esempio mediante Quick Start Guides. L'impostazione Guida avvio rapido richiede di creare un criterio per le funzioni a livello di compartimento radice. Nell'esempio seguente, il criterio è denominato FnTenancyPolicy. È necessario aggiungere ulteriori istruzioni al criterio per consentire a Oracle Functions di accedere ai vault associati al criterio. Il nome del gruppo per l'uso di Oracle Functions deve essere quello creato durante la configurazione della tenancy nel manuale Quick Start Guide. In questo esempio, fnGroup1 è il gruppo di utenti in grado di utilizzare Oracle Functions.

  1. Nella console di Oracle Cloud Infrastructure, sotto Governance e Administration, andare a Identity e fare clic su Criteri.
    Viene visualizzata una lista dei criteri del compartimento che si sta visualizzando.
  2. Selezionare il compartimento radice dalla lista a sinistra.
  3. Selezionare il nome del criterio Oracle Functions, ad esempio FnTenancyPolicy, e fare clic su Modifica istruzioni criterio. Aggiungere le seguenti istruzioni:
    allow group fnGroup1 to manage secret-family in tenancy
    allow group fnGroup1 to manage vaults in tenancy
    allow group fnGroup1 to manage keys in tenancy
  4. Selezionare Salva modifiche.
  5. Creare un'istanza di Vault nel compartimento.
    1. Nel gruppo Governance and Administration andare a Security e selezionare Vault.
    2. Sotto Ambito lista, nella lista Compartimento selezionare il nome del compartimento in cui si desidera creare il vault e fare clic su Crea vault.
    3. Nella finestra di dialogo Crea vault fare clic su Nome, quindi immettere un nome visualizzato per il vault. Evitare di inserire informazioni riservate in questo campo.
    4. Facoltativamente, impostare il vault come vault privato virtuale selezionando la casella di controllo Rendi il vault privato virtuale.
    5. Selezionare Crea.
  6. Creare un'istanza di chiave associata ai segreti.
    1. Sotto Ambito lista, nella lista Compartimento selezionare il nome del compartimento in cui si desidera creare la chiave, quindi fare clic sul nome del vault appena creato.
    2. Selezionare Chiavi, quindi Crea chiave.
    3. Nella finestra di dialogo Crea chiave scegliere un compartimento dalla lista Crea nel compartimento. Le chiavi possono esistere al di fuori del compartimento in cui si trova il vault.
    4. Selezionare Nome e immettere un nome per identificare la chiave. Evitare di inserire informazioni riservate in questo campo.
    5. Specificare la lunghezza della chiave, in bit, scegliendo una lunghezza dalla lista Forma chiave: Lunghezza.
    6. Al termine, fare clic su Crea chiave.
  7. Creare i segreti necessari per il caso di asserzione:
    1. Password keystore
    2. Password chiave primaria
    3. File keystore
    Sarà necessario aggiungere una rappresentazione Base64-encoded del contenuto del file del keystore. È possibile generarlo con il comando openssl:
    openssl base64 -in <YourKeystoreName>.p12 -out ksBase64Encoded.txt | cat ksBase64Encoded.txt

    Copiare il contenuto nel valore della chiave nel segreto. Per creare un nuovo segreto:

    1. Sotto Ambito lista, nella lista Compartimento selezionare il nome del compartimento in cui si desidera creare un segreto.
    2. Dalla lista dei vault nel compartimento selezionare il nome del vault appena creato.
    3. Selezionare Secrets, quindi Crea segreto.
    4. Nella finestra di dialogo Crea segreto scegliere un compartimento dalla lista Crea nel compartimento. (I segreti possono esistere al di fuori del compartimento in cui si trova il vault).
    5. Selezionare Nome e immettere un nome per identificare il segreto. Evitare di inserire informazioni riservate in questo campo.
    6. Selezionare Descrizione, quindi immettere una breve descrizione del segreto per facilitarne l'identificazione. Evitare di inserire informazioni riservate in questo campo.
    7. Scegliere la chiave di cifratura principale che si desidera usare per cifrare i contenuti segreti mentre vengono importati nel vault. La chiave deve appartenere allo stesso vault.
    8. Specificare il formato del contenuto segreto che si desidera fornire scegliendo un tipo di modello dalla lista Modello tipo segreto. È possibile fornire contenuti segreti in testo normale quando si utilizza la console per creare una versione segreta o segreta, ma i contenuti segreti devono essere base64-encoded prima di essere inviati al servizio. Se si sceglie questo formato, la console codifica automaticamente il contenuto segreto testo normale.
    9. Selezionare Contenuto segreto, quindi immettere il contenuto segreto. La dimensione massima consentita per un bundle segreto è 25 KB.
    10. Facoltativamente, è possibile applicare una regola per gestire la modalità di utilizzo dei segreti. È possibile creare una regola per il riutilizzo dei contenuti segreti tra le versioni di un segreto oppure creare una regola che specifichi la scadenza dei contenuti segreti.
    11. Al termine, selezionare Crea segreto.
    12. Ripetere questi passaggi per ogni segreto da creare.
  8. Creare un gruppo dinamico:
    1. Nella console selezionare Identità, quindi selezionare Gruppi dinamici.
      Viene visualizzata la lista dei gruppi dinamici della tenancy.
    2. Selezionare Crea gruppo dinamico.
    3. Immettere un nome per il gruppo dinamico. Registrare il nome per uso futuro. Il nome deve essere univoco per tutti i gruppi all'interno della tenancy. Non è possibile modificare questo nome in seguito.
    4. Immettere una descrizione. Non è possibile modificare la descrizione in seguito utilizzando la console, ma è possibile modificarla utilizzando l'API.
    5. Nella sezione Regole di corrispondenza immettere la regola seguente (usare l'OCID del tuo compartimento):
      ALL { resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
    6. Selezionare Crea gruppo dinamico.
      La sintassi della regola di corrispondenza viene verificata, ma gli OCID non sono. Assicurarsi che gli OCID immessi siano corretti.
  9. Aggiungere un'istruzione al criterio creato per Oracle Functions al livello compartimento radice come parte del manuale Oracle Functions Quick Start Guide per consentire al gruppo dinamico appena creato per accedere ai segreti.
    1. In Governance and Administration andare a Identity e fare clic su Policies.
      Viene visualizzata una lista dei criteri del compartimento che si sta visualizzando.
    2. Selezionare il compartimento radice dalla lista.
    3. Selezionare il nome del criterio Oracle Functions, ad esempio FnTenancyPolicy, e fare clic su Modifica istruzioni criterio. Aggiungere la seguente istruzione:
      allow dynamic-group your_fn_group to read secret-family in tenancy
Grazie a Vault Secrets configurato, è possibile utilizzare i OCID per ogni segreto per accedervi utilizzando l'SDK Oracle Cloud Infrastructure. Le proprietà V_KEYSTORE, V_KS_PASS e V_PK_PASS verranno utilizzate nelle funzioni di esempio descritte più avanti in questa soluzione.

Configurare l'applicazione Oracle Visual Builder in Oracle Identity Cloud Service

Alle applicazioni Oracle Visual Builder è associata un'applicazione Oracle Identity Cloud Service configurata automaticamente come client sicuro. È necessario configurare l'applicazione in modo che possa essere utilizzata come client della risorsa Oracle Functions.

Nell'ambito dell'interazione visualizzata nell'architettura proposta, un'applicazione Oracle Visual Builder associata a un'istanza di Oracle Identity Cloud Service, federata con Oracle Fusion Applications Cloud Service e connessa a Oracle Functions, deve essere in grado di generare un token di accesso in grado di raggiungere il gateway API e le risorse Oracle Functions (in base all'ambito). È necessario configurare l'applicazione Oracle Visual Builder in Oracle Identity Cloud Service per impostarla come client della risorsa che estende la funzionalità SaaS mediante l'aggiunta dell'ambito della nuova applicazione Oracle Functions creata.

Quando si crea una nuova applicazione in Oracle Visual Builder, viene creata automaticamente un'applicazione Oracle Identity Cloud Service. Ad esempio, se si crea un'applicazione denominata TestSaaSExtensionFN, è possibile passare alla console di Oracle Identity Cloud Service ed elencare le applicazioni e trovare un'applicazione denominata TestSaaSExtensionFN.

  1. Creare un'applicazione Oracle Visual Builder.
  2. In Oracle Identity Cloud Service, passare all'applicazione corrispondente alla nuova applicazione Oracle Visual Builder.
  3. Nella sezione Criterio di emissione token, impostare Risorse autorizzate su Specifico e utilizzare il pulsante Aggiungi ambito per aggiungere una risorsa con l'ambito dell'istanza del gateway API Oracle Functions.
    Se l'URL di reindirizzamento è contrassegnato come obbligatorio nell'applicazione VBCS IDCS, è dovuto alla configurazione del client, la casella di controllo Implicito in Tipi di concessione consentiti è selezionata. In questo caso, sarà necessario fornire un URL per l'applicazione Web Oracle Visual Builder in questo input. È possibile aggiornare questi valori in seguito, a seconda delle esigenze.
Ripetere questo processo per aggiungere l'ambito per ogni applicazione Oracle Visual Builder aggiuntiva disponibile in Oracle Identity Cloud Service che dovrebbe poter raggiungere l'applicazione Oracle Functions del gateway API.