Configurar aplicaciones en Oracle Identity Cloud Service

Para que la autenticación funcione correctamente, debe utilizar la misma instancia de Oracle Identity Cloud Service que protege la aplicación Oracle Fusion Applications Cloud Service y Oracle PaaS ( Oracle Visual Builder ) o HTML5 personalizada. En Oracle Identity Cloud Service, debe crear una aplicación para utilizarla con la autenticación de cliente.

En este escenario, separamos los temas de Oracle Functions más Oracle API Gateway de la interacción entre las entidades de Oracle Functions y Oracle Fusion Applications Cloud Service, mediante la protección de ambas mediante Oracle Identity Cloud Service como entidades separadas en lugar de utilizar la misma aplicación Oracle Identity Cloud Service para ambas.

Normalmente, las aplicaciones de extensión Oracle SaaS escritas por los clientes de Oracle realizan una lógica compleja. Por ejemplo, un escenario común es obtener datos de Oracle Fusion Applications Cloud Service, procesarlos de alguna forma y devolver datos a Oracle Fusion Applications Cloud Service a otro destino como una base de datos.

Por lo tanto, tenemos una arquitectura con dos aplicaciones de Oracle Identity Cloud Service:

  • Una aplicación que protege su Oracle Functions como recurso y como cliente de confianza de Oracle Fusion Applications Cloud Service.
  • Una aplicación que protege su instancia de Oracle Fusion Applications Cloud Service como recurso.

Las instrucciones de este artículo le guiarán por el proceso de creación y configuración de las primeras aplicaciones para proteger Oracle Functions. Ya debería existir la segunda de estas dos aplicaciones: se le necesitaba crear y configurar una aplicación para activar la federación entre Oracle Fusion Applications Cloud Service y Oracle PaaS.

Esta configuración permite configurar diferentes reglas o políticas para acceder a las funciones que no son las reglas o políticas de un cliente de confianza a fin de acceder a Oracle Fusion Applications Cloud Service. En esta configuración, el token de acceso entrante al gateway de API solo requiere acceso autorizado a Oracle Functions para llamar a la capacidad de la función, pero no tiene por qué tener también los mismos permisos que son necesarios para acceder a la instancia de Oracle Fusion Applications Cloud Service. La aplicación Oracle Visual Builder requiere una aplicación Oracle Identity Cloud Service asociada que generará el token de acceso para acceder al gateway de API. Esta aplicación Oracle Identity Cloud Service será el cliente del recurso de funciones/gateway de API.

Los intercambios de tokens que se muestran en el diagrama de arquitectura proporcionan una capa de protección adicional para propagar la identidad del caso de que una función sea un cliente de un recurso de Oracle Fusion Applications Cloud Service, que es similar al proceso de afirmación de Oracle WebLogic OAuth con Oracle Identity Cloud Service utilizado en extensiones SaaS soportadas anteriores, como las que utilizan Oracle Java Cloud Service.

Esto puede significar que, en determinados casos de uso, la aplicación Oracle Identity Cloud Service utilizada para generar el token para Oracle Functions solo puede tener ámbitos de recursos para las funciones, pero no para Oracle Fusion Applications Cloud Service. En este caso, Oracle Functions no tendrá la capacidad de volver a utilizar el token para llamar a Oracle Fusion Applications Cloud Service, pero es válido para acceder a Oracle Functions. Por tanto, puede implantar flujos lógicos a los que algunos usuarios o excepciones de funciones no tienen acceso, mientras que otros sí, según la lógica de negocio, los roles y privilegios de usuario u otros criterios.

En otros casos de uso, Oracle Functions puede incluir código para solicitar un token de acceso para Oracle Fusion Applications Cloud Service mediante los certificados y el usuario que ha pasado a la solicitud desde el gateway de API.

Creación de una aplicación para Oracle Functions en Oracle Identity Cloud Service

En Oracle Identity Cloud Service, debe crear una aplicación confidencial para utilizarla con la autenticación de cliente de Oracle Functions.

Dentro de la misma instancia de Oracle Identity Cloud Service que ha federado con la instancia de Oracle Fusion Applications Cloud Service, cree una aplicación confidencial y asegúrese de que la configuración del cliente se ha configurado de forma que active las credenciales del cliente, la afirmación de JWT y los permisos de propietario del recurso.

  1. Inicie sesión en Mis servicios de Oracle Cloud, haga clic en Usuarios y, a continuación, en Consola de identidad.
  2. Seleccione la pestaña Aplicaciones y haga clic en Agregar. A continuación, haga clic en Aplicación confidencial.
  3. En la página Detalles del asistente de Agregar Aplicación Confidencial, proporcione un nombre a la nueva aplicación. Si lo desea, puede definir otros valores como la descripción, el icono, la configuración de visualización y las etiquetas. Haga clic en Siguiente.
  4. En la página Cliente, seleccione Configurar esta Aplicación como Cliente Ahora.
    Aparecen opciones adicionales en la página. Defínalos de esta forma:
    • Tipos de concesión permitidos: seleccione Propietario de recurso, Credenciales de cliente y Afirmación de JWT.
    • Activar URL que no sean HTTPS.
    • No necesita una URL de redirección para este caso de uso.
    • Tipo de cliente: deje la opción Confidential (Confidencial) seleccionada.
  5. En la sección Recursos, seleccione Registrar Recursos. Defina el valor de Público principal en el nombre de host de la instancia del gateway de API generado en la consola de Oracle Cloud Infrastructure al crear su instancia de API Gatway.
    En Oracle Cloud Infrastructure, puede seleccionar el gateway, seleccionar el separador Información de Gateway y el nombre del host de la instancia aparece en el separador.
  6. En Ámbitos, haga clic para agregar un ámbito y agregue un valor para la URL base para el despliegue que utiliza la política de autorización JWT del gateway de API. Por ejemplo, /saasextension.
    Utilizará este ámbito para permitir que la aplicación acceda a los recursos de Oracle Functions. Puede agregar ámbitos adicionales para recursos adicionales según sea necesario.
  7. No es necesario otorgar acceso a las API de administración.
  8. Haga clic en Siguiente para ir a la página Recursos y, a continuación, vuelva a hacer clic en Siguiente para ir a la página Autorización.
  9. En la página Autorización, haga clic en Terminar.
    Aparece la notificación Aplicación Agregada con el ID y el secreto de cliente. Anote estos valores para utilizarlos más tarde. Al descartar la notificación, se muestra la aplicación.
  10. Haga clic en el botón Activar a la derecha del nombre de la aplicación.

Preparación y Prueba de la Aplicación Oracle Identity Cloud Service

Configure la aplicación Confidential de Oracle Identity Cloud Service para conectarse a la aplicación correspondiente a su instancia de Oracle Fusion Applications Cloud Service y, a continuación, pruebe la aplicación.

En este procedimiento, configurará los recursos de la aplicación Oracle Identity Cloud Service recién creada para agregar un ámbito para su aplicación Oracle Fusion Applications Cloud Service y, a continuación, verifique que una cuenta de usuario autorizada del sistema PaaS de Oracle pueda obtener un token para su instancia de Oracle Fusion Applications Cloud Service.
  1. Inicie sesión en Mis servicios de Oracle Cloud, haga clic en Usuarios y, a continuación, en Consola de identidad.
  2. Seleccione la pestaña Aplicaciones y, a continuación, busque y seleccione la aplicación que acaba de crear para Oracle Functions.
  3. Edite la política de emisión de tokens. Definir recursos autorizados en Todos.
  4. Agregue un recurso para Oracle Applications Cloud (Fusion) con el ámbito de la aplicación de Fusion (no es necesario que esté protegida).
  5. Verifique que tiene una cuenta de usuario que existe en Oracle PaaS y Oracle Fusion Applications Cloud Service, con privilegios suficientes para acceder a los datos que consultará mediante una llamada de API de REST. Por ejemplo, el rol de administrador de ventas podría ser suficiente.
  6. Pruebe la aplicación generando un token de acceso con estas credenciales de usuario. Puede generar el token de acceso utilizando la función de token de solicitud de Postman especificando el ámbito, el valor de público primario del recurso protegido por OAuth de la aplicación Oracle Fusion Applications Cloud Service de Oracle Identity Cloud Service. Para esta prueba simple, utilice las credenciales de contraseña como tipo de permiso para utilizar el nombre de usuario como asunto en el token generado. (En un entorno de producción, debe utilizar las credenciales del cliente en las que el cliente proporcionará la información del usuario.) La URL del token de acceso se forma mediante la URL del host de Oracle Identity Cloud Service y agregando /oauth2/v1/token. Por ejemplo, https://<su nube de identidad hostname.identity.oraclecloud.com>/oauth2/v1/token.
Si todo funciona correctamente, debe recibir un token de JWT como respuesta, que puede utilizar en una llamada al punto final de la API de REST de Oracle Fusion Applications Cloud Service y recibir la misma salida. Por ejemplo:
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>'
Esta consulta de curl debería devolver datos de Expenses.

Configuración de la aplicación Oracle Functions Oracle Identity Cloud Service como cliente de confianza

Necesita utilizar un certificado para la aplicación Oracle Identity Cloud Service como cliente de confianza para realizar solicitudes de OAuth a Oracle Functions. Puede generar un certificado autofirmado para su uso durante el desarrollo, si aún no tiene un certificado disponible.

El script proporcionado genSelfSignedKeypair.sh se puede utilizar para generar una clave si aún no tiene una. Ejecute el script especificando los valores de inquilino y de alias de clave. En este ejemplo, hemos proporcionado el mytenant como nombre del inquilino y fnassertionkey como alias de clave.

  1. Si es necesario, utilice el script proporcionado con los ejemplos de código para que esta solución genere un certificado:
    $ ./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]
    ==============================================

    Los archivos generados se utilizarán en el código de función y en la configuración de la aplicación Oracle Identity Cloud Service:

    • mytenant-keystore.p12: Almacén de claves generado que se utiliza en su código para extraer los certificados utilizados para el proceso de afirmación.
    • mytenant-fnassertionkey-cert.pem: certificado público para su uso en la configuración de la aplicación Oracle Identity Cloud Service.

    El tercer archivo no es necesario de inmediato, pero se extraerá una versión similar del almacén de claves mytenant-keystore.p12 en el código y se exportará como referencia:

    • mytenant-fnassertionkey-pkcs8-key. pem: Clave privada en formato PKCS8
  2. Configure la aplicación Oracle Functions Oracle Identity Cloud Service con Trusted Client Type y agregue un certificado con el alias de clave del certificado. Inicie sesión en Mis servicios de Oracle Cloud, haga clic en Usuarios y, a continuación, en Consola de identidad.
  3. Seleccione el separador Aplicaciones y seleccione la aplicación de Oracle Identity Cloud Service que ha creado anteriormente para el acceso a Oracle Functions.
  4. En la sección Configuración del Cliente, busque el campo Certificado, introduzca el alias utilizado para el certificado (en el ejemplo anterior era fnassertionkey) y haga clic en el botón Importar para importar el archivo mytenant-fnassertionkey-cert.pem.

Importar Información de Almacén de Claves a Oracle Cloud Infrastructure Vault

El proceso de afirmación con Oracle Functions necesitará el uso del almacén de claves y las contraseñas importados. Para mayor seguridad y evitar el uso de contraseñas y secretos codificados, puede aprovechar Oracle Cloud Infrastructure Vault.

El servicio Oracle Cloud Infrastructure Vault permite cifrar y almacenar de forma segura los datos confidenciales. Puede almacenar el almacén de claves y las contraseñas de clave pública en un almacén y, a continuación, hacer referencia a él mediante el SDK de Oracle Cloud Infrastructure en su backend de Oracle Functions para realizar la ensación. También puede cifrar y almacenar de forma segura el archivo JKS.

En la sección Antes de Empezar de esta solución, se le necesitaba configurar su entorno de Oracle Functions, como mediante el uso de las guías de inicio rápido. La configuración de la guía de inicio rápido le pide que cree una política para las funciones en el nivel de compartimento raíz. En el siguiente ejemplo, dicha política se denomina FnTenancyPolicy. Debe agregar sentencias adicionales a la política para permitir a Oracle Functions acceder a los almacenes asociados a esa política. El nombre del grupo para Oracle Functions que se va a utilizar debe ser el creado al configurar el arrendamiento en la Guía de inicio rápido. En este ejemplo, fnGroup1 es el grupo de usuarios que pueden utilizar Oracle Functions.

  1. En la consola de Oracle Cloud Infrastructure, bajo Control y Administración, vaya a Identidad y haga clic en Políticas.
    Se muestra una lista de las políticas del compartimento que está viendo.
  2. Seleccione el compartimento raíz de la lista de la izquierda.
  3. Seleccione el nombre de la política de Oracle Functions, como FnTenancyPolicy y haga clic en Editar Sentencias de Política. Agregue las siguientes sentencias:
    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. Seleccione Guardar Cambios.
  5. Cree una instancia de almacén en el compartimento.
    1. En el grupo Gobernanza y administración, vaya a Seguridad y seleccione Almacenar.
    2. En Ámbito de lista, en la lista Compartimento, seleccione el nombre del compartimento donde desea crear el almacén y haga clic en Crear almacén.
    3. En el cuadro de diálogo Crear almacén, haga clic en Nombre y, a continuación, introduzca un nombre mostrado para el almacén. Evite introducir información confidencial en este campo.
    4. De manera opcional, haga que el almacén sea un almacén privado virtual seleccionando la casilla de control Convertir en un almacén privado virtual.
    5. Seleccione Crear.
  6. Cree una instancia clave asociada con los secretos.
    1. En Ámbito de lista, en la lista Compartimento, seleccione el nombre del compartimento donde desea crear la clave y, a continuación, haga clic en el nombre del almacén que acaba de crear.
    2. Seleccione Keys (Claves) y, a continuación, seleccione Create Key (Crear clave).
    3. En el cuadro de diálogo Crear clave, seleccione un compartimento de la lista Crear en compartimento. (Las claves pueden existir fuera del compartimento en el que está el almacén.)
    4. Seleccione Nombre y, a continuación, introduzca un nombre para identificar la clave. Evite introducir información confidencial en este campo.
    5. Especifique la longitud de la clave, en bits, seleccionando una longitud de la lista Forma Clave: Longitud.
    6. Cuando haya terminado, haga clic en Create Key (Crear clave).
  7. Cree los secretos necesarios para el caso de afirmación:
    1. Contraseña de Almacén de Claves
    2. Contraseña de Clave Primaria
    3. Archivo de Almacén de Claves
    Deberá agregar una representación codificada en Base64 del contenido del archivo de almacén de claves. Puede generarlo con el comando openssl:
    openssl base64 -in <YourKeystoreName>.p12 -out ksBase64Encoded.txt | cat ksBase64Encoded.txt

    Copie el contenido en el valor de la clave en el secreto. Para crear un nuevo secreto:

    1. En Ámbito de lista, en la lista Compartimento, seleccione el nombre del compartimento donde desea crear un secreto.
    2. En la lista de almacenes en el compartimento, seleccione el nombre del almacén que acaba de crear.
    3. Seleccione Secretos y, a continuación, Crear secreto.
    4. En el cuadro de diálogo Crear secreto, seleccione un compartimento de la lista Crear en compartimento. (Pueden existir secretos fuera del compartimento en el que está el almacén.)
    5. Seleccione Nombre y, a continuación, introduzca un nombre para identificar el secreto. Evite introducir información confidencial en este campo.
    6. Seleccione Descripción y, a continuación, introduzca una breve descripción del secreto para ayudar a identificarla. Evite introducir información confidencial en este campo.
    7. Seleccione la clave de cifrado maestra que desea utilizar para cifrar el contenido secreto mientras se importan al almacén. (La clave debe pertenecer al mismo almacén.)
    8. Especifique el formato del contenido secreto que va a proporcionar seleccionando un tipo de plantilla de la lista Plantilla de Tipo Secreto. (Puede proporcionar contenido secreto en texto sin formato al utilizar la consola para crear una versión secreta o secreta, pero el contenido secreto es necesario que esté codificado en base64 antes de que se envíe al servicio. La consola codifica automáticamente el contenido secreto de texto sin formato si se elige este formato.
    9. Seleccione Contenido secreto y, a continuación, introduzca el contenido secreto. (El tamaño máximo permitido para un paquete secreto es 25 KB.)
    10. También puede aplicar una regla para gestionar cómo se utilizan los secretos. Puede crear una regla relacionada con la reutilización del contenido secreto en las versiones de un secreto, o bien puede crear una regla que especifique cuándo caduca el contenido del secreto.
    11. Cuando haya terminado, seleccione Crear secreto.
    12. Repita estos pasos para cada secreto que necesite crear.
  8. Crear Grupo Dinámico:
    1. En la consola, seleccione Identidad y, a continuación, Grupos dinámicos.
      Se mostrará una lista de los grupos dinámicos de su arrendamiento.
    2. Seleccione Crear Grupo Dinámico.
    3. Introduzca un nombre para el grupo dinámico. Registre el nombre para utilizarlo en el futuro. El nombre debe ser único en todos los grupos de su arrendamiento. No puede cambiar este nombre más adelante.
    4. Introduzca una descripción. No puede cambiar la descripción más adelante mediante la consola, pero puede cambiarla mediante la API.
    5. En la sección Reglas de coincidencia, introduzca la siguiente regla (utilice el OCID del compartimento):
      ALL { resource.type = 'fnfunc', resource.compartment.id = 'ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}
    6. Seleccione Crear Grupo Dinámico.
      Se verifica la sintaxis de la regla de coincidencia, pero no los OCID. Asegúrese de que el OCID introducido sea correcto.
  9. Agregue una sentencia a la política que ha creado para Oracle Functions en el nivel de compartimento raíz como parte de Oracle Functions Quick Start Guide para permitir que el grupo dinámico que acaba de crear acceda a los secretos.
    1. En Control y administración, vaya a Identidad y haga clic en Políticas.
      Se muestra una lista de las políticas del compartimento que está viendo.
    2. Seleccione el compartimento raíz de la lista.
    3. Seleccione el nombre de la política de Oracle Functions, como FnTenancyPolicy y haga clic en Editar Sentencias de Política. Agregue la siguiente sentencia:
      allow dynamic-group your_fn_group to read secret-family in tenancy
Con los secretos de almacén configurados, puede utilizar los OCID de cada secreto para acceder a ellos mediante el SDK de Oracle Cloud Infrastructure. Las propiedades V_KEYSTORE, V_KS_PASS y V_PK_PASS se utilizarán en las funciones de ejemplo que se describen más adelante en esta solución.

Configuración de la aplicación Oracle Visual Builder en Oracle Identity Cloud Service

Las aplicaciones de Oracle Visual Builder tienen una aplicación Oracle Identity Cloud Service asociada que se configura automáticamente como cliente de confianza. Debe configurar la aplicación para que se pueda utilizar como cliente del recurso Oracle Functions.

Como parte de la interacción que se muestra en la arquitectura propuesta, una aplicación de Oracle Visual Builder asociada a una instancia de Oracle Identity Cloud Service, federada con Oracle Fusion Applications Cloud Service y conectada a Oracle Functions, debe poder generar un token de acceso que pueda acceder al gateway de API y a los recursos de Oracle Functions (según lo definido por el ámbito). Debe configurar su aplicación Oracle Visual Builder en Oracle Identity Cloud Service para definirla como cliente del recurso que amplía la funcionalidad de SaaS agregando el ámbito de la nueva aplicación Oracle Functions que ha creado.

Al crear una nueva aplicación en Oracle Visual Builder, se crea automáticamente una aplicación de Oracle Identity Cloud Service. Por ejemplo, si crea una aplicación denominada TestSaaSExtensionFN, puede navegar a la consola de Oracle Identity Cloud Service y mostrar aplicaciones, y debe buscar una aplicación denominada TestSaaSExtensionFN.

  1. Cree una aplicación de Oracle Visual Builder.
  2. En Oracle Identity Cloud Service, navegue hasta la aplicación correspondiente a la nueva aplicación de Oracle Visual Builder.
  3. En la sección Política de Emisión de Token, defina Recursos Autorizados en Específicos y utilice el botón Agregar Ámbito para agregar un recurso con el ámbito de la instancia del gateway de API de Oracle Functions.
    Si la URL de redireccionamiento está marcada como obligatoria en la aplicación IDCS de VBCS, se debe a que en la configuración del cliente, se marca la casilla de control Implícito de Tipos de concesión permitidos. En ese caso, deberá proporcionar una URL para la aplicación web de Oracle Visual Builder en esta entrada. Puede actualizar estos valores más adelante según sus necesidades.
Repita este proceso para agregar el ámbito para cada aplicación Oracle Visual Builder adicional en Oracle Identity Cloud Service que debe poder acceder a la aplicación Oracle Functions del gateway de API.