为保证通话安全性,在使用音视频通话前,您需要对通话应用添加签名,用于客户端与流媒体服务端之间的安全性校验。
安全加签使用步骤
客户端每次通话前,向业务服务端发送请求获取签名,然后传入流媒体 SDK,并使用此签名与流媒体服务端完成安全性校验。完整的流程如下:
对应用进行安全加签的步骤如下:
在 mPaaS 控制台上获取应用及音视频通话相关参数。加签代码中需要使用到 mPaaS 应用和音视频通话的相关参数,请在加签前获取 appId、workspaceId、bizName 及 key。
在您的 mPaaS 账号已登录的情况下,在业务服务端上按照规则使用密钥生成签名。
操作步骤
获取 appId 及 workspaceId。
登录 mPaaS 控制台,进入目标应用。
单击 下载 iOS 代码配置 或 下载 Android 代码配置,打开对应客户端的 代码配置 面板,在右侧 代码配置 面板中获取 appId 及 workspaceId。
获取应用的 bizName 及 key。bizName 为视频应用业务 ID,key 为应用的私钥。
登录 mPaaS 控制台,进入目标应用,单击 音视频通话 > 通话应用管理。
在通话应用管理页面获取 bizName。
单击 查看密钥 获取 key。
在业务服务端生成签名。
按照以下顺序将相关参数拼接成待加密的字符串。
String encryptStr = bizName + appId + workspaceId + uid + expireTime;
其中:
appId
、workspaceId
及bizName
为您在 mPaaS 控制台获取的实际值。uid
和expireTime
为用户自定义参数。uid
为业务用户 ID,由业务方传入。expireTime
为签名过期时间,单位为毫秒,由当前时间+有效期组成,示例如下。说明目前 uid 只支持英文字母、数字、下划线的组合,且长度不超过 128 个字符。
long expire = 5 * 60 * 1000L;// 签名有效期(ms),比如 5 分钟 long expireTime = System.currentTimeMillis() + expire;// 签名生效截止时间: 当前时间 + 有效期
使用 RSA 加密生成签名,其中 key 为您在 mPaaS 控制台获取的密钥。
String sign = EncryptUtils.encryptByPrivate(encryptStr, EncryptUtils.getPrivateKey(key));// 加密字符串 //RSA 私钥加密 public static String encryptByPrivate(String content, PrivateKey privateKey) throws Exception { Cipher cipher = Cipher.getInstance("RSA"); cipher.init(Cipher.ENCRYPT_MODE, privateKey); return Base64.getEncoder().encodeToString(cipher.doFinal(content.getBytes("UTF-8"))); } //将 Base64 编码后的 RSA 私钥字符串转成 PrivateKey 实例 public static PrivateKey getPrivateKey(String privateKey) throws Exception { byte[] keyBytes = Base64.getDecoder().decode(privateKey); PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance("RSA"); return keyFactory.generatePrivate(keySpec); }