生成和使用 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 失效。 |