AI视觉
  • iOS
  • Android : Java
  • macOS
  • Windows
  • 产品简介
    • 概述
    • 发布日志
    • 计费说明
  • 下载
  • 体验 App
  • 快速开始
    • 跑通示例源码
    • 集成 SDK
    • 导入资源和模型
    • 在线鉴权
    • 实现图像处理
  • 基础功能
  • 最佳实践
  • 常见错误码
  • 客户端 API
  • 常见问题

在线鉴权

更新时间:2022-08-12 14:08

1 概览

本文将介绍如何获取鉴权文件、以及在线鉴权的实现方案。

1.1 鉴权文件

鉴权文件是软件使用权的凭证,包含以下特征:

  • 授权的时间
  • 授权的平台
  • 授权的 SDK 版本号
  • 授权的功能特性

1.2 在线鉴权

在线鉴权,是指用户的客户端访问 ZegoEffects 服务端,申请鉴权文件,进行网络验证的方式。从客户的角度来看可以通过在线鉴权快速,安全的通过网络验证,相比离线鉴权更可控更高效。

只有通过在线鉴权的客户端,才可以使用 ZegoEffects SDK 的 AI 功能。

2 鉴权实现原理

在线鉴权有两种方式,开发者可以通过自己的客户端,或自己的业务服务端访问 ZegoEffects 服务端,进行鉴权。

以下将介绍“向 ZegoEffects 服务端请求鉴权文件”的两种方式:通过客户端发送请求通过开发者服务端发送请求,对比如下:

类别 通过客户端发送请求 通过开发者服务端发送请求
实现步骤
  1. 客户端访问 ZegoEffects SDK,获取授权信息。
  2. ZegoEffects SDK 返回授权信息 AuthInfo 到客户端。
  3. 客户端通过 URL 携带 AppID 和 AuthInfo,向 ZegoEffects 服务端发送请求。
  4. ZegoEffects 服务端返回鉴权文件 License 到客户端。
  5. 导入资源和模型文件。
  6. 客户端传入获取到的 License 文件,创建 Effetcs 对象。
  7. 启用 AI 功能,开始图像处理。
  8.  
     
  1. 开发者服务端通过公共网关接口 URL,直接向 ZegoEffects 服务端发送请求。
  2. ZegoEffects 服务端返回鉴权文件 License 到开发者服务端。
  3. 开发者服务端下发 License 文件到客户端。(由开发者自行实现此业务功能)
  4. 导入资源和模型文件。
  5. 客户端传入获取到的 License 文件,创建 Effetcs 对象。
  6. 启用 AI 功能,开始图像处理。
  7.  
流程图
优势
  • 简单、容易接入。
  • 开发者无需搭建自己的业务后台,也无需自行管理鉴权文件。
  • 开发者自行搭建的业务后台,请求网络相对稳定;且由于服务器的位置相对稳定,命中 DNS 缓存的几率也会提高。
  • 开发者可通过自己的客户端,自行设置鉴权能力,管理鉴权文件,灵活性较高。
 

3 前提条件

开始实现鉴权之前,请在 ZEGO 控制台 创建项目,获取到了接入 ZegoEffects SDK 服务所需的 AppID 和 AppSign,详情请参考 控制台 - 项目管理 中的“项目信息”;并联系 ZEGO 技术支持,开通 ZegoEffects 相关套餐服务权限。

4 实现在线鉴权

4.1 向 ZegoEffects 服务端请求鉴权文件

以下分别介绍向 ZegoEffects 服务端请求鉴权文件的两种方式(二选一即可)。

方式一:通过客户端发送请求

  1. 客户端向 ZegoEffects SDK 申请授权。

    调用 getAuthInfo 接口,传入申请到的 AppSign,获取授权信息;ZegoEffects SDK 会返回授权信息 AuthInfo 到客户端。

    String encryptInfo = ZegoEffects.getAuthInfo(AppSign,context);
  2. 客户端向 ZegoEffects 服务端请求鉴权文件。

    客户端拿到 ZegoEffects SDK 返回的授权信息 AuthInfo 后,构造消息体,发送请求到 ZegoEffects 服务端,申请鉴权文件。消息体结构如下:

    • URL: https://aieffects-api.zego.im?Action=DescribeEffectsLicense

    • 请求方法: GET

    • 内容格式: JSON

    • 参数:

      参数名 类型 是否必须 说明
      AppId unsigned int 鉴权的唯一标识,请联系 ZEGO 商务人员获取。
      AuthInfo string 加密数据,由 SDK 产生的设备相关标识,通过 getAuthInfo 接口获得。
    • 消息示例:

      curl -X GET https://aieffects-api.zego.im?Action=DescribeEffectsLicense&AppId=xxxxxxxx&AuthInfo=xxxxxxxx

方式二:通过开发者服务端发送请求

开发者服务端通过公共网关接口,构造消息体,直接发送请求到 ZegoEffects 服务端,申请鉴权文件。消息体结构如下:

  • URL:https://aieffectscgi-api.zego.im?Action=CgiDescribeEffectsLicense

  • 请求方法: GET

  • 内容格式: JSON

  • 参数:

    参数名 类型 是否必须 说明
    AppId unsigned int 鉴权的唯一标识,请联系 ZEGO 商务人员获取。
    Signature string 签名,签名的生成请参考 服务端 API v2 - 调用方式 中的 “3 签名机制”。
    SignatureNonce string 随机数。
    SignatureVersion string 签名版本号,默认值为 2.0。
    Timestamp string Unix 时间戳,单位为秒。最多允许 10 分钟的误差。
  • 消息示例:

    curl -X GET https://aieffectscgi-api.zego.im?Action=CgiDescribeEffectsLicense&AppId=1&Signature=1302668869d55ab3f6114af4ba6e5580&SignatureNonce=3f15d0b95f6e480b&SignatureVersion=2.0&Timestamp=1635940599

4.2 ZegoEffects 服务端返回鉴权文件 License

服务端返回的消息示例如下:

{
    "Code": 0,
    "Message": <message>,
    "Data": {
        "License": <license>
    }
}
  • 如果请求获取鉴权文件成功,则返回字段 License 中携带信息即为鉴权文件的内容。
  • 若请求失败,则返回字段 Code 会返回错误码,Message 为对应的错误信息。

根据请求方式的不同,返回字段中的 Code 取值也不相同,具体解释如下:

参数名 类型 说明
Code
unsigned int32
通过客户端发送请求时,ZegoEffects 服务端返回的错误码,取值如下:

  • 0:成功。
  • 1:参数有误。
  • 2:Token 有误。
  • 3:证书无效,AppId 或者 Bundle ID 不正确。
  • 4:服务内部问题。
通过开发者服务端发送请求时,ZegoEffects 服务端返回的错误码,取值如下:

  • 0:成功。
  • 910001:参数有误。
  • 910002:证书无效。
  • 910003:服务内部问题。
  • 910004:授权信息有误。
Message
string
返回的提示信息,和 “Code” 的取值相对应。

  • 0:Success
  • 1:Invalid argument
  • 2:Invalid token
  • 3:No valid license
  • 4:Service unavailable
返回的提示信息,和 “Code” 的取值相对应。

  • 0:Success
  • 910001:Invalid argument
  • 910002:No valid license
  • 910003:Service unavailable
  • 910004:Auth error
Data
object
“Code” 为 0 时,返回鉴权文件的内容。

其中,返回字段 Data

参数名 类型 说明
License string 鉴权文件的内容。

4.3 传入鉴权文件创建对象

将获取的鉴权文件设置到 SDK 中,以激活相关功能模块。

开发者需要从返回字段 “Data” 的 “License” 字段中获取鉴权文件内容,然后调用 create 接口,并将鉴权文件传给 ZegoEffects SDK,创建 Effects 对象。

// 创建 Effects 对象前,请先调用 setResources 接口导入资源和模型
// 传入鉴权文件,创建 Effects 对象
String license = "xxxxxxx";
ZegoEffects mEffects = ZegoEffects.create(license, applicationContext);

在调用 create 接口创建 Effects 对象之前,需要先调用 setResources 接口导入资源和模型。

相关文档

客户端在线鉴权,通过 URL 地址访问到 ZegoEffects 服务端时,为什么有时会出现失败?