JW-Platform signed media resource

Feb 25, 2019 13:32 · 426 words · 2 minute read jwplayer jwt

Fitur yang sangat powerfull dari JW-Platform, salah satu service dari JWPlayer, adalah adanya token-signed. Artinya url yang nantinya akan diakses, misalnya dari front-end sudah dilindungi dengan token yang memiliki validasi berupa token, tentu saja, dan rentang waktu berapa lama video tersebut dapat diakses terhitug dari kapam token tersebut digenerasi. Skenario penggunannya misalnya pada platform e-learning, dimana video course berbayar tidak boleh sembarangan diunduh karena akan berakibat course tersebut dapat disebarluaskan tanpa masuk ke platform. Atau skenario lainnya yang mengharuskan konten benar-benar dilindungi.

Dengan asumsi telah mempunyai akun di JWPlayer ,terlebih dahulu kita harus mengaktifkan fitur tersebut pada:

Dashboard -> Account -> Properties -> Settings -> URLs Signing.

Selanjutnya, Anda bisa melihat detil bagaimana cara signing-token nya pada halaman Protecting your content with URL Token Signing. Jika Anda melihat pada docs tersebut, setidaknya ada dua mekanisme bagaimana url source dilindungi; pertama memakai md5 yang paling baru pada versi 2 memakai JWT. Kita akan coba bahas bagaimana signed menggunakan JWT yang sebenarnya detilnya sudah lengkap pada tautan sebelumnya, mari kita hands on dengan skenario media-resource ingin kita lindungi.

Upload media

Pertama, kita harus mempunyai media yang akan kita lindungi dengan token. Dapat menggunakan API create atau simply upload via dashboard. Kemudian catat media-id nya dengan cara lihat detil video pada laman dashboard video. Misal: ptOEmPbS

Lakukan sign

Payload nya cukup sederhana, terdiri dari resource dan exp. Resource sendiri detilnya dapat Anda temukan di API delivery pada tautan JW Platform Delivery API, misal kita akan protect sumber media yang telah kita upload tadi maka resourcenya adalah /v2/media/{media_id} dan exp kita isi dengan UNIX timestamp, misal 1893456000. Maka detil JWT nya adalah sebagai berikut:

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

payload

{
  "resource": "/v2/media/ptOEmPbS",
  "exp": 1893456000
}

verify signature

 HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),<your_accout_secret>
)

Periksa url

Format url yang dapat diakses adalah https://cdn.jwplayer.com/<resource>?token=<generated_jwt>, maka full url nya adalah:

  http://cdn.jwplayer.com/v2/media/ptOEmPbS?token=<your_generated_token>

Jika proses sign berhasil, maka response dari resource adalah sebagai berikut:

  {
  	"feed_instance_id": "1ecda23e-2e64-416f-ab36-53e55d49f04b",
  	"title": "Samplevideo 1280x720 10mb",
  	"kind": "Single Item",
  	"playlist": [{
  		"mediaid": "ptOEmPbS",
  		"description": "test",
  		"pubdate": 1550827333,
  		"title": "Samplevideo 1280x720 10mb",
  		"image": "http://cdn.jwplayer.com/thumbs/ptOEmPbS-720.jpg",
  		"variations": {},
  		"sources": [{
  			"type": "application/vnd.apple.mpegurl",
  			"file": "http://cdn.jwplayer.com/manifests/ptOEmPbS.m3u8?exp=1551078720&sig=<signature>"
  		}, {
  			"width": 320,
  			"height": 180,
  			"type": "video/mp4",
  			"file": "http://cdn.jwplayer.com/videos/ptOEmPbS-uB6mRs4w.mp4?exp=1551078720&sig=<signature>",
  			"label": "180p"
  		}, {
  			"width": 480,
  			"height": 270,
  			"type": "video/mp4",
  			"file": "http://cdn.jwplayer.com/videos/ptOEmPbS-YiHGew6A.mp4?exp=1551078720&sig=<signature>",
  			"label": "270p"
  		}, {
  			"width": 720,
  			"height": 406,
  			"type": "video/mp4",
  			"file": "http://cdn.jwplayer.com/videos/ptOEmPbS-U1nFIDsW.mp4?exp=1551078720&sig=<signature>",
  			"label": "406p"
  		}, {
  			"width": 1280,
  			"height": 720,
  			"type": "video/mp4",
  			"file": "http://cdn.jwplayer.com/videos/ptOEmPbS-SLySeyZ6.mp4?exp=1551078720&sig=<signature>",
  			"label": "720p"
  		}, {
  			"type": "audio/mp4",
  			"file": "http://cdn.jwplayer.com/videos/ptOEmPbS-rqRq7bph.m4a?exp=1551078720&sig=<signature>",
  			"label": "AAC Audio"
  		}],
  		"tracks": [{
  			"kind": "thumbnails",
  			"file": "http://cdn.jwplayer.com/strips/ptOEmPbS-120.vtt"
  		}],
  		"link": "http://cdn.jwplayer.com/previews/ptOEmPbS?exp=1551078720&sig=<signature>",
  		"recommendations": "http://cdn.jwplayer.com/v2/playlists/qjlPtaqM?token=<signature>",
  		"duration": 62
  	}],
  	"description": "test"
  }