本文基于 Session 10045Session 10046Session 10053 梳理

前言

本文主要包含的内容

  • 声明式设备管理

使设备具有自主性,无需服务器的提示,自身状态变化时设备自身执行管理逻辑,并在发生重要状态变化时将状态异步上报至服务器。

  • Sign In With Apple 管理 Apple ID

Sign in with Apple 是苹果在 19 年 9 月审核指南中更新的:要求所有使用第三方登录的 App 都必须接入 Sign in with Apple。仅在支持 Apple ID 登录的 App 上才能使用声明式设备管理解决方案。

Sign in with Apple 具体内容可移步至小专栏 WWDC19 内参的一篇优秀文章,Sign In with Apple – 使用苹果账号登录你的应用

Roster API 为 IT 管理员、员工、教师和学生提供无缝的入职体验。

  • Apple 平台的设备管理新功能

为 macOS Ventura、iOS 和 iPadOS 16 提供的设备管理新功能。具体有 OAuth+注册单点登录或注册 SSO;iOS 和 iPadOS 16 中的新设备管理功能;共享 iPad 更新。可以让员工和师生提高生产力,专注精力在有价值的事情上。

声明式方法设备管理


声明式设备管理为开发人员、 IT 管理员提供了很多便利,让组织内的员工和师生提高生产力,专注精力在有价值的事情上。适用于 macOS Ventura、iOS 和 iPadOS 16 上的所有新设备。

Session 10046

声明式设备管理

声明式设备管理

声明式设备管理,是一种管理 Apple 设备的新范式,它重构了 MDM 协议,使设备具有自主性和主动性。设备的自主性指其能够对自己的状态变化做出反应,然后在无需服务器提示的情况下执行管理逻辑。设备的主动性指设备在发生重要状态变化时能够将状态异步上报至服务器,避免服务器对设备进行轮询。

声明和状态是声明式设备管理数据模型的两个关键元素。声明包括激活(activations)、谓词(predicates)、配置(configurations)、资源(assets)和管理类型(management types)。状态则包括状态项和状态上报。这项技术支持复杂管理策略,加强了受管设备的综合用户体验,减轻了 IT 管理员重复繁琐的任务,也使设备拥有了能够管理其自身状态的能力。

  • 对于开发者来说,声明式方法可实现服务的轻量级和响应式。声明式数据模型能够更完美映射到组织结构,这意味着设备的改变更加直观。状态上报提供了一个丰富的反馈通道,使服务器可以更密切监控设备,并在不需要通过复杂策略实现轮询的情况下更及时、可靠的方式呈现相关信息。这一切意味着更简单的开发投入,更高效的结果产出。

  • 对于 IT 管理员来说,声明式方法更容易达到预期状态。当设备不在预期状态时,即便失去与服务器的链接,设备也能够安全地保护组织敏感数据。声明式方法通过状态报告为设备提供了重要的反馈,也占用更少的资源,如网络带宽,提升了管理效率。

  • 对于用户来说,可以更快使用、更短时间恢复和更好的组织支持,使管理设备成为一种更灵敏且更可靠的体验。

【名词解释】MDM 协议:iOS、iPadOS、macOS 和 Apple tvOS 具有支持移动设备管理 (MDM) 的内建框架。MDM 可通过将描述文件和命令发送到设备来配置设备,无论这些设备是属于个人用户还是组织。MDM 功能包括更新软件和设备设置、监督组织策略的贯彻情况以及远程擦除或锁定设备。用户可在 MDM 中注册自己的设备,组织拥有的设备可使用“Apple 校园教务管理”或“Apple 商务管理”在 MDM 中自动注册。移动设备管理介绍

【名词解释】服务的轻量级和响应式:服务器不需要通过不断地轮询设备以观察状态变化,而将业务逻辑从服务器转移到设备。设备可以增量地向服务器报告订阅的状态项的状态变化。服务器会返回成功响应,以确保状态更新是可靠的。

使用步骤

重点关注三个领域:扩展声明式设备管理的范围状态报告、**谓词(predicates) **。

扩展管理范围

仅支持具有用户注册的 iOS 设备。声明式设备管理可用于 macOS Ventura、tvOS 16、iOS、iPadOS 16 上支持 MDM 协议的平台,支持的注册类型:含受监管的设备(supervised devices)的注册;基于个人资料的注册(profile-based enrollment);以及基于个人资料和帐户的用户注册(profile and account-based)。声明式设备管理现在也可在共享 iPad 上使用。在 iOS 16 系统中,用户可以在“设置”应用的 MDM 描述文件详情中找到配置,点击各行可展示当前配置详细信息。

需要注意的是:macOS 和共享 iPad 设备都有两个 MDM 通道,分别是设备和用户通道。

设备通道管理设备的等级状态,而用户通道管理特定用户的状态。如果想在任何通道上使用声明式设备管理,必须单独开启该通道。开启方式是在相应的通道上发送声明管理命令。此外,声明式设备管理状态报告也是为每个通道单独生成的,每个通道需要单独监控。

声明式设备管理

状态报告

设备可以增量地向服务器报告订阅的状态项的状态变化。服务器会返回成功响应,以确保状态更新是可靠的,并且不会在网络或其他类型问题的情况下丢失。状态报告使设备变得主动。服务器不需要通过不断地轮询设备以观察状态变化。

在 iOS 15 中,为设备属性引入了一组状态项,例如型号类型和操作系统版本。对于此版本,在三个方面扩展状态:密码状态、配置安装的帐户和 MDM 安装的应用程序。在 iOS 15 中,引入了密码策略配置。正在应用的策略滞后于用户更改密码变得合规的策略,就像 MDM 密码策略配置文件一样。因此,MDM 服务器必须轮询设备来确定密码何时合规。

但是对于新的声明式设备管理密码状态项,没有必要这样做。新添加了两个状态项:passcode.is-compliant 和 passcode.is-present。合规性指示密码是否符合通过 MDM 配置文件或配置应用的所有密码策略,这些状态项的值是可否通过 MDM 查询检索的布尔值。

声明式设备管理

服务器行为

通常组织具有应用到设备的安全敏感状态。例如允许访问受保护网络的 VPN 或 Wi-Fi 配置文件。只有当存在强密码策略并且密码符合该策略时,该状态才能在设备上处于活动状态。使用传统的 MDM,服务器必须发送密码策略配置文件,然后轮询设备,以等待用户更改密码时符合要求。最初密码可能不符合要求,因此无法发送 Wi-Fi 配置文件。最终,用户更改了合规的密码。在服务器的下一次轮询中,它检测到更改的合规状态并确定可以发送 Wi-Fi 配置文件,然后将其安装在设备上。

声明式设备管理通过使用由密码合规状态触发的激活谓词,消除了服务器轮询的需要。服务器将密码策略和 Wi-Fi 配置文件作为配置发送,Wi-Fi 配置与基于密码合规性的激活相关联。密码配置会立即激活并应用强密码策略。最初,密码可能不合规,因此激活谓词评估为 false,并且未激活 Wi-Fi 配置。然后用户会更新密码以使其符合要求。这会触发对激活的重新评估,并且谓词现在评估为真,从而导致 Wi-Fi 配置被激活。所有这些都是在没有服务器干预和连接的情况下发生的。当配置激活时,服务器会自动从设备获取状态报告,因此它知道何时发生更改。这个例子说明了可以成功地将业务逻辑从服务器转移到设备,获得响应更快、更可靠的设备行为,并没有使用轮询。

声明式设备管理

帐户状态

在 iOS 15 中,使用帐户配置来在设备上安装各种类型的帐户。这些通常是允许用户访问组织数据的组织帐户。管理员为了帮助遇到问题的账户,需要了解帐户何时成功安装以及它们处于什么状态。所以为邮件、日历和其他帐户类型添加了八个帐户状态项。请注意,该状态仅报告通过配置安装的帐户,不包括手动创建或通过 MDM 配置文件安装的帐户。每个新状态项对应一个帐户配置类型,传入和传出邮件帐户的状态分别报告。每个新的状态项使用不同类型的 JSON 对象,来表示相应帐户类型的状态。以下是传入邮件状态项和订阅日历状态项的示例。标识符键的值是状态项对象数组中对象的唯一标识符。

声明式设备管理
声明标识符键的值与安装帐户的配置的标识符属性值相匹配,便于交叉引用状态项对象及其关联配置。这两个键始终存在于所有类型的帐户状态项对象中。其他键特定于帐户类型。例如,邮件服务器的主机名和端口,或订阅日历的 calendar-URL。此版本引入了值为数组的状态项,以支持报告一个或多个相同类型的帐户。这样的数组值具有特殊的行为。数组中的每个项目都是一个 JSON 对象,具有用于单个数组中所有对象的相同模式。每个对象类型总是有一个标识符键,作为在数组中定位对象的主键。其他键存在并与所报告的基本状态类型相关联。为了确保与未来操作系统版本中添加的任何键的前向兼容性,服务器必须接受数组对象中的未知键。出于性能原因,对数组值的更改总是基于每个对象递增地报告给服务器。

声明式设备管理

状态报告例子

在此示例中,服务器向设备发送两个邮件帐户配置。因此设备上存在两个帐户。服务器现在订阅邮件帐户状态项。订阅激活后,会收集帐户的状态,并且设备会向服务器发送状态报告。状态报告将包括状态数组中的两个帐户状态对象,为服务器提供设备当前存在的完整画面。每个数组对象都有不同的标识符。处理此报告后,服务器具有两个邮件帐户的状态,与设备上的内容相匹配。当服务器通过发送新配置在设备上添加邮件帐户时,设备上的状态项在其数组值中添加一个新对象,并向服务器发送另一个状态报告,仅报告新项目。标识符键的值与服务器已有的任何值都不匹配,因此服务器可以推断这对应于一个新帐户。处理此报告后,服务器具有三个邮件帐户的状态,两个初始帐户和新帐户,再次与设备上的内容完全匹配。

当帐户状态发生变化时,例如当用户切换邮件或便笺启用状态时,设备上的状态项将在其数组值中具有更新的对象,并且再次将状态报告发送到服务器。仅报告更改的项目。在这种情况下,用户关闭了帐户的备注功能。标识符键的值与服务器已有的值匹配,因此服务器可以推断这是对现有帐户的更新。因此,它用新的状态项数组对象替换了现有的状态项数组对象。处理此报告后,服务器显示三个邮件帐户的状态,但其中一个已更改。当从设备中删除帐户配置时,设备上的状态项将相应的对象标记为删除,并向服务器发送另一个状态报告。仅报告已删除的项目。为了表示删除,数组项对象仅包含两个键:标识符键(其值与服务器已有的值匹配)和已删除的键,设置为值 true。这允许服务器通过删除现有项目来更新其设备状态的表示。处理此报告后,服务器只有两个邮件帐户的状态,正确匹配设备的状态。

声明式设备管理
设备将限制发送状态报告的速率以避免性能问题。在将状态报告发送到服务器之前,设备会在长达一分钟的可变时间间隔内合并状态项的更改。这意味着快速报告状态,但不是立即报告。

谓词

激活谓词的方法,是通过一个可选的谓词来确定激活中引用的配置是否应用于此设备。当谓词中引用的状态项发生更改时,设备将重新处理所有激活,重新评估所有谓词。谓词是使用 NSPredicate 语法的字符串。新扩展的谓词语法可以支持更复杂的谓词表达式,可以更容易检测表达式中的状态项。新语法将状态项名称放在谓词字符串中的 @status 中。在示例中,使用新语法的序列号状态项出现在谓词表达式中。以前的语法将继续向后兼容,但是现在已被弃用,请切换到新的。

【名词解释】谓词:谓词(Predicate) 可以通过使用多个匹配条件来准确定位某一个元素或某一组元素(相当于只有搜索条件与元素的计算结果为 true 时这些元素才会被认为是匹配的)。

声明式设备管理

谓词与状态项数组值搭配使用

状态项值是帐户和 MDM 安装的应用程序状态项的数组。现在能够通过数组中的值预测激活。例如,需要在设备上安装和管理具有特定捆绑标识符的应用程序。 NSPredicate 有一个 SUBQUERY 术语可操作数组。此 NSPredicate 表达式使用针对 MDM 安装的应用程序状态项的 SUBQUERY。状态项是 SUBQUERY 的第一个参数。第二个参数将引用数组的每个元素。第三个参数是一个谓词表达式,用于测试由该变量标识的每个元素。 SUBQUERY 表达式返回与第三个参数中的谓词匹配的元素数组。然后 @count 运算符返回该数组的长度,并检查是否有一个结果匹配。安装和管理指定的应用程序时,此 SUBQUERY 表达式将返回一个有值的数组,并且谓词的计算结果为 true。未安装应用程序时,SUBQUERY 表达式将返回一个空数组,谓词的计算结果为 false。请注意,为了引用状态项数组对象中的 key,必须使用 @key 。

声明式设备管理

新的谓词语法

如何使用新的谓词语法来为新类型的数据添加谓词项。服务器需要把复杂的服务器端逻辑转化为设备上的简单状态更改,也不需要同步大量配置来触发这些更改。例子是拥有多个角色的用户情况,组织需要将设备快速分发替换给用户,或快速将设备放入安全模式以保护组织数据。新声明可以支持这一点,以允许服务器在设备上设置任意属性,这些属性可以直接用于激活谓词。这是新的管理属性声明。声明由一个 JSON 对象组成,其 key 由服务器定义。 JSON 对象值可以是任何 JSON 值类型,包括数组或对象。此处的管理属性声明包括三个属性:字符串的名称属性、整数的年龄属性,以及字符串数组的角色属性。这是一个带有引用某些管理属性的谓词。首先,它测试年龄属性以确定是否大于或等于 18,然后测试角色属性以确定字符串 Grade12 是否在属性数组值中。可以将多个管理属性声明发送到设备,但它们的 key 应该是唯一的。如果存在重复 key,则在谓词中引用该属性时将任意选择其中一个值,导致不可预测的结果。所以请避免使用重复的键名。

声明式设备管理

使用谓词例子

这个例子中的一组教师职工,分为高低年级两个学部,每个学部有自己接入 Wi-Fi 的教室。其中一些教师担任 IT 管理员,需要访问共享邮件帐户。一些教师还担任体育教练并需要为所有团队比赛订阅时间日程。因此,教师可能有四种不同的角色类型,有时同一个人会担任多种角色。每个角色都有一组配置,这些配置必须根据教师登录设备时对应的角色应用于该设备。以两位老师来举例,老师 A 在低年级任教,也是一名体育教练。老师 B 在高年级任教,也是一名 IT 管理员。这些定义被分别发送到每台登录的设备上,教师 A 的设备拥有低年级任教和体育教练的配置。教师 B 的设备有高年级任教和 IT 管理员的配置,只需要一个声明来触发应用的多项配置。

声明式设备管理
最后再看下当教师角色改变时将会发生什么。在这个场景中,教师二在已有角色的基础上变成了体育教练,他所登录设备上的属性管理声明升级了新角色,所有的启动项被重新评估,体育教练这一新角色可以使用日程订阅功能。同样的,只需要改变一个声明来触发。

声明式设备管理

Sign In With Apple 管理 Apple ID


Session10053

在 Work & School 中使用 Apple 登录

首先介绍在企业和学校中如何使用 Apple 登录以及它的工作原理。然后讨论 Roster API 以及使用细节。最后将讨论访问管理以及 IT 管理员如何管理他们的组织和如何使用 Sign in with Apple at Work & School 和 Roster API 。

使用 Apple 登录

两个对本次 sesseion 很重要的概念。

1.使用 Apple 登录

是用户通过 Apple ID 快速简便登录应用程序的一种方法,只需轻按一下即可在应用程序中创建一个帐户。

2.管理式 Apple ID

与 Apple ID 一样,管理式 Apple ID 用于个性化设备。它们还用于访问 Apple 应用程序和服务。与个人 Apple ID 不同,管理式 Apple ID 归组织所有,并通过 Apple 校园教务管理或 Apple 商务管理进行管理。

用户体验示例

一个展示在 Work & School 中使用 Apple 登录的用户体验的示例。这是 Slack 的登录屏幕。要使用 Sign in with Apple,用户只需轻点 Continue with Apple。使用 Apple ID 时,他们会看到 Sign in with Apple 的欢迎屏幕。另一方面,如果他们使用的是管理式 Apple ID,他们将在 Work & School 看到“使用 Apple 登录”的欢迎屏幕。这两个欢迎屏幕有所不同。

声明式设备管理
如何让应用程序更容易提供访问控制的示例。使用个人 Apple ID 登录 Apple 时,用户会看到帐户创建页面,他们可以编辑自己的姓名并选择是共享还是隐藏他们的电子邮件。但在组织环境中,应用程序需要了解谁在登录以及提供什么级别的访问权限。在此示例中,用户正在工作中登录 Slack。为了限制该员工可以加入哪些 Slack 频道,Slack 需要知道哪个用户正在登录。这就是 Slack 在使用 Sign in with Apple at Work & School 时对应用程序共享的名称和电子邮件提供访问控制的示例。意味着当用户在工作和学校使用 Apple 登录时,姓名和电子邮件字段将始终可以访问。

声明式设备管理
对于客户端开发人员,可以看看下面一些显示授权控制器的示例代码。成功授权后,突出显示的代码段代表应用会收到的全名和电子邮件。这里假定授权请求包括全名和电子邮件的范围。如果是在 Web 上使用 Apple 登录的开发人员,可以看下面使用 signIn 方法启动授权过程的示例代码。成功授权后,服务器将返回数据对象。该数据对象如下。突出显示的字段包含登录用户的电子邮件和全名。这里需要注意几点。在此版本中,使用 Apple 在工作和学校登录的管理式 Apple ID 。上述示例用于设备上的登录流程,同时也支持 Web 流程。

声明式设备管理

声明式设备管理
某些帐户可能无法提供电子邮件地址。例如,学校可能不会将电子邮件地址分配给年龄较小的学生。下图就是没有电子邮件地址的情况下的帐户创建页面。这个 Fatima Silva 用户,没有电子邮件,所以只有他的全名出现在帐户创建页面上。如果已经实施了“Sign in with Apple”,那么无需进行额外的工作。 如果尚未支持,强烈建议添加在 Work & School 中使用 Apple 登录,它将 Apple 登录的快速简便的登录体验带到了管理式 Apple ID。

声明式设备管理

Roster API

在深入讲解 Roster API 之前,先考虑以下场景,您是教育领域的开发人员,有学区正在使用您的应用程序,您的应用程序实现了对 Sign in with Apple 的支持。现在学生、教师和教职员工可以使用他们的管理式 Apple ID 登录您的 应用程序。此时您的应用程序允许教师与学生共享作业和通知。为了支持这一点,IT 管理员需要在学年开始之前需要手工将学生、教师和班级信息输入到您的应用程序。对于拥有成百上千学生的学校来说,会是一个耗时且乏味的过程。为了解决这个问题,创建了 Roster API 。

Roster API 提供对 Apple 校园教务管理中的用户和课程等资源的编程访问。这允许 IT 管理员自动将此信息导入您的应用程序的过程。这些资源以 REST 端点的形式定义。在 IT 管理员通过成功的 OAuth 2.0 授权后,您的应用程序可以访问此数据。 Apple 校园教务管理中的管理员和站点管理员帐户可以管理哪些应用程序能够访问数据。作为此版本的一部分,为应用程序请求访问组织数据创建了一种标准化方式。称之为组织数据共享。使用 OAuth 2.0 创建了一个授权流程,其中包括使用范围并要求 IT 管理员同意共享他们的组织数据。

在这种情况下,发出请求的应用程序是 Quizzler -以及表示应用程序将有权访问的数据的范围。在这种情况下,一旦 IT 管理员同意,Quizzler 将能够访问该组织的所有用户和班级信息。

声明式设备管理
第一步,在开发者网站中注册请求范围。然后在证书、标识符和配置文件页面下单击帐户和组织数据共享配置,请求 IT 管理员同意通过 OAuth 2.0 授权流程与应用程序共享数据。最后单击“设置配置”,从下拉列表中选择主应用 ID 附加配置详细信息,选择所需的范围,目前包括用户访问和类访问两种范围。需要确保配置了返回 URL,因为它将用于 OAuth2.0 授权流程。

声明式设备管理
第二步是通过 OAuth 2.0 授权流程获取访问令牌。IT 管理员首先登录到您的应用程序。然后,IT 管理员与您的应用程序交互以启动授权流程——例如,通过单击名为“连接到 Apple 校园教务管理”的按钮。这将启动遵循 OAuth 2.0 标准的一系列事件。第一步是对授权端点执行 GET API 调用。

声明式设备管理
该请求的一些查询参数:client_id、redirect_uri、状态、response_type 和 scope。

响应会返回到 Apple OAuth 同意界面,以请求 IT 管理员访问。

声明式设备管理
请求详细信息。请求正文由标准 OAuth 参数组成,包括刷新令牌,响应将包含访问令牌及其到期时间。成功完成 OAuth 2.0 授权流程后,应用现在具有访问令牌,可用于从 Roster API 获取用户和类信息。

声明式设备管理
五个可以查询的端点。这些包括获取类列表、用户列表、特定类、特定用户、类中的用户。

声明式设备管理

如何获取用户和类的示例

首先通过查询用户端点来检索学生、教师和员工的列表。以下是详细请求和响应。请求时有三个查询参数。 pageToken 和 limit 是分页参数,可选的 role 参数代表查询学生、教师或员工。该请求需要带有从授权流生成的访问令牌的授权标头。响应是一个 JSON ,其中包含 users 键,对应的值是用户列表; nextPageToken 键,对应的值用于获取下一组记录;moreToFollow 键,对应的值代表是否有更多记录要查询。

示例请求中的 API 调用正在请求 10 名学生的学生列表。这是第一页的 API 请求,所以没有指定 pageToken 查询参数。响应包含标准用户信息,例如 givenName、familyName 等,需要格外注意的是用户的稳定唯一标识符。这与用户使用 Sign in with Apple 进行身份验证时收到的标识符相同。还包括用户的电子邮件地址及其在组织中的角色。 nextPageToken 是查询获取下一组学生的参数,因为 moreToFollow 设置为 true。

声明式设备管理
查询完用户端点后,查询类端点,可以获取到特定学区的类列表以及该类与该类关联的学生和教师之间的关系。详细看一下请求和响应。作为 get classes 请求的一部分,该请求有两个查询参数:pageToken 和 limit 参数,这两个参数与查询用户时相同。响应是一个 JSON ,其中“classes” key 保存类列表。

示例请求中此请求检索包含最多 200 个类的列表。 API 请求还有 pageToken 参数,这意味着它在获取所有类。响应包含标准的班级信息,例如姓名、班级标识符等,需要注意属于班级的讲师 ID 和学生 ID 列表。那就是 Roster API。借助这些,可以以编程方式从 Apple 校园教务管理中查询用户和班级。

声明式设备管理

访问管理

使用 Sign in with Apple 时,用户可以管理自己的帐户,并由自己决定登录哪些应用程序。但是,当在 Work & School 使用 Sign in with Apple 时,组织的 IT 管理员代表该组织的所有用户集中管理访问权限,确保组织数据的安全性。因此,他们必须有权管理用户在工作和学校使用 Sign in with Apple 的可使用的应用程序,以及哪些应用程序可以使用组织数据共享。这些访问管理功能可以在 Apple 校园教务管理和 Apple 商务管理中进行配置。

对于在工作和学校使用 Apple 登录,有两种模式。第一种模式是“允许所有应用程序”,该模式允许组织的所有用户登录支持使用 Apple 登录的所有应用程序。第二种模式是“仅允许某些应用程序”,该模式下, IT 管理员搜索支持 Sign in with Apple 的应用然后添加到列表中。用户只能使用那些已添加到列表中的应用程序 Apple 登录。如果用户尝试登录不在列表中的应用程序,会看到一条错误消息。

声明式设备管理

探索 Apple 平台的设备管理增强功能


Session 10045

此 session 将讨论 OAuth+注册单点登录或注册 SSO;iOS 和 iPadOS 16 中的新设备管理功能;共享 iPad 更新。

OAuth+注册单点登录或注册 SSO

在 iOS 和 iPadOS 15 中,使用了简单的访问令牌授权机制来允许 MDM 服务器验证用户的身份。在 iOS 和 iPadOS 16 中,添加了 OAuth 2 作为另一种授权机制。OAuth 为 MDM 服务器打开了支持当今已经在使用 OAuth 的各种身份提供者的大门。还通过刷新令牌机制提高了安全性,该机制将短期访问令牌与不会提示用户输入凭据的静默刷新结合使用。

OAuth 可以与现有的帐户驱动的用户注册流程一起使用,但与注册单点登录或注册 SSO 这一项新功能结合使用时,可以提供更好的用户体验。

**实现注册单点登录的四个主要部分: **

1.应用开发者更新他们的应用以支持注册 SSO。

2.MDM 供应商将 MDM 协议客户端身份验证与身份提供者联合起来。

3.管理员使用 Apple 校园教务管理或 Apple 商务管理设置管理式 Apple ID。

4.配置 MDM 服务器以在身份验证响应标头中返回指向 JSON 文档的 URL。

声明式设备管理

注册单点登录细节

当收到来自服务器的初始身份验证时,有一个 HTTP 标头,代表注册单点登录可用。该标头的值将是客户端用于下载 JSON 文档的 URL。JSON 文档包含所有详细信息。iTunesStoreID 密钥的值必须参考注册期间要使用的注册单点登录应用程序。AssociatedDomains key 与 ApplicationAttributes 中可用的 key 相同,也可以在此处进行配置。最后,ConfigurationProfile 是一个 Base64EncodedProfile ,它至少包含一个可扩展 SSO 有效负载,还可以包含证书有效负载。此功能在 iOS 和 iPadOS 16 的后续版本中。

声明式设备管理

如何使用单点登录

需要通过苹果开发者计划申请新的权利。在测试阶段也可以使用测试模式进行开发。这是注册单点登录流程的特殊版本,可在 App Store 上架之前进行测试。要开始使用测试模式,请前往设置的开发人员部分并启用注册单点登录测试模式。然后,需要使用新的 HTTP 标头和相应的 JSON 文档配置身份验证响应。然后,在 VPN 和设备管理中,开始注册过程。在注册过程中,系统会提示安装 Single Sign-on 应用程序。可以使用从 Xcode 到 TestFlight 甚至企业应用程序分发的任何可用方法安装应用程序。之后,返回设置并完成注册。要使用测试模式,响应中需要不同的标头和修改后的 JSON 文档。

单点登录使用示例

下面是测试模式的 JSON 文档示例。可以看到 iTunesStoreID key 已被 AppIDs key 替换,并且此 key 的值是包含可用于注册的 App ID 的字符串数组。其他一切都保持不变。

声明式设备管理

单点登录扩展

2019 年,为 iOS 13 和 macOS Catalina 添加了单点登录扩展使身份提供者能够为其用户的所有应用程序和网站使用 SSO 身份验证。使用 SSO 扩展程序时,系统会在用户解锁设备后提示他们登录扩展程序,这意味着需要输入两次凭据。如果组织还使用内置的 Kerberos 扩展,则用户需要重新登录。在许多情况下,这些都是相同的凭据。

然后在 macOS Ventura 中,引入了平台单点登录——或平台 SSO——使用户能够在登录窗口登录一次,然后自动登录到应用程序和网站。平台 SSO 从登录中生成令牌可用于第三方 SSO 扩展,也可与内置的 Kerberos 扩展一起使用。首次登录使用本地帐户密码进行身份验证,这也解锁了设备上的 FileVault 加密。这使用户能够在离线或连接到强制网络时登录。从此,他们的身份提供者密码可用于解锁。此外,平台 SSO 支持使用密码或 Secure Enclave 支持的密钥向身份提供者进行身份验证。无论身份验证方法如何,SSO 令牌都会从身份提供者处检索,存储在钥匙串中,并可供 SSO 扩展使用。还可以检索 Kerberos TGT,将其导入凭据缓存,并可选择与 Kerberos 扩展共享。如果身份提供者密码更改,平台 SSO 将在解锁时使用身份提供者验证该新密码。

平台 SSO 是一个完全集成的协议,它使用 OAuth 和 OpenID 构建,不使用 Web 视图进行身份验证。平台 SSO 是 AD 绑定和移动帐户的现代替代品。请注意,它不直接使用目录服务,也不核对每次解锁尝试的身份提供者。相反,当用户尝试在解锁时使用新密码或检索 SSO 令牌时,身份提供者会被调用。平台 SSO 也不会根据身份提供者的响应阻止登录 Mac。因此请利用 MDM 或替代策略来禁用访问。

要利用此功能,身份提供者需要实施 SSO 协议并更新其 SSO 扩展,然后确保更新可扩展 SSO 配置文件以支持托管设备上的新密钥。在 Apple 平台部署指南中可查找更多实施细节。

声明式设备管理

iOS 和 iPadOS 16 中的新设备管理功能

管理设备上的网络流量是提高数据安全性的重要方法。可以通过三种主要方式管理 Apple 设备上的流量:VPN、DNS 代理和 Web 内容过滤器。多年来一直提供按应用程序的 VPN——事实上,对于用户注册的设备,这是 MDM 唯一可用的 VPN 类型。在 iOS 和 iPadOS 16 中,正在扩展每个应用程序的产品,以包括 DNS 代理和 Web 内容过滤器。这些功能将适用于所有注册类型,但对于用户注册特别有用,因为这是组织第一次以这种方式为 BYOD 保护其应用程序流量。

如何配置

配置这些新功能有两步,首先,需要为每个有效负载添加一个新的键值对。在 Web 内容过滤器有效负载中,key 是 ContentFilterUUID。对于 DNS 代理,key 是 DNSProxyUUID。使用这些键需要注意:首先,这些键的值可以是任意字符串。其次,当这个 key 被添加到 payload 中时,它只能通过 MDM 来安装。现在,配置应用程序以使用这些新功能。使用 InstallApplication 命令或 Settings 命令,将相同的 UUID 添加到将使用的应用程序的属性中。此示例中,包含了两个键,可以只包含一个。

一些细节。首先,开发人员不需要做任何新改变,所有现有的 DNS 代理和 Web 内容过滤器应用程序都可以正常工作。其次,可以拥有多个 DNS 代理,但不能混合使用系统范围的代理和每个应用的代理。最后,对于 Web 内容过滤器,最多可以拥有七个应用程序过滤器和一个系统范围过滤器。

接下来,谈谈管理 eSIM。eSIM 已成为全球运营商的新标准,在过去几年中,添加了许多 MDM 功能让管理 eSIM 变得前所未有的轻松。 MDM 供应商如何将所有这些功能结合在一起以提供更好的体验的呢?当使用 eSIM 时,他们正在执行的一些主要任务是配置新设备、在运营商之间迁移设备以及支持满足多个运营商或旅行和漫游等需求的用户。为了实现这些目标,他们需要从注册设备中查询数据并将该数据提供给运营商。其次,他们需要能够在设备上安装 eSIM。

运营商数据要求

设备查询开始和运营商数据要求。DeviceInformation 查询是从设备收集数据的最简单方法。在 iOS 12 中,ServiceSubscriptions 密钥成为在 iPhone 和 iPad 上收集与蜂窝网络相关的所有数据的方式。要注意的是:在 ServiceSubscriptions 中返回两个项目的设备支持两个活动的蜂窝计划。如果响应包含 EID,则它是 eSIM。iPhone 13 和 iPhone SE(第 3 代)等较新设备支持双活动运营商 eSIM 配置文件,因此可以在 ServiceSubscriptions 响应中返回多个 eSIM 。请注意,每个设备的 EID 都是唯一的。从 iOS 和 iPadOS 16 开始,其他设备信息查询返回在 ServiceSubscriptions 响应中的数据已被弃用,并且在未来的操作系统版本中将不再返回。

要向运营商提供什么

上文讲了如何从设备中获取数据,然后看看需要向运营商提供什么。一般来说,需要四个数据来设置 eSIM:IMEI、EID、序列号和电话号码。管理员需要生成包含所有这些数据的报告,以便更容易启动和运行 eSIM。

如何配置 eSIM

查看如何配置 eSIM。首先,MDM 服务器使用 ServiceSubscriptions 查询从设备收集所需的数据。然后,管理员将该数据发送给运营商。最后,运营商将在其 eSIM 服务器上为设备配置 eSIM。现在重点讨论在设备上安装 eSIM。运营商为客户提供一个服务器 URL ,设备可以在该 URL 中使用 RefreshCellularPlans 命令获取 eSIM 。MDM 服务器向设备发送 RefreshCellularPlans 命令,设备向运营商的 eSIM 服务器发起请求并检查 eSIM 是否可用。如果可用,它将自动下载并安装它,无需任何用户交互。然后,当查询返回非空电话号码时,MDM 服务器可以使用 ServiceSubscriptions 查询来确认 eSIM 已成功安装。

应该牢记的几个关键点

eSIM 安装是一次性操作,未来在同一设备上安装 eSIM 的请求需要运营商提供新的 eSIM。为防止用户意外移除其 eSIM,请使用 allowESIMModification 限制。还要注意 RefreshCellularPlans 命令安装限制时可以安装 eSIM。最后,MDM 还可以在擦除设备时移除 eSIM 。为避免这种情况,请确保在发送 EraseDevice 命令时将 PreserveDataPlan 键设置为 True 。更全面地了解如何管理和部署 eSIM。

共享 iPad 更新

共享 iPad 是教育和商业客户在一对多环境中使用 iPad 的绝佳方式,同时也提供个性化体验。今年,进行了一些更改,让共享 iPad 变得更好。首先,添加了 ManagedAppleIDDefaultDomains 到 SharedDeviceConfiguration 设置命令。使用此命令,能够节省用户使用 QuickType 键盘输入其管理式 Apple ID 的时间。一旦用户开始输入他们的管理式 Apple ID,就会自动出现一个供用户点击的关于域名的输入建议。Settings 命令会向用户显示三个接受任何大小的列表。接下来,对远程身份验证的要求进行了一些更改。目前,Shared iPad 大约每 7 天需要一次远程身份验证。在 iPadOS 16 中,共享 iPad 将仅对设备上的现有用户使用本地验证。如果管理员想要强制执行远程身份验证,他们可以在 SharedDeviceConfiguration Settings 命令中设置 OnlineAuthenticationGracePeriod 键。此键的值是一个整数值,表示远程身份验证之间的天数;零值将要求所有登录都经过远程身份验证。ManagedAppleIDDefaultDomains 和 OnlineAuthentication GracePeriod 值都可以通过 DeviceInformation 查询检索。

共享 iPad 配额

关于共享 iPad 配额。SharedDeviceConfiguration 命令是在共享 iPad 上管理配额的最佳方式。可以使用两个相关 key 来设置配额:QuotaSize 和 ResidentUsers。无论设置哪个 key,操作系统最终都会计算存储配额。一个例子。这款 iPad 有 35 GB 的可用空间用于存储用户数据。如果发送 SharedDevice ConfigurationSettings 命令要求设备将 ResidentUsers 设置为 3,它将计算每个用户的配额为 11.67 GB。或者,如果要求设备提供 10 GB 的配额大小,则每个用户将拥有 10 GB 的配额。如果在设备上有三个现有用户并且第四个用户尝试登录,现有用户的数据之一将从设备中删除,以便为新用户创建足够的空间。在 QuotaSize 示例中,即使还有 5 GB 的可用空间,也无法满足第四个用户的要求,因此仍然需要删除一个用户。

再看一个场景,有关如何在不更改配额的情况下在设备上调整用户数量。当开始这个场景时,有 35 GB 的可用空间。并且 iPad 上 25 GB 的总空间被应用程序和书籍占用了。然后精简应用程序库,删除了一些不再使用的应用程序。现在设备有额外的 10 GB 可用空间——这意味着当第四个用户登录时,它不再需要删除另一个用户。另外,请记住,从 iOS 13.4 开始,只要设备上没有缓存的用户,就可以随时调整配额大小。牢记这些要点,可以让您确保共享 iPad 部署的最佳体验。

声明式设备管理

iOS、iPadOS 和 Apple TV 更新

传统上,每个用户都需要自己启用可访问性设置。但在 iOS 和 iPadOS 16 中,为 MDM 添加了管理一些常用的辅助功能设置的功能。这些功能包括文本大小、旁白、缩放、触摸调节、粗体文本、减少运动、增加对比度和减少透明度。有了这些选项,管理员可以让所有用户更容易访问学校、餐馆和医院的设备。请注意,这些设置在设置后不会被锁定,用户可以自由修改它们以匹配他们自己的独特偏好。MDM 服务器还可以使用 DeviceInformation 来查询这些设置。接下来,从 iOS 和 iPadOS 16 开始,可以在自动设备注册期间的 AwaitDeviceConfigured 状态下安装应用程序。有几件事要记住。在这个阶段很可能没有用户登录 App Store,所以建议使用基于设备的应用许可证。设置中的未受监督设备仍将返回 NotNow ,直到它们到达主屏幕。借助此功能,可以确保设备具备用户在退出设置助手之前所需的一切。随着不断提高设备的安全性,某些数据类型在首次解锁之前变得无法访问。因此,CertificateList 查询将在首次解锁之前开始返回 NotNow。用户解锁设备后,查询将正常响应,直到设备重新启动。MDM 开发人员,需要确保服务器能够处理此查询的 NotNow 响应。

Apple TV 的更新。从 tvOS 16 开始,当抹掉 Apple TV 时——通过“设置”或通过 MDM——遥控器现在将保持配对状态。与 Auto Advance 结合使用,可确保 Apple TV 始终保持更新状态并随时可用。

总结


本文主要介绍了三个方面:

  • 声明式设备管理:把复杂的服务器轮询任务转移到设备上,设备自身状态变化时执行管理逻辑,并把重要状态变化上报至服务器。

  • Sign In With Apple 管理 Apple ID:让使用 Sign In With Apple 的企业和学校的 IT 管理员可以更方便的管理他们的组织。Roster API 解决了需要将大量学生、教师和班级信息手工输入系统的重复工作。

  • Apple 平台的设备管理新功能:OAuth+注册单点登录或注册 SSO;iOS 和 iPadOS 16 中的新设备管理功能;共享 iPad 更新,让员工和师生提高生产力。

个人思考:

虽然本篇介绍的内容在国内暂无实际应用场景,但其中蕴含的思想还是值得学习借鉴的。

近几年苹果推广的 SwiftUI ,相较于 Objective-C 和 Swift 传统方式实现 UI 布局,实现了通过更少的代码构建出更好的应用这一愿景。本文提到的声明式设备管理也符合这一设计理念,与传统面向过程的命令式相比,它以结果为导向,描述目标而非具体流程,让系统管理员能够通过更简单的配置流程实现目标。

另一方面苹果公司在技术布局方面具有前瞻性,几年前推出的苹果账户方式登录,为 Roster API 这类的 API 奠定了基础。我们在日常工作中,也可以将任务分解,采用这种提前布局的方式,来达到最终目标。