JWT

概要

既存のKollusではMedia tokenは顧客がVideo gatewayにコンテンツ再生を要請する時、その内容を暗号化してURLの有効期限を設定するために使用されていました。ここでMedia tokenを使用するためにKollusから提供するモジュールをのサーバーに設置する必要があり、サーバーがモジュールに対応してない場合にはKollus APIを呼び出してMedia tokenを遠隔生成して使用したり、かつMedia tokenの仕様が変わる度にサーバーにモジュールを再度設置するなど、難点がありました。従って暗号学的に安全で具現が簡単なJSON Webtokenを利用してKollus モジュールに対する依存性を減らし、更に仕様変更により柔軟に対応ができるようにします。

注意事項

  1. JSON Webtoken(以下JWT)につきましてはhttp://jwt.io ページを参考

  2. JWTのPayload部分に以下の内容に記述されている、先に登録されたClaimを使用しては行けません。 (https://tools.ietf.org/html/rfc7519#section-4) 意図通り動作しない可能性があります。

  3. 暗号化アルゴリズムは HMAC SHA256 (HS256) のみに対応しています。

  4. 非セキュアコンテンツをKollusプレイヤーで再生する際の制約事項

    iOSの場合、全画面に切り替えるとKollusプレイヤーではなく、ネイティブプレイヤーで再生されます。

  5. iOSで全画面に切り替えた際、シークの制限、再生速度の制限、再生区間の設定、ビデオウォーターマークなど、Kollusプレイヤーの機能をご利用いただくことができません。

  6. MultiDRMのサービス制限事項 - PlayReady DRMは、Edgeブラウザのグラフィックス アクセラレータが使用可能な場合にのみ再生されます。 - グラフィックス アクセラレータが無効になっている場合、57208 エラーが発生します。 - 設定→システムとパフォーマンス→使用可能な場合はグラフィックス アクセラレータを使用する→トグルボタンを有効化 - Widevine DRMはハードウェア加速が使用可能な場合のみキャプチャ防止が動作します。

JWT Request

用語

  • セキュリティキー (Security Key)

    • セキュリティキーは JWTをsigning するためにKollusと顧客だけが共有する秘密キーとなります。セキュリティキーは “設定 > サービスアカウント” ページから確認できます。この値は顧客の要望に応じて変更が可能であり、変更と同時に使用していたセキュリティキーは無効になります。従ってセキュリティキーは顧客のメンテナンス時間中などを利用して変更した方が好ましいです。

  • ユーザーキー (Custom Key)

    • ユーザーキーは平文セキュリティキーを暗号化したものになります。JWTを使用して Videogatewayに要請する場合JWTと共に転送されなければなりません。

JWT生成方法

暗号化アルゴリズムはHMAC SHA256 (HS256)にして、Secret keyはセキュリティキー、Payloadには以下のPayload Specに合わせたJSON Stringを追加してJWTを生成します。

生成したJWTを使用してVideo gatewayに要請する方法

生成したJWTと使用者キーを以下のような形式のurlで生成して呼び出します。

http://v.jp.kollus.com/s?jwt=生成したJWT&custom_key=ユーザーキー

JWT Payload Spec

JWT Payload形式は以下のようなJSON文字列となります。

{
	"cuid": "CLIENT_USER_ID",
    "video_watermarking_code_policy": {
                       "code_kind":"client_user_id",
                       "font_size":7,
                      "font_color":"FFFFFF",
                      "show_time":1,
                      "hide_time":500,
                     "alpha":50,
                     "enable_html5_player": false,
            },
	"expt": EXPIRE_TIME,
	"pc_skin": {
		"skin_path": "http://file.jp.dev.kollus.com/public/custom/skin2.zip",
		"skin_sha1sum": "B2B688123F68BFA7DB4B1F89EC292C0835086D9B"
	},
    "playback_rates": [0.5, 0.7, 1, 1.3, 1.5, 1.7, 2],
    // "playback_rates": [[0.5, 0.7, 1, 1.3, 1.5, 1.7, 2], 2],
    "playcallback_ignore": true,
	"mc": [{
		"mckey": “MEDIA_CONTENT_KEY”,
		"mcpf": “MEDIA_CONTENT_PROFILE_KEY”,
		"title": “TITLE”,
		"intr": IS_INTRO,
        "scroll_event": SCROLL_EVENT,
		"seek": IS_SEEKABLE,
		"seekable_end": SEEKABLE_END,
		"disable_playrate": DISABLE_PLAYRATE,
        "disable_nscreen": DISABLE_NSCREEN,
        "play_section": {
                    "start_time": PLAY_SECTION_START_TIME,
                    "end_time": PLAY_SECTION_END_TIME
             }
        "thumbnail": {
                    "enable": IS_ENABLE,
                    "thread": IS_THREAD,
                    "type": TYPE
             },
        "subtitle_policy" : {
                    "filter": {
                         "name": SUBTITLE_NAME,
                         "language_code": SUBTITLE_LANGUAGE_CODE,
                      },
                    "show_by_filter" : false,
                    "is_showable": true,
              },
        "drm_policy" : {
                    "kind" : DRM_KIND,
                    "streaming_type": hls,
                    "data" : ...
          }
	}]
}

Payload 項目

例示

コンテンツの再生に使用するJWT Payload

catenoid というIDを持つユーザーがMedia content key “vnCVPVyV”を再生する場合

{
	"cuid": "catenoid",
	"expt": 1462931880,
	"mc": [{
		"mckey": "vnCVPVyV"
	}]
}

introありのコンテンツの再生に使用するJWT Payload

catenoid というIDを持つユーザーがintroでMedia content key “gDV2B1ZG”をseek 不可の状態で、本コンテンツは “vnCVPVyV”を再生する場合

{
	"cuid": "catenoid",
	"expt": 1462931880,
	"mc": [{
		"mckey": "gDV2B1ZG",
		"intr": true,
		"seek": false,
	},{
		"mckey": "vnCVPVyV"
	}]
}

Skip無効のコンテンツを再生するとき指定した時点まではSkipを許可するためのJWT Payload

catenoid というIDの使用者がintroでMedia contents key 「gDV2B1ZG」をseek 無効になっている状態で、開始から30秒まではSkipを許可する場合

{
	"cuid": "catenoid",
	"expt": 1462931880,
	"mc": [{
		"mckey": "gDV2B1ZG",
		"intr": true,
		"seek": false,
		"seekable_end": 30,
	}]
}

 コンテンツの一部だけを再生させるためのJWT Payload

catenoid というIDの使用者がMedia contents key「vnCVPVyV」を60秒間再生をさせる場合

{
	"cuid": "catenoid",
	"expt": 1462931880,
	"mc": [{
		"mckey": "vnCVPVy",
		"play_section": {
			"start_time": 0,
			"end_time": 60,
	}]
}

視聴した部分のみSeekが可能なJWT Payload(Seek 制限)

{
  "mc": [
    {
      "mckey": "vnCVPVyV",
      "seek": false,
      "seekable_end": 1
    }
  ],
  "cuid": "catenoid",
  "expt": 1462931880
}

Live(in VOD) JWT Payload Spec

Payload 項目

例示

Live Streaming JWT Payload

ライブストリーミングの場合、intro / seek / playbackRate機能が無効になるため、該当JWTオプションは無意味

{
	"cuid": “catenoid”,
	"expt": 1462931880,
	"mc": [{
		"mckey": “gDV2B1ZG“,
		"title": “Live Sample“,
                         "live" : {
                                  "url": "http://XXXXX/XXX.m3u8",
                                  "poster_url": "http://XXXXX/XXX.jpg"
                         },
	}]
}

Live Streaming JWT Payload + Akamai CDN 認証

ライブストリーミングの場合、intro / seek / playbackRate機能が無効になるため、該当JWTオプションは無意味

{
  "mc": [
    {
      "mckey": "gDV2B1ZG",
      "live": {
        "url": "http://XXXXX/XXX.m3u8",
        "poster_url": "http://XXXXX/XXX.jpg",
        "cdn": {
           "type": "akamai",
           "password": {
              "short": "000000a0",
              "long": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
           },
           "auth_type": "user",
           "use_ip_validation": true,
           "use_kollus_token": false
        }
      },
      "title": "Live Sample"
    }
  ],
  "cuid": "test",
  "expt": 1462931880
}

Live Streaming JWT Payload + Kollus 認証

ライブストリーミングの場合、intro / seek / playbackRate機能が無効になるため、該当JWTオプションは無意味

{
  "mc": [
    {
      "mckey": "gDV2B1ZG",
      "live": {
        "url": "http://XXXXX/XXX.m3u8",
        "poster_url": "http://XXXXX/XXX.jpg",
        "cdn": {
           "type": "kollus",
           "use_ip_validation": true,
           "use_duplication_block": false
        }
      },
      "title": "Kollus Live"
    }
  ],
  "cuid": "test",
  "expt": 1462931880
}

※ exptフィールドの値は onetime URLの expire timeとなり、同時にライブストリームのexpire timeとして使用されます。例えば1時間のライブ配信をする場合にはexptの値を1時間以降の値に設定しなければなりません。

Live Streaming JWT Payload + Kollus 認証

Kollus Live 用のJWT SPECとなります。JWT Payload形式は以下のようなJSON文字列となります。

{
    "client_user_id": "CLIENT_USER_ID",
    "client_user_name": "CLIENT_USER_NAME",
    "video_watermarking_code_policy": {
                "code_kind":"client_user_id",
                "font_size":7,
                "font_color":"FFFFFF",
                "show_time":1,
                "hide_time":500,
                "alpha":50,
                "enable_html5_player": false
      },
    "client_user_image": "CLIENT_USER_IMAGE",
    "expire_time": EXPIRE_TIME,
    "play_expt": PLAY_EXPT_TIME,
    "live_media_channel_key": "LIVE_MEDIA_CHANNEL_KEY",
    "live_media_profile_key": "LIVE_MEDIA_PROFILE_KEY",
    "title": "TITLE",
    "chatting_policy": {
        "is_visible": true,
        "is_admin": false,
        "position": "right"
    }
}

Payload 項目

サービスサポート

サンプルコードについてのお問い合わせは担当までご連絡ください。

E-mail お問い合わせ > jp_team@catenoid.net

電話番号 > 03-4405-8462

Last updated