使用 Token 鉴权
简介
为了避免未经授权的服务访问或操作,ZEGO 使用 Token 来验证用户身份、控制及验证用户权限,因此您需要在登录房间时传入 Token。
实现流程
使用 Token 鉴权时,需要开发者先生成 Token,ZEGO 服务端对带着 Token 的用户进行校验。
以使用 Token 判断用户是否能登录房间为例介绍使用流程,如下图:

- 开发者客户端发起申请 Token 的请求。
- 在开发者的服务端上生成 Token,并返回给开发者客户端。
- 开发者客户端携带申请到的 Token 和 roomID 信息,通过 setCustomToken 接口传入 SDK。
- ZEGO SDK 会自动将 Token 发送到 ZEGO 服务端进行校验。
- ZEGO 服务端会将校验结果返回给 ZEGO SDK。
- ZEGO SDK 再将校验的结果直接返回给开发者客户端,没有权限的客户端将登录失败。
获取 AppID 和 ServerSecret
生成 Token 需要开发者项目的唯一标识 AppID 和密钥 ServerSecret,请参考 控制台 - 项目管理 中的 “项目信息”获取。
在您的服务器上生成 Token
开发者获得项目的 AppID 和 ServerSecret 信息后,根据实际业务需求,即可在自己的服务端生成 Token。开发者客户端向开发者服务端发送申请 Token 请求,由开发者服务端生成 Token 后返回给到对应客户端。
ZEGO 在 GitHub/Gitee 提供了一个开源的 zego_server_assistant 插件,支持使用 Go、C++、Java、Objective-C、Python、PHP、.NET、Node.js 语言生成 Token:
出于业务安全考虑,您必须在应用服务器上生成 Token,否则,存在 ServerSecret 被盗取的风险。
语言 | 支持版本 | 关键函数 | 代码库地址 | 基础鉴权 Token |
---|---|---|---|---|
Go | Go 1.14.15 或以上版本 | GenerateToken04 | ||
C++ | C++ 11 或以上版本 | GenerateToken04 | ||
Java | Java 1.8 或以上版本 | generateToken04 | ||
Python | Python 3.6.8 或以上版本 | generate_token04 | ||
PHP | PHP 5.6 或以上版本 | generateToken04 | ||
.NET | .NET Framework 3.5 或以上版本 | GenerateToken04 | ||
Node.js | Node.js 8 或以上版本 | generateToken04 |
如何获取临时 Token
为方便开发者调试,ZEGO 控制台 提供生成临时 Token 的功能,开发者可直接获取临时 Token 来使用,详情请参考 控制台 - 开发辅助。但是在开发者自己的线上环境中,一定要通过自己的服务端生成 Token。
使用 Token
在调用初始化接口 init
传入您生成的 Token 。
import { ZegoUIKitPrebuiltCall } from '@zegocloud/zego-uikit-prebuilt-call-mini-program';
const appID = 0; // 您从控制台获取的 AppID
const server = ""; // 您从控制台获取的 Server 地址
const token = ""; // 您从服务端生成的 Token
const userID = "user1"; // userID,需用户自己定义,保证全局唯一,建议设置为业务系统中的用户唯一标识
const userName = "user1_name"; // userName 用户名
onMounted(() => {
ZegoUIKitPrebuiltCall.init(appID, server, userID, userName, token);
})
更新 Token
在某些极端情况下,上述提到的 Token 获取方法可能不可靠。为确保 Token 的可靠性,您可以进行以下修改:
-
Token 的有效期应尽可能设置得较长,例如 3 天。
-
监听
onTokenWillExpire
回调,并调用renewToken
更新为新的 Token。Untitled// 监听 `onTokenWillExpire` 回调 ZegoUIKitPrebuiltCall.addUIKitListener(LISTENER_ID, { onTokenWillExpire(roomID) { console.log('===demo onTokenWillExpire', roomID); // 重新获取token token = generatePrebuiltTokenTest(APPID, SERVER_SECRET, userID); // 刷新内部token ZegoUIKitPrebuiltCall.renewToken(token, roomID); }, })
1 -
在适当的时间续订 Token ,例如,当 App 进入前台时。
Untitled// ... ZegoUIKitPrebuiltCall.renewToken(token)
1