Siempre que desarrollemos APIs en Oracle APEX, tenemos la posibilidad de dejar el API abierta de manera que se pueda utilizar sin ningún tipo de autenticación, sin embargo, esto puede terminar siendo un hueco de seguridad dependiendo lo que realice esa API, es por ello que en este laboratorio vamos a implementar el método de autenticación oauth2.0 en los módulos que desarrollemos en Oracle APEX.

Cuando configuramos el ORDS en nuestro schema de desarrollo en Oracle APEX veremos que por default se crea un módulo y algunos privilegios y roles.

Si queremos, podemos crear nuestro propio módulo REST en Oracle APEX, para ello les dejo la siguiente documentación donde explico un ejemplo de cómo hacerlo: Cómo crear un API Restful en Oracle APEX

Para este lab vamos a trabajar con el módulo oracle.example.hr

Paso 1 – Creación del Rol

Lo primero que debemos hacer es crear un rol, este únicamente nos pedirá un nombre representativo para diferenciarlo de los demás roles.

Le llamaremos: Rol de clientes

Paso 2 – Creación del privilegio

Ahora, crearemos el privilegio, dentro de la creación del privilegio nos solicitará definir lo siguiente:

  • Nombre del privilegio – Este será el identificador para cuando lo asignemos a los clientes
  • Título – Nombre representativo del privilegio
  • Roles – Seleccionaremos los roles que tendrán permiso de acceso a los módulos elegidos
  • Protected Modules – Elegiremos los módulos que queramos añadirle la capa seguridad

Tanto al nombre del privilegio como el título le podremos Consultas, luego en rol elegimos Rol de clientes y por último en protected modules elegimos oracle.example.hr

Paso 3 – Creación de clientes para la autenticación

Lo siguiente que debemos hacer, es crear las credenciales de acceso para los clientes que vayan a interactuar con el API o el módulo.

Vamos al SQL Command de Oracle APEX y ejecutaremos el siguiente script para crear el cliente:

  • p_name – Nombre del cliente
  • p_grant_type – Tipo de grant para el cliente
  • p_owner – Schema donde tenemos creado nuestros módulos en Oracle APEX
  • p_description – Breve descripción del cliente
  • p_support_email – Correo electrónico del cliente
  • p_privilege_names – Name del privilegio que creamos en el paso 2
BEGIN
  OAUTH.create_client(
    p_name            => 'Proveedor1',
    p_grant_type      => 'client_credentials',
    p_owner           => 'TESIS',
    p_description     => 'Ejemplo de creación cliente Oauth2',
    p_support_email   => 'oracle.max.consultor@gmail.com',
    p_privilege_names => 'Consultas'
  );
  COMMIT;
END;

Nota: Si quisiéramos borrar un cliente, podemos ejecutar el siguiente script:

BEGIN
  OAUTH.delete_client(
    p_name            => 'Proveedor1');
  COMMIT;
END;

Paso 4 – Asignación del rol al cliente

Para que la asignación del privilegio durante la creación del cliente funcione, debemos asignarle un rol a ese cliente, para ello ejecutaremos el siguien script en el SQL Command:

BEGIN
  oauth.grant_client_role(p_client_name => 'Proveedor1',
                          p_role_name   => 'Rol de clientes');
  COMMIT;
END;

Paso 5 – Verificación del client id y cliente secret

Para que nuestros proveedores pueden interactuar con el API protegida, deberemos entregarles un client id y un client secret exclusivo para cada uno, para verlo debemos ejecutar el siguiente script:

SELECT ID,NAME,CLIENT_ID,CLIENT_SECRET FROM user_ords_clients WHERE name = 'Proveedor1';

Paso 6 – Prueba de la autenticación utilizando Postman

Consideración 1

Antes de hacer las pruebas, si estamos en el ambiente de desarrollo y este ambiente no cuenta con un certificado SSL para cifrar la conexión con el ORDS, cuando tratemos de interactuar con el API nos dará error.

Para corregirlo solamente añada la siguiente línea al archivo default.xml del ORDS y reinícielo:

<entry key="security.verifySSL">false</entry>

En caso de utilizar Weblogic como forma de despliegue del ORDS, deberá deshabilitar la seguridad de Weblogic para poder recibir tokens en el ambiente de desarrollo, vea la siguiente documentación para conocer cómo hacerlo: Solución: Authentication error with OAuth 2.0

Consideración 2

Si esta implementando un certificado SSL o desea implementarlo, deberá aplicar la siguiente configuración para forzar siempre el uso de https en las solicitudes, utilizando el ORDS: Solución: 403 Forbidden – Las solicitudes de Cross Origin Sharing no están soportadas en ORDS con SSL

Prueba en Postman

Utilizando postman vamos a realizar una solicitud de autenticación para obtener el token de sesión y así poder interactuar con el API:

El url de la conexión estará compuesta de la siguiente manera:

http://<ip o dns del servidor>:<puerto>/<nombre de la ruta de acceso del ords>/<schema>/oauth/token

En mi caso es la siguiente: http://192.168.1.50:8080/ords/tesis/oauth/token

Luego en las opciones de Configure New Token -> Configuration options colocaremos lo siguiente:

  • Token Name – Access_token
  • Grant Type – Client Credentials
  • Access Token URL – http://192.168.1.50:8080/ords/tesis/oauth/token
  • Client ID – El client ID del paso 5
  • Client Secret – El client secret del paso 5
  • Scope – En blanco
  • Client Authentication – Send as auth header

Probamos la solicitud del token de acceso:

De esta manera logramos asegurar el acceso a nuestras APIs utilizando el método de autenticación OAuth2.0.

2 respuestas a «Cómo añadir autenticación OAuth2.0 a las API Restful de Oracle APEX»

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *