為保證通話安全性,在使用音視頻通話前,您需要對通話應用添加簽名,用于客戶端與流媒體服務端之間的安全性校驗。
安全加簽使用步驟
客戶端每次通話前,向業務服務端發送請求獲取簽名,然后傳入流媒體 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); }