【发布时间】:2018-11-15 20:58:23
【问题描述】:
有时您需要知道答案才能提出正确的问题,因此我不确定此查询的标题是否完美。反正就到这里了。
我开发了一个 Azure Function App(基于时间触发器)来在线连接到 Dynamics 365 并做一些工作。都好!由于这是一个 POC,我想看看有什么可能,所以我编写了以下代码。
IServiceManagement<IOrganizationService> orgServiceManagement;
orgServiceManagement = ServiceConfigurationFactory.CreateManagement<IOrganizationService>(new Uri(System.Environment.GetEnvironmentVariable("OrganizationService")));
AuthenticationCredentials authCredentials = new AuthenticationCredentials();
authCredentials.ClientCredentials.UserName.UserName = "[Non-interactive CRM Username here]";
authCredentials.ClientCredentials.UserName.Password = "[Password here]";
AuthenticationCredentials tokenCredentials;
tokenCredentials = orgServiceManagement.Authenticate(authCredentials);
OrganizationServiceProxy organizationProxy = new OrganizationServiceProxy(orgServiceManagement, tokenCredentials.SecurityTokenResponse);
我的问题...显然,现在 POC 工作了,我想找到一种方法来针对 Azure AD 对 Function App 进行身份验证(而不是在代码中传递凭据)并获取可用于创建 OrganisationServiceProxy 的访问令牌,但我该怎么做。我似乎无法找到一个直接的答案。许多架构师风格的答案都在云端。我需要开发人员风格的答案(先做这个,然后做那个):)
我相信很多新手 azure 开发人员会发现了解这一点很有用。提前致谢。
编辑注意:这个问题与Authenticate with Dynamics 365 from an Azure Function 不同,因为我在同一个租户和订阅中,使用时间触发器而不是网络挂钩。我的函数应用唤醒,连接到 CRM,进行一些计算,更新 CRM 并重新进入睡眠状态。
【问题讨论】:
-
虽然触发器不同,但是是什么导致其他帖子的建议无效?使用服务到服务设置对我来说很有意义。您将客户端 ID 和机密作为应用设置作为环境变量引用,您可以使用它们从 AAD 获取令牌,然后调用 CRM。
-
您是否尝试使用 MSI 来验证您的功能?
标签: azure dynamics-crm azure-functions