Nota
- Questa esercitazione richiede l'accesso a Oracle Cloud. Per iscriverti a un account gratuito, consulta Inizia a utilizzare Oracle Cloud Infrastructure Free Tier.
- Utilizza valori di esempio per le credenziali, la tenancy e i compartimenti di Oracle Cloud Infrastructure. Al termine del laboratorio, sostituisci questi valori con quelli specifici del tuo ambiente cloud.
Accedi alle risorse protette in ORDS utilizzando un token JWT emesso dai domini IAM OCI
Introduzione
Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) utilizza i domini di Identity per fornire funzioni di gestione delle identità e degli accessi come autenticazione, Single Sign-On (SSO) e gestione del ciclo di vita delle identità per OCI, nonché per applicazioni Oracle e non Oracle, su SaaS, in hosting sul cloud o in locale.
Oracle REST Data Services (ORDS) collega HTTPS e Oracle Database. ORDS, un'applicazione Java di livello intermedio, fornisce un'API REST di gestione del database, SQL Developer Web, un gateway PL/SQL, un SOA (Simple Oracle Document Access) per REST e la possibilità di pubblicare servizi Web RESTful per l'interazione con i dati e le stored procedure in Oracle Database.
La release 23.3 di ORDS introduce il supporto per JSON Web Token (JWT). Questi token al portatore consentono agli sviluppatori ORDS di delegare l'autenticazione e l'autorizzazione a qualsiasi provider di identità (IdP) conforme a OAuth2 per emettere un token di accesso JWT che ORDS può convalidare per fornire l'accesso alle risorse protette ORDS.
In questa esercitazione verrà descritto come accedere alle risorse protette in ORDS utilizzando un token JWT emesso dai domini IAM OCI. Per questa demo, utilizzeremo Oracle Autonomous Database in OCI, che viene fornito con un'applicazione ORDS preconfigurata e completamente gestita.
L'immagine seguente mostra la rappresentazione di alto livello dell'architettura della soluzione.
Obiettivi
- Accedi alle risorse protette in ORDS utilizzando un token JWT emesso dai domini IAM OCI.
Prerequisiti
-
Gli utenti in OCI devono disporre dei criteri necessari per gestire i database autonomi Oracle e i domini IAM OCI. Per ulteriori informazioni sul riferimento ai criteri di tutti i servizi, vedere Riferimento ai criteri.
-
Deve essere disponibile Oracle Autonomous Database. Per ulteriori informazioni, vedere Eseguire il provisioning di un'istanza di Autonomous Database.
-
Prima che ORDS possa accettare l'autenticazione e l'autorizzazione mediante JWT:
-
Un IdP conforme a OAuth2 (ad esempio, IAM OCI con domini di Identity, Auth0) deve essere già stato impostato per emettere JWT per gli utenti autorizzati ad accedere alle risorse ORDS.
-
Se si desidera utilizzare le richieste personalizzate nei criteri di autorizzazione, è necessario impostare IdP per aggiungere le richieste personalizzate alle richieste JWT che vengono emesse.
-
-
Per convalidare un JWT utilizzando una chiave di verifica pubblica corrispondente fornita dall'emittente IdP:
-
L'algoritmo di firma deve essere
RS256
,RS384
oRS512
. -
La chiave pubblica di verifica non deve superare i 4096 bit e non deve superare i 2048 bit.
-
La chiave di verifica pubblica deve essere specificata in formato JWK (JSON Web Key) e accessibile da ORDS senza autenticazione.
-
-
Requisiti URI JWK:
-
L'URI JWK deve essere accessibile da ORDS.
-
I parametri chiave devono essere presenti in JWKS per verificare la firma JWT.
-
Per impostazione predefinita, la dimensione di JWKS può essere fino a 10.000 byte.
-
Nota: il dominio IAM OCI e il token JWT emesso da esso soddisfano tutti i requisiti di cui sopra.
Task 1: impostare ORDS per uno schema di database, definire gli endpoint API e configurare il controllo dell'accesso
-
Eseguire il login a OCI Console, passare a Oracle Database e fare clic su Autonomous Database.
-
Fare clic su Istanza Autonomous Database con provisioning eseguito, Azioni database e quindi su SQL.
-
Eseguire la query seguente per assicurarsi di disporre di ORDS versione 23.3 o successiva, che supporta JWT.
SELECT * FROM ORDS_METADATA.ORDS_VERSION;
-
Eseguire la query seguente per creare un utente (
ordstest
) e assegnare i privilegi necessari.CREATE USER ordstest IDENTIFIED BY "<Password>"; GRANT CONNECT, RESOURCE TO ordstest; ALTER USER ordstest DEFAULT ROLE CONNECT, RESOURCE;
-
Eseguire la query seguente per abilitare ORDS per lo schema per consentire la funzionalità API REST.
BEGIN ORDS_ADMIN.ENABLE_SCHEMA( p_enabled => TRUE, p_schema => 'ordstest', p_url_mapping_type => 'BASE_PATH', p_url_mapping_pattern => 'ordstest', p_auto_rest_auth=> FALSE ); commit; END; /
-
Eseguire la query seguente per creare una tabella denominata
emp
nello schemaordstest
e inserire dati di esempio.CREATE TABLE ordstest.emp ( EMPNO NUMBER(4,0), ENAME VARCHAR2(10 BYTE), JOB VARCHAR2(9 BYTE), MGR NUMBER(4,0), HIREDATE DATE, SAL NUMBER(7,2), COMM NUMBER(7,2), DEPTNO NUMBER(2,0), CONSTRAINT PK_EMP PRIMARY KEY (EMPNO) );
Insert into ordstest.EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7369,'SMITH','CLERK',7902,to_date('17-DEC-80','DD-MON-RR'),800,null,20); Insert into ordstest.EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7499,'ALLEN','SALESMAN',7698,to_date('20-FEB-81','DD-MON-RR'),1600,300,30); Insert into ordstest.EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7521,'WARD','SALESMAN',7698,to_date('22-FEB-81','DD-MON-RR'),1250,500,30); Insert into ordstest.EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7566,'JONES','MANAGER',7839,to_date('02-APR-81','DD-MON-RR'),2975,null,20); Insert into ordstest.EMP (EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO) values (7654,'MARTIN','SALESMAN',7698,to_date('28-SEP-81','DD-MON-RR'),1250,1400,30);
-
Eseguire la query seguente per definire un modulo ORDS (
demo
) che conterrà gli endpoint API.BEGIN ORDS_ADMIN.DEFINE_MODULE( p_schema => 'ordstest', p_module_name => 'demo', p_base_path => '/demo/', p_items_per_page=> 1000, p_status => 'PUBLISHED', p_comments=> '' ); COMMIT; END; /
-
Eseguire la query seguente per definire un modello
emp
mappato a una risorsa REST specifica.BEGIN ORDS_ADMIN.DEFINE_TEMPLATE( p_schema => 'ordstest', p_module_name => 'demo', p_pattern => 'emp', p_priority => 0, p_etag_type => 'HASH', p_comments => '' ); COMMIT; END; /
-
Eseguire la query seguente per creare un handler di richieste GET per
emp
, che esegue una query SQL semplice che restituisce i dati dalla tabellaemp
.BEGIN ORDS_ADMIN.DEFINE_HANDLER( p_schema => 'ordstest', p_module_name => 'demo', p_pattern => 'emp', p_method => 'GET', p_source_type => ords.source_type_collection_feed, p_source => 'select * from emp', p_items_per_page => 25, p_comments => '' ); COMMIT; END; /
La tabella
emp
può essere visualizzata senza autenticazione aggiungendo/ordstest/demo/emp
all'URL di accesso pubblico ORDS dei database autonomi Oracle, disponibile nella sezione Configurazione degli strumenti. Postman è utilizzato in questo tutorial. -
Eseguire la query seguente per definire un privilegio (
privilegetest
) per proteggere il modulodemo
.DECLARE L_PRIV_ROLES owa.vc_arr; L_PRIV_PATTERNS owa.vc_arr; L_PRIV_MODULES owa.vc_arr; BEGIN L_PRIV_MODULES( 1 ) := 'demo'; ORDS_ADMIN.DEFINE_PRIVILEGE( P_Schema=> 'ordstest', P_PRIVILEGE_NAME => 'privilegetest', P_ROLES => L_PRIV_ROLES, P_PATTERNS => L_PRIV_PATTERNS, P_MODULES => L_PRIV_MODULES, P_LABEL => 'privilegetest', P_DESCRIPTION => 'Demonstrate controlling access with priviliges', P_COMMENTS=> '' ); COMMIT; END; /
Poiché il modulo
demo
è protetto dal privilegioprivilegetest
, non è possibile accedervi senza un'autorizzazione appropriata. Per abilitare l'accesso, è necessario creare un profilo JWT per lo schemaordstest
. Ciò consente a ORDS di convalidare i token del portatore JWT e concedere l'accesso a risorse protette, ad esempio il modulo demo.
Task 2: creare un profilo JWT ORDS
È possibile creare un profilo JWT all'interno di uno schema abilitato per REST utilizzando la procedura OAUTH.CREATE_JWT_PROFILE
. È tuttavia possibile definire un solo profilo JWT per schema. Per aggiornare un profilo JWT esistente, è necessario eliminarlo prima di crearne uno nuovo.
BEGIN
OAUTH_ADMIN.DELETE_JWT_PROFILE(p_schema=>'ordstest');
OAUTH_ADMIN.CREATE_JWT_PROFILE(
p_schema => 'ordstest',
p_issuer => 'https://idcs-123456789abcdefghijklmnopqrstuvw.identity.oraclecloud.com',
p_audience => 'ords/ordstest/',
p_jwk_url =>'https://idcs-123456789abcdefghijklmnopqrstuvw.identity.oraclecloud.com:443/admin/v1/SigningCert/jwk'
);
COMMIT;
END;
/
Questo profilo JWT specifica l'emittente, l'audience e l'URL JWK.
- Il valore
p_issuer
deve essere non nullo e deve corrispondere alla richiestaiss
nel token del servizio di trasporto JWT. - Il valore
p_audience
deve essere non nullo e deve corrispondere alla richiestaaud
nel token del servizio di trasporto JWT. - Il valore
p_jwk_url
deve essere un valore non nullo che inizia conhttps://
e identifica la chiave di verifica pubblica fornita dal server di autorizzazione in formato JWK (JSON Web Key).
È possibile ottenere i valori Issuer
e JWK URI
per un dominio IAM OCI inviando una richiesta GET all'URL del dominio IAM OCI, aggiungendo /.well-known/openid-configuration
, come mostrato nell'immagine seguente.
Per verificare la configurazione del profilo JWT, eseguire il login come utente ordstest
ed eseguire la query SQL seguente.
SELECT * FROM ORDS_METADATA.USER_ORDS_JWT_PROFILE;
Questa query recupera i dettagli del profilo JWT, garantendo che l'emittente, l'audience e l'URL JWK siano configurati correttamente.
Una volta configurato il profilo JWT, gli utenti finali possono accedere alle risorse protette ORDS presentando i token JWT emessi da un file IdP conforme alla versione OAuth 2.0, ad esempio il dominio IAM OCI specificato nel profilo JWT. Quando un token del portatore JWT viene convalidato correttamente, ORDS accetta quanto segue:
-
L'oggetto della richiesta JWT è l'utente autenticato che effettua la richiesta.
-
L'ambito JWT dichiara come privilegi ORDS degli schemi abilitati per REST che l'utente ha acconsentito all'applicazione utilizzando i privilegi per loro conto.
Task 3: abilitare l'accesso ORDS al certificato di firma del dominio IAM OCI senza autenticazione
-
Andare alla console OCI, andare a Identità e sicurezza, Identità e fare clic su Domini.
-
Fare clic sul nome del dominio di Identity che si desidera utilizzare. Potrebbe essere necessario modificare il compartimento per trovare il dominio desiderato. Fare clic su Impostazioni e Impostazioni dominio.
-
Nella sezione Certificato di firma per l'accesso selezionare Configura accesso client e fare clic su Salva modifiche. Ciò consente a ORDS di accedere alla certificazione di firma per il dominio di Identity senza autenticazione.
Task 4: Configura server risorse e client, ambiti JWT e privilegi ORDS
È necessario configurare IdP in modo che il JWT venga emesso con un ambito corrispondente al privilegio ORDS richiesto. Se una risorsa in ORDS è protetta da un privilegio, è necessario definire tale nome di privilegio come ambito. Questo ambito consente all'applicazione di richiedere l'accesso per conto dell'utente. Il JWT emesso deve quindi includere l'ambito come reclamo. Poiché utilizzeremo i servizi OAuth2 IAM OCI per applicare l'autorizzazione, è necessario impostare alcuni server e client di risorse.
Task 4.1: Creare un'applicazione riservata di tipo Server risorse con l'audience e gli ambiti desiderati
-
Andare al dominio di Identity in cui si sta lavorando e fare clic su Applicazioni integrate.
-
Selezionare Aggiungi applicazione, Applicazione riservata e fare clic su Avvia workflow.
-
Immettere un nome per l'applicazione (ad esempio,
ORDS-SERVER
) e fare clic su Avanti. -
Nella sezione Configurazione del server risorse, selezionare Configurare questa applicazione come server risorse ora.
-
Configurare il server delle risorse con audience principale corrispondente al profilo JWT e ambito corrispondente al privilegio ORDS.
-
Fare clic su Avanti e Fine.
-
Nella pagina di panoramica dell'applicazione selezionare Attiva e confermare che si desidera attivare l'applicazione. L'applicazione riservata viene attivata.
Task 4.2: Creare un'applicazione riservata di tipo Client a cui sono assegnati gli ambiti desiderati
-
Andare al dominio di Identity in cui si sta lavorando e fare clic su Applicazioni integrate.
-
Selezionare Aggiungi applicazione, Applicazione riservata e fare clic su Avvia workflow.
-
Immettere un nome per l'applicazione (ad esempio,
ORDS-CLIENT
) e fare clic su Avanti. -
Nella sezione Configurazione client selezionare Configurare l'applicazione come client ora.
-
Nella sezione Autorizzazione selezionare Credenziali client.
Nota: in questa esercitazione viene utilizzato Credenziali client come Tipi di concessione. È possibile selezionare un tipo di privilegio diverso in base ai requisiti, ad esempio Flusso codice autorizzazione per un client rivolto all'utente.
-
In Tipo di client selezionare Riservato.
-
Nella sezione Criterio di emissione token, selezionare Specifico come Risorse autorizzate.
-
Fare clic su Aggiungi risorse e in Risorse selezionare Aggiungi ambito. Selezionare gli ambiti desiderati per il server risorse creato nel task 4.1. Ad esempio,
privilegetest
. -
Fare clic su Avanti e Fine.
-
Nella pagina Panoramica applicazione, selezionare Attiva e confermare che si desidera attivare l'applicazione. L'applicazione riservata viene attivata.
-
Copiare i valori ID client e Secondario client di questa applicazione client. Queste credenziali saranno necessarie per l'autenticazione.
Task 5: Invia richieste a ORDS utilizzando un token del servizio di trasporto JWT
Inviare una richiesta successiva (utilizzando Postman) all'endpoint del token del dominio IAM OCI con Tipo di concessione client_credentials
e Ambito privilegetest
come mostrato nell'immagine seguente.
Nota: l'audience e l'ambito devono essere inclusi nel campo dell'ambito quando si richiede il token al portatore dal dominio IAM OCI.
Convalidare il token JWT per ambiti, emittente e audience.
Ora è possibile accedere alla risorsa ORDS protetta (modulo demo) nello schema ordstest
fornendo un token JWT bearer valido con la richiesta get, come mostrato nella seguente immagine.
ORDS convalida il token recuperando la chiave pubblica dall'URL JWK e verificando la firma del token. Se la firma è valida, ORDS verifica se le richieste iss
(emittente) e aud
(pubblico) corrispondono a quelle definite nel profilo JWT. Verifica inoltre che la richiesta di ambito corrisponda al privilegio che protegge la risorsa. Se vengono soddisfatte tutte le condizioni, all'utente viene concesso l'accesso alla risorsa protetta.
Collegamenti correlati
Conferme
- Autore - Chaitanya Chintala (Cloud Security Advisor)
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.
Access Protected Resources in ORDS using a JWT Token Issued by OCI IAM Domains
G28849-01
Copyright ©2025, Oracle and/or its affiliates.