• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
Twitter Linkedin Instagram
S4PCADEMY_Logo
Twitter Linkedin Instagram
FORMACIÓN SAP

Otorgue diferentes permisos de operaciones API a diferentes consumidores en SAP API Management para el mismo proxy API

By s4pcademy 


Introducción: Este documento describe cómo otorgar diferentes permisos de operaciones API a diferentes consumidores en SAP API Management para el mismo proxy API utilizando la política KVM y Java Script.

Primero déjame decirte la forma estándar de restringir las operaciones de un consumidor.

Tomemos un ejemplo de API de socio comercial de S/4 Hana.

  1. Abra el proxy API para la API de socios comerciales
  2. Aquí puede ver múltiples recursos con múltiples operaciones.
  3. Haga clic en editar recursos.
  4. Seleccione cualquier recurso y elimine las operaciones que no desee
  5. Guárdelo e implemente el proxy API, luego agregue este proxy API a un producto y un consumidor suscribirá este producto.

Ahora, si algún otro consumidor requirió acceso a la API del socio comercial con alguna otra combinación de recurso y operación, repita el proceso anterior nuevamente del 1 al 5.

Por lo tanto, todas las combinaciones de recursos y operaciones tendrán un proxy API separado y un producto separado que apuntará a la misma API en el back-end. (Consulte la imagen a continuación).

Otro enfoque es una forma personalizada de lograr lo mismo, donde solo un proxy API tendrá todas las combinaciones de recursos y operaciones, y el permiso de operación + acceso a recursos se puede administrar mediante políticas de script KVM y Java. (Consulte la imagen a continuación).

Aquí, voy a utilizar un enfoque similar al anterior. Blog

Beneficios de este enfoque

  1. No es necesario crear múltiples productos y servidores proxy API.
  2. Agregar un nuevo consumidor al proxy API existente es fácil y rápido porque no se requiere trabajo de desarrollo.
  3. El mantenimiento y la mejora del proxy API son fáciles porque no hay múltiples servidores proxy para la misma API backend.
  4. Los permisos de API son configurables.

Aquí voy a agregar políticas al mismo proxy API que usé en mi anterior Blog que explica una forma personalizada de administrar direcciones IP y rangos de direcciones IP.

Antes de continuar, permítanme crear un KVM llamado «Permiso API” y poner permitido operación+recurso de un consumidor, donde la clave es el nombre del consumidor y el valor son combinaciones de operación y recurso.

Formato de la combinación: Operación/Recurso

Ejemplo, Obtener datos donde GET es Operación y «datos» es el recurso de API.

Para combinaciones múltiples, separe cada combinación con “,”

Ejemplo, OBTENER/datos,BORRAR/datos

Déjame explicarte con la ayuda de la imagen de abajo qué es exactamente lo que voy a hacer aquí.

En la imagen de arriba,

  1. El consumidor envía una solicitud a APIM con la clave API en el encabezado.
  2. La política Verificar clave API verificará la clave enviada por el consumidor y, si se encuentra bien, generará el nombre del consumidor de la clave API asociada.
  3. Según el nombre del consumidor, la política de operación de KVM leerá KVM y asignará un valor a la variable «Permiso».
  4. Ahora, la política de script de Java comparará la operación y el recurso solicitados con el valor del permiso.
  5. Si la solicitud es válida, el flujo irá al punto final de destino; de lo contrario, la política de generación de fallas se ejecutará con un mensaje de respuesta personalizado.

Abramos el editor de políticas.

  1. Como puede ver, hay siete políticas en el flujo previo del Proxy End Point.

Ya he explicado las primeras cuatro políticas, así que comencemos con la quinta.

2”Obtener permiso” es una política de operación de KVM, que dirá Permiso API KVM con “verificarapikey.VAPIK.DisplayName«como clave y después de obtener el valor de esa clave KVM, asignará ese valor a la variable»var.Permiso“.

4. “Verificar permiso API» es una política de script java, que hace referencia al script java «Verificar APIPermissions.js“, el script java VerifyAPIPermissions tomará la dirección de operación y recurso de la solicitud e intentará encontrarla en var.Permisosi se encuentra entonces propiedad “javascript.VerifyAPIPermission.failed”se establecerá con falso; de lo contrario, se establecerá con verdadero.

Verificar permisos.js

Código VerifyAPIPermissions.js

var reqResource=context.getVariable("proxy.pathsuffix");
var httpverb=context.getVariable("request.verb");
var permission=context.getVariable("var.AllowedAPI");
var index= reqResource.substring(1).indexOf("/");

var resource="";
if(index == -1)
resource =httpverb+reqResource.substring(0);
else
resource =httpverb+reqResource.substring(0,index+1);

if (!(permission.includes(resource)))
throw "No permission";

5. “RFSinPermiso» es una política de aumento de fallas que se ejecutará si «javascript.VerifyAPIPermission.failed”es igual a verdadero, lo que significa que la política de secuencias de comandos Java falló debido a que no hay permiso.

En cadena de condición “javascript.VerifyAPIPermission.failed es igual a verdadero«

Escriba cualquier mensaje personalizado en la carga útil como «Sin permiso para la operación o recurso solicitado”.

6. Actualice la política, guarde los cambios del proxy e impleméntelo.

Hagamos algunas pruebas positivas y negativas.

Pruebas positivas: Obtener respuesta de API porque obtener permiso del recurso de «datos» está configurado en KVM.

Pruebas negativas: Se produce una respuesta de error porque el permiso de colocación del recurso de «datos» no está configurado en KVM.

Conclusión: Este documento explica cómo utilizar la política de KVM, cómo configurar los permisos de API en KVM y leerlos en tiempo de ejecución.


Auditoría con Spring
Previo
La importancia de Git en el desarrollo de software
Siguiente

Madrid

Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010

México

Paseo de la Reforma 26
Colonia Juárez,  Cuauhtémoc
Ciudad de México 06600

Costa Rica

Real Cariari
Autopista General Cañas, 
San José, SJ 40104

Perú

Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073

Twitter Linkedin Instagram
Copyright 2022 | All Right Reserved.

x