常见通用问题

离线包(无论是预置还是下载)验签是否一定需要网络?

解答:不需要,离线包验签不依赖网络。

验签的时间点在什么时候?下载后解压的是自动验签还是在调用的时候才验签?

解答:验签过程在下载离线包之后,解压离线包之前。若验签不通过会导致加载离线包失败,转而跳转回退在线页面。

JSAPI startapp 接口打开新的离线包时,TitleBar 变成自动透明模式?

解答:需要传入 transparentTitle 参数控制 TitleBar 行为,可选参数包括:AUTO|YES|NO,详情请参考启动 参数文档

离线包验签的流程是什么样的?

解答:为了保证离线包的安全性,开发者可以开启离线包验签功能。该过程既保证了离线包内容的完整性,也保证了离线包来源的正确性。

  1. 首先配置私钥和公钥。将私钥配置在服务端,用于对离线包的签名;将公钥配置在客户端,用于对签名的验证。

  2. 在 mPaaS 控制台的实时发布中下载 amr 文件。若配置了签名私钥,下载的 amr 文件即可携带签名信息。该签名信息为私钥对离线包的 Hash 值加密后得到的密文。

  3. 客户端在拿到 amr 包并解压后,会使用在项目中预置的公钥进行签名的验证。解密步骤 2 中的密文得到一个 hash 值,同时本地计算离线包的 hash 值,判断两者是否相同,如果相同则通过验证。

    离线包
重要

虽然离线包验签过程可以保证离线包在传输和加载过程中不被篡改,但由于客户端的控制权完整掌握在用户手中,该机制并不能完全阻止在客户端上恶意破解和篡改 H5 逻辑的行为。因此,开发者需注意在前端上存在的各种潜在的安全风险。例如,权限控制一定需要在后端验证,秒杀、抢购等行为需要后端配合进行时间戳验证等。

什么是移动网关?移动网关的作用是什么?

移动网关 RPC 是移动开发平台(mPaaS)提供的连接移动客户端与服务端的组件产品。该组件简化了移动端与服务端的数据协议和通讯协议,能够显著提升开发效率和网络通讯效率。移动网关是连接移动客户端与服务端的桥梁,移动客户端通过网关来访问后台服务接口。更多内容请参考 移动网关简介

通过使用移动网关可以实现以下内容:

  • 通过动态代理的方式,封装客户端与服务端之间的通讯。

  • 如果服务端与客户端定义了一致的接口,可由服务端自动生成代码并导出给客户端使用。

  • 对 RpcException 进行统一的异常处理,弹对话框、Toast 消息框等。

  • 移动网关提供服务端 HTTP 服务签名验证功能,提高从网关到服务端的数据安全性。

  • 在网关控制台开启某一 API 分组的签名校验后,移动网关会对该分组里面的每一个 API 请求创建签名信息,签名使用的公私钥可在网关控制台创建。

  • 服务端读取签名字符串后,收到的请求进行本地签名进行计算,查看与收到的签名是否一致,以此来判断请求是否合法。

  • 对客户端到移动网关的请求进行验签,以验证调用者身份保证安全。网关验证,默认打开;如需关闭请在配置文件中设置。

网关验签的验签流程是什么?

为保证客户端请求不被篡改和伪造,RPC 请求拥有签名机制,RPC 模块会自动实现加签功能。基本的加签、验签过程如下:

  1. 将 requestBody 中的内容转换为字符串。

  2. 使用无线保镖安全模块,通过保存在加密图片(即无线保镖图片)中的加密密钥,对转化的字符串进行加签。

  3. 将加密后的签名放在请求中发给网关。

  4. 网关使用相同方式签名,校验两个签名是否相等。

离线包验签与网关验签的异同点分别是什么?

  • 相同点:

    • 离线包验签和网关验签的目的都是为了保证客户端的安全,保护内容不被篡改。

    • 离线包验签和网关验签都是对数据的校验。

  • 不同点:

    • 验证的产物不同:

      • 离线验签验证的是离线包在下载之后、解压之前是否被修改。

      • 网关验签验证的是 requestBody 是否被修改。

    • 签名方式不同:

      • 离线验签是由用户通过后台配置公钥以及私钥的方式签名。

      • 网关验签是通过无线保镖获取签名。

    • 验签失败的结果不同:

      • 离线包验签失败不会导致 H5 页面失效,页面数据只能通过网络加载,不影响正常使用。

      • 网关验签失败会导致向后台请求的数据后台校验失败或者前端获取到的数据解密失败时,APP 的页面数据不能正常展示,影响正常使用。

网关验签时客户端通过代码发起 PRC 调用,但未能拿到预期结果,在控制台产生的错误码代表什么含义?

错误码

说明

原因

7000

没有设置公钥

移动 APP 的无线保镖中无 appId 对应的密钥或网关无法获取 appId 对应的签名密钥。

7001

验签的参数不够

网关服务端验证签名不通过。

7002

验签失败

网关服务端验证签名不通过。

7003

验签时效性失败

API 请求入参 ts 时间戳超过系统设置的时间有效性,需要检查客户端时间是否为系统时间。

7007

验签缺少 ts 参数

API 请求缺少验签 ts 参数。

7014

验签缺少 sign 参数

API 请求缺少验签 sign 参数。一般情况下是客户端签名数据失败,导致缺失 sign 参数。请检查客户端无线保镖图片是否正确。

更多内容请参考 如何排查移动网关调用错误

在离线包验签中有网的情况下,离线包应用可以正常打开;关闭网络,离线包应用无法打开。该如何排查?

请参考 如何排查移动网关调用错误

在离线包验签中 H5 应用加载缓慢,该如何排查?

请参考 如何排查移动网关调用错误

RPC 请求异常,该如何排查?

如果通过 RPC 请求进行资源调用的过程中出现异常,请参考 无线保镖结果码说明 进行排查。