# メディア認証

このページにはKollus VODメディア認証について説明します。

> ### **メディア認証** <a href="#id" id="id"></a>
>
> Kollus VODのメディア認証は顧客が保有したユニークなセキュリティーキーとユーザーのキーを利用して暗号化されたJWT(JSON Web Token)を生成します。動画リンクを介して動画再生を要請する時、ユーザーに発行されたトークンを引き渡され暗号化データーを復号化しその後、今接続したアカウント情報を確認して動画を再生します。

### **メディア認証用語**　 <a href="#id" id="id"></a>

<figure><img src="https://4022056986-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZMLfNpXqDyVAU1ICBWwU%2Fuploads%2FYfVZoDYqA3AWsLV2xaVc%2F%E1%84%8B%E1%85%AD%E1%86%BC%E1%84%8B%E1%85%A5.png?alt=media&#x26;token=b0f34940-3e51-4033-beed-1ef634c74057" alt=""><figcaption></figcaption></figure>

* セキュリティーキー(security key)：メディアトークンを生成するため必要な情報です。セキュリティーキーはサービスアカウント毎に基本設定されています。<br>
* ユーザーキー(user key)：会員として認証されたユニークなキーとして、Kollus VODサーバーに要請後、発行された文字列です。各セッション毎に新しいユーザーキーが生成されます。<br>
* メディアコンテンツキー(media content key)：Kollus VODの転送チャンネルに保存されたコンテンツに付与するユニークなキーです。<br>

{% hint style="info" %}
**参考**　

Kollus VODコンソールに**サービスアカウント**>**ユーザーキー**でセキュリティーキーとユーザーキーが確認できます。
{% endhint %}

### **JWTとは** <a href="#id-jwt" id="id-jwt"></a>

JWT(Json Web Token)はウェブサーバーでユーザー認証(authentication)と権限付与(authorization)のため使用されている技術の一つです。トークン基盤認証方法を使用してJWTトークン(Acess token) を生成し、HTTPヘッダーに含ませて、サーバーがクライアントを識別できるようにします。

<figure><img src="https://4022056986-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZMLfNpXqDyVAU1ICBWwU%2Fuploads%2FHZ2BQvT0D0Te1UhvBNCX%2FJWT.png?alt=media&#x26;token=6882ec79-687f-4c03-bcba-cc01e3eb6616" alt=""><figcaption></figcaption></figure>

JSON ウェブトークンは以下の三つの部分に分かれております。

## aaaaaaa.bbbbbb.cccccc

&#x20;     (Header)       (Payload)      (Signature)&#x20;

* ヘッダー(header): どのアルゴリズムで暗号化するか、トークンはどのタイプを使用するかなどのトークン関連情報が含まれています。
* ペイロード(payload): トークンに含める情報が記載されています。主にクライアントの固有ID値や有効期限などが含まれる領域です。key-value形式で構成された一対の情報をクレーム(claim)と呼びます。
* 署名(signature): エンコードされたヘッダーとペイロードを使用して、サーバーが発行したキーで暗号化します。ヘッダーとペイロードは単にエンコードされた値であるため、第3者が復号および改ざんする可能性がありますが、署名はサーバー側で管理される秘密鍵が流出しない限り復号することはできません。したがって、署名はトークンの改ざん有無を確認するために使用されます。<br>

### **JWT 認証仕組み** <a href="#id-jwt" id="id-jwt"></a>

<figure><img src="https://4022056986-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZMLfNpXqDyVAU1ICBWwU%2Fuploads%2FPBDA8Gga3XFIzxHz04lS%2Fjwt%20process.png?alt=media&#x26;token=90aec867-dee3-4f25-94bb-0e6bd5eb4319" alt=""><figcaption></figcaption></figure>

JSONウェブトークンはheader, payload, signature三つの部分で構成されています。Kollus VODはpayload部分に特定なデーターを挿入してトークンを生成します。<br>

暗号化アルゴリズムはHMAC SHA256 (HS256)を用いられ、secret keyは秘密キー、payloadにはJASON stringを加えてJWTを生成します。

**生成されたJWTを利用してビデオゲートウェイに要請する方法**

生成したJWTとユーザーキーを以下のような形式URLを生成して呼び出します。

```
https://v.jp.kollus.com/s?jwt=生成された JWT&custom_key=ユーザーキー
```

**認証プロセス**

1. クライアントからログイン要請が入ると、サーバーは検証後クライアントユニークID等の情報をpayloadに盛り込みます。
2. 暗号化に必要な秘密キーを用いられてJWTを発行します。
3. ユーザーはもらったJWTをサーバー送ります。
4. サーバーはトークンのsignatureを秘密キーで復号化後、改ざんと偽装及び有効期間の確認を行われます。
5. 有効なトークンであれば要請を応答します。

**JWT 例**

'catenoid'といったIDを用いたユーザーがメディアコンテンツキー‘vnCVPVyV’を再生する場合。

```
{
	"cuid": “catenoid”,
	"expt": 1703980800,
	"mc": [{
		"mckey": “vnCVPVyV“
	}]
}
```

* cuid:データベースに保存されたユーザーのID
* expt:動画再生トークン満了時間
* exp: JWTトークン満了時間
* mc:メディアコンテンツキー(media\_content\_key)<br>

{% hint style="info" %}
**参考**

JWTに関する詳細な内容は Developer GuideのJWT文章にも確認できます。
{% endhint %}
