如何通过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的实现示例:
- 安装依赖:
npm install agora-access-token
- 基础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
相关产品推荐
相关产品推荐

