【问题标题】:Authorize Dynamics 365 Business Central API授权 Dynamics 365 Business Central API
【发布时间】:2020-06-12 15:35:14
【问题描述】:

我想创建一个应该按计划运行的 Web 作业。 Webjob 的目的基本上是检查一些数据库表,如果表中有新条目,则相应地在 Dynamics 365 BC 中创建项目。在设计实现所有这些的方法时,第一步是对 API 进行身份验证,因此我们可以进行 POST 调用。文档 here 指定了不同的 API 端点,它们具有各自的身份验证机制,即通过 Azure Active Directory(需要使用 Delegatedpermissions 的 Dynamics Business Central API 进行应用注册)或基本身份验证。我知道,我们可以通过以下方式使用客户端 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 文档以支持此方案。但是,在使用 Postman 和基本身份验证探索 API 端点 https://api.businesscentral.dynamics.com/v1.0/<mydomain.com>/api/beta/companies 时,我遇到了以下错误:

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

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

【问题讨论】:

  • 嗨,你有机会检查我的回答吗?有用吗?

标签: c# azure-active-directory dynamics-business-central


【解决方案1】:

Dynamics 365 BC 支持的身份验证方法只有这 2 个基于 official document 的选项:

  • 基础认证
  • AAD 身份验证

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

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

虽然不推荐Basic Authentication,但您目前必须使用它来满足您的要求。

基于 Dynamics 365 Business Central 论坛中的this post,@Stefano Demiliani 表示基本身份验证可用于生产环境,这仅取决于您的选择。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多