0

我想创建一个应该按计划运行的 Webjob。Webjob 的目的基本上是检查一些数据库表,如果表中有新条目,则相应地在 Dynamics 365 BC 中创建项目。在设计实现所有这些的方法时,第一步是对 API 进行身份验证,以便我们可以进行POST调用。此处的文档指定了具有各自身份验证机制的不同 API 端点,即通过 Azure Active Directory(需要具有Dynamics Business Central API 权限的应用程序注册Delegated)或基本身份验证。我知道,我们可以通过以下方式使用客户端 ID 和机密从 Azure 活动目录获取访问令牌:

ClientCredential clientCredential = new ClientCredential(clientId, clientSecret);
var authenticationContext = new AuthenticationContext(authorityUri, true);
AuthenticationResult authenticationResult = authenticationContext.AcquireTokenAsync(resource, clientCredential).GetAwaiter().GetResult();
accessToken = authenticationResult.AccessToken;

现在,由于我的 Web 作业需要在没有任何用户交互的情况下在后端运行,因此 Azure AD 身份验证不适合这里,因为它需要用户交互才能同意。而基本身份验证不建议用于生产场景。
请建议应该如何生成访问令牌,以便它不需要用户交互。

编辑

根据 Allen 的回复,基本身份验证可用于此场景,但需要更新 Microsoft 文档以支持此场景。但是,在https://api.businesscentral.dynamics.com/v1.0/<mydomain.com>/api/beta/companies使用 Postman 和基本身份验证探索 API 端点时,我遇到了以下错误:

{
    "error": {
        "code": "Authentication_InvalidCredentials",
        "message": "The server has rejected the client credentials.  CorrelationId:  641ea3fd-19d6-4402-8e68-a70145eb6da3."
    }
}

虽然我为我的业务中心用户生成了 Web 服务访问密钥,并将其与用户名一起用于基本身份验证。我确信我正在复制正确的网络服务密钥。任何帮助将不胜感激。

4

1 回答 1

2

根据官方文档,Dynamics 365 BC 支持的身份验证方法只有这 2 个选项:

  • 基础认证
  • AAD 身份验证

基本身份验证用于无用户交互,而 AAD 身份验证用于用户交互。

因此,在您的场景中,AAD 身份验证已被排除,唯一的选择是基本身份验证,它适用于仅限应用程序的权限。

虽然不推荐使用基本身份验证,但您必须使用它来满足您当前的要求。

根据Dynamics 365 Business Central Forum 中的这篇帖子,@Stefano Demiliani 表示基本身份验证可用于生产环境,这仅取决于您的选择。

于 2020-06-15T06:29:59.570 回答