La autenticación tipo Office 365 se para. Y ahora, ¿qué hago?

Seguro que os ha pasado a muchos. A la hora de realizar la autenticación, ésta se para. ¿Qué podemos hacer? Vamos a dedicar esta pequeña entrada a contar nuestra experiencia y cómo solucionar este problema.

1.- ¿Qué ha pasado?

Microsoft ha tomado la decisión de apagar/limitar un tipo de autenticación que hasta ahora estaba muy extendida: la autenticación por usuario/contraseña del tipo Office 365.

Podemos encontrar esta información en la siguiente nota: Deprecation of Office365 authentication type and OrganizationServiceProxy class for connecting to Dataverse

En esta nota, se menciona que las aplicaciones construidas utilizando código C# que utilicen las librerías Microsoft.Xrm.Sdk o Microsoft.Xrm.Tooling y que utilicen cadenas de conexión del tipo:

"AuthType=Office365;Username=user@domain.com;

Url=https://org.api.crm4.dynamics.com/;Password=########;";

Van a dejar de poder conectarse con su respectivo dataverse.

WS-Trust es un estándar establecido en Marzo de 2007. Es una extensión del protocolo WS-Security. Es necesario cambiar este protocolo por autenticaciones más modernas que cumplan con los estándares de seguridad actuales. Microsoft ha mantenido activo y actualizado este protocolo para mantener la compatibilidad con desarrollos antiguos y para que los sistemas que ya tienen años sigan siendo funcionales y seguros. Debido al avance tecnológico y en computación, los cifrados utilizados ya no son seguros hoy en día, más aun pensando en que, tanto usuario como contraseña, solo están protegidos por el cifrado en el transporte.

La intención es que los nuevos desarrollos se realicen sobre los nuevos sistemas de autenticación para asegurar la integridad de la información y de los usuarios que utilicen estas aplicaciones.

El roadmap que está siguiendo Microsoft para realizar este "apagado" es el siguiente:

  • Desde Octubre de 2020 no se puede utilizar este sistema de autenticación en nuevas Tenants.
  • Desde Octubre de 2020 las nuevas regiones no podrán utilizar este protocolo.
  • Desde Abril del 2021 esta autenticación no se podrá usar en nuevos entornos dentro de una Tenant (Microsoft no especifica que es un "nuevo entorno"). El apagado se realizará por Regiones durante el transcurso de 6 semanas.
  • Desde Abril del 2022 no se podrá utilizar este tipo de autenticación en ningún entorno dentro de una Tenant, ni nuevo ni antiguo.

Tal como podemos ver, lo que nos sugieren desde Microsoft es que utilicemos otros sistemas más modernos para autenticarnos contra nuestros entornos, lo que a nosotros nos parece un acierto.

Si, muy bien, pero ¿esto me importa?

En el siguiente punto vamos a ver si esto nos afecta o no.

Bonus:

El servicio de Discovery regional también ha quedado fuera de servicio desde el día 21 de Abril de 2021. Esto ha provocado que algunas aplicaciones de terceros dejaran de funcionar correctamente debido a que usaban este sistema para identificar las url de las organizaciones.

2.- ¿Me afecta?

Para saber si esto tiene alguna clase de impacto en nuestra aplicación tenemos que revisar todas las aplicaciones cliente que se conecten a nuestro sistema (WS, Batchs, Functions, Jobs, etc). Si estas aplicaciones usan usuario/contraseña, es conveniente revisarlo.

Una forma rápida de buscar en nuestro repositorio de código sería buscando cadenas de conexión que se parezcan a:

"AuthType=Office365;Username=user@domain.com;

Url=https://org.api.crm4.dynamics.com/XRMServices/2011/Organization.svc;

Password=########;"

También se puede revisar si se usa la clase OrganizationServiceProxy o OrganizationService.

Si tras esto descubres que estos cambios te afectan, ¿qué puedes hacer? ¿Cómo puedes arreglarlo? Vamos a verlo.

3.- Nuestra solución.

Una vez hemos identificado que este problema nos afecta tenemos que realizar varias acciones, la primera de ellas asegurarnos que usamos la última versión de la librería Microsoft.CrmSdk.XrmTooling.CoreAssembly, el uso de esta librería requiere net. Framework 4.6.2 como mínimo.

Una vez tenemos la última versión de esta librería tenemos que migrar nuestra conexión a Dynamics a el sistema OAuth, para ello solo tenemos que modificar nuestra cadena de conexión, el nuevo formato de esta será:

“AuthType=OAuth;Username=user;Url=https://org.crm4.dynamics.com/;Password=password;

AppId=51f81489-12ee-4a9e-aaae-a2591f45987d;RedirectUri=app://58145B91-0C36-4500-8554-080854F2AC97;”

Es importante indicar que en la cadena que indicamos el AppId y la RedirectUri son las que indica Microsoft para entornos de testing, para usar esto en un entorno productivo se debe usar las variables de nuestro AD.

Como último paso tenemos que asegurarnos que usamos el objeto CrmServiceClient y no otros objetos como puede ser IOrganizatioService o algun tipo de proxy, este objeto hereda de los anteriores por lo que se usa de la misma manera.

Una vez realizadas estas modificaciones estaremos preparados para estos cambios por parte de Microsoft.