用户鉴权

  • Web

更新时间不可用

鉴权是指在用户访问你的系统前,对其进行身份校验。用户在使用声网服务,如加入音视频通话或登录信令系统时,声网使用 Token 对其鉴权。

RTM 提供 Message Channel、User Channel 和 Stream Channel 三种频道类型,使用不同类型的频道,对应的 Token 类型也不同:

  • 使用 Message Channel 或 User Channel:只需在调用 login 方法登录 RTM 系统时,传入开通了 RTM 服务的 Token(以下简称 RTM Token)。
  • 使用 Stream Channel:在使用 RTM Token 鉴权的基础上,还需要在调用 join 方法加入 Stream Channel 时传入开通了 RTC 服务的 Token(以下简称 RTC Token)。

Token 的有效期最长为 24 小时,声网推荐你在 Token 过期前更新 Token。本文介绍如何更新 Token。

想要了解生成和使用 Token 的更多信息,可以查看:

renewToken

接口描述

调用 renewToken 方法更新 Token。

更新不同类型的 Token 时,需要填写的参数不同:

  • RTM Token:更新时只需填写 token 参数。
  • RTC Token:更新时需填写 token 和 channelName 参数

为保证及时更新 Token,声网推荐你监听 tokenPrivilegeWillExpire 回调,详见事件监听。成功添加事件监听后,当 RTM Token 还有 30 秒过期时,SDK 会触发 tokenPrivilegeWillExpire 回调,提醒用户 Token 即将过期。收到该回调时,你可以在服务端重新生成 RTM Token,然后调用 renewToken 方法,将新生成的 RTM Token 传给 SDK。

接口方法

你可以通过以下方式调用 renewToken 方法:

JavaScript
rtm.renewToken(token: string, options?: object): Promise<RenewTokenResponse>
参数类型是否必填默认值描述
tokenstring必填-新生成的 Token。
optionsobject选填-Token 更新选项。
表格内容超出当前宽度,可横向滚动查看更多列。

options 对象中包含以下属性:

属性类型是否必填默认值描述
channelNamestring选填-频道名称。更新 RTC Token 时必须填写。
表格内容超出当前宽度,可横向滚动查看更多列。

基本用法

示例 1:更新 RTM Token

JavaScript
rtmClient.addEventListener('tokenPrivilegeWillExpire', async (channelName) => {
    if(!channelName){
        // RTM Token 即将过期
        const newToken = "<Your new token>";
        await rtmClient.renewToken(newToken);
    }
});

示例 2:更新 RTC Token

JavaScript
rtmClient.addEventListener('tokenPrivilegeWillExpire', async (streamChannelName) => {
    if(streamChannelName){
        // RTC Token 即将过期。
        const newToken = "<Your new token>";
        await rtmClient.renewToken(newToken, {
            channelName: streamChannelName
        });
    }
});

返回值

如果方法调用成功,则返回一个 RenewTokenResponse 类型数据:

JavaScript
type RenewTokenResponse = {
    timestamp: number,              // 预留字段
}

如果方法调用失败,则返回一个 ErrorInfo 类型数据:

JavaScript
type ErrorInfo = {
    error: boolean;                     // 本次操作是否出错
    operation: string;                  // 本次操作的 API 名称
    errorCode: number;                  // 错误码
    reason: string;                     // 错误描述
}

你可以通过检索 errorCode 字段的错误码了解错误原因,并找到对应的解决方法。