
シングルサインオンのセキュリティ
iOS、iPadOS、macOS、およびvisionOSでは、企業ネットワークへの認証にシングルサインオン(SSO)を使用できます。SSOはIDプロバイダ(IdP)に対応しており、アクセスが承認されているサービスに対してユーザを認証します。SSOは、幅広い範囲のネットワークアクティビティに利用することができ、Safariの安全なセッションや、他社製アプリで使用できます。
iOS、iPadOS、macOS、およびvisionOSには、Kerberos SSO機能拡張が組み込まれています。アプリデベロッパは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を使用してネットワーク接続と認証を管理するすべてのアプリに、SSOの柔軟なサポートを提供します。Appleは、すべてのデベロッパがアプリにネットワーク接続をシームレスに統合できるように、これらのクラスを提供しています。
Kerberos認証に対応するすべてのMacアプリが、SSOに対応しています。これには、カレンダー、メール、Safariなど、macOSに内蔵されているアプリの多くが含まれ、ファイル共有、画面共有、セキュアシェル(SSH)などのサービスも含まれます。多くの他社製アプリもKerberosに対応しています。
SSOを設定するには、デバイス管理サービスが必要な設定をデバイスにプッシュできるような構成にします。これには、ユーザのプリンシパル名(Active Directoryユーザアカウント)の設定やKerberos領域設定、SSOの使用を許可するアプリとSafariのWeb URLの設定が含まれます。
拡張シングルサインオン
アプリデベロッパは、iOS、iPadOS、macOS、およびvisionOSのSSO機能拡張を使って独自のシングルサインオンの実装を提供できます。SSO機能拡張は、ネイティブアプリまたはWebアプリでユーザ認証のためにIdPを利用する必要がある場合に呼び出されます。デベロッパは、以下の2種類の機能拡張を提供できます:
HTTPSにリダイレクトするリダイレクト機能拡張
Kerberosなどのチャレンジ/応答機能拡張
これによって、拡張シングルサインオンがOpen ID Connect(OIDC)、OAuth、SAML 2.0、およびKerberosの認証スキームに対応します。また、SSO機能拡張は、プラットフォームSSOを採用することでmacOSのFileVaultおよびログインウインドウでの認証にも対応できます。この機能は、ログイン中にMacがSSOトークンを取得できるようにするものです。
アプリはシングルサインオン機能拡張を利用するために、AuthenticationServices APIを使用するか、オペレーティングシステムから提供されるURLインターセプションメカニズムに頼ることができます。WebKitとCFNetworkは、任意のネイティブアプリまたはWebKitアプリでシングルサインオンへのシームレスな対応を許可するインターセプションレイヤーを提供します。シングルサインオン機能拡張を呼び出すには、構成がデバイス管理サービスを通じてインストールされている必要があります。さらに、リダイレクトタイプの機能拡張では関連ドメインを使用して、その機能拡張に対応するIdPに自らの存在が認識されていることを証明する必要があります。
プラットフォームシングルサインオン
プラットフォームシングルサインオン(プラットフォームSSO)を使用して、デベロッパはmacOSのFileVaultとログインウインドウにも対応するmacOS用のSSO機能拡張を構築できます。プラットフォームSSOは、以下のようにIdPに対するさまざまな認証メカニズムに対応します:
パスワード
パスワード認証は、WS-Trustに対応しています。これにより、ユーザのアカウントを管理するIdPが連携されている場合でも、ユーザの認証が可能です。
オプションで、ユーザのローカルアカウントの資格情報をIdPと同期することもできます。ローカルアカウントのパスワードは、IdPアカウントのパスワードと自動的に常時同期されます。
Secure Enclave鍵
ユーザ登録プロセス中に鍵が作成されてSecure Enclaveに保存され、パスワードを使用せずにIdPに対して認証を行うために使用されます。
スマートカード
スマートカードがIdPに対する認証に使用されます。
アクセス鍵
Appleウォレットに保存されたパスが、IdPに対する認証に使用されます。
登録
プラットフォームSSOを使用するには、Macと各ユーザがIdPへの登録を行います。IdPサポートと適用された構成に応じて、Macは以下を使用してバックグラウンドで自動的にデバイス登録を実行できます:
デバイス管理構成で提供された登録トークン。
デバイスの識別子(UDIDとシリアル番号)に関する強力な保証を提供する認証。
デバイス登録が成功したあと、ユーザの登録が行われます(ユーザアカウントが認証済みゲストモードを使用していない限り)。IdPの要件に応じて、ユーザ登録の際に登録の確認を促すメッセージをユーザに表示することもできます。プラットフォームSSOがオンデマンドで作成するローカルユーザアカウントの場合、ユーザ登録はバックグラウンドで自動的に行われます。
登録プロセス中に、Macはデバイス署名鍵とデバイス暗号鍵の2つの鍵を作成します。SSO機能拡張に応じて、以下を使用する鍵が作成されます:
NIST P-256 ECDH-ES
NIST P-256、NIST P-384、またはX25519によるHKPE
これらは、ユーザとは独立してIdPとの信頼できる接続を維持します。プラットフォームSSOは、共有デバイス鍵に対応しています。これにより、自動デバイス登録中のプラットフォームSSO、IdPからの情報に基づくユーザアカウントのオンデマンド作成、ネットワーク認証、認証済みゲストモードなどの機能が実行できるようになり、特定のデバイス上の全ユーザに対して同じ署名鍵と暗号鍵が使用されます。
注記: SSO機能拡張は、登録を実行するためにリクエストされた方式に対応する必要があります。方式の切り替えにも対応します。例えば、ログイン時にユーザ名とパスワードを指定して新規ユーザアカウントを作成し、ログインが正常に行われたあと、そのアカウントでSecure Enclaveに保存された鍵やスマートカードを使用するように切り替えることができます。
トークンの取得と更新
必要に応じてアプリとWebサイトに対してユーザを認証するために、SSO機能拡張はSSOトークンを使用します。SSO機能拡張がいつでもすぐに認証を実行できるように、プラットフォームSSOはトークンが以下の状態になると、トークンを更新またはIdPから新規トークンを取得することを試みます:
見つからない
有効期限が切れた
4時間以上経過した
IdPからトークンをリクエストまたは更新するために、JSON Webトークン(JWT)ログイン/更新リクエストが送信され、SSO機能拡張によって定義された方式に応じて、ES256、ES384、またはEd25519を使用してデバイス署名鍵による署名が行われます。作成されるトークンは、デバイス暗号鍵の公開鍵を使用してAES-GCM 256で暗号化される応答ペイロードの一部です。
パスワード暗号化がSSO機能拡張によってリクエストされている場合、パスワードはログインリクエスト内で送信されず、パスワードを含むAES-GCM 256で暗号化された埋め込みアサーションに置き換えられます。その場合は、関連した暗号鍵が作成されます(SSO機能拡張による定義に従って、デバイス暗号鍵にも利用可能なメカニズムのいずれかを使用して)。
認証メカニズムがデジタル署名を要求している場合、プラットフォームSSOは埋め込みJWTアサーションを使用して、Secure Enclave鍵とスマートカードによる認証を行います。アサーションは以下のいずれかの状態です:
スマートカードの使用時には、オーセンティケータによって署名されている。
SSO機能拡張の定義に従ってSecure Enclave鍵を使用する場合は、ES256、ES384、またはEd25519を使用して暗号化されている。
認証方式に関係なく、SSOトークンは以下のように処理されます:
キーチェーンデータ保護属性
kSecAttrAccessibleAfterFirstUnlockThisDeviceOnlyを使用して、キーチェーン内に保存されるSSO機能拡張とのみ共有される
移行不可