【发布时间】: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