(msal-node) - Dynamics 365 Business Central returns 401 对于任何具有收到令牌的资源

(msal-node) - Dynamics 365 Business Central returns 401 for any resource with received token

我们目前正在切换到基于 @azure/msal-node 包的基于 OAuth 的授权解决方案,以使用 Dynamics 365 Business Central(19.5,云)提供的解决方案授权我们的 API。不知何故我无法让它工作。当使用检索到的令牌请求任何资源时,我们的租户实例只是 returns 401。

真的走到了尽头,任何帮助将不胜感激。

在 Azure 的“应用程序注册”部分设置的权限

是的,我已代表我们的租户同意所有这些权限(管理员同意)

令牌在 jwt.ms 解码时甚至包含以下范围:

{
  "scopes": [
    "Automation.ReadWrite.All",
    "app_access",
    "API.ReadWrite.All"
  ]
}

我们的实施示例

/**
 * Uses `msal-node`  to authenticate against the microsoft servers
 * to gain access to Dynamics 365 Business Central
 */
async getClientCredentialsToken() {
   try {
      const validity = await this.validateClientCredentialsToken();
      if (validity) return;

      const authOptions = {
        clientId: process.env.AAD_CLIENT_ID,
        authority: process.env.AAD_AUTHORITY,
        clientSecret: process.env.AAD_CLIENT_SECRET,
      };

      const cacheOptions = {
        Account: {},
        IdToken: {},
        AccessToken: {},
        RefreshToken: {},
        AppMetadata: {},
      };

      const cca = new msal.ConfidentialClientApplication({
        cache: cacheOptions,
        auth: authOptions,
      });

      const response = await cca.acquireTokenByClientCredential({
        azureRegion: null,
        skipCache: true,
        scopes: ["https://api.businesscentral.dynamics.com/.default"],
      });

      return response;
    } catch (err) {
      console.log(err);
    }
},

请求现有端点时的响应示例

无论命中什么端点。这是我得到的回应:

{
    "error": {
        "code": "Authentication_InvalidCredentials",
        "message": "The server has rejected the client credentials.  CorrelationId:  b004d293-f576-40c9-bbc6-3fb32533a65b."
    }
}

在文档中找到解决方案

因此,对于遇到相同情况的任何人,我找到了最终有效的方法!您需要按照 inside the official documentation.

所述在 Dynamics 365 Business Central 客户端中注册应用程序