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

前提条件

  • 您已经开通RTC服务,具体操作,请参见开通服务
  • 您已经创建好应用,具体操作,请参见创建应用
  • 您已经获取AppKey,具体操作,请参见查询AppKey

背景信息

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

控制台

  1. 登录音视频通信RTC控制台
  2. 在左侧导航栏选择接入工具
  3. Token生成器页签下,输入生成Token所需要的参数。
    参数 描述
    AppID 应用ID,在控制台应用管理页面创建和查看。
    AppKey 应用AppKey,在控制台应用管理页面查询。
    ChannelId 频道ID。1~64位,由大小写字母、数字、下划线(_)、短划线(-)组成。
    UserId 用户ID。1~64位,由大小写字母、数字、下划线(_)、短划线(-)组成。
    Nonce 随机码。以前缀AK-开头,由大小写字母、数字组成,最大64字节。例如:AK-2b9be4b25c2d38c409c376ffd2372be1。
    TimeStamp 过期时间戳。可以选择12小时、24小时、3天和7天,代表令牌有效时间。
  4. 单击生成
    生成Token

服务端

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

  1. 您的App在调用SDK的初始化函数之前,首先要向您的服务器请求Token
  2. 您的服务器根据如下参数计算Token
    token = sha256(appId + appKey + channelId + userId + nonce + timestamp)
  3. 服务器将计算好的鉴权信息返回给您的App。
  4. 您的App将获得的鉴权信息通过特定API传递给SDK。
  5. SDK将鉴权信息提交给阿里云服务器进行校验。
  6. 阿里云校验鉴权信息,确认合法性。
  7. 校验通过后,即可开始提供实时音视频服务。
服务端获取流程图
参数 说明
AppID 应用ID,通过控制台创建。
UserID 您的唯一标识,由AppServer生成。同一个UserId的用户在其他端登录,先入会的端会被后入会的端踢出房间。 由大小写字母、数字组成,最大64字节。例如:2b9be4b25c2d38c409c376ffd2372be1。
ChannelID 频道ID,AppServer生成。不支持设置ChannelID为0,并且ChannelID不可以重复,需要保持ChannelID的唯一。由大小写字母、数字、短划线(-)组成,最大64字节。例如:181-218-3406。
Nonce 令牌随机码,由AppServer生成。以前缀AK-开头,由大小写字母、数字组成,最大64字节。例如:AK-2b9be4b25c2d38c409c376ffd2372be1。
Timestamp 令牌过期时间戳,例如:1560588594代表过期时间为2019-06-15 16:49:54。
Token 加入频道的Token,由AppServer生成。实际算法为sha256(appId + appKey + channelId + userId + nonce + timestamp)
GSLB 服务地址,该参数是数组类型,当前请使用:["https://rgslb.rtc.aliyuncs.com"],请您通过业务服务器下发到客户端SDK,不建议您将该地址固化在客户端代码。

服务端生成Token的签名算法为SHA256,您可以参见如下版本的生成Token函数:

  • Golang程序实例请查看CreateToken函数,更多信息,请参见Golang Demo
  • Java程序实例请查看createToken函数,更多信息,请参见Java Demo
  • Python程序实例请查看create_token函数,更多信息,请参见Python Demo
  • C#程序实例请查看CreateToken函数,更多信息,请参见C# Demo
  • Nodejs程序实例请查看CreateToken函数,更多信息,请参见Node.js Demo
  • PHP程序实例请参查看CreateToken函数,更多信息,请参见PHP Demo