
单点登录安全性
iOS、iPadOS、macOS 和 visionOS 支持通过单点登录 (SSO) 对企业网络进行认证。SSO 与身份提供商 (IdP) 配合,针对用户有权访问的服务对用户进行认证。SSO 可用于各种网络活动,从安全的 Safari 浏览器会话到第三方 App。
iOS、iPadOS、macOS 和 visionOS 包括内建 Kerberos SSO 扩展。App 开发者也可使用 SSO 扩展来执行自己的单点登录。
Kerberos 单点登录
iOS、iPadOS、macOS 和 visionOS 支持使用 Kerberos 对企业网络进行认证。SSO 支持基于开源 Heimdal 项目,并使用 SPNEGO 令牌和 HTTP Negotiate 协议,与基于 Kerberos 的认证网关和支持 Kerberos 票证的“Windows 集成身份验证”系统配合使用。同时还支持基于证书的认证,如 PKINIT。
Kerberos SSO 扩展支持以下加密类型:
AES-128-CTS-HMAC-SHA1-96
AES-256-CTS-HMAC-SHA1-96
对于使用 NSURLSession 或 URLSession 类管理网络连接和认证的任何 App,iOS、iPadOS 和 visionOS 提供灵活的 SSO 支持。Apple 向所有开发者提供这些类,以便其将网络连接无缝集成到自己的 App 中。
任何支持 Kerberos 认证的 Mac App 也支持 SSO。这包括 macOS 的众多内建 App,如“日历”、“邮件”和 Safari 浏览器,还包括文件共享、屏幕共享和 Secure Shell (SSH) 等服务。许多第三方 App 也支持 Kerberos。
为了配置 SSO,有一个配置可允许设备管理服务将必要设置推送给设备。这包括设置用户主体名称(Active Directory 用户账户)和 Kerberos 领域设置,以及配置应允许哪些 App 和 Safari 浏览器网站 URL 使用 SSO。
可扩展单点登录
App 开发者可使用 iOS、iPadOS、macOS 和 visionOS 的 SSO 扩展来执行自己的单点登录。当原生 App 或网页 App 需要使用 IdP 进行用户认证时,会调用 SSO 扩展。开发者可提供两类扩展:
重定向扩展,可重定向至 HTTPS
质询/响应扩展,如 Kerberos
这使可扩展单点登录支持 Open ID Connect (OIDC)、OAuth、SAML 2.0 和 Kerberos 认证方案。SSO 扩展还可能通过采用平台 SSO 来支持 macOS 上文件保险箱和登录窗口中的认证,这可让 Mac 在登录过程中获取 SSO 令牌。
若要使用单点登录扩展,App 可以使用 AuthenticationServices API,或者依靠操作系统提供的 URL 拦截机制。WebKit 和 CFNetwork 提供了一个拦截层,可为所有原生 App 或 WebKit App 无缝提供单点登录支持。若要调用单点登录扩展项,必须通过设备管理服务安装相应配置。此外,重定向类型扩展必须使用“关联域”以证明其支持的 IdP 知道其存在。
平台单点登录
通过平台单点登录(平台 SSO),开发者可为 macOS 构建 SSO 扩展,这些扩展可延伸至 macOS 文件保险箱和登录窗口。平台 SSO 支持通过 IdP 进行认证的不同机制:
密码
密码认证支持 WS-Trust。这使得用户即使在管理其账户的 IdP 采用联合认证时,仍可完成认证。
用户还可选择与 IdP 同步其本地账户凭证。本地账户密码会自动与其 IdP 账户密码保持同步。
安全隔区密钥
用户注册过程中会在安全隔区内创建并储存密钥,用于在无需密码的情况下通过 IdP 进行认证。
智能卡
使用智能卡通过 IdP 进行认证。
访问密钥
使用储存在 Apple 钱包中的凭证通过 IdP 进行认证。
注册
若要使用平台 SSO,Mac 和每位用户均需通过 IdP 注册。取决于不同 IdP 支持情况和应用的配置,Mac 可使用以下内容在后台静默执行设备注册:
设备管理配置中提供的注册令牌。
为设备标识符(UDID 和序列号)提供强力保证的证明。
设备注册成功后则是用户注册(除非用户账户使用已认证客人模式)。如果 IdP 要求,用户注册可包含让用户确认其注册的提示。对于平台 SSO 按需创建的本地用户账户,用户注册会在后台自动进行。
注册过程中,Mac 会创建两个密钥:设备签名密钥和设备加密密钥。根据 SSO 扩展的不同,密钥可使用以下方案:
NIST P-256 ECDH-ES
HKPE 结合 NIST P-256、NIST P-384 或 X25519
这些密钥可维持与 IdP 的受信任连接而不受用户影响,平台 SSO 支持共享设备密钥。这使得自动设备注册期间的平台 SSO、基于 IdP 信息的按需用户账户创建、网络授权和已认证客人模式等功能可用,并为特定设备上的所有用户使用相同的签名和加密密钥。
【注】SSO 扩展需要支持执行注册的所需方法。切换方法也同样受支持。例如,登录期间通过用户名和密码创建新用户账户时,该账户可在登录成功后切换为使用安全隔区支持的密钥或智能卡。
令牌获取和刷新
为了按需针对其 App 和网站进行用户认证,SSO 扩展使用 SSO 令牌。为帮助确保 SSO 扩展始终处于可执行认证的状态,平台 SSO 会在令牌出现以下情况时尝试刷新或从 IdP 获取新令牌:
丢失
过期
存在超过四小时
若要从 IdP 请求或更新令牌,系统会发送 JSON Web Token (JWT) 登录或刷新请求,并且还会使用 ES256、ES384 或 Ed25519 通过设备签名密钥进行签名(取决于 SSO 扩展定义的方法)。创建的令牌是响应有效负载的一部分,其使用设备加密密钥的公钥进行 AES-GCM 256 加密。
如果 SSO 扩展要求密码加密,那么在登录请求中不会发送密码,而是替换为一个包含密码的 AES-GCM 256 加密嵌入式断言。之后会创建关联的加密密钥(由 SSO 扩展定义,采用设备加密密钥也可使用的机制之一)。
认证机制要求数字签名时,平台 SSO 会使用嵌入式 JWT 断言进行安全隔区密钥和智能卡认证。断言为以下之一:
使用智能卡时通过认证器签名。
使用 SSO 扩展定义的安全隔区密钥时,采用 ES256、ES384 或 Ed25519 加密。
无论采用何种认证方式,SSO 令牌均:
使用钥匙串数据保护属性
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly储存在钥匙串中仅与 SSO 扩展共享
不可迁移