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.
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:
-
Aplicación en una red local conectada a Oracle Cloud a través de conexión rápida/VPN.
-
La aplicación debe consumir un servicio OCI Streaming.
-
El servicio OCI no tiene un mecanismo de autenticación que cumpla con las posibilidades del consumidor de aplicaciones.
-
La aplicación debe autenticarse mediante OAuth2 para poder acceder al servicio de forma segura.
Por lo tanto, el tutorial proporciona la siguiente solución:
-
Configure el propio proveedor de identidad de la nube de Oracle Identity Cloud Service para autenticarse mediante OAuth2.
-
Configure OCI API Gateway para integrarse con Oracle Identity Cloud Service para autenticarse mediante un token obtenido.
-
Codifique una función para producir la autenticación para OCI Streaming (método
draft-cavage-http-signatures-08
). -
Cree grupos y políticas para limitar el acceso a los recursos en la nube.
-
Proporcione un proveedor de identidad que le permita transferir el ID de cliente y el ID de secreto y obtener un token de autenticación.
-
Ofrezca un servicio REST de gateway de API funcional que se autentique mediante el token obtenido y permita al consumidor utilizar los servicios de OCI Streaming.
Nota: El código de OCI Functions se puede descargar aquí: OAuthOCIService-fn.zip.
Objetivos
-
Permitir que una aplicación externa consuma servicios REST de OCI con autenticación OAuth2.
-
Proporcione un servicio de autenticación OAuth2 en OCI.
-
Configure OCI API Gateway y OCI Functions para ejecutar los servicios de OCI a través de un token.
Requisitos
-
Instancia de gateway de API de OCI creada y expuesta a Internet. Para obtener más información, consulte Creación del primer gateway de API en Oracle Cloud.
-
Conectividad de red entre OCI API Gateway, OCI Functions y el recurso PaaS de OCI.
-
VCN/subredes
-
Lista de seguridad
-
Gateway de NAT/gateway de Internet
-
Redes públicas/privadas
-
-
Conocimientos de OCI Functions y OCI REST API para codificar una llamada para el servicio OCI.
Tarea 1: Configurar OAuth2 con Oracle Identity Cloud Service
-
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.
-
-
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.
-
En la consola de OCI, vaya a Identidad y seguridad y seleccione Federación.
-
Haga clic en OracleIdentityCloudSevice.
-
Haga clic en el enlace Consola de Oracle Identity Cloud Service de la instancia de Oracle Identity Cloud Service.
-
Crearemos dos aplicaciones. Haga clic en Aplicaciones y Servicios.
-
En las aplicaciones, haga clic en Agregar.
-
Seleccione Aplicación confidencial para empezar a configurar el servidor de recursos.
-
Vamos a configurar la primera aplicación. Introduzca un nombre en la aplicación del servidor de recursos y haga clic en Siguiente.
-
Haga clic en Skip for later. Solo necesitamos configurar el recurso.
-
Introduzca el nombre de host de API Gateway obtenido en el paso 1.
-
Haga clic en Agregar ámbito e introduzca la información de ámbito.
-
Revise la información de ámbito, haga clic en Siguiente dos veces y haga clic en Terminar.
-
Haga clic en Activar para activar la aplicación.
-
-
Cree una aplicación cliente.
-
En Aplicaciones, haga clic en Agregar.
-
Seleccione Aplicación confidencial para empezar a configurar el servidor de recursos.
-
Introduzca un nombre para la aplicación y haga clic en Siguiente.
-
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.
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
. -
Haga clic en Agregar ámbito.
-
Busque la aplicación de recursos creada antes (
oauth_resource_server
) y haga clic en Agregar. -
Puede ver el ámbito agregado a la aplicación. Haga clic en Siguiente.
Nota: Tenga en cuenta el valor de ámbito, deberá utilizarlo para solicitar un token.
-
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.
-
Observe el ID de Cliente y la información del Secreto del Cliente. Necesitará esto para obtener su token.
-
Haga clic en Activar para activar la aplicación y el autorizador OAuth2 está listo para la prueba.
-
-
Obtener un token: ahora podemos probar el autorizador OAuth2 para obtener el token.
-
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
. -
Necesitará el enlace de URL hasta
oraclecloud.com
, que es el punto final raíz. Por ejemplo,https://idcs-xxxxxxxxxxxxx.identity.oraclecloud.com
. -
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. -
Introduzca las credenciales como Autenticación básica, ID de cliente y Secreto de cliente.
-
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.
-
Haga clic en Enviar, ejecute la solicitud
POST
y visualice el token.
-
Tarea 2: Configuración de OCI Functions para llamar a la API de SDK de OCI
-
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.
-
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.
-
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.
-
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.
-
El cifrado de firma se utilizará en el HEADER de Autorización completo.
-
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. -
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
yoci_region
). -
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.
-
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.
-
Este es el paso final y vuelve con una autenticación válida.
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
.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áficadraft-cavage-http-signatures-08
.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.
-
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
-
En Autenticación, seleccione Autenticación única y Función de autorizador. Seleccione el compartimento y Función de Oracle como
get-authorization
. -
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
-
Para configurar HEADER para los parámetros de Oracle Identity Cloud Service, debe hacer clic en Mostrar políticas de solicitud de ruta.
-
En las transformaciones HEADER, haga clic en Editar e introduzca Comportamiento en
Overwrite
en ambos parámetros, Nombre de cabecera comoAuthorization
,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.
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.
-
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
-
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.
Y aquí está el resultado.
En Logs, puede ver las cargas útiles de la lógica de autorización de código personalizado.
Enlaces relacionados
Agradecimientos
- Autor: Cristiano Hoshikawa (Ingeniero de soluciones de Oracle LAD A-Team)
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.
Integrate OCI Streaming with Other Authorization Methods Using OCI API Gateway
F91389-02
November 2024