top of page
  • Foto del escritorAlejandro Caravantes Molina

Cómo invocar a la API de Dataverse con autenticación OAuth


Hace no mucho tiempo un cliente nos trasladó la necesidad que sistemas terceros de su organización, hicieran consultas a datos almacenados en Dataverse. En un principio habían pensado en que construyeramos una capa de servicios que serían a los que estos sistemas invocarían.


Soy un defensor a ultranza de una frase que alguna vez escuché decir a alguien en una situación similar. La frase en cuestión era algo asi como: "si Microsoft ya ha pensado en esto y la tecnología ofrece los componentes necesarios para implementar esta funcionalidad, ¿para qué reinventar la rueda?".


Nos pusimos manos a la obra y el resultado es lo que te cuento a continuación: registro de aplicación en Azure AD, creación de nuevo usuario de tipo "aplicación" en Dataverse, y consultas de información a Dataverse via API Rest que viene de caja.



Registro de aplicación en Azure AD


Lo primero que tenemos que hacer es registrar una nueva aplicación en el directorio activo de Azure. Es muy importante destacar que lo que necesitamos es que una aplicación se conecte a Dataverse y no usuarios nominales ya que si ese fuese el caso el escenario sería distinto a lo que vamos a ver aquí.


Como decía lo primero que tenemos que hacer es registrar una aplicación en Azure AD. Yo la he llamado "DataverseAPIClient". Muy original.


Para ello iniciamos sesión en el Portal de Azure con un usuario con permisos suficientes para registrar aplicaciones. Una vez hemos iniciado sesión, vamos al componente Azure Active Directory y a la sección Registros de aplicaciones. Una vez allí, seleccionamos la opción Nuevo Registro.


Introducimos un nombre de la aplicación que estamos registrando y el resto de parametros los dejamos tal y como están con su valor por defecto.


Ve a la página de Información General de la aplicación registrada y copia el valor que aparece en Id de Aplicación (Clente)


Ahora haz clic en el botón superior Puntos de conexión y copia el valor del segundo campo de la ventana emergente que aparece, cuyo nombre es Punto de conexión de token de OAuth 2.0 (v2).


Lo siguiente que vamos a hacer es añadir un secreto a la aplicación que acabamos de crear. Para ello desde el detalle de la aplicación recien creada vamos a la sección Certificados y Secretos y seleccionamos la opción Nuevo Secreto de Cliente. Escribimos el nombre del secreto, el periodo de validez y pulsamos Agregar. Cuidado aquí que necesitamos copiar el valor del secreto generado y sólo lo vamos a poder hacer en este momento y no después.


Creación de nuevo usuario en Dataverse

Una vez tenemos la aplicación registrada en el directorio activo, lo que vamos a hacer es crear un usuario de tipo aplicación en Dataverse vinculado a la aplicación que acabamos de crear.



Para ello accede al portal de Power Apps, selecciona el entorno sobre el que estás trabajando y accede a la Configuración avanzada. Microsoft está trabajando aun en la migración de toda la funcionalidad a la nueva experiencia y esta parte está aun en el to be, por lo que vamos a navegar al modo clásico. Los mas nostálgicos vamos a echar de menos este modo.



Navega hasta System, Security y haz clic en Users. Una vez veas aparezca la vista de usuarios, asegurate de seleccionar la vista con nombre Application Users. Cuando hayas seleccionado esta vista haz clic en el boton New de la barra de herramientas. Esto hará que se abra un formulario de alta de usuarios donde solo vamos a poder introducir el campo con nombre Application ID ya que todos los demás campos son de solo lectura y se van a setear automáticamente al guardar el usuario. Pega el valor que copiaste del campo Id de Aplicación (Cliente) en la página de Información General cuando registraste la aplicación en el directorio activo y haz clic en el botón Save. Cuando se guarde el usuario que acabamos de crear aparecerán los valores del resto de campos.


Ahora lo único que nos falta es asociar un rol de seguridad al nuevo usuario desde el botón Manage Roles. Para mi prueba de concepto yo he asociado a mi usuario de aplicación el rol de System Administrator. Lógicamente esto no es válido en un entorno productivo, por lo que utiliza un rol mas restrictivo o crea un rol customizado con única y exclusivamente los mínimos permisos necesarios que este usuario va a necesitar.


Consumo de la API de Dataverse vía Postman

Vamos a empezar haciendo una prueba sencillita para asegurarnos que la autenticación esta funcionando correctamente. Para ello abre una nueva request de Postman e introduce la url que puedes obtener desde la Configuración Avanzada del entorno en el que estas trabajando y accediendo a la opicón Customizations, Developer Resources. Copia el valor que aparece en el campo Service Root y añade al final "/WhoAmI". Tendrás una url parecida a esta: "https://nombredetuentorno.api.crm4.dynamics.com/api/data/v9.2/WhoAmI".


Pega esa url en la nueva request de Postman que has abierto antes y vamos con la parte interesante. Ve a la pestaña Authorization y en el desplegable Type selecciona OAuth 2.0. En la parte de la derecha bajo el título Configure New Token establece los siguientes valores:

  • Gran Type: Client Credentials

  • Access Token Url: el valor que copiaste en el popup de Puntos de conexión después de registrar la aplicación en el directorio activo

  • Client ID: el valor que copiaste al registrar la aplicación con nombre Id de Aplicación (cliente)

  • Client Secret: el valor del secreto que creaste en la nueva aplicación

  • Scope: la url de tu entorno seguido de "/.default". La url debe ser parecida a esta: "https://nombredetuentorno.api.crm4.dynamics.com/.default"

  • Client Authentication: Send as Basic Auth header

Después de todas estas configuraciones la ventana de Postman debe tener un aspecto similar al que se puede ver a continuación. (Consejo: utiliza las variables y los entornos de Postman y cuidado con las cookies!!!)


Si todo ha ido bien, cuando hagas clic sobre Get New Access Token, Postman obtendrá un token de autenticación válido para lanzar cualquier petición a Dataverse vía API para las que el usuario que has creado tenga permisos. Si ejecutas la operación WhoAmI y todo va como debe ir, tendrás un response parecido a este:

{
    "@odata.context": "https://nombredetuentorno.api.crm4.dynamics.com/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.WhoAmIResponse",
    "BusinessUnitId": "1c009adb-78db-eb11-bacb-000d3ab35ed0",
    "UserId": "0e062d76-0753-ec11-8c62-000d3adcebd7",
    "OrganizationId": "127a529f-52ce-4f64-8a24-8460f2be1ec1"
}

A partir de aquí, puedes lanzar consultas sobre las tablas de Dataverse del tipo:

/api/data/v9.1/accounts?$select=name,numberofemployees
&$filter=Microsoft.Dynamics.CRM.Between(PropertyName='numberofemployees',PropertyValues=["5","2000"])

Te dejo el link de la documentación oficial de Microsoft.


Espero haberte ayudado! Nos vemos en la próxima ;-)


Comments


bottom of page