使用Token鉴权

RTC为您提供两种生成Token的方式。通过阅读本文,您可以了解控制台和服务端生成Token的方法。

前提条件

背景信息

Token是阿里云设计的一种安全保护签名,目的是为了阻止恶意攻击者盗用您的云服务使用权。您需要在相应SDK的登录函数中提供AppIDUserIDChannelIdToken信息。其中AppID用于标识您的应用,UserID用于标识您的用户,而Token则是基于算法计算得出。因此,攻击者很难通过伪造Token盗用您的云服务流量。

注意事项

通过控制台生成的Token为临时Token,一般用于测试使用。如果需要正式使用,请使用服务端生成Token。

控制台生成Token

  1. 登录音视频通信RTC控制台

  2. 在左侧导航栏选择接入工具,进入接入工具界面。

服务端生成Token

相对于控制台生成Token,服务端生成Token可以最大限度地保障计算Token的密钥不被泄露,具体的流程如下所示:

  1. 您的App在调用SDK的初始化函数之前,首先要向您的服务器请求Token

  2. 您的服务器根据阿里云提供的AppToken工具计算Token

  3. 您的服务器将计算好的鉴权信息返回给您的App。

  4. 您的App将获得的鉴权信息通过您的业务API传递给SDK。

  5. SDK将鉴权信息提交给阿里云服务器进行校验。

  6. 阿里云校验鉴权信息,确认合法性。

  7. 校验通过后,即可开始提供实时音视频服务。image

参数

说明

AppID

应用ID,通过控制台创建。

UserID

您的唯一标识,由AppServer生成。同一个UserId的用户在其他端登录,先入会的端会被后入会的端踢出房间。 由大小写字母、数字组成,最大64字节。例如:2b9be4b25c2d38c409c376ffd2372be1。

ChannelID

频道ID,AppServer生成。不支持设置ChannelID0,并且ChannelID不可以重复,需要保持ChannelID的唯一。由大小写字母、数字、短划线(-)组成,最大64字节。例如:181-218-3406。

Token

加入频道的Token,由AppServer生成。

  1. 有效期说明:Token有效期最多在当前时间戳基础之上再增加24小时。

  2. 权限控制说明:SDK默认是具备发送音频、发送视频等各种能力,如果您需要限制用户不能使用某些能力,可以利用该字段实现精细化控制,默认情况下不启用,表示允许使用所有能力

用户级别权限控制,请参考Token privilege

频道级别参数控制,请参考Token options

Token privilege

privilege 主要用于控制用户级别权限,主要支持以下权限控制:发送音频、发送视频、发送屏幕共享。

privilege的使用流程一般如下:

  1. 申请token时,针对不同的用户,给不同的privilege参数

  2. SDK在生成token时增加权限属性

  3. SDK使用tokenRTC交互,RTC校验token权限

  4. 如果权限不足,则拒绝相关操作

Token中有一个参数privilege用于传入权限信息。

privilege参数的值是16bits的数字,每个bit代表一种权限:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            privilege              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • bit0 为低位,bit0 值为1 时,表示启用权限控制,否则不控制权限,所有功能都放开

  • bit1 表示是否可以发送音频

  • bit2 表示是否可以发送视频

  • bit3 表示是否可以发送屏幕共享

用法举例:

  • privilege=0,不启用权限控制,允许所有能力

  • privilege=3,二进制:0000 0000 0000 0011,表示可以发送音频,无其它权限

  • privilege=5,二进制:0000 0000 0000 0101,表示可以发送视频,无其它权限

  • privilege=7,二进制:0000 0000 0000 0111,表示可以发送音频和视频,无其它权限

具体用法示例,请见底部不同语言示例代码

Token options

options定义了频道级别相关配置,用户可以自定义,具体用法可以参考文档底部不同语言示例代码。数值范围会受RTC服务校验,如有特殊需求请提交工单提高上限。

  1. duration_per_channel

    • 字段含义:频道最大时长,单位为秒。

    • 取值区间:[300,86400]。

    • 默认值:86400 。

    • 其它补充:

      • token的过期时间不能超过当前时间加上频道时长之和。否则入会失败,请评估业务实际需要,按需设置。

      • 由于系统实现机制,可能和配置值有最大10s的偏差。

  2. delay_close_per_channel

    • 字段含义:频道中没有人时,频道保留最大时长,单位为秒。

    • 取值区间:[1,86400]。

    • 默认值:60。

    • 其它补充:

      • 由于系统实现机制,可能和配置值有最大10s的偏差。

示例代码

服务端生成Token的方法,您可以参见如下示例: GitHubGitee

  • Java程序实例请查看AppToken类。

  • Go程序实例请查看CreateAppToken函数。

  • C#程序实例请查看Program函数。

  • Python3程序实例请查看app_token函数。

  • Python2程序实例请查看app_token函数。

  • PHP程序实例请查看index函数。

  • Node.js程序实例请查看index函数。