使用多租户服务器到服务器身份验证

多租户是最常见的应用方案,用于使用 Microsoft 市场分发的应用,但也可以使用多租户,而无需将应用程序与 Microsoft 市场列出。

每个 Microsoft Dataverse 组织都与 Microsoft Entra ID 租户相关联。 您的 Web 应用程序或服务注册到其自己的 Microsoft Entra ID 租户。

在此方案中,任何 Dataverse 租户都可以在管理员同意应用程序访问数据后使用多租户应用程序。

要求

若要创建和测试使用服务器到服务器(S2S)身份验证的多租户应用程序,需要:

  • 用于发布应用程序或服务的 Microsoft Entra ID 租户。

  • 两个 (2) Dataverse 订阅

    • 一个必须与用于发布应用程序或服务的 Microsoft Entra ID 租户相关联。
    • 另一个订阅可能是用于测试订阅者访问应用程序的方式的试用订阅。

概述:开发和测试应用程序

您将创建的应用程序必须注册到您发布应用程序时预期使用的 Microsoft Entra ID 租户中。

概括而言,该过程包括:

  1. 创建注册到 Microsoft Entra ID 租户的多租户 Web 应用程序。
  2. 在 Dataverse 租户中创建与已注册的应用程序关联的应用程序用户
  3. 创建自定义安全角色并将其分配给 Dataverse 租户中的应用程序用户
  4. 使用 Dataverse 租户测试应用程序
  5. 使用单独的 Dataverse 租户测试应用程序

将多租户 Web 应用程序注册到您的 Microsoft Entra ID 租户

你将创建一个多租户 Web 应用程序或服务,该服务使用 Microsoft Entra ID 作为身份验证提供程序。

具体如何操作将不是本主题的重点。 有多种方法可以解决此问题,并做出符合要求或偏好的选择。 有关详细信息和示例,请参阅以下链接:

Microsoft Entra ID 需要以下值来注册应用程序:

价值 Description
应用程序 ID URI。 应用程序的标识符。 在身份验证过程中,此值被发送到 Microsoft Entra ID,以表明调用方希望获取令牌的应用程序。 此外,此值包含在令牌中,以便应用程序知道它是预期目标。
响应 URL 和重定向 URI 对于 Web API 或 Web 应用程序,回复 URL 是Microsoft Entra ID 将向其发送身份验证响应的位置,包括身份验证成功时令牌。
客户端 ID 应用程序的 ID 是在注册应用程序时由 Microsoft Entra ID 生成的。 请求授权代码或令牌时,客户端 ID 和密钥在身份验证期间发送到Microsoft Entra ID。
密钥 向 Microsoft Entra ID 进行身份验证以调用 Web API 时发送的密钥与客户端 ID 一起发送。

注册应用程序时,将为应用程序分配 一个Microsoft Entra ID 对象 ID,这是已注册应用程序的唯一标识符。

如果使用 Visual Studio 创建新的 ASP.NET MVC 应用程序,则可以选择指定应用程序将支持多租户功能。 MVC 应用程序的模板提供用于指定发生哪种身份验证的选项。 创建项目时,通过配置项目属性可以选择身份验证方法。 下图显示了可用的选项:

ASP.NET MVC 更改身份验证对话框。

使用这些选项配置项目时,将配置为使用 OWIN 中间件,并为支持此方案的基本应用程序搭建基架。 通过一些基本修改,它可以调整为与 Dataverse 一起使用。

在创建和注册应用程序进行开发的过程中,很可能用作https://localhost登录 URL回复 URL 值,以便在发布之前在本地测试和调试应用程序。 发布应用之前,需要更改这些值。

注册应用时,必须生成密钥,也称为密钥 ClientSecret。 可以将这些密钥配置为 1 年或 2 年的持续时间。 作为应用程序的主机,你必须将此值视为密码,并且你有责任在密钥过期之前管理密钥的续订。 可能需要使用 Key Vault。 详细信息:https://azure.microsoft.com/services/key-vault/

授予应用程序访问 Dataverse 数据的权限

这是 Dataverse 租户必须与 Microsoft Entra ID 租户关联的原因。 如果 Microsoft Entra ID 租户未与 Dataverse 租户关联,则将无法执行以下步骤。

  1. 转到 https://portal.azure.com 并选择 Microsoft Entra ID
  2. 单击 “应用注册 ”,查找使用 Visual Studio 创建的应用程序。
  3. 需要授予应用程序访问 Dataverse 数据的权限。 在 API 访问 区域中,单击 “所需权限”。 应会看到它已具有 Windows Azure Active Directory 的权限。
  4. 单击“ 添加”,然后选择 API。 在列表中,选择 Dynamics 365 ,然后单击 “选择 ”按钮。
  5. “选择权限”中,选择 “访问 Dynamics 365”作为组织用户。 然后单击 “选择” 按钮。
  6. 单击“ 完成 ”以添加这些权限。 完成后,应会看到应用的权限。

向应用程序授予 Dynamics 365 权限。

在 Dataverse 中创建与已注册的应用程序关联的应用程序用户

当应用程序访问应用程序的某个订阅者的 Dataverse 数据时,它将需要订阅者的 Dataverse 组织中的应用程序用户。 与任何 Dataverse 用户一样,此应用程序用户必须与至少一个安全角色相关联,该角色定义用户能够访问的数据。

SystemUser 表有三个新列用于存储此数据。

架构名称 显示名称 类型 Description
ApplicationId 应用程序 ID 唯一标识符类型 (UniqueidentifierType) 应用程序的标识符。 这用于访问另一个应用程序中的数据。
ApplicationIdUri 应用程序 ID URI。 字符串类型 用作外部应用的唯一逻辑标识符的 URI。 这可用于验证应用程序
AzureActiveDirectoryObjectId Azure AD 对象 ID UniqueidentifierType (唯一标识符类型) 这是应用程序目录对象 ID。

systemuser``AzureActiveDirectoryObjectId 属性值必须是对已注册应用程序的 Microsoft Entra ID 对象 ID 的引用。 当基于 ApplicationId 值创建应用程序用户时,将在 Dataverse 中设置此引用。

注释

最初使用自己的 Dataverse 租户和与之关联的 Microsoft Entra ID 租户开发应用程序时,只需创建应用程序用户,因为已注册的应用程序已是Microsoft Entra ID 租户的一部分。

但是,为了在不同的组织中创建应用程序用户进行测试,或者每当订阅者使用应用程序时,他们都必须首先授予应用程序的同意,因此该过程中的步骤不同。 有关详细信息,请参阅 使用单独的 Dynamics 365 租户测试应用程序

为应用程序用户创建安全角色

在下一步中,你将创建 Dataverse 应用程序用户。 此用户的特权和访问权限将由你设置的自定义安全角色定义。 在创建应用程序用户之前,必须创建自定义安全角色,以便可以将用户关联到该角色。 详细信息:创建或编辑安全角色

注释

应用程序用户不能与其中一个默认 Dataverse 安全角色相关联。 必须创建自定义安全角色才能与应用程序用户关联。

手动创建 Dataverse 应用程序用户

本文介绍了创建未经许可的应用程序用户的交互式过程。 创建应用程序用户后,将用户与在 为应用程序用户创建安全角色中创建的自定义安全角色相关联。

详细信息: 在 Power Platform 管理中心管理应用程序用户

使用 Dataverse 租户测试应用程序

由于应用程序已注册到 Microsoft Entra ID 租户,并且开发组织中的应用程序用户已配置,因此你可以继续针对自己的 Dataverse 租户开发应用程序。 但这不是多租户功能的有效测试。 需要在单独的 Dataverse 租户上测试应用程序。

使用单独的 Dataverse 租户测试应用程序

在使用单独的 Dataverse 租户测试应用程序之前,Microsoft Entra ID 租户的管理员必须为应用程序授权。 管理员通过使用浏览器导航到应用程序来授予同意。 首次访问应用程序时,他们会看到如下所示的对话框:

授予访问 Dynamics 365 数据的许可。

当他们授予许可时,注册的应用程序将添加到 Microsoft Entra ID Enterprise 应用程序列表中,并且它可供 Microsoft Entra ID 租户的用户使用。

只有在管理员授予许可后,才能在订阅者的 Dataverse 租户中创建应用程序用户。 可以使用手动 创建 Dynamics 365 应用程序用户中所述的步骤手动创建应用程序用户

对于初始测试,可能需要手动执行这些步骤。 准备好使应用程序或服务可供订阅者使用时,需要执行更高效的过程。 下一部分将对此进行介绍。

准备部署应用程序用户的方法

订阅者向应用程序或服务授予同意后,需要一种简单、可靠的方法来将应用程序用户和其他任何必需的组件添加到其 Dataverse 组织。

必须包含一个自定义安全角色,该角色定义应用程序所需的特权,并确保应用程序用户与该自定义安全角色相关联。 由于自定义安全角色可以包含在解决方案中,因此应准备一个托管解决方案,其中包含自定义安全角色的定义以及应用程序所需的任何其他解决方案组件。

有关创建自定义安全角色的信息,请参阅

但是,应用程序用户不能包含在解决方案中,因此你需要提供一种方法来创建此应用程序用户并将其与自定义安全角色相关联。

可通过多种方式实现此目的,包括使用 Web 服务编写自己的程序,以及让订阅者运行程序。

Dynamics 365 包部署器是一个应用程序,可用于准备包,以自动将解决方案和数据传输到其他 Dataverse 组织。 详细信息:为 Package Deployer 创建程序包

另请参阅

使用单租户服务器间身份验证
使用服务器到服务器 (S2S) 身份验证生成 Web 应用程序
使用 Microsoft Dataverse Web 服务进行身份验证