Note:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse para obtener una cuenta gratuita, consulte Introducción a la cuenta gratuita de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para credenciales, arrendamiento y compartimentos de Oracle Cloud Infrastructure. Al finalizar la práctica, sustituya estos valores por otros específicos de su entorno en la nube.
Acceso a recursos protegidos en ORDS mediante un token de JWT emitido por dominios de OCI IAM
Introducción
Oracle Cloud Infrastructure Identity and Access Management (OCI IAM) utiliza dominios de identidad para proporcionar funciones de gestión de identidad y acceso como autenticación, conexión única (SSO) y gestión del ciclo de vida de identidad para OCI, así como para aplicaciones de Oracle y no de Oracle, ya sean SaaS, alojadas en la nube o locales.
Oracle REST Data Services (ORDS) conecta HTTPS y Oracle Database. ORDS, una aplicación Java de nivel medio, proporciona una API REST de Database Management, SQL Developer Web, un gateway PL/SQL, acceso simple a documentos de Oracle (SODA) para REST y la capacidad de publicar servicios web RESTful para interactuar con los datos y los procedimientos almacenados en Oracle Database.
La versión 23.3 de ORDS presenta el soporte para JSON Web Token (JWT). Estos tokens portadores permiten a los desarrolladores de ORDS delegar autenticación y autorización a cualquier proveedor de identidad compatible con OAuth2 (IdP) para emitir un token de acceso de JWT que ORDS puede validar para proporcionar acceso a los recursos protegidos de ORDS.
En este tutorial, mostraremos cómo acceder a los recursos protegidos de ORDS mediante un token de JWT emitido por dominios de OCI IAM. Para esta demostración, utilizaremos Oracle Autonomous Database en OCI, que incluye una aplicación ORDS preconfigurada y totalmente gestionada.
En la siguiente imagen se muestra la representación de alto nivel de la arquitectura de la solución.
Objetivos
- Acceda a recursos protegidos en ORDS mediante un token de JWT emitido por dominios de OCI IAM.
Requisitos
-
Los usuarios de OCI deben tener las políticas necesarias para gestionar las bases de datos autónomas de Oracle y los dominios de OCI IAM. Para obtener más información sobre la referencia de política de todos los servicios, consulte Referencia de política.
-
Debe haber disponible una instancia de Oracle Autonomous Database. Para obtener más información, consulte Aprovisionamiento de una instancia de Autonomous Database.
-
Antes de que ORDS pueda aceptar la autenticación y autorización mediante JWT:
-
Ya se debe haber configurado un IdP compatible con OAuth2 (por ejemplo, OCI IAM con dominios de identidad, Auth0) para emitir JWT para los usuarios que tienen permiso para acceder a los recursos de ORDS.
-
Si desea utilizar reclamaciones personalizadas en las políticas de autorización, se debe configurar IdP para agregar las reclamaciones personalizadas a los JWT que emite.
-
-
Para validar un JWT utilizando una clave de verificación pública correspondiente proporcionada por el emisor IdP:
-
El algoritmo de firma debe ser
RS256
,RS384
oRS512
. -
La clave de verificación pública debe tener al menos 2048 bits y no debe superar los 4096 bits.
-
La clave de verificación pública se debe especificar en formato de clave web JSON (JWK) y ORDS puede acceder a ella sin autenticación.
-
-
Requisitos de URI de JWK:
-
Se debe poder acceder al URI de JWK desde ORDS.
-
Los parámetros de clave deben estar presentes en el JWKS para verificar la firma del JWT.
-
Por defecto, el JWKS puede tener un tamaño de hasta 10 000 bytes.
-
Nota: El dominio de OCI IAM y el token de JWT que emite cumplen todos los requisitos anteriores.
Tarea 1: Configuración de ORDS para un esquema de base de datos, definición de puntos finales de API y configuración de control de acceso
-
Conéctese a la consola de OCI, vaya a Oracle Database y haga clic en Autonomous Database.
-
Haga clic en Instancia de Autonomous Database aprovisionada, Database Actions y, a continuación, haga clic en SQL.
-
Ejecute la siguiente consulta para asegurarse de que tiene la versión 23.3 o superior de ORDS, que soporta JWT.
SELECT * FROM ORDS_METADATA.ORDS_VERSION;
-
Ejecute la siguiente consulta para crear un usuario (
ordstest
) y asignar los privilegios necesarios.CREATE USER ordstest IDENTIFIED BY "<Password>"; GRANT CONNECT, RESOURCE TO ordstest; ALTER USER ordstest DEFAULT ROLE CONNECT, RESOURCE;
-
Ejecute la siguiente consulta para activar ORDS para que el esquema permita la funcionalidad de la API de 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; /
-
Ejecute la siguiente consulta para crear una tabla denominada
emp
en el esquemaordstest
e inserte datos de ejemplo.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);
-
Ejecute la siguiente consulta para definir un módulo ORDS (
demo
) que contendrá los puntos finales de 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; /
-
Ejecute la siguiente consulta para definir una plantilla
emp
que se asigne a un recurso REST específico.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; /
-
Ejecute la siguiente consulta para crear un manejador de solicitudes GET para
emp
, que ejecuta una consulta SQL simple que devuelve datos de la tablaemp
.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 tabla
emp
se puede ver sin ninguna autenticación agregando/ordstest/demo/emp
a la URL de acceso público de ORDS de las bases de datos autónomas de Oracle, que está disponible en Configuración de herramientas. Postman se utiliza en este tutorial. -
Ejecute la siguiente consulta para definir un privilegio (
privilegetest
) para proteger el módulodemo
.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; /
Dado que el módulo
demo
está protegido por el privilegioprivilegetest
, no se puede acceder a él sin la autorización adecuada. Para activar el acceso, debe crear un perfil de JWT para el esquemaordstest
. Esto permite a ORDS validar tokens de portador de JWT y otorgar acceso a recursos protegidos, como el módulo de demostración.
Tarea 2: Creación de un perfil de JWT de ORDS
Se puede crear un perfil de JWT dentro de un esquema activado para REST mediante el procedimiento OAUTH.CREATE_JWT_PROFILE
. Sin embargo, solo se puede definir un perfil de JWT por esquema. Para actualizar un perfil de JWT existente, primero se debe suprimir antes de crear uno nuevo.
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;
/
Este perfil de JWT especifica el emisor, el público y la URL de JWK.
p_issuer
debe ser un valor no nulo y debe coincidir con la reclamacióniss
en el token portador de JWT.p_audience
debe ser un valor no nulo y debe coincidir con la reclamaciónaud
en el token portador de JWT.p_jwk_url
debe ser un valor no nulo que empiece porhttps://
e identifique la clave de verificación pública proporcionada por el servidor de autorización en formato de clave web JSON (JWK).
Issuer
y JWK URI
para un dominio de OCI IAM se pueden obtener enviando una solicitud GET a la URL del dominio de OCI IAM, agregando /.well-known/openid-configuration
, como se muestra en la siguiente imagen.
Para verificar la configuración del perfil de JWT, conéctese como usuario ordstest
y ejecute la siguiente consulta SQL.
SELECT * FROM ORDS_METADATA.USER_ORDS_JWT_PROFILE;
Esta consulta recupera los detalles del perfil de JWT, lo que garantiza que el emisor, el público y la URL de JWK estén configurados correctamente.
Una vez configurado el perfil de JWT, los usuarios finales pueden acceder a los recursos protegidos de ORDS presentando tokens de JWT emitidos por un IdP compatible con OAuth 2.0, como el dominio de OCI IAM especificado en el perfil de JWT. Cuando un token de portador de JWT se valida correctamente, ORDS acepta lo siguiente:
-
La reclamación de JWT sujeta como el usuario autenticado que realiza la solicitud.
-
El ámbito JWT reclama como privilegios ORDS de esquemas activados para REST que el usuario ha dado su consentimiento a la aplicación mediante los privilegios en su nombre.
Tarea 3: Activación del acceso de ORDS al certificado de firma de dominio de OCI IAM sin autenticación
-
Vaya a la consola de OCI, vaya a Identidad y seguridad, Identidad y haga clic en Dominios.
-
Haga clic en el nombre del dominio de identidad en el que desea trabajar. Puede que necesite cambiar el compartimento para buscar el dominio que desee. Haga clic en Configuración y Configuración de dominio.
-
En la sección Certificado de firma de acceso, seleccione Configurar acceso de cliente y haga clic en Guardar cambios. Esto permite a ORDS acceder a la certificación de firma para el dominio de identidad sin autenticación.
Tarea 4: Configurar el servidor de recursos y el cliente, los ámbitos de JWT y los privilegios de ORDS
Debe configurar IdP para que emita el JWT con un ámbito que coincida con el privilegio ORDS necesario. Si un recurso de ORDS está protegido por un privilegio, ese nombre de privilegio se debe definir como un ámbito. Este ámbito permite a la aplicación solicitar acceso en nombre del usuario. A continuación, el JWT emitido debe incluir el ámbito como reclamación. Dado que utilizaremos los servicios OAuth2 de OCI IAM para aplicar la autorización, debemos configurar algunos servidores de recursos y clientes.
Tarea 4.1: Creación de una aplicación confidencial de tipo Servidor de recursos con el público y los ámbitos deseados
-
Vaya al dominio de identidad en el que está trabajando y haga clic en Aplicaciones integradas.
-
Seleccione Agregar aplicación, Aplicación confidencial y haga clic en Iniciar flujo de trabajo.
-
Introduzca un nombre para la aplicación (por ejemplo,
ORDS-SERVER
) y haga clic en Siguiente. -
En la sección Configuración del servidor de recursos, seleccione Configurar esta aplicación como un servidor de recursos ahora.
-
Configure el servidor de recursos con audiencia principal que coincida con el perfil de JWT y ámbito que coincida con el privilegio ORDS.
-
Haga clic en Siguiente y en Terminar.
-
En la página de visión general de la aplicación, seleccione Activar y confirme que desea activar la aplicación. La aplicación confidencial está activada.
Tarea 4.2: Creación de una aplicación confidencial de tipo Cliente a la que se asignan los ámbitos deseados
-
Vaya al dominio de identidad en el que está trabajando y haga clic en Aplicaciones integradas.
-
Seleccione Agregar aplicación, Aplicación confidencial y haga clic en Iniciar flujo de trabajo.
-
Introduzca un nombre para la aplicación (por ejemplo,
ORDS-CLIENT
) y haga clic en Siguiente. -
En la sección Configuración del cliente, seleccione Configurar esta aplicación como un cliente ahora.
-
En la sección Authorization, seleccione Client credentials.
Nota: En este tutorial, estamos utilizando Credenciales de Cliente como Tipos de Otorgamiento. Puede seleccionar un tipo de permiso diferente según sus requisitos, como Flujo de Código de Autorización para un cliente orientado al usuario.
-
En Tipo de cliente, seleccione Confidencial.
-
En la sección Política de emisión de token, seleccione Específico como Recursos autorizados.
-
Haga clic en Agregar recursos y, en Recursos, seleccione Agregar ámbito. Seleccione los ámbitos deseados para el servidor de recursos creado en la tarea 4.1. Por ejemplo,
privilegetest
. -
Haga clic en Siguiente y en Terminar.
-
En la página Visión general de la aplicación, seleccione Activar y confirme que desea activar la aplicación. La aplicación confidencial está activada.
-
Copie el ID de cliente y el Secreto de cliente de esta aplicación de cliente. Estas credenciales serán necesarias para la autenticación.
Tarea 5: Envío de Solicitudes a ORDS mediante un Token de Portador de JWT
Envíe una solicitud de publicación (mediante Postman) al punto final de token de dominio de OCI IAM con Tipo de otorgamiento como client_credentials
y Ámbito como privilegetest
, como se muestra en la siguiente imagen.
Nota: El público y el ámbito se deben incluir en el campo de ámbito al solicitar el token de portador del dominio de OCI IAM.
Valide el token de JWT para ámbitos, emisor y público.
Ahora se puede acceder al recurso ORDS protegido (módulo de demostración) del esquema ordstest
proporcionando un token de portador de JWT válido con la solicitud get, como se muestra en la siguiente imagen.
ORDS valida el token recuperando la clave pública de la URL de JWK y verificando la firma del token. Si la firma es válida, ORDS comprueba si las reclamaciones iss
(emisor) y aud
(audiencia) coinciden con las definidas en el perfil de JWT. También verifica que la reclamación de ámbito corresponde al privilegio que protege el recurso. Si se cumplen todas las condiciones, se otorga al usuario acceso al recurso protegido.
Enlaces relacionados
Agradecimientos
- Autor: Chaitanya Chintala (asesor de seguridad en la nube)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de formación gratuita en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.
Para obtener documentación sobre el producto, visite Oracle Help Center.
Access Protected Resources in ORDS using a JWT Token Issued by OCI IAM Domains
G28846-01
Copyright ©2025, Oracle and/or its affiliates.