Autenticación oAuth 2.0 con Dynamics 365

Autenticación oAuth 2.0 con Dynamics 365

22 abril, 2019 eromerof 0

Antiguamente, para realizar integraciones en entornos on-Premise de CRM era necesario o bien facilitar las credenciales de acceso o bien desarrollar una capa de servicios que limite las funcionalidades que se quieran hacer en CRM . Sin embargo, entre las numerosas ventajas con las que ya cuenta Dynamics 365 con la capa de azure, una de ellas es la posibilidad de registrarlo como una App y permitir una autenticación oAuth 2.0. Para los que no sepáis qué es, la autenticación oAuth2.0 permite que el usuario inicie sesión en los servicios de Microsoft una vez y a partir de ese inicio de sesión se generará un código Hash llamado Token que permitirá conectarse a Dynamics 365. ¿Os suena el típico botón de iniciar sesión con google o iniciar sesión con facebook para registrarse en una página web?

Es un sistema totalmente seguro puesto que la autenticación oAuth lo realiza cada usuario y cada usuario tiene unos roles de seguridad configurados en CRM. Las propias librerías de autenticación guardarán un refresh token que permitirá refrescar el token. En la versión actual, el usuario no tiene acceso a este refresh token por parte de la librería (se puede obtener por otros métodos que aquí no trataremos). Por lo que una vez el usuario inicie sesión una vez, la librería cacheará el refresh token y no será necesario (al no ser que se indique lo contrario) de que el usuario vuelva a iniciar sesión.

Para empezar debemos ir el portal de Azure que está ligado a nuestra cuenta de Dynamics 365 haciendo click aquí y acceder el registro de aplicaciones bien buscando en todos los servicios de la barra izquierda o bien en el buscador de la parte superior:

El próximo paso es crear una nueva aplicación haciendo click en el siguiente botón:

Seguidamente, el formulario nos pedirá los siguientes parámetros:


Nombre: Nombre de la aplicación (por ejemplo, CRM)

Tipo de aplicación: Puedes elegir entre web o nativa, en este caso escogeremos ‘Nativa’

Uri de redirección: La url que queremos que nos redirija una vez autenticado. Este método de autenticación hará que salte un pop-up de login en nuestra aplicación y debemos especificar la url a la que tiene que volver. (Si no se va a utilizar o no estamos seguros podemos especificarle la url de dynamics 365 porque se podrá cambiar más adelante)

Una vez especificados estos parámetros crearemos la aplicación. Sólo estamos a un paso de tenerlo configurado. Una vez dentro de la aplicación debemos copiar el id de aplicación y lo guardaremos porque lo necesitaremos más adelante

Por último, dentro de nuestra app, accederemos a el apartado de Configuración y a permisos necesarios:

Y aquí vamos a agregar un permiso, que en este caso será el permiso ‘Dynamics CRM Online’. Y seleccionamos checkearemos en los permisos delegados de Dynamics CRM Online

Finalmente es muy importante conceder estos permisos sino, no haremos nada:

Por fin hemos acabado de Azure! Ahora vamos a código puro y duro. En este ejemplo voy realizar la conexión con un programa de consola en .net framework (aunque también está soportado para .net core y otros muchos tipos de plataformas. Más info aquí)

En visual studio crearemos una aplicación de consola en .Net framework, e instalaremos las librerías de ADAL de nuget.

En primer lugar instanciaremos el contexto de autenticación de la siguiente forma:

He utilizado la dirección de autenticación común a todos los tenant con lo cual nos servirá. Y después tendremos que adquirir el token mediante el método AcquireTokenAsync

Este método requiere: la variable UrlCRM es la url de dynamics 365, la variable MyAppId es el aplication id que hemos guardado anteriormente, la variable MyReturnUri es la uri de redirección que hemos configurado en la app de Azure. Finalmente los Platform Parameters definen el comportamiento de nuestra autenticación (si queremos que se genere el token siempre, que lo haga automático y sólo cuando caduque…)

Podéis encontrar mi projecto en este repositorio de github. Espero que os sea útil!!

Leave a Reply:

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *