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

如何通过API生成Agora视频通话Web SDK的临时Token?

生成Agora视频通话Web SDK临时Token的API实现方案

核心前提

临时Token必须在服务端生成,绝对不能在前端浏览器中处理——App Certificate是敏感密钥,一旦泄露会导致频道被恶意入侵,所有Token生成逻辑必须隔离在服务端。

步骤1:准备必要信息

  • 从Agora开发者控制台获取你的App ID和App Certificate
  • 确定目标频道名(channelName)
  • 设置Token有效期(单位:秒,例如3600表示1小时)

步骤2:用Agora Server SDK生成Token(以Node.js为例)

Agora官方提供了多语言Server SDK,以下是Node.js的实现示例:

  1. 安装依赖:
npm install agora-access-token
  1. 基础Token生成代码:
const { RtcTokenBuilder, RtcRole } = require('agora-access-token');

// 替换为你的实际配置
const appID = 'YOUR_APP_ID';
const appCertificate = 'YOUR_APP_CERTIFICATE';
const channelName = 'TARGET_CHANNEL_NAME';
const uid = 0; // 0表示允许任意UID加入,也可指定具体数值型UID
const expireTime = 3600; // 有效期1小时

// 计算过期时间戳
const currentTs = Math.floor(Date.now() / 1000);
const privilegeExpiredTs = currentTs + expireTime;

// 生成Token:PUBLISHER权限允许发布/订阅流,SUBSCRIBER仅允许订阅
const token = RtcTokenBuilder.buildTokenWithUid(
  appID,
  appCertificate,
  channelName,
  uid,
  RtcRole.PUBLISHER,
  privilegeExpiredTs
);

console.log('生成的临时Token:', token);

步骤3:封装成API接口(Node.js Express示例)

如果需要对外提供Token生成的API服务,可以封装为HTTP接口:

const express = require('express');
const { RtcTokenBuilder, RtcRole } = require('agora-access-token');
const app = express();
const port = 3000;

// 配置跨域(根据实际业务场景调整)
app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');
  next();
});

// Token生成接口
app.get('/generate-rtc-token', (req, res) => {
  const { channelName, uid = 0, expireTime = 3600 } = req.query;
  const appID = 'YOUR_APP_ID';
  const appCertificate = 'YOUR_APP_CERTIFICATE';

  // 参数校验
  if (!channelName) {
    return res.status(400).json({ error: 'channelName 参数为必填项' });
  }

  const currentTs = Math.floor(Date.now() / 1000);
  const privilegeExpiredTs = currentTs + parseInt(expireTime);
  const token = RtcTokenBuilder.buildTokenWithUid(
    appID,
    appCertificate,
    channelName,
    parseInt(uid),
    RtcRole.PUBLISHER,
    privilegeExpiredTs
  );

  res.json({
    token,
    channelName,
    expireTime: parseInt(expireTime),
    expiredAt: privilegeExpiredTs
  });
});

app.listen(port, () => {
  console.log(`Token生成服务运行在端口 ${port}`);
});

步骤4:前端调用API获取Token

前端通过HTTP请求拿到Token后,即可传入Agora Web SDK完成频道加入:

// Agora Web SDK 4.x 示例
import AgoraRTC from 'agora-rtc-sdk-ng';

async function joinVideoChannel() {
  const channelName = 'test-meeting';
  // 调用自己的服务端API获取Token
  const response = await fetch(`http://your-server-domain/generate-rtc-token?channelName=${channelName}`);
  const result = await response.json();
  const token = result.token;

  // 初始化客户端并加入频道
  const client = AgoraRTC.createClient({ mode: 'rtc', codec: 'vp8' });
  await client.join('YOUR_APP_ID', channelName, token, null);

  // 后续处理本地流发布、远端流订阅等逻辑
}

关键注意事项

  • 禁止在前端代码中硬编码App Certificate,所有Token生成逻辑必须放在服务端
  • 可根据业务需求调整角色权限:RtcRole.PUBLISHER(可发布订阅)/RtcRole.SUBSCRIBER(仅订阅)
  • 有效期设置需平衡安全性与用户体验,避免过长(易泄露)或过短(需频繁刷新)
  • 如果需要绑定用户账号而非UID,可使用buildTokenWithUserAccount方法替代buildTokenWithUid

内容的提问来源于stack exchange,提问作者Tushar Khanna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 08:15:37