授权 Dynamics 365 Business Central API
Authorize Dynamics 365 Business Central API
我想创建一个应该按计划 运行 的网络作业。 Webjob 的目的基本上是检查一些数据库表,如果表中有新条目,则相应地在 Dynamics 365 BC 中创建项目。在设计实现所有这些的方法时,第一步是验证 API,因此我们可以进行 POST
调用。文档 here 指定了不同的 API 端点,这些端点具有各自的身份验证机制,即通过 Azure Active Directory(需要应用程序注册 Delegated
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 身份验证不适合此处,因为它需要用户交互才能同意。而不建议将基本身份验证用于生产场景。
请建议应如何生成访问令牌,以便它不需要用户交互。
EDIT
根据 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."
}
}
虽然我已经为我的业务中心用户生成了网络服务访问密钥,并将其与用户名一起用于基本身份验证。我确定我正在复制正确的网络服务密钥。
任何帮助将不胜感激。
Dynamics 365 BC 支持的身份验证方法只有这两个基于 official document:
的选项
- 基本身份验证
- AAD 身份验证
基本身份验证用于 none 用户交互,而 AAD 身份验证用于用户交互。
所以在你的场景中AAD认证已经被Excluded,唯一的选择是Basis Authentication,也就是Application-only权限。
虽然不推荐基本身份验证,但您目前必须使用它来满足您的要求。
并且根据this post在Dynamics 365 Business Central Forum,@Stefano Demiliani 说过基本身份验证可以在生产环境中使用,这只取决于您的选择。
我想创建一个应该按计划 运行 的网络作业。 Webjob 的目的基本上是检查一些数据库表,如果表中有新条目,则相应地在 Dynamics 365 BC 中创建项目。在设计实现所有这些的方法时,第一步是验证 API,因此我们可以进行 POST
调用。文档 here 指定了不同的 API 端点,这些端点具有各自的身份验证机制,即通过 Azure Active Directory(需要应用程序注册 Delegated
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 身份验证不适合此处,因为它需要用户交互才能同意。而不建议将基本身份验证用于生产场景。
请建议应如何生成访问令牌,以便它不需要用户交互。
EDIT
根据 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."
}
}
虽然我已经为我的业务中心用户生成了网络服务访问密钥,并将其与用户名一起用于基本身份验证。我确定我正在复制正确的网络服务密钥。 任何帮助将不胜感激。
Dynamics 365 BC 支持的身份验证方法只有这两个基于 official document:
的选项- 基本身份验证
- AAD 身份验证
基本身份验证用于 none 用户交互,而 AAD 身份验证用于用户交互。
所以在你的场景中AAD认证已经被Excluded,唯一的选择是Basis Authentication,也就是Application-only权限。
虽然不推荐基本身份验证,但您目前必须使用它来满足您的要求。
并且根据this post在Dynamics 365 Business Central Forum,@Stefano Demiliani 说过基本身份验证可以在生产环境中使用,这只取决于您的选择。