生成 Token
本文介绍互动白板 Token 的生成和使用方式。
互动白板 Token,包括不同权限的 SDK Token、Room Token 和 Task Token,是互动白板服务对用户采用的一种鉴权方式。详见互动白板 Token 类型和权限。
生成 Token
你可以通过以下方式在业务服务端生成声网互动白板 Token:
- 
在 App 服务端用代码生成 Token,详见在 App 服务端生成 Token(推荐)。 
- 
在声网控制台生成 SDK Token。详见获取互动白板项目的安全密钥。 注意该方法只能生成 admin角色的永久 SDK Token。请勿将该 Token 下发给客户端,否则会有泄露的风险。
- 
在 App 服务端调用互动白板服务端 RESTful API,详见使用 RESTful API 生成 Token。 
生成 Token 时,你需要传入以下参数:
- 访问密钥对(AK 和 SK)
- 角色
- 有效时长
- 房间的 UUID (仅生成 Room Token 需要)
- 转换任务的 UUID (仅生成 Task Token 需要)
获取访问密钥对
声网互动白板的访问密钥对包括 AK(Access Key)和 SK(Secret Key),可以通过以下方式获取:
- 在声网控制台左侧导航栏依次访问全部产品-拓展能力-互动白板。
- 在互动白板的功能配置-基本信息中,点击右侧按钮分别复制白板项目的 AppIdentifier、AK 和 SK,并保存到安全的位置。
访问密钥对一旦泄露,会造成严重的安全问题。为提高项目的安全性,声网建议:
- 绝对不要将访问密钥对发送给客户端,也不要将它们写死在代码里。确保只有业务服务器能从配置文件中读取访问密钥对。
- 如果访问密钥对有泄露的风险,请及时联系技术支持,重新生成访问密钥对。
设置 Token 的角色
声网支持对 Token 设置 admin、writer 或 reader 角色,每种角色的 Token 具有的权限详见互动白板 Token 类型和权限。
为提高业务安全,声网建议:
- 尽量避免将权限很高的 Token 下发给客户端。
- 对于必须下发到客户端的 Token,根据业务需要生成相应权限的 Token,尽量避免使用高级别的 Token 替代低级别的 Token。
设置 Token 的有效时长
声网支持对 Token 设置有效时长,取值为正整数,单位为毫秒。生成 Token 的 UTC 时间加上你设置的有效时长,即 Token 的过期时间。Token 过期后,用户将无法再使用该 Token 加入房间或访问互动白板服务。为确保业务可用性,你需要及时在 App 服务端生成新的 Token。
如果你不设置 Token 的有效时长或将有效时长设为 0,生成的 Token 将永不过期。
- 永不过期的 Token 可能为你的业务带来安全隐患。
- 已经加入房间的用户不会因为 Token 过期被移出房间。
获取房间的 UUID
生成 Room Token 时,还需要传入房间的 UUID,即房间的全局唯一标识符,使 Room Token 与特定房间绑定。你可以通过以下方式获取房间的 UUID:
- 如果房间已经存在,你可以调用获取房间列表查询已创建的房间列表。请求成功后,响应包体中包含查询房间的 UUID。
- 如果房间尚未创建,你可以调用创建房间。请求成功后,响应包体中包含新创建房间的 UUID。
- 如果你调用互动白板 RESTful API 生成 Room Token,请求头中的 SDK Token 必须和创建房间时使用的 SDK Token 相同。
- 如果你在 App 服务端用代码生成 Room Token,传入的访问密钥对必须和创建房间时使用的 SDK Token 的访问密钥对相同。
获取转换任务的 UUID
生成 Task Token 时,还需要传入文档转换任务的 UUID,即文档转换任务的全局唯一标识符,使 Task Token 与特定的文档转换任务绑定。
要获取文档转换任务的 UUID, 你需要调用互动白板 RESTful API 发起文档转换。请求成功后,响应包体会包含转换任务的 UUID。
在 App 服务端生成 Token
声网在 GitHub 提供一个开源的 netless-token 仓库,支持使用 Java、JavaScript、TypeScript、C#、Go、PHP、Ruby 等语言在你的服务端部署生成 SDK Token、Room Token、Task Token。
本节展示如何使用声网提供的代码和你的访问密钥对(即 AK 和 SK)在业务服务端生成各种类型的互动白板 Token。
为提高项目的安全性,请勿将 AK 和 SK 保存或发送给客户端。你需要将 AK 和 SK 保存在 App 服务端,并根据实际业务场景的需求,在 App 服务端签发所需的 Token。
开始前,请确保你的声网互动白板项目在控制台处于开启状态。
- JavaScript
- TypeScript
- Java
- Go
- PHP
- Ruby
- C#
声网在 netless-token-master/Node/JavaScript 文件夹下提供了生成 SDK Token、Room Token、Task Token 的 JavaScript 示例代码,其中:
- index.js文件包含用于生成互动白板 Token 的 API 源代码。
- README.md文件包含用于生成互动白板 Token 的示例代码。
开始前请确保已安装最新版本的 Node.js LTS 版本。
生成 SDK Token
你可以参考如下步骤,使用示例代码生成 SDK Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
进入 netless-token-master/Node/JavaScript文件夹,运行如下命令安装 Node.js 依赖。Shellnpm install
- 
新建 sdktoken.js文件,将以下代码复制到该文件:JavaScriptconst { sdkToken, TokenPrefix } = require("./index");
 // 生成 SDK Token
 const netlessSDKToken = sdkToken(
 "Your AK", // 将 Your AK 替换成你从控制台获取的 AK。
 "Your SK", // 将 Your SK 替换成你从控制台获取的 SK。
 1000 * 60 * 10, // Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 {
 role: 0 // Token 的权限,取值包括 0(Admin),1(Writer),2(Reader)。
 }
 );
 console.log(netlessSDKToken)
- 
运行如下命令生成 SDK Token。 生成的 Token 会显示在终端中,并带有 NETLESSSDK_前缀。Shellnode sdktoken.js
生成 Room Token
你可以参考如下步骤,使用示例代码生成 Room Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
进入 netless-token-master/Node/JavaScript文件夹,运行如下命令安装 Node.js 依赖。Shellnpm install
- 
新建 roomtoken.js文件,将以下代码复制到该文件:JavaScriptconst { roomToken, TokenPrefix } = require("./index");
 // 生成 Room Token
 const netlessRoomToken = roomToken(
 "Your AK", // 将 Your AK 替换成你从控制台获取的 AK。
 "Your SK", // 将 Your SK 替换成你从控制台获取的 SK。
 1000 * 60 * 10, // Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 {
 role: 1, // Token 的权限,取值包括 0(Admin),1(Writer),2(Reader)。
 uuid: "房间 UUID" // 填入你的房间 UUID,可通过调用服务端创建房间 API 或获取房间列表 API 获取。
 }
 );
 console.log(netlessRoomToken)
- 
运行如下命令生成 Room Token。 生成的 Token 会显示在终端中,并带有 NETLESSROOM_前缀。Shellnode roomtoken.js
生成 Task Token
你可以参考如下步骤,使用示例代码生成 Task Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
进入 netless-token-master/Node/JavaScript文件夹,运行如下命令安装 Node.js 依赖。Shellnpm install
- 
新建 tasktoken.js文件,将以下代码复制到该文件:JavaScriptconst { taskToken, TokenPrefix } = require("./index");
 // 生成 task token
 const netlessTaskToken = taskToken(
 "Your AK", // 将 Your AK 替换成你从控制台获取的 AK。
 "Your SK", // 将 Your SK 替换成你从控制台获取的 SK。
 1000 * 60 * 10, // Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 {
 role: 1, // Token 的权限,取值包括 0(Admin),1(Writer),2(Reader)。
 uuid: "Task UUID" // 填入转换任务的 UUID,可通过调用服务端发起文档转换任务 API 获取。
 }
 );
 console.log(netlessTaskToken)
- 
运行如下命令生成 Task Token。 生成的 Token 会显示在终端中,并带有 NETLESSTASK_前缀。Shellnode tasktoken.js
声网在 netless-token-master/Node/TypeScript 文件夹下提供了生成 SDK Token、Room Token、Task Token 的 TypeScript 示例代码,其中:
- src/index.ts文件包含用于生成互动白板 Token 的 API 源代码。
- README.md文件包含用于生成互动白板 Token 的示例代码。
开始前请确保已安装最新版本的 Node.js LTS 版本。
生成 SDK Token
你可以参考如下步骤,使用示例代码生成 SDK Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
进入 netless-token-master/Node/TypeScript文件夹,运行如下命令安装 TypeScript。Shellnpm install -g typescript
- 
新建 sdktoken.ts文件,将以下代码复制到该文件:TypeScriptimport { sdkToken, TokenPrefix } from "./src/index";
 const netlessSDKToken = sdkToken(
 "Your AK", // 将 Your AK 替换成你从控制台获取的 AK。
 "Your SK", // 将 Your SK 替换成你从控制台获取的 SK。
 1000 * 60 * 10, // Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 {
 role: TokenRole.Admin // Token 的权限,可选值包括 TokenRole.Admin,TokenRole.Writer,TokenRole.Reader。
 }
 );
 console.log(netlessSDKToken)
- 
运行如下命令,生成相应的 sdktoken.js文件。Shelltsc sdktoken.ts
- 
运行如下命令生成 SDK Token。 生成的 Token 会显示在终端中,并带有 NETLESSSDK_前缀。Shellnode sdktoken.js
生成 Room Token
你可以参考如下步骤,使用示例代码生成 Room Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
进入 netless-token-master/Node/TypeScript文件夹,运行如下命令安装 TypeScript。Shellnpm install -g typescript
- 
新建 roomtoken.ts文件,将以下代码复制到该文件:TypeScriptimport { roomToken, TokenPrefix } from "./src/index";
 const netlessRoomToken = roomToken(
 "Your AK", // 将 Your AK 替换成你从控制台获取的 AK。
 "Your SK", // 将 Your SK 替换成你从控制台获取的 SK。
 1000 * 60 * 10, // Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 {
 role: TokenRole.Admin, // Token 的权限,可选值包括 TokenRole.Admin,TokenRole.Writer,TokenRole.Reader。
 uuid: "房间的 UUID" // 填入你的房间 UUID,可通过调用服务端创建房间 API 或获取房间列表 API 获取。
 }
 );
 console.log(netlessRoomToken)
- 
运行如下命令,生成相应的 roomtoken.js文件。Shelltsc roomtoken.ts
- 
运行如下命令生成 Room Token。 生成的 Token 会显示在终端中,并带有 NETLESSROOM_前缀。Shellnode roomtoken.js
生成 Task Token
你可以参考如下步骤,使用示例代码生成 Room Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
进入 netless-token-master/Node/TypeScript文件夹,运行如下命令安装 TypeScript。Shellnpm install -g typescript
- 
新建 tasktoken.ts文件,将以下代码复制到该文件:TypeScriptimport { taskToken, TokenPrefix } from "./src/index";
 const netlessTaskToken = taskToken(
 "Your AK", // 将 Your AK 替换成你从控制台获取的 AK。
 "Your SK", // 将 Your SK 替换成你从控制台获取的 SK。
 1000 * 60 * 10, // Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 {
 role: TokenRole.Writer, // Token 的权限,可选值包括 TokenRole.Admin,TokenRole.Writer,TokenRole.Reader。
 uuid: "Task UUID" // 填入文档转换任务的 UUID,可通过调用服务端发起文档转换任务 API 获取。
 }
 );
 console.log(netlessTaskToken)
- 
运行如下命令,生成相应的 tasktoken.js文件。Shelltsc tasktoken.ts
- 
运行如下命令生成 Task Token。 生成的 Token 会显示在终端中,并带有 NETLESSTASK_前缀。Shellnode tasktoken.js
声网在 netless-token-master/Java 文件夹下提供了生成 SDK Token、Room Token、Task Token 的 Java 示例代码,其中:
- Token.java文件包含用于生成互动白板 Token 的 API 源代码。
- README.md文件包含用于生成互动白板 Token 的示例代码。
开始前请确保已安装 Java Development Kit。
生成 SDK Token
你可以参考如下步骤,使用示例代码生成 SDK Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
进入 netless-token-master/Java文件夹,在Token.java文件中添加如下代码:Javapublic static void main(String[] args) throws Exception {
 Map<String, String> map = new HashMap<>();
 // Token 的权限,取值包括 TokenRole.Admin,TokenRole.Writer,TokenRole.Reader。
 map.put("role", Token.TokenRole.Admin.getValue());
 String sdkToken = Token.sdkToken(
 "Your AK", // 将 Your AK 替换成你从控制台获取的 AK。
 "Your SK", // 将 Your SK 替换成你从控制台获取的 SK。
 1000 * 60 * 10, // Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 map);
 System.out.println(sdkToken);
 }
- 
进入 Token.java所在路径,运行如下命令:Javajavac Token.java
- 
运行如下命令生成 SDK Token。 生成的 Token 会显示在终端中,并带有 NETLESSSDK_前缀。Javajava Token
生成 Room Token
你可以参考如下步骤,使用示例代码生成 Room Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
进入 netless-token-master/Java文件夹,在Token.java文件中添加如下代码:Javapublic static void main(String[] args) throws Exception {
 Map<String, String> map = new HashMap<>();
 // Token 的权限,可选值包括 TokenRole.Admin,TokenRole.Writer,TokenRole.Reader。
 map.put("role", Token.TokenRole.Reader.getValue());
 // 填入你的房间 UUID,可通过调用服务端创建房间 API 或获取房间列表 API 获取。
 map.put("uuid", "房间的 UUID");
 String roomToken = Token.roomToken(
 "Your AK", // 将 Your AK 替换成你从控制台获取的 AK。
 "Your SK", // 将 Your SK 替换成你从控制台获取的 SK。
 1000 * 60 * 10, // Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 map);
 System.out.println(roomToken);
 }
- 
进入 Token.java所在路径,运行如下命令:Javajavac Token.java
- 
运行如下命令生成 Room Token。 生成的 Token 会显示在终端中,并带有 NETLESSROOM_前缀。Javajava Token
生成 Task Token
你可以参考如下步骤,通过命令直接使用上述示例代码生成 Task Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
进入 netless-token-master/Java文件夹,在Token.java文件中添加如下代码:Javapublic static void main(String[] args) throws Exception {
 Map<String, String> map = new HashMap<>();
 // Token 的权限,可选值包括 TokenRole.Admin,TokenRole.Writer,TokenRole.Reader。
 map.put("role", Token.TokenRole.Writer.getValue());
 // 填入文档转换任务的 UUID,可通过调用服务端发起文档转换任务 API 获取。
 map.put("uuid", "文档转换任务的 UUID");
 String taskToken = Token.taskToken(
 "Your AK", // 将 Your AK 替换成你从控制台获取的 AK。
 "Your SK", // 将 Your SK 替换成你从控制台获取的 SK。
 1000 * 60 * 10, // Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 map);
 System.out.println(taskToken);
 }
- 
进入 Token.java所在路径,运行如下命令:Javajavac Token.java
- 
运行如下命令生成 SDK Token。 生成的 Token 会显示在终端中,并带有 NETLESSTASK_前缀。Javajava Token
声网在 netless-token-master/golang 文件夹下提供了生成 SDK Token、Room Token、Task Token 的 Golang 示例代码,其中:
- token.go文件包含用于生成互动白板 Token 的 API 源代码。
- README.md文件包含用于生成互动白板 Token 的示例代码。
开始前请确保已安装最新版本的 Golang。
生成 SDK Token
你可以参考如下步骤,使用示例代码生成 SDK Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
新建 sdktoken.go文件,将以下代码复制到该文件:Gopackage main
 import (
 "fmt"
 "../golang" // 将 ../golang 替换成你的 token 包所在路径。
 )
 func main() {
 c := token.SDKContent{
 // Token 的权限,可选值包括 token.AdminRole、token.ReaderRole、token.WriterRole。
 Role: token.AdminRole,
 }
 netlessSDKToken := token.SDKToken(
 "Your AK", // 将 Your AK 替换成你从控制台获取的 AK。
 "Your SK", // 将 Your SK 替换成你从控制台获取的 SK。
 1000 * 60 * 10, // Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 &c,
 )
 fmt.Println(netlessSDKToken)
 }
- 
进入 sdktoken.go所在路径,运行如下命令生成 SDK Token。 生成的 Token 会显示在终端中,并带有NETLESSSDK_前缀。Gogo sdktoken.go
生成 Room Token
你可以参考如下步骤,使用示例代码生成 Room Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
新建 roomtoken.go文件,将以下代码复制到该文件:Gopackage main
 import (
 "fmt"
 "../golang" // 将 ../golang 替换成你的 token 包所在路径。
 )
 func main() {
 c := token.RoomContent{
 // Token 的权限,可选值包括 token.AdminRole、token.ReaderRole、token.WriterRole。
 Role: token.AdminRole,
 // 填入你的房间 UUID,可通过调用服务端创建房间 API 或获取房间列表 API 获取。
 Uuid: "房间的 uuid",
 }
 netlessRoomToken := token.RoomToken(
 "Your AK", // 将 Your AK 替换成你从控制台获取的 AK。
 "Your SK", // 将 Your SK 替换成你从控制台获取的 SK。
 1000 * 60 * 10, // Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 &c,
 )
 fmt.Println(netlessRoomToken)
 }
- 
进入 roomtoken.go所在路径,运行如下命令生成 Room Token。 生成的 Token 会显示在终端中,并带有NETLESSROOM_前缀。Gogo roomtoken.go
生成 Task Token
你可以参考如下步骤,使用示例代码生成 Task Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
新建 tasktoken.go文件,将以下代码复制到该文件:Gopackage main
 import (
 "fmt"
 "../golang" // 将 ../golang 替换成你的 token 包所在路径。
 )
 func main() {
 c := token.TaskContent{
 // Token 的权限,可选值包括 token.AdminRole、token.ReaderRole、token.WriterRole。
 Role: token.WriterRole,
 // 填入文档转换任务的 UUID,可通过调用服务端发起文档转换任务 API 获取。
 Uuid: "Task UUID",
 }
 netlessTaskToken := token.TaskToken(
 "Your AK", // 将 Your AK 替换成你从控制台获取的 AK。
 "Your SK", // 将 Your SK 替换成你从控制台获取的 SK。
 1000 * 60 * 10, // Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 &c,
 )
 fmt.Println(netlessTaskToken)
 }
- 
进入 tasktoken.go所在路径,运行如下命令生成 Task Token。 生成的 Token 会显示在终端中,并带有NETLESSTASK_前缀。Gogo tasktoken.go
声网在 netless-token-master/php 文件夹下提供了生成 SDK Token、Room Token、Task Token 的 PHP 示例代码,其中:
- Generate.php文件包含用于生成互动白板 Token 的 API 源代码。
- README.md文件包含用于生成互动白板 Token 的示例代码。
开始前请确保已安装 7.3 或以上版本的 PHP。
生成 SDK Token
你可以参考如下步骤,使用示例代码生成 SDK Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
进入 netless-token-master/php文件夹,新建sdktoken.php文件,将以下代码复制到该文件:PHP<?php
 // 引入 composer 管理的依赖包。
 require __DIR__ . '/vendor/autoload.php';
 use Netless\Token\Generate;
 $netlessToken = new Generate;
 $sdkToken = $netlessToken->sdkToken(
 "Your AK", // 将 Your AK 替换成你从控制台获取的 AK。
 "Your SK", // 将 Your SK 替换成你从控制台获取的 SK。
 1000 * 60 * 10, // Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 array(
 "role" => Generate::AdminRole // Token 的权限,可选值包括 AdminRole、WriterRole、ReaderRole。
 )
 );
 echo $sdkToken;
- 
运行如下命令生成 SDK Token。 生成的 Token 会显示在终端中,并带有 NETLESSSDK_前缀。PHPphp sdktoken.php
生成 Room Token
你可以参考如下步骤,使用示例代码生成 Room Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
进入 netless-token-master/php文件夹,新建roomtoken.php文件,将以下代码复制到该文件:PHP<?php
 // 引入 composer 管理的依赖包。
 require __DIR__ . '/vendor/autoload.php';
 use Netless\Token\Generate;
 $netlessToken = new Generate;
 $roomToken = $netlessToken->roomToken(
 "Your AK", // 将 Your AK 替换成你从控制台获取的 AK。
 "Your SK", // 将 Your SK 替换成你从控制台获取的 SK。
 1000 * 60 * 10, // Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 array(
 "role" => Generate::ReaderRole, // Token 的权限,可选值包括 AdminRole、WriterRole、ReaderRole。
 "uuid" => "房间的 UUID" // 填入你的房间 UUID,可通过调用服务端创建房间 API 或获取房间列表 API 获取。
 )
 );
 echo $roomToken;
- 
运行如下命令生成 Room Token。 生成的 Token 会显示在终端中,并带有 NETLESSROOM_前缀。PHPphp roomtoken.php
生成 Task Token
你可以参考如下步骤,使用示例代码生成 Task Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
进入 netless-token-master/php文件夹,新建tasktoken.php文件,将以下代码复制到该文件:PHP<?php
 // 引入 composer 管理的依赖包。
 require __DIR__ . '/vendor/autoload.php';
 use Netless\Token\Generate;
 $netlessToken = new Generate;
 $roomToken = $netlessToken->roomToken(
 "Your AK", // 将 Your AK 替换成你从控制台获取的 AK。
 "Your SK", // 将 Your SK 替换成你从控制台获取的 SK。
 1000 * 60 * 10, // Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 array(
 "role" => Generate::ReaderRole, // Token 的权限,可选值包括 AdminRole、WriterRole、ReaderRole。
 "uuid" => "任务的 UUID" // 填入文档转换任务的 UUID,可通过调用服务端发起文档转换任务 API 获取。
 )
 );
 echo $sdkToken;
- 
运行如下命令生成 Task Token。 生成的 Token 会显示在终端中,并带有 NETLESSTASK_前缀。PHPphp tasktoken.php
声网在 netless-token-master/ruby 文件夹下提供了生成 SDK Token、Room Token、Task Token 的 Ruby 示例代码,其中:
- token.rb文件包含用于生成互动白板 Token 的 API 源代码。
- README.md文件包含用于生成互动白板 Token 的示例代码。
开始前请确保已安装 2.1 或以上版本的 Ruby。
生成 SDK Token
你可以参考如下步骤,使用示例代码生成 SDK Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
进入 netless-token-master/ruby文件夹,运行以下命令,安装uuidtools。Shellgem install uuidtools
- 
在 ruby文件夹,新建sdktoken.rb文件,将以下代码复制到该文件:Rubyrequire './lib/token.rb'
 sdktoken = NetlessToken.sdk_token(
 "Your AK", # 将 Your AK 替换成你从控制台获取的 AK。
 "Your SK", # 将 Your SK 替换成你从控制台获取的 SK。
 1000 * 60 * 10, # Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 {
 :role => NetlessToken::ROLE::ADMIN # Token 的权限,可选值包括 ADMIN、WRITER、READER。
 }
 )
 puts sdktoken
- 
运行如下命令生成 SDK Token。 生成的 Token 会显示在终端中,并带有 NETLESSSDK_前缀。Rubyruby sdktoken.rb
生成 Room Token
你可以参考如下步骤,使用示例代码生成 Room Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
进入 netless-token-master/ruby文件夹,运行以下命令,安装uuidtools。Shellgem install uuidtools
- 
在 ruby文件夹,新建roomtoken.rb文件,将以下代码复制到该文件:Rubyrequire './lib/token.rb'
 roomtoken = NetlessToken.room_token(
 "Your AK", # 将 Your AK 替换成你从控制台获取的 AK。
 "Your SK", # 将 Your SK 替换成你从控制台获取的 SK。
 1000 * 60 * 10, # Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 {
 :role => NetlessToken::ROLE::ADMIN # Token 的权限,可选值包括 ADMIN、WRITER、READER。
 :uuid => "房间的 UUID" # 填入你的房间 UUID,可通过调用服务端创建房间 API 或获取房间列表 API 获取。
 }
 )
 puts roomtoken
- 
运行如下命令生成 Room Token。 生成的 Token 会显示在终端中,并带有 NETLESSROOM_前缀。Rubyruby roomtoken.rb
生成 Task Token
你可以参考如下步骤,使用示例代码生成 Task Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
进入 netless-token-master/ruby文件夹,运行以下命令,安装uuidtools。Shellgem install uuidtools
- 
在 ruby文件夹,新建tasktoken.rb文件,将以下代码复制到该文件:Rubyrequire './lib/token.rb'
 tasktoken = NetlessToken.task_token(
 "Your AK", # 将 Your AK 替换成你从控制台获取的 AK。
 "netless sk", # 将 Your SK 替换成你从控制台获取的 SK。
 1000 * 60 * 10, # Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 {
 :role => NetlessToken::ROLE::ADMIN # Token 的权限,可选值包括 ADMIN、WRITER、READER。
 :uuid => "任务的 UUID" # 填入文档转换任务的 UUID,可通过调用服务端发起文档转换任务 API 获取。
 }
 )
 puts tasktoken
- 
运行如下命令生成 Task Token。 生成的 Token 会显示在终端中,并带有 NETLESSTASK_前缀。Rubyruby tasktoken.rb
声网在 netless-token-master/csharp 文件夹下提供了生成 SDK Token、Room Token、Task Token 的 C# 示例代码,其中:
- Token.cs文件包含用于生成互动白板 Token 的 API 源代码。
- README.md文件包含用于生成互动白板 Token 的示例代码。
开始前请确保已安装最新版本的 Visual Studio。
生成 SDK Token
你可以参考如下步骤,使用示例代码生成 SDK Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
进入 netless-token-master/csharp文件夹,使用 Visual Studio 打开csharp.sln文件。
- 
在 Program.cs的示例代码中填入你的 AK,SK,Token 有效期和 Token 的角色。C#using System;
 using Netless;
 class Program
 {
 static void Main(string[] args)
 {
 string token = NetlessToken.SdkToken(
 // 将 ak 替换成你从控制台获取的 AK。
 "ak",
 // 将 sk 替换成你从控制台获取的 SK。
 "sk",
 // Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 1000 * 60 * 10,
 // Token 的权限,取值包括 TokenRole.Admin,TokenRole.Writer,TokenRole.Reader。
 new SdkContent(TokenRole.Admin));
 Console.WriteLine(token);
 }
 }
- 
在 Visual Studio 中运行项目。生成的 Token 会显示在终端中,并带有 NETLESSSDK_前缀。
生成 Room Token
你可以参考如下步骤,使用示例代码生成 Room Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
进入 netless-token-master/csharp文件夹,使用 Visual Studio 打开csharp.sln文件。
- 
将 Program.cs文件中的代码删除,并将以下示例代码复制到该文件中:C#using System;
 using Netless;
 class Program
 {
 static void Main(string[] args)
 {
 string token = NetlessToken.RoomToken(
 // 将 Your AK 替换成你从控制台获取的 AK。
 "ak",
 // 将 Your SK 替换成你从控制台获取的 SK。
 "sk",
 // Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 1000 * 60 * 10,
 // 设置 Token 的权限,取值包括 TokenRole.Admin,TokenRole.Writer,TokenRole.Reader。
 // 填入你的房间 UUID,可通过调用服务端创建房间 API 或获取房间列表 API 获取。
 new RoomContent(TokenRole.Admin, "房间的 UUID")
 );
 Console.WriteLine(token);
 }
 }
- 
在 Visual Studio 中运行项目。生成的 Token 会显示在终端中,并带有 NETLESSROOM_前缀。
生成 Task Token
你可以参考如下步骤,使用示例代码生成 Task Token。
- 
下载 netless-token 仓库或克隆至本地。 
- 
进入 netless-token-master/csharp文件夹,使用 Visual Studio 打开csharp.sln文件。
- 
将 Program.cs文件中的代码删除,并将以下示例代码复制到该文件中:C#using System;
 using Netless;
 class Program
 {
 static void Main(string[] args)
 {
 string token = NetlessToken.TaskToken(
 // 将 Your AK 替换成你从控制台获取的 AK。
 "ak",
 // 将 Your SK 替换成你从控制台获取的 SK。
 "sk",
 // Token 有效时间,单位为毫秒。设为 0 时,表示永不过期。
 1000 * 60 * 10,
 // 设置 Token 的权限,取值包括 TokenRole.Admin,TokenRole.Writer,TokenRole.Reader。
 // 填入文档转换任务的 UUID,可通过调用服务端发起文档转换任务 API 获取。
 new TaskContent(TokenRole.Admin, "任务的 UUID")
 );
 Console.WriteLine(token);
 }
 }
- 
在 Visual Studio 中运行项目。生成的 Token 会显示在终端中,并带有 NETLESSTASK_前缀。
使用 Token
你需要根据 App 客户端的请求,在 App 服务端生成相应权限的 Token。当 App 客户端或服务端使用获取的 Token 访问声网互动白板服务时,互动白板服务端会使用该 Token 校验其权限。
下面以 App 客户端请求加入房间和发起文档转换任务为例,介绍使用 Token 的步骤。
当 App 客户端请求加入房间时:
- App 服务端调用互动白板 RESTful API 或在本地用代码生成 SDK Token。
- App 服务端使用生成的 SDK Token 调用互动白板 RESTful API 创建房间。
- 声网互动白板服务端收到请求后,根据 Token 校验 App 服务端的权限。如果验证通过且成功创建房间,会向 App 服务端发送请求成功的响应。
- App 服务端读取响应包体中房间 UUID,调用互动白板 RESTful API 或在本地用代码生成 Room Token。
- App 服务端将 Room Token 和房间 UUID 下发给 App 客户端。
- App 客户端使用获取的 Room Token 和 房间 UUID 等信息加入互动白板房间。
- 声网互动白板服务端收到 App 客户端的请求后,会根据 Room Token 等信息校验 App 客户端的权限。如果验证通过,该 App 客户端可以加入互动白板房间并使用相应的服务。
当 App 客户端发起文档转换任务时:
- 
App 客户端发起文档转换任务时,App 服务端调用互动白板 RESTful API 或在本地用代码生成 SDK Token。 
- 
App 服务端使用生成的 SDK Token 调用互动白板 RESTful API 创建文档转换任务。 
- 
声网互动白板服务端收到请求后,根据 Token 校验 App 服务端的权限。如果验证通过且成功创建文档转换任务,会向 App 服务端发送请求成功的响应。 
- 
App 服务端读取响应包体中新建转换任务的 UUID,然后调用互动白板 RESTful API 或在本地用代码生成 Task Token。 
- 
App 服务端使用 Task Token 和转换任务 UUID 调用互动白板 RESTful API 查询转换任务的进度。 
- 
声网互动白板服务端收到 App 服务端的请求后,会根据 Task Token 等信息校验用户权限。如果验证通过且请求成功,会向 App 服务端返回文档转换任务的进度。 
相关信息
本节介绍使用互动白板 Token 的相关信息。
Token 失效
声网互动白板 Token 在下列情形会失效:
- 禁用或删除项目。项目被禁用或删除后,与之关联的访问密钥对也会被禁用或删除,所有使用该访问密钥对生成的 Token 都会失效。
- Token 过期。Token 过期后,用户将无法再使用该 Token 加入互动白板房间或使用互动白板服务。
Token 相关错误
在使用 Token 访问互动白板服务时,你可能会遇到以下报错:
| 错误信息 | 说明 | 
|---|---|
| invalid format of token | Token 的数据格式错误。请检查 Token 数据格式是否有效: 
 | 
| expired token | Token 已过期。请在 App 服务端调用互动白板 RESTful API 或用代码重新生成 Token。 | 
| invalid signature of token | Token 的签名无效。当你使用在 App 服务端用代码生成的 Token 时,可能会遇到该报错。请确保使用正确的生成 Token 算法和代码。 | 
| unknown error | 未知错误。 | 
| token access role${发送过来的 token 的权限} forbidden | Token 的权限过低,例如,使用 reader角色的 Token 请求writer角色的 Token 才能访问的服务。请确保发起的请求与使用的 Token 权限一致。 | 
| token access task forbidden | 禁止使用该 Task Token 访问 Task UUID 对应的文档转换任务。请确保请求中传入的 Task UUID 和 Task UUID 相匹配,即传入的 Task UUID 和生成该 Task Token 的 Task UUID 一致。 | 
| token access room forbidden | 禁止使用该 Room Token 访问 Room UUID 对应的互动白板房间。请确保请求中传入的 Room UUID 和 Room UUID 相匹配,即传入的 Room UUID 和生成该 Room Token 的 Room UUID 一致。 | 
| token access team forbidden | 项目被删除或禁用,导致 Token 失效。 |