Considere el siguiente escenario.
- El sistema tiene un conjunto de propietarios de negocios (es decir, usuarios del sistema)
- Cada propietario de empresa se asigna a un conjunto de clientes
- Los propietarios de negocios inician sesión en el sistema para administrar sus clientes.
Los propietarios de negocios seleccionarán un solo cliente primero, y de ahí en adelante su sesión estará vinculada a ese cliente seleccionado .
Tengo un conjunto de microservicios, cada uno requiere un Customer-ID
para su procesamiento. es decir,
- El microservicio A expone
GET /resource-a/{customer-id}
- El microservicio B expone
POST /resource-b/{customer-id}
- etc.
El Customer-Id
se considera una información confidencial, por lo que se encuentra en forma cifrada.
Sin embargo, sigue siendo vulnerable a escalada de privilegios . es decir, un propietario de un negocio puede compartir erróneamente la identificación del cliente cifrada a través de marcadores, etc. para que el propietario de un negocio pueda acceder a los detalles de los clientes que no están asignados a él. (¿No es exactamente una escalada de privilegios?)
- Quiero evitar la autorización del lado del servidor de la identificación del cliente contra el propietario de la empresa porque se sabe que es una operación lenta y el 90% de las API tendrá que repetir este proceso de autorización
- Todos los microservicios son sin estado, por lo que no es posible cifrar el
Customer-Id
con el id de sesión como la clave (ya que no hay microservicios / sesión con estado) - Además, no creo que sea una buena idea hacer esta autorización en la puerta de enlace, ya que no está diseñada para llevar a cabo tal lógica de negocios.
¿Cómo puedo evitar la escalada de privilegios en esta situación?