Generate License Acquisition URL

最終更新日:2024-01-02 10:46:35

コンテンツ

概要

CDNから取得したDRM暗号化ストリームを再生するには、まずライセンスを取得する必要があります。ライセンスには、コンテンツを復号化するために必要な暗号鍵や、コンテンツの使用方法を指定する権利などのプロパティが含まれます。例えば、ライセンスには、有効期限やストリームを再生できる回数に関する情報が含まれる場合があります。これらのプロパティはすべて、保護されたストリーム コンテンツとは別にライセンスで設定することができます。

Media Acceleration Live Broadcast DRMを使用するには、特定のガイドラインに従って、ライセンス取得URLを生成する必要があります。この URL は、再生のためにストリームを復号化できるようにするライセンスを取得するために使用されます。この記事では、ライセンス取得 URL を生成する方法についてのガイダンスを提供します。

ライセンス取得URLを生成する手順は、次のとおりです。

  1. Irdetoにアクセスするためのアクセストークンを取得します。
  2. アクセストークンで、セッショントークンに署名するためのセッション署名鍵を作成します。
  3. JSON Web トークン(JWT)を使用してセッショントークンを作成します。
  4. セッショントークンとコンテンツIDをURLパラメータとして追加し、ライセンス取得URLを作成します。

ステップ1:Irdetoのアクセスを許可するアクセストークンを取得する

アクセストークンは、Irdetoにアクセスし、ご自身の署名鍵を登録するためのもので、以下の手順でライセンス取得URLトークンを生成するために使用されます。

次のcurlスクリプトを実行して、アクセストークンを取得します。

curl -X POST \
   'http://ca.haplat.net/wslive/drm/getToken.action?sign=query_token&time=current_timestamp&n=accountId' \
   -H 'Authorization: Bearer {access_token}' \
   -H 'Host: ca.haplat.net'

このリクエストに必要なリクエストヘッダーとパラメータを提供するようにしてください。

パラメータ/ヘッダ 必須 説明
Host はい 固定値: ca.haplat.net
n はい あなたのアカウント名。
r はい 最大長が 13 の一意のランダムな文字列。タイムスタンプを使用することをお勧めします。
k はい MD5認証値。
k = md5 (r + apikey) 、つまり、「k」の値を取得したい場合、文字列「r」の最後に文字列 apikey を追加し、結果の文字列のMD5計算を行います。
注: apikey は、カスタマー サービスから取得できます。
例えば、
1.リクエストして取得 apikey=012f37a3f2952
2.文字列r=1409284800をランダムに生成する
3. apikey を「r」の最後に追加し、文字列「1409284800012f37a3f2952」を生成します。
4.新しい文字列のMD5ハッシュを計算して「k」の値を取得し、それが「b9fed80be752551834eec3e52fa94115」です。

このAPIを使用するには、まずカスタマーサービスに連絡して有効にして、アクセストークンを提供する必要があることに注意してください。

リクエストを正常に送信すると、APIは必要な詳細を応答します。レスポンスボディには様々なフィールドを含む場合があり、次のステップを進めるために必要なアクセストークンを保持する「 accessToken 」フィールドを含む。

{
    "msg": {
        "accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IlJEUkROVEl3TTBSRU1USXlPVVZCTURKRU56RkNNamRFUVVRM1JFUXlSRFE1T1VRMU1ESXlNUSJ9.eyJodHRwOi8vaXJkZXRvLmNvbS9yb2xlcyI6W3sic2VydmljZSI6IlJpZ2h0c05HIiwiYWNjb",
        "expiresIn": 36000,
        "tokenType": "Bearer"
    },
    "code": 200,
    "callTime": "2023-04-20 15:42:53"
}

このトークンは、ライセンス取得URLを生成するためのアクセスを許可するため、安全に保存してください。

ステップ2:ライセンス取得URLトークンに署名するためのセッション署名鍵を作成する

一般的なライセンス取得URLの形式は、次のとおりです。

https://wangsuusa.live.ott.irdeto.com/licenseServer/widevine/v1/wangsuusa/license?ls_session=eyJhbGciOiJIUzI1NiIs****&contentId=eae3246f8bb4dba67b6328e2b9656a5b

URL には「ls_session」というパラメータが含まれています。これは、クライアントがライセンスを要求するための認証を確認する責任を持つセッショントークンです。セッショントークンは、「セッション署名鍵」を必要とする署名付きJWT形式として生成されます。そのため、セッショントークンを作成するためには、まずセッション署名鍵を生成し、Irdeto Controlに登録する必要があります。

セッション署名鍵を作成し、Irdeto Controlに登録するリクエストの例を次に示します。

curl -X PUT \
   'https://wangsuusa.live.ott.irdeto.com/ls/v1.1/wangsuusa/sessionSigningKeys/{sessionSigningKeyId}' \
   -H 'Authorization: Bearer {access_token}' \
   -H 'Content-Type: application/json' \
   -d '{
    "id": "testkey0412",
    "displayName": "Example Session Signing Key",
    "keyType": "sha256",
    "keyData": "W1HCQPNg7PXlo4WZsGM5h5oZ3M2CaAkUMZ6AEzdLeaY=",
    "validityStart": "2023-03-01T00:00:00.000Z",
    "validityEnd": "2024-03-01T00:00:00.000Z"
}'

特定のリクエストを行うには、通常、以下のフィールドとパラメータを含める必要があります。

名前 タイプ 必須 説明
sessionSigningKeyId String(path) はい セッション署名鍵のID。文字列長は255文字以下です。
重要:IDの競合や障害を防止するために、 CDNetworksアカウントをsessionSigningKeyIdとして使用することを強くお勧めします。
Authorization Bearer Authentication (header) はい ステップ1で取得したアクセストークン。
Content-Type String (header) はい アプリケーション/json

また、リクエストボディに関連するフィールドを必ず含めてください。

名前 タイプ 必須 説明
id string (255) はい セッション署名鍵の一意の識別子。
IDは、リクエストパスのsessionSigningKeyIdと同一である必要があることに注意してください
displayName string (255) いいえ キーの表示名。指定しない場合、キーは「default」で表示されます。
keyType string はい 以下の鍵タイプをサポートします。
- sha256 : HS256アルゴリズム
- rsa2048 : RSA-2048公開鍵
- rsa4096 : RSA-4096公開鍵
keyData string はい 鍵データ。
- keyType sha256 : HS256アルゴリズムを使用してセッショントークンに署名するためにbase64でエンコードされた32バイトの鍵。
- keyType rsa2048およびrsa4096 : セッショントークンに署名するための鍵RS256またはRS512アルゴリズムを使用。
validityStart datetime(ISO8601) はい 鍵が有効になる時間を示すタイムスタンプ。
例: 2023-01-01T00:00:00Z
validityEnd datetime(ISO8601) はい 鍵が有効でなくなる時間を示すタイムスタンプ。
例: 2023-12-31T23:59:59Z

リクエストが正常に送信されると、セッション署名キーが受け入れられ、セッショントークンの署名と検証のためにIrdeo Controlに登録されます。

ステップ3: JSON Web Tokens (JWT)を使用してセッショントークンを作成する

ステップ2で述べたように、IDを認証するためには、ライセンス取得URLの一部として「セッショントークン」を含める必要があります。認証に成功したクライアントには、ライセンス取得へのアクセスが許可されますが、セッショントークンが一致しない場合、ライセンスへのアクセスがブロックされます。
Irdeto Controlでは、セッショントークンを署名付きJWT(RFC 7519)として受け付け、ヘッダーペイロード署名の3つの部分からなります。

  • ヘッダー: 3 つの部分からなります。
    – 「alg」: 署名に使用されるアルゴリズム。
    – 「typ」: トークンのタイプ。これは常に「JWT」に設定する必要があります。
    – 「kid」: 手順2で作成したセッション署名鍵のID。
  • Payload : 以下のフィールドを持つ JSON オブジェクトを含むプレイロード。
    – 「jti」: セッショントークンを識別し、他のトークンとの衝突を防止するために使用される一意のJWT ID。
    – 「sub」: ユーザーID。これは常に「_authenticated」に設定する必要があります。
    – 「aid」: アカウントID。これは常に「wangsuusa」に設定する必要があります。
    – 「iss」: 発行者。これは常に「IrdetoControlHandsOn」に設定する必要があります。
    – 「ent」: ユーザーエンタイトルメントの配列。「epid」エンタイトルメントポリシーIDやCDNetworksアカウントの「bid」を含みます。
  • 署名: JSON ペイロードの整合性を検証する暗号アルゴリズムによって生成された文字列。次のように計算されます。
base64UrlEncode(
HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload), your signing key)
)

「エンタイトルメントポリシー」について
エンタイトルメントポリシーは、コンテンツへのアクセスを許可するための条件を指定します。例えば、
– エンタイトルメントが有効な時期と場所
– 消費者のクライアントデバイス/プレーヤーアプリケーションが満たさなければならないセキュリティ要件
– コンシューマーに許可される同時ストリームの数
1つのエンタイトルメントは1つのエンタイトルメントポリシーのみを持つことができますが、同じエンタイトルメントポリシーを複数のエンタイトルメントに適用することができます。

セッション トークンの値の例を以下に示します。
ヘッダー

{
  "alg": "HS256",
  "typ": "JWT",
  "kid": "testkey0412"
}

ペイロード

{
  "jti": "VbY_HmmLmyut8geag52f11KiCnZ8ZzFcYtiB3H3jIbw=",
  "sub": "_authenticated",
  "aid": "wangsuusa",
  "ent": [
    {
      "epid": "anonymous-entitlement-policy",
      "bid": "linxf"
    }
  ],
  "iat": 1681296770,
  "exp": 1682851970,
  "iss": "IrdetoControlHandsOn"
}

JWTトークンを簡単に作成するために利用できるオンラインのJWTジェネレーターは、数多くあります。次のスクリーンショットは、 https://jwt.io/からアクセス可能なオンライン ツールを使用してセッション トークンを生成する方法を示しています。
ご利用にあたっては、以下のことをご確認ください。

  • 目的の署名アルゴリズムを選択します。
  • ヘッダーとペイロードをJSON形式で提供します。
  • 指定のフィールドにセッション署名鍵を入力し、「秘密のbase64エンコード」のチェックボックスを選択します。

右側にヘッダーとペイロードの両方を入力すると、左側のボックスに結果のJWTトークンが表示されます。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3RrZXkwNDEyIn0.eyJqdGkiOiJWYllfSG1tTG15dXQ4Z2VhZzUyZjExS2lDblo4WnpGY1l0aUIzSDNqSWJ3PSIsInN1YiI6Il9hdXRoZW50aWNhdGVkIiwiYWlkIjoid2FuZ3N1dXNhIiwiZW50IjpbeyJlcGlkIjoiYW5vbnltb3VzLWVudGl0bGVtZW50LXBvbGljeSIsImJpZCI6ImxpbnhmIn1dLCJpYXQiOjE2ODEyOTY3NzAsImV4cCI6MTY4Mjg1MTk3MCwiaXNzIjoiSXJkZXRvQ29udHJvbEhhbmRzT24ifQ.aXg6alLfnl7gm3ye3XBQTPQl5M0Mc4IsID_IIkyYGhg

ステップ4:ライセンス取得URLにセッショントークンとコンテンツIDを含める

前の手順でセッショントークンを生成したら、最後の手順で、ライセンス取得URLを作成します。ライセンス取得URLの形式は、使用するDRMシステムによって異なります。 PlayReady、FairPlay Streaming、Widevine の標準的な URL は次のとおりです。

URL
ライセンス取得URLは、使用するDRMシステムによって異なります。

コンテンツID
パラメータ「contentId」はコンテンツIDを表し、ドメイン、アプリケーション名、ストリーム名のMD5値を使用して計算されます。たとえば、ストリームがhttps://drmtest-pull.cdnetworks.com/live/drmtest.mpdにある場合、対応するコンテンツ ID は次のようになります。

MD5(drmtest-pull.cdnetworks.com/live/drmtest)=d8c1d35c93df672a61c735487a145064

ls_session
「ls_session」は、ステップ3のセッショントークンです。

URL、contentId、ls_sessionを取得したら、それらを連結してライセンス取得URLを形成します。
例えばWidevineのライセンス取得URLは次の通りです。

https://wangsuusa.live.ott.irdeto.com/licenseServer/widevine/v1/wangsuusa/license?contentId=d8c1d35c93df672a61c735487a145064?ls_session=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InRlc3RrZXkwNDEyIn0.eyJqdGkiOiJWYllfSG1tTG15dXQ4Z2VhZzUyZjExS2lDblo4WnpGY1l0aUIzSDNqSWJ3PSIsInN1YiI6Il9hdXRoZW50aWNhdGVkIiwiYWlkIjoid2FuZ3N1dXNhIiwiZW50IjpbeyJlcGlkIjoiYW5vbnltb3VzLWVudGl0bGVtZW50LXBvbGljeSIsImJpZCI6ImxpbnhmIn1dLCJpYXQiOjE2ODEyOTY3NzAsImV4cCI6MTY4Mjg1MTk3MCwiaXNzIjoiSXJkZXRvQ29udHJvbEhhbmRzT24ifQ.aXg6alLfnl7gm3ye3XBQTPQl5M0Mc4IsID_IIkyYGhg

暗号化によるテスト再生

WidevineとPlayReadyの再生テスト

WidevineとPlayReadyの再生をテストするためには、テストプレーヤー、MPEG-DASH再生URL、ライセンス取得URLが必要です。ここでは、テストにBitmovinデモプレーヤーを使用します。

再生処理中に、暗号化されたコンテンツがプレーヤーに読み込まれた後、ライセンスリクエストが自動的に生成されます。必要なライセンスの取得に成功すると、再生が開始されます。

Chrome で Widevine を、Microsoft Edge で PlayReady をテストすることを強くお勧めします。