開発者ドキュメントユーザーガイドTipsセキュアな運用のためのnameの指定の推奨について

セキュアな運用のためのnameの指定の推奨について

Room リソースや Member リソースは、自動生成される ID とは別に、ユーザーがオプショナルな値として指定できる Name を持っています。SkyWay では、リソースを作成する際に Name の指定を推奨しています。

JavaScript SDK の Room ライブラリによるサンプルコードを以下に示します。

const room = await SkyWayRoom.Create(context, { type: "p2p", name: "lesson-room-1", }); const me = await room.join({ name: "alice" });

各リソースの ID は、リソース作成後に払い出されます。 そのため、リソース作成時に利用する SkyWay Auth Token の id にはワイルドカード( * )を指定する必要があり、操作する対象のリソースを厳密に制限できません。

一方、各リソースの Name はリソース作成前にユーザー側で決めることができます。そのため、name を指定することで操作対象のリソースを厳密に制限した SkyWay Auth Token を作成できます。 以下のようにリソース作成より前に権限の認可条件を指定することで、よりセキュアにアプリケーションを運用できます。

// SkyWay Auth Token version 1 または 2 の場合 scope: { app: { id: "sample-app-id", actions: ["read"], channels: [ { name: "lesson-room-1", actions: ["create", "delete"], members: [ { name: "alice", actions: ["create", "delete"], publication: { actions: ["create", "delete"] }, subscription: { actions: ["create", "delete"] } } ], }, ] } }
// SkyWay Auth Token version 3 の場合 scope: { appId: "sample-app-id", rooms: [ { name: "lesson-room-1", methods: ["create", "close", "updateMetadata"], member: { name: "alice", methods: ["publish", "subscribe", "updateMetadata"] } } ] }

ワイルドカードの利用について

SkyWay Auth Token における Room リソースや Member リソースの name プロパティには、ワイルドカードを利用することができます。

ワイルドカードを利用する場合には version を 2 以上に設定する必要があります

例えば、student-room-1 や student-room-2 には入ることができるが、teacher-room-1 には入れない、という SkyWay Auth Token を上記の alice のために作成する場合は以下のように作成します。

// SkyWay Auth Token version 2 の場合 { jti: "aa15ef18-08a4-4755-a9be-9f2d3351465e", iat: 1577804400, exp: 1577904400, version: 2, scope: { app: { id: "sample-app-id", actions: ["read"], channels: [ { name: "student-room-*", // ワイルドカードを利用 actions: ["create", "delete"], members: [ { name: "alice", actions: ["create", "delete"], publication: { actions: ["create", "delete"] }, subscription: { actions: ["create", "delete"] } } ], }, ] } } }
// SkyWay Auth Token version 3 の場合 { jti: "aa15ef18-08a4-4755-a9be-9f2d3351465e", iat: 1577804400, exp: 1577904400, version: 3, scope: { appId: "sample-app-id", rooms: [ { name: "student-room-*", // ワイルドカードを利用 methods: ["create", "close", "updateMetadata"], member: { name: "alice", methods: ["publish", "subscribe", "updateMetadata"] } } ] } }