用户鉴权

  • HarmonyOS

更新时间不可用

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

基于不同的传输连接,RTM SDK 提供的功能可以被划分为两种服务类型: MESSAGE 服务和 STREAM 服务。这两种服务使用的 Token 是不同的,更新 Token 的方法也不同。其中:

  • MESSAGE 服务:使用 RTM 实例下的 renewToken() 方法更新 token,为 Message Channel、User Channel、Presence、Storage、Lock等特性提供鉴权服务。
  • STREAM 服务: 使用 streamChannel 实例下的renewToken() 方法更新 Token,为 Stream Channel、Topic 等功能特性提供鉴权服务。

这两种服务都会通过 token 事件返回 Token 即将过期通知。你可以通过监听此事件实现 Token 自动续期的业务逻辑。Token 的有效期最长为 24 小时,声网推荐你在 Token 过期前更新 Token。本文介绍如何更新 Token。

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

renewToken

接口描述

为保证及时更新 Token,声网推荐你监听 token 回调,详见事件监听。成功添加事件监听后,当 Token 还有 30 秒过期时,SDK 会触发 token 回调,提醒用户及时更新。

  • 通过调用 rtmClient.renewToken(token: string) 为 MESSAGE 服务更新 Token。
  • 通过调用 streamChannel.renewToken(token: string) 为 STREAM 服务更新 Token。

接口方法

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

TypeScript
async renewToken(token: string): Promise<RenewTokenResponse>
参数类型是否必填默认值描述
tokenstring必填-

根据使用的服务类型,在该参数中填入对应 Token。

  • MESSAGE 服务:新生成的 RTM Token。
  • STREAM 服务:新生成的 RTC Token。
表格内容超出当前宽度,可横向滚动查看更多列。

基本用法

TypeScript
import { RtmClient, RtmError } from '@shengwang/rtm-full';
import type { TokenEvent } from '@shengwang/rtm-full';

// 定义获取 token 函数
async function fetchToken(channelName?: string): Promise<string> {
  // 向 Token Provider 请求 Token
  // ...
  return 'your_token_here';
}

// 监听 token 事件,更新 Token
rtmClient.addEventListener('token', async (event: object) => {
  const tokenEvent = event as TokenEvent;
  const token = await fetchToken();
  try {
    await rtmClient.renewToken(token);
    console.log('MESSAGE service token renewed successfully');
  } catch (error) {
    if (error instanceof RtmError) {
      console.error('Failed to renew MESSAGE token:', error.errorCode, error.reason);
    }
  }
});

返回值

该方法返回一个 Promise,成功时 resolve 并返回 RenewTokenResponse 对象,失败时 reject 并抛出 RtmError 异常。

RenewTokenResponse 数据结构如下:

属性类型描述
timestampnumber操作的时间戳(保留字段,供未来使用)。
表格内容超出当前宽度,可横向滚动查看更多列。