使用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的使用流程一般如下:

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

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

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

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

privilege定义了如下权限:发送音频、发送视频、发送屏幕共享等,在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的方法,您可以参见如下示例: GitHubGitee

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

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

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

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

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

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

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