【问题标题】:Authenticate from MS Dynamics 365 to Azure Service Bus using Azure AD使用 Azure AD 从 MS Dynamics 365 向 Azure 服务总线进行身份验证
【发布时间】:2022-01-24 17:43:45
【问题描述】:

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

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

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

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

任何帮助将不胜感激。

更新

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

【问题讨论】:

  • 谢谢,我有一个公开的评论。我会等到我很高兴这是答案。

标签: azure azure-active-directory azureservicebus dynamics-365


【解决方案1】:

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

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

b) 此外,您可以在“公共访问”选项中配置特定的虚拟网络进行连接,并将其连接限制在其他租户的特定 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 服务总线安全通信的唯一方法是通过 SAS? Azure 文档提到 AAD 是保护连接的推荐方法?
  • 在等待回复时,我做了很多研究,并通过使用 Azure AD 和使用证书进行身份验证的应用注册来完成这项工作。
【解决方案2】:

我设法使用 Azure AD 完成这项工作。

步骤如下:

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

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

  • 创建私钥和公共证书

  • 上传公钥到应用注册

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

     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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 2017-05-05
    相关资源
    最近更新 更多