Token 是 RTC 用于验证客户端身份和权限的安全凭证,由您的应用服务端生成,并下发给应用客户端。客户端在加入 RTC 房间或登录实时消息服务时,必须携带有效的 Token。RTC 服务端在收到进房请求时会校验此 Token,以确保请求的合法性。如果校验不成功,进房会失败。
整个鉴权生命周期分为两个阶段:首次进房和 Token 过期更新。
说明
你需要自行实现步骤 1,2,3,4,11 的代码逻辑。
加入房间时设置的 uid 和 roomid 需与用于生成 Token 的 uid 和 roomid 保持一致,否则会加入房间失败,并收到错误提示为
ERROR_CODE_INVALID_TOKEN
的onRoomStateChanged
回调。
onTokenWillExpire
回调。
Token 过期后,用户将被移出房间,并收到
ERROR_CODE_INVALID_TOKEN
回调,错误码是ERROR_CODE_TOKEN_EXPIRED
。需要在申请新的 Token 之后调用JoinRoom
加入房间。
updateToken
接口,使用新的 Token,更新 Token。在您的应用服务端实现 Token 的生成,可以参考以下示例代码(包含了多种语言):
以 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 | 赋值规则详见参数赋值规范。 |
ExpireTime | Token 的有效时长,建议设置为 24 小时。不建议设置得过长或永不过期。 |
PrivPublishStream 和 PrivSubscribeStream | Token 的发布和订阅权限的有效时长,用于连麦鉴权。至少需要设置其中一个参数才能成功进房,可设置为 0。0 。 |
相关客户端接口:
功能 | Android | iOS | macOS | Windows | Linux | Web |
---|---|---|---|---|---|---|
使用 Token 进房 | joinRoom | joinRoom:userInfo:roomConfig: | joinRoom:userInfo:roomConfig: | joinRoom | joinRoom | joinRoom |
更新 Token | updateToken | updateToken: | updateToken: | updateToken | updateToken | updateToken |
在需要频繁切换房间的场景下,可以使用通配 Token,解决频繁请求 Token 可能造成的进房延误和 Token 服务端压力过大等问题。同一用户使用通配 Token 可以加入不同的 RTC 房间。
roomID
参数设置为 "*"
。userID
不可重复。在开发和测试阶段,为快速验证业务逻辑,你可以在 RTC 控制台上生成临时 Token,无需在应用服务端部署 Token 生成服务。
临时 Token 有效期仅为 7 天且安全性低, 仅适用于测试阶段,严禁用于生产环境。项目正式上线前,请务必切换为由你应用服务端生成的正式 Token。
获取方式:前往 RTC 控制台 > 应用管理,选择您的应用,在操作栏单击临时Token。
常见问题参看Token 使用常见问题。