Note:

Personaliza tu seguridad de API con OCI API Gateway y OCI Functions

Introducción

Descubra la sinergia perfecta entre Oracle Cloud Infrastructure (OCI) Functions y OCI API Gateway para implantar un método de autenticación personalizado para sus API y cómo las funciones pueden recuperar argumentos del gateway de API.

Gateway de API de OCI

El servicio de gateway de API de OCI le permite publicar API con puntos finales privados accesibles desde la red y que se pueden exponer con direcciones IP públicas si desea que acepten tráfico de Internet. Los puntos finales admiten la validación de API, la transformación de solicitud y respuesta, CORS, la autenticación y autorización, y la limitación de solicitudes.

Con el servicio de gateway de API de OCI, se crean uno o varios gateways de API en una subred regional para procesar el tráfico de clientes de API y direccionarlo a servicios de backend. Puede utilizar un único gateway de API para enlazar varios servicios de backend (como OCI Load Balancer, instancias de OCI Compute y OCI Functions) en un único punto final de API consolidado.

Funciones de OCI

OCI Functions es una plataforma de funciones como servicio totalmente gestionada, multiinquilino, altamente escalable y bajo demanda. Se basa en OCI de nivel empresarial y en el motor de código abierto Fn Project. Utilice OCI Functions cuando desee centrarse en la escritura de código para satisfacer las necesidades empresariales.

Nota:

Objetivo

Requisitos

Tarea 1: Configuración de grupos dinámicos

Conéctese a la consola de OCI, navegue al dominio, haga clic en Grupos dinámicos y cree grupos con la siguiente información.

Tarea 2: Crear políticas

Vaya a la consola de OCI, vaya a Políticas y cree políticas con la siguiente información.

Tarea 3: Creación de OCI Container Registry

  1. Vaya a la consola de OCI, vaya a Developer Services, Containers & Artifacts, seleccione Container Registry y haga clic en Create repository para crear un repositorio privado para la imagen de función.

    • Nombre del repositorio: introduzca functions/authorizationfunctionjava.

      creación del repositorio

  2. Compruebe los repositorios y anote el espacio de nombres.

    espacio de nombres de repositorio

  3. Abra OCI Cloud Shell donde debe tener instaladas la CLI y Docker de OCI y continúe con el inicio de sesión en el registro. Compruebe cuál es la URL correcta para su región. En este tutorial, estamos utilizando Este de Brasil (São Paulo), donde la URL del registro es gru.ocir.io.

    docker login -u 'yourRepositoryNamespace/oracleidentitycloudservice/yourUserLogin' gru.ocir.io
    Password: YOUR_AUTH_TOKEN_CREATED_EARLIER
    

    conexión a docker

Tarea 4: Creación de funciones de Java OCI como función de autorizador

Nota: Asegúrese de seleccionar la subred privada.

  1. Vaya a la consola de OCI, vaya a Developer Services, Functions, Applications y haga clic en Create application.

    crear aplicación

  2. Inicie OCI Cloud Shell donde haya instalado Docker, la CLI de OCI y la CLI de Fn Project y ejecute los siguientes comandos para inicializar la función.

    Nota: Si ha seguido las tareas, el comando de conexión de Docker ya debería haberse ejecutado. Si no es así, continúe con el paso de conexión de Docker en la tarea 3.

    Vaya a la consola de OCI, vaya a Developer Services, Functions, Applications, seleccione la aplicación y haga clic en Getting Started. Ejecute los siguientes comandos.

    fn list context
    fn use context sa-saopaulo-1
    fn update context oracle.compartment-id PASTE_YOUR_COMPARTMENT_OCID
    fn update context registry gru.ocir.io/PASTE_YOUR_REGISTRY_NAMESPACE/functions
    

    Nota: En este tutorial, estamos utilizando la región Este de Brasil (São Paulo). Si está utilizando una región diferente, debe cambiar la ubicación del registro.

  3. Descargue el código de ejemplo de la función Java desde aquí: authorizationfunctionjava.tar y cárguelo en OCI Cloud Shell y, a continuación, descomprima el archivo.

    # check your file is there
    ls -lrt
    # create your directory
    mkdir authorizationfunctionjava
    # unzip the file
    tar -xvf authorizationfunctionjava.tar -C authorizationfunctionjava
    cd authorizationfunctionjava/
    

    descomprimir archivo tar

    Este código Java simple recibe dos parámetros token y customer. También recupera un tercer parámetro de una variable de entorno del sistema definida en la configuración de la función.

    Nota: Asegúrese de que los nombres de parámetros en el método handleRequest(entrada de entrada) sean los mismos que los nombres utilizados en la configuración del gateway de API. Esto garantiza que el gateway de API transfiera correctamente los parámetros a la función de autorizador.

    código java

    Este fragmento de código valida la entrada y devuelve una respuesta específica.

    validation

    result

    Para obtener más información sobre el formato y los parámetros de respuesta necesarios, consulte Creación de una función de responsable de autorización.

  4. Ejecute el siguiente comando para crear el código y desplegar la función.

    cd authorizationfunctionjava/
    ls -lart
    fn deploy --app chafikFunctions
    

    crear

    crear

  5. Cree varias configuraciones para almacenar las credenciales del cliente para probar la validación de la función.

    Nota: Estas variables de configuración se utilizan como variables de entorno del sistema en el código de ejemplo de Java proporcionado en este tutorial. Sin embargo, puede modificar el código de función para utilizar un enfoque alternativo, como Fn RuntimeContext. Para obtener más información, consulte Uso de Fn RuntimeContext con Functions.

    Nombre/clave de secreto Valor
    FN_AAA_KEY 123.456
    FN_BBB_KEY 898.989
    FN_ORACLE_KEY ABCD1234
  6. Puede configurar estos valores a través de la consola de OCI navegando a Developer Services. En Funciones, haga clic en Aplicaciones, seleccione la aplicación y, a continuación, seleccione la función. En la página de detalles de la función, haga clic en Configuración.

    configuración

    O bien:

    Ejecute los comandos fn.

    fn config function --help
    
    MANAGEMENT COMMAND
    fn config function - Store a configuration key for this function
    
    USAGE
    fn [global options] config function <app-name> <function-name> <key> <value>
    
    DESCRIPTION
    This command sets the configuration of a specific function for an application.
    
    fn config function chafikFunctions authorizationfunctionjava FN_ORACLE_KEY ABCD1234
    
  7. Ejecute el siguiente comando para llamar a la función.

    # Invoke the function to check if it's working as expected
    echo -n '{"data" : {"customer":"ORACLE", "token": "ABCD1234"}}' | fn invoke chafikFunctions authorizationfunctionjava
    

    Nota: La llamada inicial puede tardar hasta un minuto en calentar la función. Revise la configuración para cualquier configuración adicional. Para obtener más información, consulte Reducción de la latencia inicial mediante la simultaneidad aprovisionada.

    Pruebe con datos válidos y no válidos para verificar las respuestas de la función.

    llamar a función

Tarea 5: Creación de OCI API Gateway y una API ficticia para utilizar la función de autorizador

Nota: Asegúrese de seleccionar la subred pública.

  1. Vaya a la consola de OCI, vaya a Developer Services, API Management, Gateways y haga clic en Create Gateway.

    crear aplicación

  2. Vaya a la página Detalles de gateway y anote Nombre de host.

    nombre de host de gateway

  3. Cree un despliegue en el gateway de API. En Información básica, introduzca la siguiente información.

    • Prefijo de ruta de acceso: introduzca /authFunction.

    Nota: Nombre de host y Prefijo de ruta de acceso del gateway de API se utilizarán para formar el punto final de API.

    Información básica

  4. En Autenticación, introduzca la siguiente información.

    • Seleccione Autenticación única.

    • Seleccione Función de Autorizador.

    • Aplicación de Oracle Functions: seleccione la aplicación creada en la tarea 4.

    • Función de Oracle: seleccione la función creada en la tarea 4.

    • Seleccione Función de autorizador de varios argumentos.

    • Argumentos de función: introduzca la siguiente información.

      Tabla de contextos Nombre de Cabecera Nombre del Argumento
      request.headers cliente cliente
      request.headers token token

    Nota El nombre de cabecera hace referencia a la información incluida en la cabecera de solicitud al llamar al punto final de API. El nombre de argumento es el nombre de parámetro que se envía a la función de autorizador. Consulte el código Java en la tarea 4.3.

    autenticación única

    argumentos de función

  5. En Rutas, cree una única ruta para una prueba ficticia con la siguiente información.

    • Ruta: introduzca /mock.
    • Métodos: seleccione GET.
    • Opción de backend: seleccione Edit added single backend.
    • Tipo de backend: seleccione Respuesta de stock.

    ruta

  6. En Rutas, defina la respuesta ficticia y haga clic en Siguiente.

    • Código de estado: introduzca 200.
    • Cuerpo: introduzca {"mensagem" : "ok"}.
    • Nombre de cabecera: seleccione Tipo de contenido.
    • Valor de cabecera: seleccione application/json; charset=UTF-8.

    simular

  7. En Revisar, verifique la configuración y haga clic en Guardar cambios para completar la creación del despliegue.

  8. Ejecute el comando curl para probar la API.

    # Invoke using <Verb Defined in Route> with the endpoint like: <API Gateway Hostname> + <Deployment Path Prefix> + <Route Path>
    # Send parameters, such as customer and token, in the Header with values configured in Task 4 - Step 5
    curl -i -H "customer: AAA" -H "token: 123456" -X GET https://yourapigatewayhosta.your-region.oci.customer-oci.com/authFunction/mock
    

    llamar a función

    Si se invoca con información no válida, la respuesta será HTTP/1.1 401 Unauthorized.

    401 estado

Tarea 6: Uso de OCI API Gateway para recuperar parámetros y ámbito de las funciones de autorizador

Nota Consulte el código Java descargado en la tarea 4. En esta tarea se explica cómo trabajar con result.context y result.scope en el gateway de API.

  1. Recupere valores de contexto de las funciones de autorizador.

    variable de contexto

    Considere un escenario en el que necesite recuperar información de la función de autorizador y utilizarla dentro del gateway de API. Por ejemplo, puede que desee utilizar un token de autorización para llamar a un servicio de backend.

    Nota: En esta demostración de laboratorio, la información se devuelve en la cabecera de respuesta.

  2. Vaya a la consola de OCI, vaya a Developer Services, API Management, Gateways y seleccione el gateway. Haga clic en Despliegues, seleccione el despliegue creado en la tarea 5 y haga clic en Editar.

    editar despliegue

  3. Vaya a Rutas y haga clic en Mostrar políticas de respuesta de ruta.

    respuesta de ruta

  4. En Políticas de respuesta, en Transformaciones de cabecera, haga clic en Agregar para continuar.

    Botón Agregar

  5. En la página Transformaciones de cabecera de respuesta, configure el gateway de API como se muestra en la siguiente imagen y haga clic en Aplicar cambios.

    Ambos parámetros del código Java se incluirán en las cabeceras de respuesta de API.

    • Nombre de cabecera: este campo especifica el nombre del atributo de cabecera en la respuesta de API.
    • Valores: Este campo especifica el nombre del atributo recuperado de la función de autorizador.

    Utilice el siguiente formato:

    ${request.auth[attributeNameFromAuthorizerFunction]}
    
    #examples
    ${request.auth[valor01]}
    ${request.auth[valor02]}
    

    definición de cabecera

  6. Revise la configuración de respuesta de cabecera. Haga clic en Siguiente para revisar los cambios y haga clic en Guardar cambios para aplicarlos.

    definición de cabecera de cheque

  7. Pruebe la API y examine las cabeceras de respuesta.

    respuesta de cabecera

  8. Vamos a aclarar cómo utilizar los valores de ámbito de una función de autorizador para mejorar la seguridad.

    Nota: En el contexto de la autorización, el ámbito hace referencia a los permisos o niveles de acceso específicos otorgados a un usuario o aplicación.

    variable de contexto

    La función de autorizador devuelve todos los ámbitos disponibles (en nuestro ejemplo, esto está codificado) para esta llamada de API.

    En el caso de algunas rutas del despliegue de gateway de API, puede que desee permitir que solo ámbitos específicos mejoren la seguridad.

    Vaya a la consola de OCI, vaya a Developer Services, API Management, Gateways y seleccione el gateway. Haga clic en Despliegues, seleccione el despliegue creado en la tarea 5 y haga clic en Editar.

    editar despliegue

  9. Vaya a Rutas y haga clic en Mostrar políticas de solicitud de ruta.

    solicitud de ruta

  10. En Políticas de solicitud, en Autorización, haga clic en Editar.

    editar botón

  11. En Política de autorización, seleccione Cualquiera como Tipo de autorización, agregue todos los Ámbito permitido devueltos por la función de autorizador y haga clic en Aplicar cambios.

    política de autorización

  12. En Revisar, revise los cambios, haga clic en Siguiente y, a continuación, haga clic en Guardar cambios para aplicar las modificaciones.

    política de autorización

  13. Pruebe la API y verifique que funciona. La función de autorizador devuelve los ámbitos.

    prueba correcta

  14. Cambie el gateway de API para utilizar un ámbito no devuelto por la función de autorizador.

    Revise los cambios, haga clic en Siguiente y, a continuación, en Guardar cambios para aplicar las modificaciones.

    fallo de ámbito

  15. Pruebe la API y verifique el resultado.

    política de autorización

    La respuesta será un estado http 404 Not Found.

    Compruebe que las funciones de autorizador funcionan correctamente, ya que se devuelven ambas cabeceras. Sin embargo, el backend de ruta falla debido a la validación de autorización de ámbito en las políticas de solicitud.

Agradecimientos

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.