logo
当前页

使用 Token 鉴权

简介

为了避免未经授权的服务访问或操作,ZEGO 使用 Token 来验证用户身份、控制及验证用户权限,因此您需要在登录房间时传入 Token。

实现流程

使用 Token 鉴权时,需要开发者先生成 Token,ZEGO 服务端对带着 Token 的用户进行校验。

以使用 Token 判断用户是否能登录房间为例介绍使用流程,如下图:

  1. 开发者客户端发起申请 Token 的请求。
  2. 在开发者的服务端上生成 Token,并返回给开发者客户端。
  3. 开发者客户端携带申请到的 Token 和 roomID 信息,通过 setCustomToken 接口传入 SDK。
  4. ZEGO SDK 会自动将 Token 发送到 ZEGO 服务端进行校验。
  5. ZEGO 服务端会将校验结果返回给 ZEGO SDK。
  6. ZEGO SDK 再将校验的结果直接返回给开发者客户端,没有权限的客户端将登录失败。
注意
roomID 即 callID。

获取 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:

Warning

出于业务安全考虑,您必须在应用服务器上生成 Token,否则,存在 ServerSecret 被盗取的风险。

语言支持版本关键函数代码库地址基础鉴权 Token
GoGo 1.14.15 或以上版本GenerateToken04
C++C++ 11 或以上版本GenerateToken04
JavaJava 1.8 或以上版本generateToken04
PythonPython 3.6.8 或以上版本generate_token04
PHPPHP 5.6 或以上版本generateToken04
.NET.NET Framework 3.5 或以上版本GenerateToken04
Node.jsNode.js 8 或以上版本generateToken04

如何获取临时 Token

为方便开发者调试,ZEGO 控制台 提供生成临时 Token 的功能,开发者可直接获取临时 Token 来使用,详情请参考 控制台 - 开发辅助。但是在开发者自己的线上环境中,一定要通过自己的服务端生成 Token。

使用 Token

如果你需要使用 Token 而不是 Appsign,可以调用 newInstanceWithToken 完成初始化。

Untitled
ZegoUIKitPrebuiltCallFragment.newInstanceWithToken(appID, appToken, userID, userName, callID, config);
1
Copied!

如果您使用通话邀请功能,请调用 initWithToken 方法完成初始化。

Untitled
ZegoUIKitPrebuiltCallService.initWithToken(getApplication(), appID, token, userID, userName, callInvitationConfig);
1
Copied!

更新 Token

在某些极端情况下,上述提到的 Token 获取方法可能不可靠。为确保 Token 的可靠性,您可以进行以下修改:

  1. Token 的有效期应尽可能设置得较长,例如 3 天。

  2. 监听 onTokenWillExpire 回调,并调用 renewToken 更新为新的 Token。

    Untitled
    ZegoUIKit.setTokenWillExpireListener(new ZegoUIKitTokenExpireListener() {
        @Override
        public void onTokenWillExpire(int second) {
            // ...
            ZegoUIKit.renewToken(token);
        }
    });
    
    1
    Copied!
  3. 在适当的时间续订 Token ,例如,当 App 进入前台时。

    Untitled
    // ...
     ZegoUIKit.renewToken(token)
    
    1
    Copied!

关于美颜插件

若您使用互动直播 UIKit 的美颜插件,如不想使用 AppSign,您也可以使用 Licence 许可证进行初始化,实现方式如下:

Warning
  • 已联系 ZEGO 技术支持,开通 UIKit 美颜相关功能,并参考 AI 美颜-在线鉴权 文档,获取 License 进行在线鉴权。
  • 请确保在获取到您的 Licence 许可证后,调用 BeautyPluginLicenseSetter.setLicence(context, license); 初始化美颜服务。
Untitled
ZegoUIKit.getBeautyPlugin().setLicenceProvider(new LicenceProvider() {
    @Override
    public void onLicenseRequired(BeautyPluginLicenseSetter setter) {
        //.. 向您的服务器请求许可证的 HTTP 请求
        httpRequest.enqueue(new CallBack(){
            //
            setter.setLicence(context, license);
        });
    }
});
1
Copied!