Token 是一种动态密钥,通过 App ID、权限密钥、用户名和 Token 有效时间戳等参数生成,安全性较高。在正式生产环境等对安全要求较高的场景中,我们推荐使用 RTC Token 鉴权。
打开权限密钥
系统默认使用 App ID 鉴权模式,如需使用 Token 鉴权方式必须前往应用配置页面打开「权限密钥」功能。
权限密钥功能一旦打开,不能关闭,如需关闭该功能请联系客服。
操作步骤
- 应用创建后,在应用列表中点击操作的编辑按钮。
- 点击权限密钥的启用按钮,打开权限密钥功能。
- 复制该权限密钥字符串,前往服务端生成 Token。
生成临时 Token
生成临时 Token 前,请确保你已开启权限密匙功能。
临时 Token 适用于测试环境。对于正式生产环境,我们推荐使用正式 Token。
为方便在测试阶段中鉴权,anyRTC 控制台提供接入工具来生成临时 Token。生成步骤:
-
进入项目管理页面,在项目列表中,点击临时token按钮。
-
进入 Token 页面,输入 用户ID 和频道名,点击生成临时 Token 即可。
生成正式 Token
在正式生产环境中,anyRTC 建议你在服务端调用 buildTokenWithUserAccount
生成正式 Token。详见生成 Token。
我们在 GitHub 上提供了一个开源的 anyRTC Dynamic Key 仓库。./<language>/src
文件夹下包含生成各种版本的 Dynamic key 和 RTC Token 的源码。你可以使用 RtcTokenBuilder
生成 RTC Token。./<language>/sample
文件夹下包含用于演示 RTC Token 生成的示例代码。RtcTokenBuilderSample
可以用来演示如何生成 RTC Token。
RTC Token 采用业界标准化的 HMAC/SHA1 加密方案,在 Node.js、Java、Python、C++ 等绝大多数通用的服务端开发平台上均可获得所需加密库。具体加密方案可参考 Authentication code。
anyRTC 支持使用 C++、Java、Python、PHP 等语言在你的服务端生成正式 Token。本节 API 注释以 C++ 示例代码为例。
static std::string buildTokenWithUserAccount(
const std::string& appId,
const std::string& appCertificate,
const std::string& channelName,
const std::string& userAccount,
UserRole role,
uint32_t privilegeExpiredTs = 0);
参数 | 描述 |
---|---|
appId | 项目 App ID。 |
appCertificate | 项目权限密钥。 |
channelName | 字符串长度不可超过 64 字节。不可设为空、null 或 "null"。支持以下字符集范围: |
userAccount | 用户 ID,64位字符串类型。如果不填或设置为nil,SDK 会自动分配一个。 规则同 channelName 。 |
userRole | 用户角色。暂时只支持一种角色,请使用默认值 Role_Publisher = 1 。 注:使用 php 生成 Token 时请勿携带。 |
privilegeExpiredTs | Token 过期的 Unix 时间戳,单位为秒。该值为当前时间戳和 Token 有效期的总和。 例如,如果你将 privilegeExpiredTs 设为当前时间戳再加 600 秒,则 Token 会在 10 分钟内过期。 Token 的最大有效期为 24 小时。 如果你将此参数设为 0,或时间长度超过 24 小时,Token 有效期依然为 24 小时。 |
使用 RTC Token
你可以参考如下步骤使用 Token:
- app 客户端调用 anyRTC 的 API 接口实现功能,如加入频道时,需要填入生成的 Token、以及生成 Token 时使用的用户名、频道名等。
- anyRTC 服务端接收到填入的 Token 等信息后,会验证用户是否有权限访问频道。如果验证通过,用户可以加入频道并使用相应的 anyRTC 服务。
- Token 具有有效期。在 Token 失效后,你需要在 app 服务端重新生成 Token,并使用新的 Token 加入频道或使用相应的 anyRTC 服务。