Cómo conectar Excel con Business Central usando Client ID y Client Secret
Conecta Excel con Business Central desde Power Query utilizando una aplicación de Microsoft Entra, sin depender de una cuenta de usuario.
En un artículo anterior vimos cómo crear un Client ID y Client Secret para Business Central.
Una vez tenemos la aplicación registrada en Microsoft Entra y configurada dentro de Business Central, podemos utilizarla para conectarnos desde Excel sin depender de una cuenta de usuario concreta.
En este artículo veremos un ejemplo sencillo utilizando Power Query.
Datos de configuración
Antes de crear la consulta, necesitamos tener preparados los siguientes datos:
- El Tenant ID de Microsoft Entra.
- El Client ID de la aplicación.
- El Client Secret.
- La URL OData V4 del servicio web que queremos consultar.
Para el Client ID debemos utilizar el mismo valor que tenemos configurado en el campo Id. de cliente de la ficha de la aplicación de Microsoft Entra en Business Central:

Por otro lado, para el Client Secret debemos utilizar el Valor que obtuvimos al crear el secreto en Azure, no el Id. del secreto.
Acceder a los servicios web estándar de BC
Desde la página de Servicios web de Business Central podemos publicar o seleccionar la página correspondiente y copiar directamente el campo URL de OData V4:

La dirección tendrá una estructura similar a esta:
https://api.businesscentral.dynamics.com/v2.0/TENANT/ENTORNO/ODataV4/Company('EMPRESA')/SERVICIO_WEB
Crear una consulta en blanco desde Excel
Creamos una consulta en blanco para acceder a Power Query:

Y en “editor avanzado” pegamos una consulta con esta estructura:
let
TenantId = "TENANT",
ClientId = "Id. de cliente de la APP de BC",
ClientSecret = "Valor obtenido al registrar la APP en Azure",
BusinessCentralUrl = "Pegar la URL de OData V4 de Business Central",
Token = Json.Document(
Web.Contents(
"https://login.microsoftonline.com/" & TenantId & "/oauth2/v2.0/token",
[
Headers = [#"Content-Type" = "application/x-www-form-urlencoded"],
Content = Text.ToBinary(
Uri.BuildQueryString([
client_id = ClientId,
client_secret = ClientSecret,
scope = "https://api.businesscentral.dynamics.com/.default",
grant_type = "client_credentials"
])
)
]
)
)[access_token],
Origen = OData.Feed(
BusinessCentralUrl,
[Authorization = "Bearer " & Token],
[Implementation="2.0"]
)
in
Origen
En la parte superior únicamente tenemos que sustituir los cuatro valores necesarios:
TenantId = "TENANT",
ClientId = "Id. de cliente de la APP de BC",
ClientSecret = "Valor obtenido al registrar la APP en Azure",
BusinessCentralUrl = "Pegar la URL de OData V4 de Business Central",
De esta forma podemos reutilizar fácilmente la misma estructura para diferentes entornos o servicios web.
Lo importante es entender que no estamos accediendo con una cuenta de usuario a los datos, sino que es la propia aplicación de Microsoft Entra la que se identifica.
La primera vez que ejecutemos la consulta, Power Query puede preguntarnos qué credenciales queremos utilizar para acceder a los diferentes orígenes. En este caso debemos seleccionar Anónimo.
Nota: si anteriormente habíamos conectado Excel con Business Central utilizando una cuenta de usuario, puede ser necesario eliminar las credenciales previamente almacenadas para Business Central.
Los permisos siguen estando controlados desde Business Central
Utilizar Client ID y Client Secret no significa que la aplicación tenga acceso completo a Business Central. Los permisos que tendrá la conexión serán los que hayamos asignado a la aplicación desde la ficha de Aplicaciones de Microsoft Entra de Business Central. De esta forma, podemos utilizar una identidad técnica independiente de cualquier usuario y controlar específicamente qué información puede consultar.
Cuidado con el Client Secret
En este ejemplo estamos guardando directamente el Client Secret dentro de la consulta de Power Query, por lo que resulta útil para realizar pruebas y entender cómo funciona la autenticación, pero debemos tenerlo en cuenta antes de distribuir un Excel de este tipo, ya que cualquier usuario con acceso al archivo (concretamente, al Power Query del archivo) podría consultar el Client Secret almacenado. Por tanto, aunque este método evita que la conexión dependa de una cuenta de usuario, debemos seguir tratando el Client Secret como una credencial y protegerlo adecuadamente.
Una idea para seguir pensando.
Explorar otras lecturas →