Crear despliegues de gateway de API

Con las funciones listas, puede integrar y probar el mecanismo de autenticación nativa para la validación de JWT con Oracle Identity Cloud Service.

Creación de despliegue del gateway de API con validación de JWT nativa

Al utilizar la función de validación de JWT nativa del gateway de Oracle Cloud Infrastructure, se puede agregar una política de autenticación basada en el token web de Java (JWT) para el despliegue.

Este tipo de JWT permite especificar los datos necesarios para realizar la validación del token de acceso entrante (a través de Cabecera o Parámetro). La política requiere la siguiente información:

  • Emisores permitidos: Emisores de tokens. Hay varios servidores OAuth soportados, pero en este caso utilizará https://identity.oraclecloud.com/.
  • Públicos: los recursos a los que se permite el acceso para este token.
  • Claves Públicas: Juego de Claves Web Json (JWKS) que se va a utilizar para validar el token, dentro de los emisores y públicos. Se permiten dos tipos de JWKS:
    • Claves Estáticas: con esta opción, debe especificar JWKS manualmente mediante el formato JSON, que debería tener las propiedades necesarias según la sección 4 de RFC 7517.
    • Claves Remotas: Con esta opción, debe especificar una URL desde la que JWKS se puede consumir mediante REST. Una limitación de esta función es que la URL especificada debe estar sin proteger, ya que esta función no soporta la capacidad de leer URL protegidas para recuperar JWKS.
  • Opciones Avanzadas:
    • Sesgo máximo en segundos: Si el gateway de API y el proveedor de identidad tienen algunas diferencias de tiempo, este valor permite ajustar el tiempo de la ventana de validez del token para intentar alinear el tiempo entre los dos servicios.
    • Reclamaciones: Para verificar las reclamaciones si es necesario del token entrante. Por ejemplo client_id reclamación o user_id reclamación.

Cree un nuevo nombre de despliegue en el gateway de API con una ruta para acceder a la función creada en los pasos anteriores utilizando el punto final y la validación de JWT. En este ejemplo, el despliegue se denomina: my_jwt_test.

  1. En la consola de Oracle Cloud Infrastructure, en la página Gateway de API, seleccione el gateway activo haciendo clic en su nombre.
  2. En Recursos, seleccione Despliegues y, a continuación, Crear Despliegue.
  3. Configure la política de autenticación con los siguientes valores:
    • Tipo de Autenticación: JWT
    • Token de Autenticación: Cabecera
    • Nombre de Cabecera: Autorización
    • Esquema de Autenticación: Portador
    • Activar Acceso Anónimo: Activado
  4. Agregue el dominio de Oracle Identity Cloud Service como emisor permitido, para que pueda utilizarlo como generador de tokens. En los emisores, defina los emisores permitidos en https://identity.oraclecloud.com/
  5. Agregar un público. Defina un público permitido en la URL de la aplicación Oracle Functions de Oracle Identity Cloud Service. Por ejemplo, https://myinstance.apigateway.mydc.oci.customer-oci.com.
    Los públicos que se van a validar deben ser los de los recursos a los que el token generado necesita acceder. En este caso, esperamos el token de la aplicación Oracle Identity Cloud Service que es el cliente del propietario de recursos de aplicaciones de Oracle Functions Oracle Identity Cloud Service, que tiene como ámbito de recurso el público principal de la aplicación Oracle Functions Oracle Identity Cloud Service.
  6. Agregue el JWK que se utilizará para validar el token de JWT entrante; ya sea remoto o estático JWKS. Para agregar un JWKS remoto:
    1. Acceda a la consola de Oracle Identity Cloud Service.
    2. Seleccione Configuración y, a continuación, seleccione Configuración predeterminada.
    3. Si todavía no está activado, seleccione Certificado de firma de acceso, haga clic en Guardar y, a continuación, haga clic en .
    4. Acceda a la URL de JWK para la instancia de Oracle Identity Cloud Service. Por ejemplo: https://idcs-myinstance.identity.dc1.oraclecloud.com/admin/v1/SigningCert/jwk.
    5. Después de validar que puede ver la URL de JWK, vuelva a gateway de API y configure las claves públicas. Defina el tipo en JWKS Remoto y defina el URI en la URL que acaba de validar.
  7. Para agregar un JWKS estático:
    1. Defina el formulario Static Key (Clave estática). Para ello, debe solicitar JWK para Oracle Identity Cloud Service. Puede hacerlo con curl. Por ejemplo:
      ## Get access token to be able to invoke protected /admin/v1/SigningCert/jwk endpoint.
      # Clientid and ClientSecret should be from an existing IDCS Application in the stripe.
      #
      $ curl -X POST -u "<clientId>:<clientSecret>" https://idcs-myinstance.identity.dc1.oraclecloud.com/oauth2/v1/token -d "grant_type=client_credentials&scope=urn:opc:idm:__myscopes__"
       
       
      export jwtToken="<RETRIEVED_TOKEN>"
       
      ## Get JWK
      $ curl -X GET  https://idcs-myinstance.identity.dc1.oraclecloud.com/admin/v1/SigningCert/jwk -H "Authorization: Bearer ${jwtToken}"
       
      {
          "keys":[{
              "kty":"RSA",
              "x5t#S256":"<value>",
              "e":"<value>",
              "x5t":"<value>",
              "kid":"SIGNING_KEY",
              "x5c":["<value>"],
              "key_ops":["encrypt","verify","wrapKey"],
              "alg":"RS256",
              "n":"<value>"
          }]
      }
    2. Configure las claves públicas en gateway de API. Configure el tipo como Static Keys (Claves estáticas). Establezca el ID de clave en SIGNING_KEY y el formato en la clave web JSON. Pegar en una clave web JSON, utilizando solo el siguiente subconjunto de los valores que obtuvo de Oracle Identity Cloud Service.
      El gateway de API sólo soporta determinadas propiedades de la clave JWK. En lugar de la propiedad key_ops, utilice la propiedad use.
      {
              "kty":"RSA",
              "e":"<value>",
              "kid":"SIGNING_KEY",
              "use":"sig",
              "alg":"RS256",   
              "n":"<value>"
      }
  8. Si lo desea, puede agregar validación adicional en la sección Verificar reclamaciones. Agregue una reclamación client_id para permitir solo los valores que corresponden a la aplicación Oracle Identity Cloud Service asociada a la aplicación Oracle Visual Builder. Si tiene varias aplicaciones de Oracle Visual Builder y los tokens de OAuth se generarán utilizando varias aplicaciones de Oracle Identity Cloud Service de Oracle Visual Builder, deberá agregar todos los identificadores de cliente de Oracle Identity Cloud Service a este paso de verificación. Defina la clave de reclamación en client_id, introduzca uno o más valores de reclamación y active la casilla de control Necesario.
  9. Opcionalmente, puede configurar CORS para permitir solicitudes de los dominios especificados. Por ejemplo, puede que necesite permitir a los nombres de host del servidor de Oracle Visual Builder como orígenes de solicitudes permitidos. Definir los orígenes permitidos en las URL de los servidores, cabeceras visibles para autorización, cabeceras permitidas para autorización, permitir credenciales en Sí y métodos permitidos en GET, POST.
  10. Cree una ruta para que apunte a su función, como la función saasopportunitiesfn de ejemplo. Defina Ruta de Acceso en /assertion/facall, Métodos para GET y POST, Tipo en Oracle Functions, asegúrese de que la Aplicación en <su compartimento> tiene el compartimento correcto seleccionado, defina la aplicación en el nombre de la aplicación como myapplication y defina Nombre de Función en el nombre de la función, como saasopportunitiesfn.
Después de guardar los cambios, puede revisar el contenido de la carga útil my_jwt_test de Despliegue de gateway de API.

Probar Llamada REST de Punto Final

Para probar la nueva llamada REST de punto final, puede utilizar la función Obtener nuevo token de acceso de Postman.

Tenga en cuenta que si utiliza el token generado en los siguientes pasos, no podrá acceder a los puntos finales de Oracle Fusion Applications Cloud Service directamente, porque el token se ha generado con la aplicación Oracle Identity Cloud Service de Oracle Visual Builder y solo puede acceder a Oracle Functions con la configuración actual, según los ámbitos que haya configurado previamente. Además, si utiliza otra aplicación Oracle Identity Cloud Service para generar el token, y esa aplicación no tiene los permisos necesarios para acceder al ámbito de recursos de Oracle Functions, el gateway de API no permitirá la solicitud (devolverá un error 401) porque usted agregó el público del recurso Oracle Identity Cloud Service de Oracle Functions. Si ha agregado las verificaciones de ID de cliente de reclamaciones, el gateway de API solo garantizará que los tokens coincidan con los client_ids de aplicaciones de Oracle Identity Cloud Service especificados.

Utilice los siguientes parámetros para probar:

  • Tipo de Asignación: Credenciales de Contraseña: Este tipo de permiso se utiliza para asegurarse de que el nombre de usuario proporcionado será el sujeto del token generado.
  • URL de token de acceso: URL de OAuth de instancia de Oracle Identity Cloud Service. Por ejemplo, https://idcs-myinstance.identity.dc1.oraclecloud.com/oauth2/v1/token.
  • Usuario: usuario que existe en Oracle Identity Cloud Service y en Oracle Fusion Applications Cloud Service con los privilegios adecuados en ambos.
  • Contraseña: Introduzca la contraseña para este usuario.
  • ClientId: ID del recurso de Oracle Functions del cliente de Oracle Identity Cloud Service asociado con Oracle Visual Builder.
  • ClientSecret: secreto de cliente del recurso Oracle Functions del cliente de aplicación de Oracle Identity Cloud Service asociado con Oracle Visual Builder
  • Ámbito: este ámbito debe coincidir con los recursos proporcionados por la aplicación Oracle Identity Cloud Service de Oracle Functions. Por ejemplo, https://myservice.apigateway.dc1.oci.customer-oci.com/saasextension
  1. Llame a la ruta configurada para apuntar a la función asserter utilizando Postman y los parámetros mostrados anteriormente.
  2. Como alternativa, use curl. Por ejemplo:
    curl --location --request GET 'https://myservice.apigateway.dc1.oci.customer-oci.com/saasextension/assertion/facall' \
    --header 'Authorization: Bearer <JWT_TOKEN>'
Debe obtener un resultado de cualquiera de las herramientas, de manera similar a la siguiente:
{
  "principal": "mary.jane",
  "gotPrincipalFrom": "BEARER",
  "statusCode": "200",
  "response": {
    "items": [],
    "count": 0,
    "hasMore": false,
    "limit": 25,
    "offset": 0,
    "links": [
      {
        "rel": "self",
        "href": "https://myfusionservice.fa.dc1.oraclecloud.com:443/fscmRestApi/resources/11.13.18.05/expenses",
        "name": "expenses",
        "kind": "collection"
      }
    ]
  }
}

Creación opcional de despliegue de gateway de API con autenticación personalizada

Utilice este enfoque si decide utilizar una función de autenticación personalizada para validar el token de portador para llamadas entrantes a puntos finales de gateway de API.

Es la función opcional que ha definido si ha seguido los pasos de la sección Define Opcionalmente una Función de Autenticación en Oracle Cloud Infrastructure.

  1. Para desplegar el gateway de API, en la página Gateway de API, seleccione el gateway activo haciendo clic en su nombre.
  2. En Recursos, haga clic en Despliegues y, a continuación, en Crear despliegue.
  3. Con el modo Nuevo, puede hacer clic en el asistente para desplegar el gateway de API.
    También puede cargar un archivo de definición de despliegue, como se describe a continuación.

El siguiente fragmento de código es un archivo JSON de especificación de despliegue de API Oracle Cloud Infrastructure de ejemplo que puede utilizar para desplegar en lugar de utilizar el asistente. Dentro de este archivo, vemos:

  • Líneas 1-8: política de solicitud de autenticación. Ésta es la definición que indica que, para cualquier solicitud de este despliegue, llame primero a esta función (functionId), transfiriendo tokenHeader y, si devuelve verdadero, continúa, o bien responda con un mensaje no autorizado HTTP.
  • Líneas 9-17: Definición de CORS para gestionar y controlar el uso compartido de recursos de origen cruzado.
  • Líneas 18-43: Dos puntos de entrada de URL/VERb a funciones individuales en FaaS.
{
    "requestPolicies": {
      "authentication": {
        "type": "CUSTOM_AUTHENTICATION",
        "isAnonymousAccessAllowed": true,
        "functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx",
        "tokenHeader": "Authorization"
      }
      "cors":{ 
         "allowedOrigins": [<list-of-origins>], 
         "allowedMethods": [<list-of-methods>], 
         "allowedHeaders": [<list-of-implicit-headers>], 
         "exposedHeaders": [<list-of-exposed-headers>], 
         "isAllowCredentialsEnabled": <true|false>, 
         "maxAgeInSeconds": <seconds> 
      } 
    },
    "routes": [
      {
        "path": "/opportunities",
        "methods": [
          "GET"
        ],
        "requestPolicies": {},
        "backend": {
          "type": "ORACLE_FUNCTIONS_BACKEND",
          "functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx"
 
        }
      },
      {
        "path": "/opportunities/{optyid}",
        "methods": [
          "PATCH"
        ],
        "requestPolicies": {},
        "backend": {
          "type": "ORACLE_FUNCTIONS_BACKEND",
          "functionId": "OCID1.fnfunc.oc1.phx.xxxxxxxxxxxxxxx"
        }
      }
    ]
  }
</seconds></true|false></list-of-exposed-headers></list-of-implicit-headers></list-of-methods></list-of-origins>