You need to enable JavaScript to run this app.
导航
使用 Token 完成鉴权
最近更新时间:2025.06.27 14:28:46首次发布时间:2021.07.21 14:29:15
我的收藏
有用
有用
无用
无用

Token 是 RTC 用于验证客户端身份和权限的安全凭证,由您的应用服务端生成,并下发给应用客户端。客户端在加入 RTC 房间或登录实时消息服务时,必须携带有效的 Token。RTC 服务端在收到进房请求时会校验此 Token,以确保请求的合法性。如果校验不成功,进房会失败。

鉴权流程

整个鉴权生命周期分为两个阶段:首次进房和 Token 过期更新。

说明

你需要自行实现步骤 1,2,3,4,11 的代码逻辑。

  1. 客户端向你的应用服务端申请 Token。
  2. 应用服务端根据 AppID、RTC AppKey、RoomID、UserID、时间戳等信息生成 Token。
  3. 应用服务端将生成的 Token 下发给客户端。
  4. 客户端使用获取到的 Token 申请加入房间。

    加入房间时设置的 uid 和 roomid 需与用于生成 Token 的 uid 和 roomid 保持一致,否则会加入房间失败,并收到错误提示为 ERROR_CODE_INVALID_TOKENonRoomStateChanged 回调。

  5. RTC 服务端验证 Token 的合法性。
  6. 应用客户端收到来自 RTC SDK 的回调,获取加入房间的结果(成功/失败)。
  7. 若生成 Token 时设置了有效期,当 SDK 检测到 Token 的进房权限将在 30 秒内过期时,触发 onTokenWillExpire 回调。

    Token 过期后,用户将被移出房间,并收到 ERROR_CODE_INVALID_TOKEN 回调,错误码是 ERROR_CODE_TOKEN_EXPIRED。需要在申请新的 Token 之后调用 JoinRoom 加入房间。

  8. 此时,如果客户端需要继续进行音视频通话,需要申请新的 Token。
  9. 如步骤 2。
  10. 如步骤 3。
  11. 调用 updateToken 接口,使用新的 Token,更新 Token。

生成 Token

在您的应用服务端实现 Token 的生成,可以参考以下示例代码(包含了多种语言):

RTC_Token.zip
47.53KB

以 Golang 为例:

var (
// 确保通话时使用的 appID, roomID 和 userID 与用于生成 Token 的相同,否则会导致进房失败。
    appID  = "xxxxx" 
    appKey = "xxxxx" 
    roomID = "room" // 生成用于登录实时消息服务的 Token 时传空值
    userID = "uid"
)
t := AccessToken.New(appID, appKey, roomID, userID)
// 添加此 Token 的有效时间,两小时过期。过期后,你无法使用此 Token 进房。
t.ExpireTime(time.Now().Add(time.Hour * 2))
// 添加订阅流权限
t.AddPrivilege(AccessToken.PrivSubscribeStream, time.Time{})
// 添加发布流权限
t.AddPrivilege(AccessToken.PrivPublishStream, time.Time{})
// 获取最终生成的 token
token,err := t.Serialize()
  • 参数说明:

    参数说明
    appId 和 appKey在控制台添加应用时获得,参看开通服务
    roomID 和 userID赋值规则详见参数赋值规范
    ExpireTimeToken 的有效时长,建议设置为 24 小时。不建议设置得过长或永不过期。
    PrivPublishStream 和 PrivSubscribeStreamToken 的发布和订阅权限的有效时长,用于连麦鉴权。至少需要设置其中一个参数才能成功进房,可设置为 0。
  • 如需通过 Token 控制连麦权限,请使用 Native SDK v3.50.3Web SDK v4.60 及以后版本,并联系技术支持团队开通白名单后进行设置。建议与 ExpireTime 相同。
  • Native SDK v3.50.3、Web SDK v4.60 之前的版本,为保留参数,但仍需赋值。例如,设置为 0
  • 相关客户端接口:

    功能AndroidiOSmacOSWindowsLinuxWeb
    使用 Token 进房joinRoomjoinRoom:userInfo:roomConfig:joinRoom:userInfo:roomConfig:joinRoomjoinRoomjoinRoom
    更新 TokenupdateTokenupdateToken:updateToken:updateTokenupdateTokenupdateToken

生成通配 Token

在需要频繁切换房间的场景下,可以使用通配 Token,解决频繁请求 Token 可能造成的进房延误和 Token 服务端压力过大等问题。同一用户使用通配 Token 可以加入不同的 RTC 房间。

  • 生成方法:通配 Token 与普通 Token 生成方式一致,仅需要将 roomID 参数设置为 "*"
  • 使用限制
    • 在使用通配 Token 加入不同房间时,房间内的 userID 不可重复。
    • 仅以下版本的 RTC SDK 支持使用通配 Token:
      • Native SDK:3.19+
      • Web SDK:4.46+
      • 微信小程序 SDK:3.0+
      • Electron、Flutter、Unity SDK:所有版本都支持
  • 注意事项
    • 通配 Token 权限较高,一旦泄露,可能导致非法用户进入任意房间。建议仅在必要场景下使用。
    • 建议仅在通配 Token 中添加订阅流权限,不添加发布流权限;当用户需要在特定房间发言时,再为该房间单独生成一个包含发布权限的 Token,并通过 updateToken 接口动态更新。
    • 通配 Token 过期时,应获取服务端重新生成的通配 Token 更新相关权限。

生成临时 Token

在开发和测试阶段,为快速验证业务逻辑,你可以在 RTC 控制台上生成临时 Token,无需在应用服务端部署 Token 生成服务。

临时 Token 有效期仅为 7 天且安全性低, 仅适用于测试阶段,严禁用于生产环境。项目正式上线前,请务必切换为由你应用服务端生成的正式 Token。

获取方式:前往 RTC 控制台 > 应用管理,选择您的应用,在操作栏单击临时Token

  • 测试音视频通话时:当需要多个设备加入同一个房间进行通话时,请为每个设备都生成一个独立的 Token,且房间 ID 需相同、用户 ID 必须不同。
  • 仅测试实时消息时:房间 ID 可填写任意值,用户 ID 需为目标登录用户。

alt

Token 使用常见问题

常见问题参看Token 使用常见问题