Discover Sign in with Apple at Work & School
System & Services 进阶 20m

了解 Sign in with Apple 在工作与教育场景的应用

Discover Sign in with Apple at Work & School

2022年6月6日

在 Apple 官方观看视频

一句话判断

Sign in with Apple 现在支持 Managed Apple ID,加上全新的 Roster API,教育和工作场景下的身份集成和班级数据获取变得前所未有的简单。

这场 Session 讲了什么

Sign in with Apple 最初只支持个人 Apple ID。这次更新将其扩展到 Managed Apple ID——由组织(学校或企业)通过 Apple School Manager 或 Apple Business Manager 管理的账号。这意味着学生、教师和员工可以用他们的 Managed Apple ID 一键登录你的 App。

Session 分三个部分。第一部分介绍 Sign in with Apple at Work & School 的用户体验:当用户使用 Managed Apple ID 时,系统会展示专门的欢迎界面,并且始终共享用户名和邮箱——不像个人 Apple ID 可以选择隐藏邮箱。第二部分介绍 Roster API,这是一个 REST API,让 App 能通过 OAuth 2.0 获取 Apple School Manager 中的用户和班级数据。第三部分讲 IT 管理员如何控制数据访问权限。

值得深挖的点

  • Managed Apple ID 的行为差异:与个人 Apple ID 相比,Managed Apple ID 登录时姓名和邮箱始终可见(不支持隐藏邮箱功能)。部分账号可能没有邮箱地址(比如低年级学生),你的 App 需要处理这种情况。
  • Roster API 的 OAuth 2.0 流程:IT 管理员需要授权你的 App 访问组织数据。你需要在 Developer Portal 注册 Organizational Data Sharing 的 scope(用户访问或班级访问),然后通过标准 OAuth 授权码流程获取 access token。
  • 零额外代码适配:如果你的 App 已经支持 Sign in with Apple,Managed Apple ID 的支持是自动的,不需要额外代码。只是收到的 credential 中姓名和邮箱一定会包含值。
  • Organizational Data Sharing:IT 管理员在 Apple School Manager 中控制哪些 App 可以访问组织数据。管理员和站点管理员角色才有权审批。

代码片段

// 客户端:Sign in with Apple 处理逻辑不变
// 当用户使用 Managed Apple ID 时,fullName 和 email 始终有值
func authorizationController(
    controller: ASAuthorizationController,
    didCompleteWithAuthorization authorization: ASAuthorization
) {
    guard let credential = authorization.credential
            as? ASAuthorizationAppleIDCredential else { return }

    // 对于 Managed Apple ID,这些值始终存在
    let fullName = credential.fullName
    let email = credential.email  // 可能为 nil(低年级学生)

    // 使用这些信息进行访问控制
    // 比如根据组织身份分配不同的权限
}
// 服务端:调用 Roster API 获取班级数据
// 1. 通过 OAuth 2.0 获取 access token
// 2. 调用 REST 端点
let url = URL(string: "https://api.roster.apple.com/v1/classes")!
var request = URLRequest(url: url)
request.setValue("Bearer \(accessToken)", forHTTPHeaderField: "Authorization")

// 返回的 JSON 包含班级 ID、名称、学生列表等
// 可以用于自动配置你的教育 App

最佳实践

  • 做好邮箱可能为空的准备,用其他标识符(如 user ID)作为主要关联键
  • 在 Developer Portal 中只请求你真正需要的 scope(用户访问 vs 班级访问)
  • Roster 数据应该缓存到本地,不要每次启动都请求
  • IT 管理员审批流程需要友好的引导文档,这是 Adoption 的关键环节
  • 测试时使用 Apple School Manager 的沙盒环境

还有什么值得关注

  • “Enhance your Sign in with Apple experience” 介绍了如何防止账号重复和检测 credential 变化
  • “Meet passkeys” 介绍了下一代密码替代方案,与 Sign in with Apple 互补
  • Roster API 目前仅支持 Apple School Manager(教育场景),企业场景(Apple Business Manager)的支持后续可能会扩展
  • 如果你的 App 在教育领域,配合 Classroom 和 Schoolwork 可以构建更完整的生态
WWDC 2022