Apple SSO クックブック (REST API V2) apple-sso-cookbook-rest-api-v2

IMPORTANT
このページのコンテンツは、情報提供のみを目的として提供されています。 このAPIを使用するには、Adobeの現在のライセンスが必要です。 無断使用は認められません。

Adobe Pass Authentication REST API V2は、iOS、iPadOS、またはtvOSで動作するクライアントアプリケーションのエンドユーザー向けに、パートナーシングルサインオン(SSO)をサポートしています。

このドキュメントは、上位レベルのビューを提供する既存のREST API V2概要と、パートナーフロー🔗を使用して シングルサインオンを実装する方法を説明するドキュメントの拡張機能として機能します。

パートナーフローを使用したApple シングルサインオン cookbook

前提条件 prerequisites

パートナーフローを使用してApple シングルサインオンを続行する前に、次の前提条件を満たしていることを確認してください。

  • ストリーミングアプリケーションは、Adobe Pass Authentication バックエンドがデバイスプラットフォームとその機能を識別できるように、X-Device-Infoおよび/またはUser-Agent ヘッダーで必要なすべてのデータを収集する必要があります。 X-Device-Info ヘッダーについて詳しくは、X-Device-Info ドキュメントを参照してください。

  • ストリーミングアプリケーションは、デバイスレベルで保存されたユーザーのサブスクリプション情報へのアクセスを要求する必要があります。この場合、ユーザーは、デバイスのカメラまたはマイクへのアクセスを提供するのと同様に、続行するためのアプリケーション権限を付与する必要があります。 この権限は、AppleのVideo Subscriber Account Frameworkを使用してアプリケーションごとに要求する必要があり、デバイスはユーザーの選択内容を保存します。

    Apple シングルサインオンのユーザーエクスペリエンスのメリットを説明して、サブスクリプション情報へのアクセスを拒否するユーザーにインセンティブを提供することをお勧めしますが、アプリケーションの設定(TV プロバイダーのアクセス権)に移動するか、iOSおよびiPadOSの​ Settings -> TV Provider ​またはtvOSの​ Settings -> Accounts -> TV Provider ​に移動して決定を変更できることに注意してください。

    ストリーミングアプリケーションは、ユーザー認証を必要とする前に、任意の時点で​ ユーザーのサブスクリプション情報にアクセスする権限を確認できるため、アプリケーションがフォアグラウンド状態に入ると、ユーザーの権限を要求できます。

IMPORTANT
前提条件
  • ストリーミングアプリケーションは、プログラマーに適用される​ オンボーディングの前提条件を完了しました。Apple シングルサインオン ユーザーエクスペリエンスを有効にするために必要です。

ワークフロー workflow

次の図に示すように、パートナーフローを使用してApple シングルサインオンを実装するには、所定の手順を実行します。

​ パートナーフローを使用したApple シングルサインオン ​

パートナーフローを使用したApple シングルサインオン

イ。登録段階
  1. クライアント資格情報の取得: ストリーミングアプリケーションは、クライアント登録エンドポイントを呼び出して、クライアント資格情報を取得するために必要なすべてのデータを収集します。

    note important
    IMPORTANT
    詳しくは、​ クライアント資格情報の取得 API ドキュメントを参照してください。
    • software_statementなど、すべての​_必須_ パラメーター
    • Content-Type、X-Device-Infoなど、必須 ヘッダーすべて
    • すべての​_optional_ パラメーターとヘッダー
  2. クライアント資格情報を返します: クライアント登録エンドポイントの応答には、受信したパラメーターとヘッダーに関連付けられたクライアント資格情報に関する情報が含まれます。

    note important
    IMPORTANT
    クライアント認証情報レスポンスで提供される情報の詳細については、​ クライアント認証情報の取得 API ドキュメントを参照してください。
    クライアントレジスタは、基本的な条件が満たされていることを確認するために、リクエストデータを検証します。
    • 必須 パラメーターとヘッダーは有効である必要があります。
    検証が失敗すると、エラー応答が生成され、​ クライアント資格情報の取得 API ドキュメントに準拠する追加情報が提供されます。
    note tip
    TIP
    クライアントの資格情報はキャッシュして無期限に使用する必要があります。
  3. アクセストークンの取得: ストリーミングアプリケーションは、クライアントトークンエンドポイントを呼び出して、アクセストークンを取得するために必要なすべてのデータを収集します。

    note important
    IMPORTANT
    詳細については、​ アクセストークンの取得 API ドキュメントを参照してください。
    • client_id、client_secret、grant_typeなど、必須​のすべてのパラメーター
    • Content-Type、X-Device-Infoなど、必須 ヘッダーすべて
    • すべての​_optional_ パラメーターとヘッダー
  4. 戻りアクセストークン: クライアントトークンエンドポイントの応答には、受信したパラメーターとヘッダーに関連付けられたアクセストークンに関する情報が含まれます。

    note important
    IMPORTANT
    アクセストークン応答で提供される情報について詳しくは、​ アクセストークンの取得 API ドキュメントを参照してください。
    クライアントトークンは、基本的な条件が満たされていることを確認するために、リクエストデータを検証します。
    • 必須 パラメーターとヘッダーは有効である必要があります。
    検証が失敗すると、エラー応答が生成され、​ アクセストークンの取得 API ドキュメントに準拠する追加情報が提供されます。
    note tip
    TIP
    アクセストークンはキャッシュされ、指定された期間内(24時間の有効期間など)にのみ使用する必要があります。 有効期限が切れた後、ストリーミングアプリケーションは新しいアクセストークンをリクエストする必要があります。
B.認証フェーズの確認
  1. パートナーフレームワークのステータスを取得: ストリーミングアプリケーションは、Appleによって開発された​ ビデオ購読者アカウントフレームワーク ​を呼び出して、ユーザーの権限とプロバイダー情報を取得します。

    note important
    IMPORTANT
    詳しくは、​ ビデオ購読者アカウントフレームワーク ​のドキュメントを参照してください。
    • ストリーミングアプリケーションは、ユーザーのサブスクリプション情報🔗にアクセスするための権限を確認し、ユーザーが許可した場合にのみ続行する必要があります。
    • ストリーミングアプリケーションは、VSAccountManagerに​ デリゲート ​を提供する必要があります。
    • ストリーミングアプリケーションは、購読者アカウント情報に対して​ リクエスト ​を送信する必要があります。
    • ストリーミングアプリケーションは、​ メタデータ ​情報を待機して処理する必要があります。
    ストリーミングアプリケーションは、このフェーズでユーザーを中断できないことを示すために、VSAccountMetadataRequest オブジェクトのisInterruptionAllowed プロパティにfalseと等しいブール値を指定する必要があります。
    note tip
    TIP
    プロ向けのヒント: コードスニペットに従い、コメントに細心の注意を払います。
    code language-swift
    ...
    let videoSubscriberAccountManager: VSAccountManager = VSAccountManager();
    
    videoSubscriberAccountManager.checkAccessStatus(options: [VSCheckAccessOption.prompt: true]) { (accessStatus, error) -> Void in
             switch (accessStatus) {
             // The user allows the application to access subscription information.
             case VSAccountAccessStatus.granted:
                     // Construct the request for subscriber account information.
                     let vsaMetadataRequest: VSAccountMetadataRequest = VSAccountMetadataRequest();
    
                     // This is actually the SAML Issuer not the channel ID.
                     vsaMetadataRequest.channelIdentifier = "https://saml.sp.auth.adobe.com";
    
                     // This is the subscription account information needed at this step.
                     vsaMetadataRequest.includeAccountProviderIdentifier = true;
    
                     // This is the subscription account information needed at this step.
                     vsaMetadataRequest.includeAuthenticationExpirationDate = true;
    
                     // This is going to make the Video Subscriber Account Framework to refrain from prompting the user with the providers picker at this step.
                     vsaMetadataRequest.isInterruptionAllowed = false;
    
                     // Submit the request for subscriber account information - accountProviderIdentifier.
                     videoSubscriberAccountManager.enqueue(vsaMetadataRequest) { vsaMetadata, vsaError in
                         if (vsaMetadata != nil && vsaMetadata!.accountProviderIdentifier != nil) {
                             // The vsaMetadata!.authenticationExpirationDate will contain the expiration date for current authentication session.
                             // The vsaMetadata!.authenticationExpirationDate should be compared against current date.
                             ...
                             // The vsaMetadata!.accountProviderIdentifier will contain the provider identifier as it is known for the platform configuration.
                             // The vsaMetadata!.accountProviderIdentifier represents the platformMappingId in terms of Adobe Pass Authentication configuration.
                             ...
                             // The application must determine the MVPD id property value based on the platformMappingId property value obtained above.
                             // The application must use the MVPD id further in its communication with Adobe Pass Authentication services.
                             ...
                             // Continue with the "Retrieve profiles" step.
                             ...
                         } else {
                             // The user is not authenticated at platform level, continue with the "Retrieve profiles" step.
                             ...
                         }
                     }
    
             // The user has not yet made a choice or does not allow the application to access subscription information.
             default:
                 // Continue with the "Retrieve profiles" step.
                 ...
             }
    }
    ...
    
  2. パートナーフレームワークのステータス情報を返します: ストリーミングアプリケーションは、応答データを検証して、基本的な条件が満たされていることを確認します。

    • ユーザー権限のアクセスステータスが付与されます。
    • ユーザープロバイダーマッピング識別子が存在し、有効です。
    • ユーザープロバイダープロファイルの有効期限(使用可能な場合)は有効です。
  3. プロファイルの取得: ストリーミングアプリケーションは、プロファイルエンドポイントにリクエストを送信して、すべてのプロファイル情報を取得するために必要なすべてのデータを収集します。

    note important
    IMPORTANT
    この手順で​ 必ず ​使用するREST API v2 エンドポイントは、次のいずれかです。
    または
    この手順では、パートナー認証応答🔗 APIを使用して プロファイルを作成および取得する​を使用しないでください。
    note important
    IMPORTANT
    詳しくは、​ プロファイルの取得 APIまたは特定のmvpd API ドキュメントのプロファイルの取得を参照してください。
    • serviceProvider (またはmvpd)など、すべての​_必須_ パラメーター
    • Authorization、AP-Device-Identifier、AP-Partner-Framework-Statusなど、必須 ヘッダーすべて
    • すべての​_optional_ パラメーターとヘッダー
    ストリーミングアプリケーションは、取得した応答に「appleSSO」タイプのプロファイルが含まれるように、パートナーフレームワークのステータスに有効な値が含まれていることを確認する必要があります。
    AP-Partner-Framework-Status ヘッダーについて詳しくは、AP-Partner-Framework-Statusのドキュメントを参照してください。
  4. 見つかったプロファイルに関する情報を返します: プロファイル エンドポイントの応答には、受信したパラメーターとヘッダーに関連付けられている見つかったプロファイルに関する情報が含まれます。

  5. プロファイルを選択し、決定フローに進みます: プロファイル エンドポイントの応答にプロファイルが含まれている場合、ストリーミング アプリケーションは内部ロジック(最終的にはエンドユーザーとのやり取り)を使用して、使用可能なプロファイルの1つを選択し、その後の決定フローを続行します。

  6. パートナー認証フローで続行: プロファイル エンドポイント応答にプロファイルが含まれていない場合、ストリーミング アプリケーションはパートナー認証フローで続行します。

C. パートナー認証フェーズ
  1. 設定の取得: ストリーミングアプリケーションは、構成エンドポイントにリクエストを送信することで、アクティブな統合を持つMVPDのリストを取得するために必要なすべてのデータを収集します。

    note important
    IMPORTANT
    詳細については、特定のサービスプロバイダー APIの設定の取得に関するドキュメントを参照してください。
    • serviceProviderなど、すべての​_必須_ パラメーター
    • Authorization、AP-Device-Identifier、X-Device-Infoなど、必須 ヘッダーすべて
    • すべての​_optional_ パラメーターとヘッダー
  2. 戻り値の設定:​設定エンドポイントの応答には、サービスプロバイダーとのアクティブな統合を持つMVPDに関する情報が含まれます。

    note important
    IMPORTANT
    設定応答で提供される情報について詳しくは、特定のサービスプロバイダー🔗 API ドキュメントの設定の取得を参照してください。
    設定エンドポイントは、基本的な条件が満たされていることを確認するために、リクエストデータを検証します。
    • 必須 パラメーターとヘッダーは有効である必要があります。
    検証が失敗すると、エラー応答が生成され、拡張エラーコード ​のドキュメントに準拠する追加情報が提供されます。
    note important
    IMPORTANT
    ストリーミングアプリケーションは、さらに進む際に、各MVPDに提供される次の詳細を処理する必要があります。
    • enablePlatformServices: MVPDが現在Apple シングルサインオンをサポートしているかどうかを示します。
    • displayInPlatformPicker: MVPDをApple ピッカーに表示できるかどうかを示します。
    • boardingStatus: MVPDがApple シングルサインオンでオンボーディングされているかどうかを示します。
  3. パートナーフレームワークのステータスを取得: ストリーミングアプリケーションは、Appleによって開発された​ ビデオ購読者アカウントフレームワーク ​を呼び出して、ユーザーの権限とプロバイダー情報を取得します。

    note important
    IMPORTANT
    詳しくは、​ ビデオ購読者アカウントフレームワーク ​のドキュメントを参照してください。
    • ストリーミングアプリケーションは、ユーザーのサブスクリプション情報🔗にアクセスするための権限を確認し、ユーザーが許可した場合にのみ続行する必要があります。
    • ストリーミングアプリケーションは、VSAccountManagerに​ デリゲート ​を提供する必要があります。
    • ストリーミングアプリケーションは、購読者アカウント情報に対して​ リクエスト ​を送信する必要があります。
    • ストリーミングアプリケーションは、​ メタデータ ​情報を待機して処理する必要があります。
    ストリーミングアプリケーションは、VSAccountMetadataRequest オブジェクトのisInterruptionAllowed プロパティにtrueに等しいブール値を指定し、このフェーズでTV プロバイダーを選択するためにユーザーを中断できることを示す必要があります。
    note tip
    TIP
    プロ向けのヒント: コードスニペットに従い、コメントに細心の注意を払います。
    code language-swift
     ...
     let videoSubscriberAccountManager: VSAccountManager = VSAccountManager();
    
     // This must be a class implementing the VSAccountManagerDelegate protocol.
     let videoSubscriberAccountManagerDelegate: VideoSubscriberAccountManagerDelegate = VideoSubscriberAccountManagerDelegate();
    
     videoSubscriberAccountManager.delegate = videoSubscriberAccountManagerDelegate;
    
     videoSubscriberAccountManager.checkAccessStatus(options: [VSCheckAccessOption.prompt: true]) { (accessStatus, error) -> Void in
                 switch (accessStatus) {
                 // The user allows the application to access subscription information.
                 case VSAccountAccessStatus.granted:
                         // Construct the request for subscriber account information.
                         let vsaMetadataRequest: VSAccountMetadataRequest = VSAccountMetadataRequest();
    
                         // This is actually the SAML Issuer not the channel ID.
                         vsaMetadataRequest.channelIdentifier = "https://saml.sp.auth.adobe.com";
    
                         // This is the subscription account information needed at this step.
                         vsaMetadataRequest.includeAccountProviderIdentifier = true;
    
                         // This is the subscription account information needed at this step.
                         vsaMetadataRequest.includeAuthenticationExpirationDate = true;
    
                         // This is going to make the Video Subscriber Account Framework to prompt the user with the providers picker at this step.
                         vsaMetadataRequest.isInterruptionAllowed = true;
    
                         // This can be computed from the Configuration service response in order to filter the TV providers from the Apple picker.
                         vsaMetadataRequest.supportedAccountProviderIdentifiers = supportedAccountProviderIdentifiers;
    
                         // This can be computed from the Configuration service response in order to sort the TV providers from the Apple picker.
                         if #available(iOS 11.0, tvOS 11, *) {
                             vsaMetadataRequest.featuredAccountProviderIdentifiers = featuredAccountProviderIdentifiers;
                         }
    
                         // Submit the request for subscriber account information - accountProviderIdentifier.
                         videoSubscriberAccountManager.enqueue(vsaMetadataRequest) { vsaMetadata, vsaError in
                             if (vsaMetadata != nil && vsaMetadata!.accountProviderIdentifier != nil) {
                                 // The vsaMetadata!.authenticationExpirationDate will contain the expiration date for current authentication session.
                                 // The vsaMetadata!.authenticationExpirationDate should be compared against current date.
                                 ...
                                 // The vsaMetadata!.accountProviderIdentifier will contain the provider identifier as it is known for the platform configuration.
                                 // The vsaMetadata!.accountProviderIdentifier represents the platformMappingId in terms of Adobe Pass Authentication configuration.
                                 ...
                                 // The application must determine the MVPD id property value based on the platformMappingId property value obtained above.
                                 // The application must use the MVPD id further in its communication with Adobe Pass Authentication services.
                                 ...
                                 // Continue with the "Retrieve partner authentication request" step.
                                 ...
                             } else {
                                 // The user is not authenticated at platform level.
                                 if (vsaError != nil) {
                                     // The application can check to see if the user selected a provider which is present in Apple picker, but the provider is not onboarded in platform SSO.
                                     if let error: NSError = (vsaError! as NSError), error.code == 1, let appleMsoId = error.userInfo["VSErrorInfoKeyUnsupportedProviderIdentifier"] as! String? {
                                         var mvpd: Mvpd? = nil;
    
                                         // The requestor.mvpds must be computed during the "Return configuration" step.
                                         for provider in requestor.mvpds {
                                             if provider.platformMappingId == appleMsoId {
                                                 mvpd = provider;
                                                 break;
                                             }
                                         }
    
                                         if mvpd != nil {
                                             // Continue with the "Proceed with basic authentication flow" step, but you can skip prompting the user with your MVPD picker and use the mvpd selection, therefore creating a better UX.
                                             ...
                                         } else {
                                             // Continue with the "Proceed with basic authentication flow" step.
                                             ...
                                         }
                                     } else {
                                         // Continue with the "Proceed with basic authentication flow" step.
                                         ...
                                     }
                                 } else {
                                     // Continue with the "Proceed with basic authentication flow" step.
                                     ...
                                 }
                             }
                         }
    
                 // The user has not yet made a choice or does not allow the application to access subscription information.
                 default:
                     // Continue with the "Proceed with basic authentication flow" step.
                     ...
                 }
     }
     ...
    
  4. パートナーフレームワークのステータス情報を返します: ストリーミングアプリケーションは、応答データを検証して、基本的な条件が満たされていることを確認します。

    • ユーザー権限のアクセスステータスが付与されます。
    • ユーザープロバイダーマッピング識別子が存在し、有効です。
    • ユーザープロバイダープロファイルの有効期限(使用可能な場合)は有効です。
  5. パートナー認証要求を取得: ストリーミングアプリケーションは、Sessions パートナーエンドポイントを呼び出して、認証セッションを開始するために必要なすべてのデータを収集します。

    note important
    IMPORTANT
    詳細については、​ パートナー認証リクエストの取得 API ドキュメントを参照してください。
    • serviceProviderやpartnerなど、必須​のすべてのパラメーター
    • 必須 ヘッダー(Authorization、AP-Device-Identifier、Content-Type、X-Device-Info、AP-Partner-Framework-Statusなど)
    • すべての​_optional_ ヘッダーとパラメーター
    ストリーミングアプリケーションは、取得した応答にパートナー認証要求(SAML リクエスト)が含まれるように、パートナーフレームワークのステータスに有効な値が含まれていることを確認する必要があります。
    AP-Partner-Framework-Status ヘッダーについて詳しくは、AP-Partner-Framework-Statusのドキュメントを参照してください。
  6. 次のアクションを示します: セッション パートナーのエンドポイント応答には、次のアクションに関するストリーミングアプリケーションを導くために必要なデータが含まれています。

    note important
    IMPORTANT
    セッション応答で提供される情報について詳しくは、​ パートナー認証リクエストの取得 API ドキュメントを参照してください。
    セッションパートナーエンドポイントは、基本的な条件が満たされていることを確認するために、リクエストデータを検証します。
    • 必須 パラメーターとヘッダーは有効である必要があります。
    • 指定されたserviceProviderとmvpdの統合はアクティブである必要があります。
    基本的な検証が失敗した場合は、エラー応答が生成され、拡張エラーコード ​のドキュメントに準拠する追加情報が提供されます。
    セッションパートナーエンドポイントは、パートナーシングルサインオン条件が満たされていることを確認するために、リクエストデータを検証します。
    • Adobe Pass サーバーのパートナーシングルサインオン設定は、有効で有効である必要があります。
    • AP-Partner-Framework-Status ヘッダーを介して受信したパートナーフレームワークの状態ペイロードは有効である必要があります。
    パートナーのシングルサインオンの検証が失敗した場合、応答はデフォルトで基本認証フローになります。
  7. 決定フローで続行: セッション パートナーのエンドポイント応答には、次のデータが含まれています。

    • actionName属性が「authorize」に設定されています。
    • actionType属性が「direct」に設定されています。

    Adobe Pass バックエンドが有効なプロファイルを識別する場合、後続の意思決定フローに使用できるプロファイルが既に存在するため、ストリーミングアプリケーションは選択したMVPDで再認証する必要がありません。

  8. 基本認証フローで続行: セッション パートナーのエンドポイント応答には、次のデータが含まれています。

    • actionName属性が「authenticate」または「resume」に設定されています。
    • actionType属性が「インタラクティブ」または「ダイレクト」に設定されています。

    Adobe Pass バックエンドで有効なプロファイルが識別されず、パートナーのシングルサインオン検証が失敗した場合、Adobe Pass サーバーは基本認証フローにフォールバックします。

    基本認証フローについて詳しくは、次のドキュメントを参照してください。

  9. パートナー認証応答フローを使用してプロファイルの作成と取得を進めます: セッション パートナーエンドポイント応答には、次のデータが含まれます。

    • actionName属性が「partner_profile」に設定されています。
    • actionType属性が「direct」に設定されています。
    • authenticationRequest - type属性には、パートナーフレームワークがMVPD ログインに使用するセキュリティプロトコルが含まれます(現在はSAMLのみ)。
    • authenticationRequest - request属性には、パートナーフレームワークに渡されるSAML リクエストが含まれます。
    • authenticationRequest - attributesNames属性には、パートナーフレームワークに渡されるSAML属性が含まれます。

    Adobe Pass バックエンドが有効なプロファイルを識別せず、パートナーのシングルサインオン検証が合格した場合、ストリーミングアプリケーションは、MVPDで認証フローを開始するためのパートナーフレームワークに渡すアクションとデータを含む応答を受け取ります。

  10. パートナーフレームワークを使用してMVPD認証を完了:​前の手順で取得したパートナー認証リクエスト (SAML リクエスト)をVideo Subscriber Account Frameworkに転送します。 認証フローが成功すると、MVPDとのVideo Subscriber Account Frameworkのインタラクションにより、パートナーフレームワークのステータス情報とともに返されるパートナー認証応答(SAML応答)が生成されます。

    note important
    IMPORTANT
    詳しくは、​ ビデオ購読者アカウントフレームワーク ​のドキュメントを参照してください。
    • ストリーミングアプリケーションは、ユーザーのサブスクリプション情報🔗にアクセスするための権限を確認し、ユーザーが許可した場合にのみ続行する必要があります。
    • ストリーミングアプリケーションは、VSAccountManagerに​ デリゲート ​を提供する必要があります。
    • ストリーミングアプリケーションは、購読者アカウント情報に対して要求を送信し、前の手順で取得したパートナー認証要求(SAML要求)を含める必要があります。
    • ストリーミングアプリケーションは、​ メタデータ ​情報を待機して処理する必要があります。
    ストリーミングアプリケーションは、VSAccountMetadataRequest オブジェクトのisInterruptionAllowed プロパティにtrueに等しいブール値を指定し、このフェーズで選択したTV プロバイダーとの認証をユーザーが中断できることを示す必要があります。
    note tip
    TIP
    プロ向けのヒント: コードスニペットに従い、コメントに細心の注意を払います。
    code language-swift
     ...
     let videoSubscriberAccountManager: VSAccountManager = VSAccountManager();
    
     videoSubscriberAccountManager.checkAccessStatus(options: [VSCheckAccessOption.prompt: true]) { (accessStatus, error) -> Void in
                 switch (accessStatus) {
                 // The user allows the application to access subscription information.
                 case VSAccountAccessStatus.granted:
                         // Construct the request for subscriber account information.
                         let vsaMetadataRequest: VSAccountMetadataRequest = VSAccountMetadataRequest();
    
                         // This is actually the SAML Issuer not the channel ID.
                         vsaMetadataRequest.channelIdentifier = "https://saml.sp.auth.adobe.com";
    
                         // This is going to include subscription account information which should match the provider determined in a previous step.
                         vsaMetadataRequest.includeAccountProviderIdentifier = true;
    
                         // This is going to include subscription account information which should match the provider determined in a previous step.
                         vsaMetadataRequest.includeAuthenticationExpirationDate = true;
    
                         // This is going to make the Video Subscriber Account Framework to refrain from prompting the user with the providers picker at this step.
                         vsaMetadataRequest.isInterruptionAllowed = false;
    
                         // This are the user metadata fields expected to be available on a successful login and are determined from the Sessions SSO service. Look for the authenticationRequest > attributesNames associated with the provider determined in a previous step.
                         vsaMetadataRequest.attributeNames = attributesNames;
    
                         // This is the authenticationRequest > request field from Sessions SSO service.
                         vsaMetadataRequest.verificationToken = authenticationRequestPayload;
    
                         // Submit the request for subscriber account information.
                         videoSubscriberAccountManager.enqueue(vsaMetadataRequest) { vsaMetadata, vsaError in
                             if (vsaMetadata != nil && vsaMetadata!.samlAttributeQueryResponse != nil) {
                                 var samlResponse: String? = vsaMetadata!.samlAttributeQueryResponse!;
    
                                 // Remove new lines, new tabs and spaces.
                                 samlResponse = samlResponse?.replacingOccurrences(of: "[ \\t]+", with: " ", options: String.CompareOptions.regularExpression);
                                 samlResponse = samlResponse?.components(separatedBy: CharacterSet.newlines).joined(separator: "");
                                 samlResponse = samlResponse?.trimmingCharacters(in: CharacterSet.whitespacesAndNewlines);
    
                                 // Base64 encode.
                                 samlResponse = samlResponse?.data(using: .utf8)?.base64EncodedString(options: []);
    
                                 // URL encode. Please be aware not to double URL encode it further.
                                 samlResponse = samlResponse?.addingPercentEncoding(withAllowedCharacters: CharacterSet.init(charactersIn: "!*'();:@&=+$,/?%#[]").inverted);
    
                                 // Continue with the "Create and retrieve profile using partner authentication response" step.
                                 ...
                             } else {
                                 // Continue with the "Proceed with basic authentication flow" step.
                                 ...
                             }
                         }
    
                 // The user has not yet made a choice or does not allow the application to access subscription information.
                 default:
                     // Continue with the "Proceed with basic authentication flow" step.
                     ...
                 }
     }
     ...
    
  11. パートナー認証応答を返します: ストリーミングアプリケーションは、応答データを検証して、基本的な条件が満たされていることを確認します。

    • ユーザー権限のアクセスステータスが付与されます。
    • ユーザープロバイダーマッピング識別子が存在し、有効です。
    • ユーザープロバイダープロファイルの有効期限(使用可能な場合)は有効です。
    • パートナー認証応答(SAML応答)が存在し、有効です。
  12. パートナー認証応答を使用したプロファイルの作成と取得: ストリーミングアプリケーションは、プロファイル パートナーエンドポイントを呼び出して、プロファイルの作成と取得に必要なすべてのデータを収集します。

    note important
    IMPORTANT
    詳細については、​ パートナー認証応答を使用したプロファイルの作成と取得 API ドキュメントを参照してください。
    • serviceProvider、partner、SAMLResponseなど、必須​のすべてのパラメーター
    • Authorization、AP-Device-Identifier、Content-Type、X-Device-Info、AP-Partner-Framework-Statusなど、必須​のすべてのヘッダー
    • すべての​_optional_ ヘッダーとパラメーター
    ストリーミングアプリケーションは、取得した応答に「appleSSO」タイプのプロファイルが含まれるように、パートナーフレームワークのステータスとパートナー認証応答(SAML応答)の有効な値が含まれていることを確認する必要があります。
    AP-Partner-Framework-Status ヘッダーについて詳しくは、AP-Partner-Framework-Statusのドキュメントを参照してください。
  13. パートナープロファイルに関する情報を返します: プロファイルエンドポイントの応答には、パートナープロファイルに関する情報が含まれます。これには、属性typeが「appleSSO」に設定されていることが含まれます。

    note important
    IMPORTANT
    プロファイル応答で提供される情報について詳しくは、​ パートナー認証応答を使用したプロファイルの作成と取得 API ドキュメントを参照してください。
    プロファイルパートナーエンドポイントは、基本的な条件が満たされていることを確認するために、リクエストデータを検証します。
    • 必須 パラメーターとヘッダーは有効である必要があります。
    • 指定されたserviceProviderとmvpdの統合はアクティブである必要があります。
    検証が失敗すると、エラー応答が生成され、拡張エラーコード ​のドキュメントに準拠する追加情報が提供されます。
    プロファイルパートナーエンドポイントは、パートナーシングルサインオン条件が満たされていることを確認するために、リクエストデータを検証します。
    • Adobe Pass サーバーのパートナーシングルサインオン設定は、有効で有効である必要があります。
    • AP-Partner-Framework-Status ヘッダーを介して受信したパートナーフレームワークの状態ペイロードは有効である必要があります。
    パートナーシングルサインオンの検証が失敗した場合、応答はデフォルトで基本プロファイル取得フローになります。
  14. 決定フローで続行: ストリーミングアプリケーションは、後続の決定フローで続行できます。

D.決定段階
  1. パートナーフレームワークのステータスを取得: ストリーミングアプリケーションは、Appleによって開発された​ ビデオ購読者アカウントフレームワーク ​を呼び出して、ユーザーの権限とプロバイダー情報を取得します。

    note important
    IMPORTANT
    選択したユーザープロファイルタイプが「appleSSO」でない場合、ストリーミングアプリケーションはこの手順をスキップできます。
    note important
    IMPORTANT
    詳しくは、​ ビデオ購読者アカウントフレームワーク ​のドキュメントを参照してください。
    • ストリーミングアプリケーションは、ユーザーのサブスクリプション情報🔗にアクセスするための権限を確認し、ユーザーが許可した場合にのみ続行する必要があります。
    • ストリーミングアプリケーションは、VSAccountManagerに​ デリゲート ​を提供する必要があります。
    • ストリーミングアプリケーションは、購読者アカウント情報に対して​ リクエスト ​を送信する必要があります。
    • ストリーミングアプリケーションは、​ メタデータ ​情報を待機して処理する必要があります。
    ストリーミングアプリケーションは、このフェーズでユーザーを中断できないことを示すために、VSAccountMetadataRequest オブジェクトのisInterruptionAllowed プロパティにfalseと等しいブール値を指定する必要があります。
    note tip
    TIP
    ストリーミングアプリケーションでは、代わりにパートナーフレームワークのステータス情報にキャッシュ値を使用できます。これは、アプリケーションがバックグラウンドからフォアグラウンド状態に移行する際に更新することをお勧めします。 その場合、ストリーミングアプリケーションは、「パートナーフレームワークのステータス情報を返す」ステップで説明されているように、パートナーフレームワークのステータスに対して有効な値のみをキャッシュして使用する必要があります。
  2. パートナーフレームワークのステータス情報を返します: ストリーミングアプリケーションは、応答データを検証して、基本的な条件が満たされていることを確認します。

    • ユーザー権限のアクセスステータスが付与されます。
    • ユーザープロバイダーマッピング識別子が存在し、有効です。
    • ユーザープロバイダープロファイルの有効期限が有効です。
    note important
    IMPORTANT
    選択したユーザープロファイルタイプが「appleSSO」でない場合、ストリーミングアプリケーションはこの手順をスキップできます。
  3. 事前認証の決定を取得: ストリーミングアプリケーションは、「決定の事前認証エンドポイント」を呼び出して、リソースのリストに対する事前認証の決定を取得するために必要なすべてのデータを収集します。

    note important
    IMPORTANT
    詳しくは、特定のmvpd API ドキュメントを使用した事前承認決定の取得を参照してください。
    • serviceProvider、mvpd、resourcesなど、必須​のすべてのパラメーター
    • AuthorizationやAP-Device-Identifierなど、必須 ヘッダーすべて
    • すべての​_optional_ パラメーターとヘッダー
    選択したプロファイルが「appleSSO」タイプのプロファイルである場合、リクエストを実行する前に、ストリーミングアプリケーションにパートナーフレームワークのステータスの有効な値が含まれていることを確認する必要があります。 ただし、選択したユーザープロファイルタイプが「appleSSO」でない場合、この手順はスキップできます。
    AP-Partner-Framework-Status ヘッダーについて詳しくは、AP-Partner-Framework-Statusのドキュメントを参照してください。
  4. 事前承認の決定を返します: 「決定事前承認」エンドポイント応答には、各リソースに対するPermitまたはDenyの決定が含まれています。

    • Permitの決定は、リソースが再生可能であることを意味します。 応答にはメディアトークンが含まれていません。事前承認フローを使用してリソースを再生することはできません。
    • Denyの決定は、リソースが再生できないことを意味します。 応答には、拡張エラーコード ​のドキュメントに準拠するエラーペイロードが含まれます。
    note important
    IMPORTANT
    決定応答で提供される情報について詳しくは、特定のmvpd API ドキュメントを使用した事前承認決定の取得を参照してください。
    決定事前認証エンドポイントは、基本的な条件が満たされていることを確認するために、リクエストデータを検証します。
    • 必須 パラメーターとヘッダーは有効である必要があります。
    • 指定されたserviceProviderとmvpdの統合はアクティブである必要があります。
    検証が失敗すると、エラー応答が生成され、拡張エラーコード ​のドキュメントに準拠する追加情報が提供されます。
  5. パートナーフレームワークのステータスを取得: ストリーミングアプリケーションは、Appleによって開発された​ ビデオ購読者アカウントフレームワーク ​を呼び出して、ユーザーの権限とプロバイダー情報を取得します。

    note important
    IMPORTANT
    選択したユーザープロファイルタイプが「appleSSO」でない場合、ストリーミングアプリケーションはこの手順をスキップできます。
    note important
    IMPORTANT
    詳しくは、​ ビデオ購読者アカウントフレームワーク ​のドキュメントを参照してください。
    • ストリーミングアプリケーションは、ユーザーのサブスクリプション情報🔗にアクセスするための権限を確認し、ユーザーが許可した場合にのみ続行する必要があります。
    • ストリーミングアプリケーションは、VSAccountManagerに​ デリゲート ​を提供する必要があります。
    • ストリーミングアプリケーションは、購読者アカウント情報に対して​ リクエスト ​を送信する必要があります。
    • ストリーミングアプリケーションは、​ メタデータ ​情報を待機して処理する必要があります。
    ストリーミングアプリケーションは、このフェーズでユーザーを中断できないことを示すために、VSAccountMetadataRequest オブジェクトのisInterruptionAllowed プロパティにfalseと等しいブール値を指定する必要があります。
    note tip
    TIP
    ストリーミングアプリケーションでは、代わりにパートナーフレームワークのステータス情報にキャッシュ値を使用できます。これは、アプリケーションがバックグラウンドからフォアグラウンド状態に移行する際に更新することをお勧めします。 その場合、ストリーミングアプリケーションは、「パートナーフレームワークのステータス情報を返す」ステップで説明されているように、パートナーフレームワークのステータスに対して有効な値のみをキャッシュして使用する必要があります。
  6. パートナーフレームワークのステータス情報を返します: ストリーミングアプリケーションは、応答データを検証して、基本的な条件が満たされていることを確認します。

    • ユーザー権限のアクセスステータスが付与されます。
    • ユーザープロバイダーマッピング識別子が存在し、有効です。
    • ユーザープロバイダープロファイルの有効期限が有効です。
    note important
    IMPORTANT
    選択したユーザープロファイルタイプが「appleSSO」でない場合、ストリーミングアプリケーションはこの手順をスキップできます。
  7. 承認決定の取得: ストリーミングアプリケーションは、「決定の承認」エンドポイントを呼び出して、特定のリソースの承認決定を取得するために必要なすべてのデータを収集します。

    note important
    IMPORTANT
    詳しくは、特定のmvpd🔗 API ドキュメントを使用した承認決定の取得を参照してください。
    • serviceProvider、mvpd、resourcesなど、必須​のすべてのパラメーター
    • AuthorizationやAP-Device-Identifierなど、必須 ヘッダーすべて
    • すべての​_optional_ パラメーターとヘッダー
    選択したプロファイルが「appleSSO」タイプのプロファイルである場合、リクエストを実行する前に、ストリーミングアプリケーションにパートナーフレームワークのステータスの有効な値が含まれていることを確認する必要があります。 ただし、選択したユーザープロファイルタイプが「appleSSO」でない場合、この手順はスキップできます。
    AP-Partner-Framework-Status ヘッダーについて詳しくは、AP-Partner-Framework-Statusのドキュメントを参照してください。
  8. 返品承認決定:​決定承認エンドポイント応答には、特定のリソースに対するPermitまたはDenyの決定が含まれています:

    • Permitの決定は、リソースが再生可能であることを意味します。 応答には、メディアトークンが含まれます。
    • Denyの決定は、リソースが再生できないことを意味します。 応答には、拡張エラーコード ​のドキュメントに準拠するエラーペイロードが含まれます。
    note important
    IMPORTANT
    決定応答で提供される情報について詳しくは、特定のmvpd API ドキュメントを使用した承認決定の取得を参照してください。
    決定承認エンドポイントは、基本的な条件が満たされていることを確認するために、リクエストデータを検証します。
    • 必須 パラメーターとヘッダーは有効である必要があります。
    • 指定されたserviceProviderとmvpdの統合はアクティブである必要があります。
    検証が失敗すると、エラー応答が生成され、拡張エラーコード ​のドキュメントに準拠する追加情報が提供されます。
D. ログアウトフェーズ
  1. Adobe Pass ログアウトの開始: ストリーミング アプリケーションは、Adobe Pass ログアウトエンドポイントを呼び出して、ログアウトフローを開始するために必要なすべてのデータを収集します。

    note important
    IMPORTANT
    詳しくは、特定のmvpd API ドキュメントのログアウトの開始を参照してください。
    • serviceProvider、mvpd、redirectUrlなど、必須​のすべてのパラメーター
    • Authorization、AP-Device-Identifierなど、必須 ヘッダーすべて
    • すべての​_optional_ パラメーターとヘッダー
  2. 次のアクションを示します。 Adobe Pass ログアウトエンドポイントの応答には、次のアクションに関するストリーミングアプリケーションをガイドするために必要なデータが含まれています。

    • ユーザーがログアウトフローを完了するにはパートナー(システム)レベルとやり取りする必要があるため、url属性がありません。
    • actionName属性が「partner_logout」に設定されています。
    • actionType属性が「partner_interactive」に設定されています。
    note important
    IMPORTANT
    削除されたユーザープロファイルタイプが「appleSSO」の場合、ストリーミングアプリケーションは、actionNameおよびactionType属性で指定されているように、パートナーレベルでログアウトプロセスを完了するようにユーザーに促す必要があります。
    note important
    IMPORTANT
    ログアウト応答で提供される情報について詳しくは、特定のmvpd🔗 API ドキュメントの ログアウトの開始を参照してください。
    Adobe Pass ログアウトエンドポイントは、基本的な条件が満たされていることを確認するために、リクエストデータを検証します。
    • 必須 パラメーターとヘッダーは有効である必要があります。
    • 指定されたserviceProviderとmvpdの統合はアクティブである必要があります。
    検証が失敗すると、エラー応答が生成され、拡張エラーコード ​のドキュメントに準拠する追加情報が提供されます。
recommendation-more-help
pass-help-authentication