You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Agora SDK实现屏幕共享时出现NO_AUTHORIZED认证错误如何解决

Agora SDK 3.x 屏幕共享 NO_AUTHORIZED 错误修复方案

错误根因

Join failed: NO_AUTHORIZED 是声网Web SDK 3.x的鉴权失败错误,由屏幕共享独立Client的鉴权参数不匹配导致,具体触发原因和修复方案如下:

  • Token与UID绑定校验失败
    你当前复用了主视频通话的Token用于屏幕共享的独立Client,存在两个问题:
    1. 如果主通话Token生成时绑定了指定UID,屏幕共享Client调用join方法时传入null作为UID参数,会直接触发鉴权失败
    2. 同一Token不可同时用于两个不同Client实例加入同一频道,会触发互踢或鉴权失败
      修复方案:为屏幕共享Client单独生成专属Token,生成时绑定一个和主通话UID不重复的独立UID,调用join方法时第三个参数传入该绑定UID,不要传null
  • AppID不匹配
    检查shareClient.init传入的AppID,和生成屏幕共享Token时使用的AppID是否完全一致,大小写、特殊字符不能有差异。如果是临时调试,可以先将声网项目的鉴权模式切换为仅AppID模式,验证功能逻辑是否正常,排除Token生成逻辑错误
  • 频道名不匹配
    确认join方法传入的频道名,和生成屏幕共享Token时填入的频道名完全一致,注意空格、大小写、特殊字符的区别

修正后代码示例

async shareScreen() {
  this.shareClient = AgoraRTC.createClient({
    mode: 'rtc',
    codec: 'vp8'
  })

  // 此处AppID需和生成屏幕共享Token的AppID完全一致
  this.shareClient.init('你的项目AppID', () => {
    // 第一个参数填屏幕共享专属Token,第三个参数填和Token绑定的独立UID
    this.shareClient.join('屏幕共享专属有效Token', '和主通话一致的频道名', 屏幕共享独立UID, (uid) => {
      const streamSpec = {
        streamID: uid,
        audio: false,
        video: false,
        screen: true
      }
      if (isFirefox()) {
        streamSpec.mediaSource = 'window';
      } else if (!isCompatibleChrome()) {
        streamSpec.extensionId = 'minllpmhdgpndnkomcoccfekfegnlikg';
      }
      this.shareScreenStream = AgoraRTC.createStream(streamSpec);
      // 初始化流
      this.shareScreenStream.init(() => {
        this.shareScreenStream.play('renderer');
        this.shareClient.publish(this.shareScreenStream);

      }, function(err) {
        console.log(err);
      });

    }, function(err) {
      console.log(err);
    })
  });
}

额外排查提示

如果调整后仍报错,可以在Token生成服务端增加日志,确认生成Token时传入的AppID、频道名、UID三个参数,和客户端调用join时传入的三个参数完全匹配,90%以上的NO_AUTHORIZED错误都是参数不匹配导致的。

内容的提问来源于stack exchange,提问作者Mhd Omar Bahra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 11:45:03