RTC Token 鉴权

最近更新时间:2023-06-08 01:31:38

Token 是一种动态密钥,通过 App ID、权限密钥、用户名和 Token 有效时间戳等参数生成,安全性较高。在正式生产环境等对安全要求较高的场景中,我们推荐使用 RTC Token 鉴权。

打开权限密钥

系统默认使用 App ID 鉴权模式,如需使用 Token 鉴权方式必须前往应用配置页面打开「权限密钥」功能。

权限密钥功能一旦打开,不能关闭,如需关闭该功能请联系客服。

操作步骤

  1. 应用创建后,在应用列表中点击操作的编辑按钮。

  1. 点击权限密钥的启用按钮,打开权限密钥功能。

  1. 复制该权限密钥字符串,前往服务端生成 Token。

生成临时 Token

生成临时 Token 前,请确保你已开启权限密匙功能。
临时 Token 适用于测试环境。对于正式生产环境,我们推荐使用正式 Token。

为方便在测试阶段中鉴权,anyRTC 控制台提供接入工具来生成临时 Token。生成步骤:

  1. 进入项目管理页面,在项目列表中,点击临时token按钮。

  2. 进入 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"。支持以下字符集范围:
  • 26 个小写英文字母 a-z
  • 26 个大写英文字母 A-Z
  • 10 个数字 0-9
  • 空格
  • 常规符号等
  • userAccount用户 ID,64位字符串类型。如果不填或设置为nil,SDK 会自动分配一个。 规则同 channelName 。
    userRole用户角色。暂时只支持一种角色,请使用默认值 Role_Publisher = 1。 注:使用 php 生成 Token 时请勿携带。
    privilegeExpiredTsToken 过期的 Unix 时间戳,单位为秒。该值为当前时间戳和 Token 有效期的总和。 例如,如果你将 privilegeExpiredTs 设为当前时间戳再加 600 秒,则 Token 会在 10 分钟内过期。 Token 的最大有效期为 24 小时。 如果你将此参数设为 0,或时间长度超过 24 小时,Token 有效期依然为 24 小时。

    使用 RTC Token

    你可以参考如下步骤使用 Token:

    1. app 客户端调用 anyRTC 的 API 接口实现功能,如加入频道时,需要填入生成的 Token、以及生成 Token 时使用的用户名、频道名等。
    2. anyRTC 服务端接收到填入的 Token 等信息后,会验证用户是否有权限访问频道。如果验证通过,用户可以加入频道并使用相应的 anyRTC 服务。
    3. Token 具有有效期。在 Token 失效后,你需要在 app 服务端重新生成 Token,并使用新的 Token 加入频道或使用相应的 anyRTC 服务。