生成和使用 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),可以通过以下方式获取:
- 在声网控制台的项目管理页面,选择已开启互动白板服务的项目,点击编辑。
- 在编辑项目页面,找到白板,点击配置。
- 在白板配置页面,找到 AK 和 SK,点击其右侧的眼睛图标,复制并自行保存白板项目的 AK 和 SK。
访问密钥对一旦泄露,会造成严重的安全问题。为提高项目的安全性,声网建议:
设置 Token 的角色
声网支持对 Token 设置 admin
、writer
或 reader
角色,每种角色的 Token 具有的权限详见 Token 的类型与权限。
为提高业务安全,声网建议:
设置 Token 的有效时长
声网支持对 Token 设置有效时长,取值为正整数,单位为毫秒。生成 Token 的 UTC 时间加上你设置的有效时长,即 Token 的过期时间。Token 过期后,用户将无法再使用该 Token 加入房间或访问互动白板服务。为确保业务可用性,你需要及时在 App 服务端生成新的 Token。
已经加入房间的用户不会因为 Token 过期被移出房间。
如果你不设置 Token 的有效时长或将有效时长设为 0,生成的 Token 将永不过期。
永不过期的 Token 可能为你的业务带来安全隐患。想象一下,如果非法用户获取了一个权限很高且永不过期的 Token,他就可以使用该 Token 危害你的系统,而你使该 Token 失效的唯一手段只有禁用生成该 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 创建房间。 3.声网互动白板服务端收到请求后,根据 Token 校验 App 服务端的权限。如果验证通过且成功创建房间,会向 App 服务端发送请求成功的响应。
- App 服务端读取响应包体中房间 UUID,调用互动白板 RESTful API 或在本地用代码生成 Room Token。
- App 服务端将 Room Token 和房间 UUID 下发给 App 客户端。
- App 客户端使用获取的 Room Token 和 房间 UUID 等信息加入互动白板房间。 7.声网互动白板服务端收到 App 客户端的请求后,会根据 Room Token 等信息校验 App 客户端的权限。如果验证通过,该 App 客户端可以加入互动白板房间并使用相应的服务。
当 App 客户端发起文档转换任务时:
-
App 客户端发起文档转换任务时,app 服务端调用互动白板 RESTful API 或在本地用代码生成 SDK Token。
-
App 服务端使用生成的 SDK Token 调用互动白板 RESTful API 创建文档转换任务。
3.声网互动白板服务端收到请求后,根据 Token 校验 App 服务端的权限。如果验证通过且成功创建文档转换任务,会向 App 服务端发送请求成功的响应。
-
App 服务端读取响应包体中新建转换任务的 UUID,然后调用互动白板 RESTful API 或在本地用代码生成 Task Token。
-
App 服务端使用 Task Token 和转换任务 UUID 调用互动白板 RESTful API 查询转换任务的进度。
6.声网互动白板服务端收到 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 失效。 |