認証

概要

Sora Cloud では JWT 形式のアクセストークンを Sora の "type": "connect" 時の metadataaccess_token を含めて認証を行います。

metadata

type: connnectmetadata"access_token": "<JWT>" を含めます。

{
    "type": "connect",
    "role": "sendrecv",
    "channel_id": "[email protected]#1490",
    "multistream": "true",
    "metadata": {
        "access_token": "<JWT>"
    }
}

JWT 仕様

typ:

JWT

alg:

HS256

JWT 利用の注意点

Sora Cloud で利用する特定のトークンの失効させる方法は API キーを再生成するしか方法がありません。 そのため、本番環境向けには必ず nbf / exp を付けて短い時間しか利用できないトークンを発行するようにしてください。

Sora Cloud の認証では JWT 的なチェックのみで iss の存在有無などのチェックは行いません。

認証ウェブフックを設定し、プロジェクト側でのチェックを行うようにしてください。

注釈

拡張パックを契約するとこの問題を解決する JWT を失効する仕組みを提供しています

利用可能な登録済みクレーム

exp

クレーム:

exp

:

integer

要求:

オプション

RFC:

4.1.4. "exp" (Expiration Time) Claim

トークンが利用できるまでの時間を指定できます。

nbf

クレーム:

exp

:

integer

要求:

オプション

RFC:

4.1.5. "nbf" (Not Before) Claim

トークンが利用可能になる時間を指定できます。

jti

クレーム:

jti

:

string

要求:

オプション

注釈

この機能は拡張パックの契約が必要です。

拡張パックを契約している場合、 jti が失効されていないかどうかを確認します。

オプションプライベートクレーム

channel_id

危険

channel_id クレーム を指定しない場合すべてのチャネルにアクセス可能になるため、本番環境では channel_id クレーム を指定する実装にしてください。

クレーム:

channel_id

:

string

要求:

オプション

channel_id クレームが含まれていた場合、Sora Cloud が認証時に channel_id と一致しているかどうかを確認します。

role

クレーム:

role

:

string

要求:

オプション

role クレームが含まれていた場合、Sora Cloud が認証時に role と一致しているかどうかを確認します。

指定可能な文字列は sendrecv / recvonly / sendonly です。

max_channel_connections

クレーム:

max_channel_connections

:

integer

要求:

オプション

認証時にチェックするチャネルの最大接続数を指定できます。

参考

シーケンス図

アクセストークンでの認証成功

  • アクセストークン生成 API 利用あり

  • Sora 認証ウェブフックの設定あり

sequenceDiagram autonumber participant client as クライアント participant sora as WebRTC SFU Sora participant cloud as Sora Cloud participant app as アプリケーションサーバー app->>cloud: アクセストークン API<br> cloud-->>app: 200 OK<br>"access_token": "<JWT>" app->>client: Sora Cloud 認証用の JWT 払い出し client->>sora: "type": "connection"<br>"metadata": {"access_token": "<JWT>"} sora->>cloud: 認証ウェブフック note over cloud: アクセストークン検証成功 cloud->>app: 認証ウェブフック app-->>cloud: 200 OK<br>"allowed": true cloud-->>sora: 200 OK<br>"allowed": true sora->>client: "type": "offer" client->>sora: "type": "answer" note over client,sora: WebRTC 確立

アクセストークンでの認証失敗

  • Sora 認証ウェブフックの設定あり

  • Sora イベントウェブフックの設定あり

sequenceDiagram autonumber participant client as クライアント participant sora as WebRTC SFU Sora participant cloud as Sora Cloud participant app as アプリケーションサーバー client->>sora: "type": "connection"<br>"metadata": {"access_token": "<正しくない JWT>"} sora->>+cloud: 認証ウェブフック note over cloud: アクセストークン検証失敗 cloud-->>-sora: 200 OK<br>"allowed": false,<br>"reason": "reject" sora->>+cloud: イベントウェブフック<br>"type": "connection.failed" cloud->>+app: イベントウェブフック<br>"type": "connection.failed" app-->>-cloud: 200 OK cloud-->>-sora: 200 OK sora->>client: シグナリング切断
© Copyright 2022, Shiguredo Inc. Created using Sphinx 5.3.0