top of page
  • Foto del escritorAlejandro Caravantes Molina

Suplantar a otro usuario utilizando la API de Microsoft Dataverse



¿Nunca se ha presentado la ocasión en que algún cliente necesita poder realizar llamadas a la API de Dataverse con la seguridad de un usuario en concreto, pero sin que el usuario tenga que estar escribiendo sus credenciales en el popup de login de Microsoft?


Pues para resolver entre otros este escenario, aparece la posibilidad de suplantar a un usuario invocando a la API de Dataverse. Dicho así suena algo muy peligroso pero... nada mas lejos de la realidad.


La suplantación de identidad se utiliza para ejecutar cierta lógica en nombre de otro usuario de Microsoft Dataverse y para asegurarnos que esa lógica se ejecuta con el rol de seguridad que corresponde y en el contexto del usuario suplantado.


La suplantación implica utilizar dos cuentas distintas de usuario:

  • Cuenta de usuario (normalmente una cuenta de servicio o lo que se conoce como application user) que se usa para obtener el token de autenticación a la API de Dataverse. Esta cuenta de usuario debe tener el rol de seguridad con nombre Delegated o Delegado para obtener el privilegio prvActOnBehalfOfAnotherUser. Sin este privilegio, esta cuenta no va a poder suplantar a ningún usuario.

  • Cuenta del usuario suplantado con su pertinente rol de seguridad.


Es muy importante recalcar que si el usuario al que queremos suplantar, tiene un permiso del que no dispone la cuenta de usuario delegada, la operación no va a funcionar. Esto significa que la cuenta de usuario con la que obtengamos el token de acceso, debe tener como mínimo los mismos permisos que el usuario al que vamos a suplantar.


Antes de continuar, si no has visto la entrada que escribí (hace ya bastante tiempo...👴) sobre autenticación OAuth a la API de Dataverse, échale un ojo antes de seguir.


Vamos al lío.

Para esta prueba tan sencilla todo lo voy a realizar a través de Postman y ya tengo configurado:

  • Una aplicación registrada en Azure AD, con sus permisos, su secreto, etc. tal y como vimos en el post de autenticación que comentaba arriba.

  • Una cuenta de servicio o application user configurada en el entorno de Power Platform sobre el que estoy trabajando, que hace referencia a la aplicación registrada en Azure AD del punto anterior.

  • Un token de acceso que me permite invocar a la API de Dataverse.


Suplantar a un usuario es tan sencillo como incluir en la cabecera de la llamada a la API la propiedad CallerObjectId. El valor de esta propiedad debe ser el identificador del objeto al que vamos a suplantar. En este caso un usuario.


Este identificador de objeto lo puedes extraer o consultar de varias formas, aunque aquí te dejo las que creo que son mas sencillas:

  • Desde el portal de Azure dirigiéndote a Active Directory, seleccionando Users y en el detalle del usuario al que vamos a suplantar puedes consultar el identificador único de ese usuario


  • Otra opción es consultar directamente la tabla virtual de Dataverse AAD User


Una vez hayas obtenido el identificador del usuario al que vamos a suplantar, lo único que hay que hacer es montar la llamada de la forma que ves en la siguiente imagen. Como puedes observar, lo único que estoy haciendo es crear un registro en la tabla Accounts o Cuenta:

Si ahora vas a la tabla Cuenta, verás un nuevo registro creado y fíjate en algo muy importante: los valores que aparecen en los campos Created By (Delegate) y Created By. Ya te adelanto que el primero va a tener la cuenta que hemos utilizado para obtener el token de autenticación, y el segundo campo tendrá el valor del usuario al que hemos suplantado:


¡Espero que la lectura haya merecido la pena! ¡¡Nos vemos en la siguiente!!

Comments


bottom of page