使用 Azure AD 从 MS Dynamics 365 到 Azure 服务总线进行身份验证

Authenticate from MS Dynamics 365 to Azure Service Bus using Azure AD

我安装了 MS Dynamics 365。 我还有一个带有服务总线的 Azure 订阅。 我有一个他们都使用的 Azure AD 租户。

我想知道如何以最佳方式从 MSD365 向 Azure 服务总线进行身份验证?我可以在此设置中使用 Azure AD 执行此操作吗?

经过研究,我发现另一种选择是使用共享访问签名。但是,这似乎不是 Microsoft 推荐的方式,我有一种奇怪的感觉,我工作的安全团队也不会喜欢它。

调用 Azure 服务总线可以作为使用 MSD365 的一部分,也可以作为工作流的一部分。

如有任何帮助,我们将不胜感激。

更新

删除了对其他租户的提及,因为它不相关。

• 由于 Azure 服务总线仅通过 SAS 连接字符串安全地为其他应用程序提供 connecting/communicating,因此没有其他方法可用于允许 MS Dynamics 365 从队列向 Azure 发送消息或从队列中侦听消息服务总线。不过,您可以在另一个租户中增强与 MS Dynamics 365 集成的安全性,如下所示:-

a) 您可以在您的 Azure 服务总线订阅中为队列命名空间配置一个专用服务端点,该队列命名空间已配置为 listen/send 消息 from/to 另一个租户中的 MS Dynamics 365。通过这种方式,您还可以将队列配置为使用私有 DNS 记录,方法是将您的私有 DNS 区域集成到同一租户或实际组织的 AD 所在的另一个租户中。您可以跨租户对等您的虚拟网络,以确保仅通过专用网络进行连接。

b) 此外,您可以在“Public 访问”选项中配置特定的虚拟网络进行连接,并将其连接到其他租户中的特定 IP 地址范围以进行通信。

c) 此外,您可以在托管组织的 AD 的同一租户中配置 Azure 服务总线队列,以将基于角色的访问分配应用于特定用户、组和应用程序以及特定权限的服务主体在与该队列相关的那个角色中。

以上是您可以增强与 Azure 服务总线集成的安全性的方法。

有关将 Microsoft Dynamics 365 集成到 Azure 服务总线的参考,请找到以下链接:-

https://docs.microsoft.com/en-us/dynamics365/customerengagement/on-premises/developer/azure-integration?view=op-9-1

https://powermaverick.dev/2019/03/10/azure-ad-authentication-with-dynamics-crm/

我设法使用 Azure AD 实现了这一点。

步骤如下:

  • 在 Azure AD 中创建一个组并授予发送到服务总线队列的权限

  • 在 Azure AD 中创建应用注册并将此应用添加到组

  • 创建私钥和public证书

  • 将public密钥上传到应用程序注册

  • 在控制台应用程序(用于测试)中,运行以下代码,代入变量中的相关值:

     string tenantId = "xxx";
     string clientId = "xxx";
     string clientCertPath = "mykey.pem";
     string queueName = "xxx";
     string fullyQualifiedNamespace = "xxx.servicebus.windows.net";
    
     TokenCredential credential = new ClientCertificateCredential(tenantId, clientId, clientCertPath);
     var client = new ServiceBusClient(fullyQualifiedNamespace, credential);
    
     ServiceBusSender sender = client.CreateSender(queueName);
    
     ServiceBusMessage busMessage = new ServiceBusMessage("test");
    
     sender.SendMessageAsync(busMessage).Wait();
    

这似乎是一种比使用共享访问签名 (SAS) 更安全的集成方式。