文章

集成声明式管理

使用声明式管理协议来管理 MDM 功能,例如设备注册和取消注册以及设备和用户认证。

概览

声明式管理的声明和状态通道可以与 MDM 命令和描述文件共存,这意味着你可以逐步采用新功能,而不必一次性更新所有 MDM 工作流程。例如,服务器可以实现状态订阅以有效地向 MDM 协议添加状态通道,而不必完全采用声明式管理。

重要的是,这种集成不会干扰现有 MDM 行为。必须首先通过新的 MDM 命令来明确启用声明式管理,然后才能使用它的所有功能。如果没有启用,那么 MDM 协议的运作方式将与之前完全相同。

启用声明式管理

服务器通过常规 MDM 命令处理流程向设备发送 DeclarativeManagementCommand 以启用声明式管理。这一命令有两个用途:

  • 它启用声明式管理功能。

  • 它向设备发出如下信息:服务器已更新声明,设备需要将声明与服务器同步。在这种情况下,命令可以包含有效负载,其中包含用于实现高效同步流程的同步令牌。

MDM 一旦启用声明式管理,则无法停用。但是,服务器可以从设备中移除所有声明,以便有效地停用任何声明式管理行为。

如果你取消注册设备,则设备会移除所有声明式管理状态,包括通过声明应用的所有策略。

请注意,在 macOS 和共享 iPad 上,必须在设备和用户通道上分别发送管理命令,以在每个通道上启用声明式管理。同样地,每个通道会单独报告声明式管理状态。

同步声明式管理

通过按照以下步骤操作来同步声明:

  1. 服务器向设备发送 MDM 推送通知。

  2. 设备会像往常一样,通过向服务器请求下一个 MDM 命令来响应 MDM 推送。

  3. 服务器发出 DeclarativeManagementCommand 以做出响应,其中应该包含 SynchronizationTokens JSON 数据。

  4. 设备检查在服务器命令中发送的 SyncTokens 中的 DeclarationsToken

  5. 设备从服务器获取声明清单。

  6. 设备同步更改。

接下来的部分将更加详细地介绍第 4-6 步中的同步详细信息。

检查同步令牌

服务器会维护代表当前声明状态的令牌,以便与特定设备同步。服务器必须针对每台设备和每个用户永久保留这个令牌,因为某些设备和用户的声明可能有所不同。每当声明集发生更改 (添加新声明或者更改或移除现有声明) 时,服务器必须更改令牌的值。令牌值是一个供客户端进行比较的不透明字符串,这样服务器便可以随意使用它喜欢的任何格式,但是大小不得超过 256 个八位字节。

服务器可以在命令的 Data 键中,将令牌作为 DeclarationsToken 项发送给设备。服务器还在服务器的声明清单响应中将令牌连同适用声明集的数据一起发送给设备。

当客户端处理服务器的声明清单时,它会永久保留服务器发送的声明令牌。设备会使用这个值来确定是不是需要更新声明清单。当设备收到 DeclarativeManagementCommand 命令时,就会触发同步操作,同步操作使用以下规则来确定要采取的步骤:

  • 如果 DeclarativeManagementCommand 不包含 Data 键,则设备会使用声明式管理签入 tokens Endpoint 请求从服务器获取当前的同步令牌集。然后它使用从服务器响应中获取的 DeclarationsToken 键。

  • 如果 DeclarativeManagementCommand 包含 Data 键,则设备会获取 DeclarationsToken 的值。

设备会将新的声明令牌与从服务器收到的上一个声明令牌进行比较。

  • 如果新的令牌和现有的令牌匹配,则设备会认为服务器上的声明与上次同步后的声明相同,当前同步操作结束。

  • 如果新的令牌和现有的令牌不匹配,则设备会通过声明式管理签入 declaration-items Endpoint 请求从服务器获取声明清单,以继续同步操作。声明清单是一个 JSON 对象,在其中每个声明类型都有一个键,相应值为声明项描述符数组。这些描述符包含供设备进行同步的每个声明的 Identifier 和 ServerToken 值。

同步设备状态

设备使用声明清单的声明项通过以下逻辑将自身状态与服务器进行同步:

  • 如果声明清单中某一声明项的 Identifier 与存在于设备上的任何声明的 Identifier 都不匹配,则设备会认为它是新的声明,并使用声明式管理签入 declaration Endpoint 请求获取这一声明。

  • 如果声明清单中某一声明项的 Identifier 与存在于设备上的某一声明的 Identifier 匹配但 ServerToken 项不匹配,则设备会认为它是更新的声明,并使用声明式管理签入 declaration Endpoint 请求获取这一声明。

处理完整个声明清单后,如果存在于设备上的某些声明的 Identifier 并未存在于声明清单中,则设备会将这些声明标记为移除。

处理完声明清单并获取所有新的声明或更改的声明后,设备会移除所有标记为移除的声明,然后通过应用新的声明和更改的声明以及取消应用移除的声明来更新自身的状态。

下载资产数据

一些资产声明中包含 Reference,它又包含 DataURL,用于指定相应资产数据所在的 URL。设备会将这个 URL 视为由 MDM 服务器托管,并对请求应用常规 MDM 协议规则。Reference 中还有一些其他键,系统使用这些键来验证所下载资产数据的完整性。用于获取并验证数据的设备规程如下:

  1. 设备使用 TLS 连接,并且客户端证书设置为 MDM 设备标识证书。

  2. 设备评估 MDM 注册描述文件有效负载中指定的所有 CheckInURLPinningCertificateUUID 是不是可信,以验证 TLS 连接服务器证书。在这种情况下,设备会遵循 MDM 注册描述文件有效负载中指定的 PinningRevocationCheckRequired

  3. 设备验证 HTTP 响应 Content-Type 标头指定的媒体类型与资产 ReferenceContentType 的值是不是匹配。如果媒体类型值不匹配,则资产数据下载会失败。

  4. 设备验证所下载数据的大小 (以字节为单位) 与资产 ReferenceSize 的值是不是匹配。如果大小不匹配,则资产数据下载会失败。

  5. 设备验证所下载数据的 SHA-256 哈希值与资产 Reference 中 Hash-SHA-256 键的值是不是匹配。如果哈希值不匹配,则资产数据下载会失败。

com.apple.configuration.legacycom.apple.configuration.legacy.interactive 配置都包含 ProfileURL 键,这个键指定相应描述文件数据所在的 URL。设备会将这个 URL 视为由 MDM 服务器托管,并对请求应用常规 MDM 协议规则。特别是:

  1. 设备使用 TLS 连接,并且客户端证书设置为 MDM 设备标识证书。

  2. 设备评估 MDM 注册描述文件有效负载中指定的所有 CheckInURLPinningCertificateUUID 是不是可信,以验证 TLS 连接服务器证书。在这种情况下,设备会遵循 MDM 注册描述文件有效负载中指定的 PinningRevocationCheckRequired

另请参阅

当前页面为“集成声明式管理”