Note:

Integración de OCI Streaming con otros métodos de autorización mediante OCI API Gateway

Introducción

A menudo necesitamos que nuestras aplicaciones consuman servicios REST de Oracle Cloud Infrastructure (OCI). Hay varias formas de garantizar la seguridad entre componentes, lo que garantiza que la aplicación pueda autenticarse de forma segura en el servicio de backend.

La mayoría de las veces, esta tarea es nativa en Oracle Cloud, ya que hay varias formas de proteger la red y el acceso a los servicios existentes. Solo unos pocos ajustes y ya está. Sin embargo, hay casos en los que la aplicación puede ofrecer requisitos adicionales de seguridad y conectividad. El caso de uso de este tutorial satisface una necesidad muy común en el escenario híbrido o multinube (local conectado a Oracle Cloud u Oracle Cloud conectado a otra nube).

Presentamos el siguiente escenario:

Por lo tanto, el tutorial proporciona la siguiente solución:

Nota: El código de OCI Functions se puede descargar aquí: OAuthOCIService-fn.zip.

Objetivos

Requisitos

Tarea 1: Configurar OAuth2 con Oracle Identity Cloud Service

  1. Obtenga los parámetros de gateway de API de OCI: empecemos a configurar el mecanismo OAuth2. Necesitamos integrar su instancia de OCI API Gateway en un proveedor de identidad configurando Oracle Identity Cloud Service desde Oracle Cloud para que sea el proveedor de identidad.

    • Vaya a la instancia de gateway de API de OCI y copie el nombre de host. Esta información se utilizará en la configuración del servidor de recursos de Oracle Identity Cloud Service en el siguiente paso.

      img.png

  2. Crear una aplicación de recurso: necesitamos crear un autorizador OAuth2 para la aplicación. Podemos hacerlo con Oracle Identity Cloud Service en Oracle Cloud.

    1. En la consola de OCI, vaya a Identidad y seguridad y seleccione Federación.

      img.png

    2. Haga clic en OracleIdentityCloudSevice.

      img.png

    3. Haga clic en el enlace Consola de Oracle Identity Cloud Service de la instancia de Oracle Identity Cloud Service.

      img.png

    4. Crearemos dos aplicaciones. Haga clic en Aplicaciones y Servicios.

      img.png

    5. En las aplicaciones, haga clic en Agregar.

      img.png

    6. Seleccione Aplicación confidencial para empezar a configurar el servidor de recursos.

      img.png

    7. Vamos a configurar la primera aplicación. Introduzca un nombre en la aplicación del servidor de recursos y haga clic en Siguiente.

      img.png

    8. Haga clic en Skip for later. Solo necesitamos configurar el recurso.

      img.png

    9. Introduzca el nombre de host de API Gateway obtenido en el paso 1.

      img.png

    10. Haga clic en Agregar ámbito e introduzca la información de ámbito.

      img.png

    11. Revise la información de ámbito, haga clic en Siguiente dos veces y haga clic en Terminar.

      img.png

    12. Haga clic en Activar para activar la aplicación.

      img.png

  3. Cree una aplicación cliente.

    1. En Aplicaciones, haga clic en Agregar.

      img.png

    2. Seleccione Aplicación confidencial para empezar a configurar el servidor de recursos.

      img.png

    3. Introduzca un nombre para la aplicación y haga clic en Siguiente.

      img_1.png

    4. Seleccione Configurar la aplicación como un cliente ahora para activar las configuraciones para la aplicación cliente. Seleccione Credenciales de Cliente, Afirmación JWT y En nombre de.

      img.png

      Nota: Si desea validar OAuth2 en el código de función, DEBE definir el indicador Introspección. Esto activará el servicio de la API de REST de Oracle Identity Cloud Service /oauth2/v1/introspect.

      img_10.png

    5. Haga clic en Agregar ámbito.

      img.png

    6. Busque la aplicación de recursos creada antes (oauth_resource_server) y haga clic en Agregar.

      img.png

    7. Puede ver el ámbito agregado a la aplicación. Haga clic en Siguiente.

      img.png

      Nota: Tenga en cuenta el valor de ámbito, deberá utilizarlo para solicitar un token.

    8. Omita los recursos y la ventana Política de capa web. En Autorización, seleccione Aplicar permisos como autorización y haga clic en Terminar.

      img.png

    9. Observe el ID de Cliente y la información del Secreto del Cliente. Necesitará esto para obtener su token.

      img.png

    10. Haga clic en Activar para activar la aplicación y el autorizador OAuth2 está listo para la prueba.

      img_1.png

  4. Obtener un token: ahora podemos probar el autorizador OAuth2 para obtener el token.

    1. Redacte la URL para el autorizador. Para obtenerlo, obtenga la URL de Oracle Identity Cloud Service en el explorador. En la URL de Oracle Identity Cloud Service, puede ver algo como esto: https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/ui/v1/adminconsole.

    2. Necesitará el enlace de URL hasta oraclecloud.com, que es el punto final raíz. Por ejemplo, https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com.

    3. Necesitamos agregar la ruta de autenticación oAuth. Esta URL se ejecutará como una solicitud REST POST. Por ejemplo, https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token. Deberá introducir algunos parámetros para solicitar el token.

    4. Introduzca las credenciales como Autenticación básica, ID de cliente y Secreto de cliente.

      img.png

    5. En el contenido de Cuerpo, introduzca los valores grant_type y ámbito. Recuerde que el ámbito se ha capturado en la configuración de Oracle Identity Cloud Service.

      img.png

    6. Haga clic en Enviar, ejecute la solicitud POST y visualice el token.

      img_2.png

Tarea 2: Configuración de OCI Functions para llamar a la API de SDK de OCI

  1. Descripción de las funciones de OCI y el gateway de API de OCI: se recomienda exponer los servicios a través de un gateway de API de OCI. La autenticación se puede realizar omitiendo las credenciales de OCI API Gateway en los servicios de backend, pero si la autenticación de backend no era el método adecuado para la aplicación cliente, podemos realizar alguna configuración en el nivel de OCI API Gateway.

    En este paso, veamos cómo OCI API Gateway puede ayudarnos a integrar la autenticación OAuth2 y la solicitud de cualquier servicio de OCI, como OCI Streaming a través de OCI Functions.

    OCI Functions puede realizar el trabajo para producir la autenticación/autorización correcta y transferir al servicio OCI sin necesidad de transferir credenciales de usuario o claves privadas a las aplicaciones de consumidor. Algunos servicios del servicio OCI no se pueden autenticar mediante el método OAuth2, por lo que podemos hacerlo con OCI Functions. Para crear y desplegar OCI Functions, consulte Inicio rápido de OCI Functions.

    En este ejemplo, el servicio OCI Streaming puede autenticarse mediante la clave privada de OCI en OCI IAM mediante el método draft-cavage-http-signatures-08 y los consumidores pueden autenticarse mediante OAuth2.

  2. Descripción del código: este código se utilizará con OCI API Gateway. En su despliegue de API, configuraremos el punto final de OCI Streaming en OCI API Gateway y se transferirá como un parámetro de autorización HEADER. Por lo tanto, puede utilizar esta función para muchos servicios en cada despliegue de OCI API Gateway que necesite.

    img_12.png

    • Esta función en Python creará una fecha y hora en formato para la autenticación. Esta fecha y hora deben generarse una vez y utilizarse en dos puntos. A la cabecera Fecha de la solicitud de OCI Streaming y al HEADER criptográfico de la firma.

      img_1.png

    • Esta es la función para el cifrado de firmas. El ensamblaje consiste en utilizar la clave privada del usuario de OCI IAM con SHA-256 y, a continuación, en base64.

      img_2.png

    • El cifrado de firma se utilizará en el HEADER de Autorización completo.

      img_3.png

    • Este es el código de validación de token OAUTH2 de Oracle Identity Cloud Service. Debe configurar el archivo config.json con los parámetros de la aplicación de Oracle Identity Cloud Service.

      img_13.png

    • Este es el principio de la función e inicializa parte de la información de la seguridad de OCI IAM y las variables de OCI Streaming creadas para este despliegue de API (streaming_host y oci_region).

      img_4.png

    • Esta es la parte principal de esta función, hay dos partes.

      En la primera parte, se obtiene el token transferido en la solicitud de API Gateway. Después de esto, llamamos a la función auth_idcs() para validar el token en Oracle Identity Cloud Service. Antes de generar la cadena draft-cavage-http-signatures-08, validamos el token de Oracle Identity Cloud Service. Si no es un token válido, la respuesta generará un error 401 no autorizado.

      En la segunda parte, crearemos dos valores. La fecha (d) con el formato de fecha se utilizará en la creación de la firma (a). Los rdata construirán la respuesta para la función con los valores de autorización y fecha que utilizará OCI API Gateway para autenticarse en OCI Streaming.

      img_15.png

    • Aquí podemos generar un log en OCI Observability y este paso es opcional. Introduzca el identificador de Oracle Cloud (OCID) para el log. Debe crear un log personalizado anteriormente.

      Nota: para crear un log personalizado en OCI Observability, consulte Uso de OCI API Gateway, Functions y Observability para validar el contenido de JSON y supervisar el cuerpo y las cabeceras de API.

      img_6.png

    • Este es el paso final y vuelve con una autenticación válida.

      img_7.png

    Estas son las bibliotecas requirements.txt que se tendrán que cargar en esta función (fn).

    requirements.txt
    ---------------------
    fdk>=0.1.54
    requests
    oci
    cryptography
    six
    PyJWT
    py3_lru_cache
    simplejson
    

    Éste es el archivo config.json.

    img_14.png

    Este es el archivo de configuración de OCI. Puede copiar este archivo de la instalación de la CLI de OCI, pero es importante modificar la sección key_file y eliminar la ruta de la instalación de la CLI de OCI. Se utilizará en el código Python para generar la cadena criptográfica draft-cavage-http-signatures-08.

    img_16.png

    Antes de desplegar la función, cree dos variables y rellene los valores de OCID de flujo de OCI y región de OCI de esta forma.

    fn config app <function-app> streaming_host ocid1.stream.oc1.iad.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxqhgw275qp7a
    fn config app <function-app> oci_region us-ashburn-1
    

    Despliegue su función y configúrela en OCI API Gateway.

Tarea 3: Configuración de un despliegue de API Gateway

Nota: Desarrolle una función y llámela en OCI API Gateway. Consulte OCI Functions: Validate an API Key with API Gateway.

  1. Configure el servicio de gateway de API de OCI. En este ejemplo, configuraremos un servicio de OCI Streaming. En información básica, introduzca el prefijo de ruta de acceso como /20180418/streams/ más el OCID de la instancia de flujo.

    Por ejemplo: /20180418/streams/ocid1.stream.oc1.iad.xxxxxxxxxxxxxxxxxxxxxxxxxxxx

    img.png

  2. En Autenticación, seleccione Autenticación única y Función de autorizador. Seleccione el compartimento y Función de Oracle como get-authorization.

    img.png

  3. Configure los parámetros HEADER de la solicitud.

    Header Parameter 1
    Context table=request.headers
    Header name=Date
    Argument name=Date
    
    Header Parameter 2
    Context table=request.headers
    Header name=token
    Argument name=token
    
  4. Para configurar HEADER para los parámetros de Oracle Identity Cloud Service, debe hacer clic en Mostrar políticas de solicitud de ruta.

    img.png

  5. En las transformaciones HEADER, haga clic en Editar e introduzca Comportamiento en Overwrite en ambos parámetros, Nombre de cabecera como Authorization, Date y Valores como ${request.auth[authorization]} y ${request.auth[date]} respectivamente. ${request.auth[authorization]} y ${request.auth[date]} son los valores devueltos por el código Python de función y se transferirán como HEADER para el servicio de backend.

    img.png

Tarea 4: Configuración del grupo y las políticas de OCI

Para configurar las políticas de OCI Streaming, consulte Políticas de OCI Streaming y puede utilizar políticas comunes. Consulte Políticas comunes.

Tarea 5: Prueba de la API

Simulemos la solicitud OAuth2 de la aplicación para el servicio de despliegue de modelos en OCI Streaming.

  1. Obtenga el token y transfiera el ID de cliente y el secreto de cliente al proveedor de Oracle Identity Cloud Service.

    Verb: POST
    URL: https://idcs-xxxxxxxxxxxxxxxxxxxxxxx.identity.oraclecloud.com/oauth2/v1/token
    BODY (x-www-form-urlencoded):
    scope: xxxxxxxxxxxxxxxxxxx.apigateway.us-ashburn-1.oci.customer-oci.com/super-scope
    grant_type: client_credentials
    HEADER
    Authorization: clientID:clientSecret\*
    
    - convert your clientID:clientSecret to a base64 value
    

    img_2.png

  2. Pruebe la solicitud en OCI API Gateway. Introduzca el punto final de despliegue de API Gateway y seleccione POST en la solicitud REST. Debe declarar seis HEADER en el CUERPO de su solicitud.

    Content-Type: application/json
    access-control-allow-origin: *
    access-control-allow-method: POST,PUT,GET,HEAD,DELETE,OPTIONS
    access-control-allow-credentials: true
    Date: put an actual date in this format -> Thu, 21 Dec 2023 13:53:59 GMT
    token: put your <access_token> here*
    
    * Remember that your token have 1 hour duration.
    

    img_9.png

    Y aquí está el resultado.

    img_11.png

    En Logs, puede ver las cargas útiles de la lógica de autorización de código personalizado.

    img_8.png

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, visita education.oracle.com/learning-explorer para convertirte en un Oracle Learning Explorer.

Para obtener documentación sobre el producto, visite Oracle Help Center.