
單一登入安全性
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
iOS、iPadOS 和 visionOS 能為使用類別 NSURLSession 或 URLSession 來管理網路連線與認證的所有 App 提供 SSO 的彈性支援。Apple 為所有開發者提供這些類別,以在他們的 App 中無縫整合網路連線。
任何支援 Kerberos 認證的 Mac App 都可使用 SSO。這包含許多 macOS 內建的 App,如「行事曆」、「郵件」和 Safari,以及包含如檔案共享、螢幕共享及安全殼層(SSH)之類的服務。許多第三方 App 也支援 Kerberos。
為了設定 SSO,設定會允許裝置管理服務將必要的設定推播到裝置。其中包括:設定使用者主要名稱(Active Directory 使用者帳號)和 Kerberos 領域設定,以及設定應允許哪些 App 和 Safari Web URL 使用 SSO。
可延伸單一登入
App 開發者可為 iOS、iPadOS、macOS 與 visionOS 使用 SSO 延伸功能,提供自訂的單一登入實作。當原生或 Web App 需要使用 IdP 以進行使用者認證時,系統會叫用 SSO 延伸功能。開發者可以提供兩種類型的延伸功能:
重新導向延伸功能:重新導向至 HTTPS
挑戰/回應延伸功能:例如 Kerberos
這使得 OpenID Connect(OIDC)、OAuth、SAML 2.0 與 Kerberos 等驗證機制,都能透過可延伸單一登入來支援。SSO 延伸功能也可透過採用「平台 SSO」,在 macOS 的「檔案保險箱」與「登入視窗」中支援驗證,讓 Mac 在登入期間取得 SSO 代號。
若要使用單一登入延伸功能,App 可以使用認證服務 API,也可依賴作業系統提供的 URL 攔截機制。WebKit 和 CFNetwork 提供攔截層,以便為任何原生或 WebKit App 提供順暢的單一登入支援。若要讓系統呼叫單一登入延伸功能,必須透過裝置管理服務安裝相應的設定。除此之外,重新導向類型的延伸功能必須使用「相關聯的網域」,以證明其支援的 IdP 知悉該延伸功能的存在。
平台單一登入
透過平台單一登入(Platform SSO),開發者可以為 macOS 建立延伸至「檔案保險箱」與「登入視窗」的 SSO 延伸功能。「平台 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
使用 NIST P-256、NIST P-384 或 X25519 的 HPKE
這些機制可在不依賴使用者的情況下,與 IdP 維持受信任的連線;「平台 SSO」支援共用裝置密鑰。這可啟用多項功能,例如自動裝置註冊期間的平台 SSO、依 IdP 資訊隨需建立使用者帳號、網路授權,以及已認證的訪客模式,並且在同一部裝置上的所有使用者皆使用相同的簽署密鑰與加密密鑰。
【注意】SSO 延伸功能需要支援要求的方式才能執行註冊。也支援切換方式。例如,在登入時以使用者名稱與密碼建立新使用者帳號後,登入成功即可改用以「安全隔離區」為基礎的密鑰或智慧卡。
代號取得與更新
為在需要時向 App 與網站驗證使用者身分,SSO 延伸功能會使用 SSO 代號。為確保 SSO 延伸功能隨時可執行驗證,「平台 SSO」會在代號出現以下情況時,嘗試向 IdP 更新或取得新的代號:
遺失
已到期
已超過四小時未更新
若要向 IdP 要求或更新代號,系統會送出 JSON Web Token(JWT)登入或更新要求,並依 SSO 延伸功能定義的方法,使用裝置簽署密鑰以 ES256、ES384 或 Ed25519 進行簽署。所建立的代號會包含在回應承載資料中,並使用裝置加密密鑰的公用密鑰以 AES-GCM 256 進行加密。
若 SSO 延伸功能要求對密碼加密,密碼不會直接包含在登入要求中,而是以一段使用 AES-GCM 256 加密的內嵌聲明取代。然後對應的加密密鑰也會被建立(依 SSO 延伸功能定義的方式建立,並採用也可用於裝置加密密鑰的其中一種機制)。
當認證機制需要數位簽章時,「平台 SSO」會使用內嵌的 JWT 聲明,搭配「安全隔離區」密鑰或智慧卡進行認證。該聲明為:
使用智慧卡時,由驗證器進行簽章。
使用「安全隔離區」密鑰時,依 SSO 延伸功能定義,以 ES256、ES384 或 Ed25519 進行加密。
不論採用哪種驗證方式,SSO 代號皆具備以下特性:
儲存在鑰匙圈中,並使用
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly的資料保護屬性僅與對應的 SSO 延伸功能共用
不可遷移