跳到主要内容

账号体系

账号分配方式

KRTC提供两种账号使用方式,两种方式可以同时使用:

分配方式描述适用场景
固定号码段平台分配一段固定的号码给用户,调用方自行分配并管理号码号码与固定用户绑定
匿名登录平台自动分配匿名号码给来注册的用户,用户登出后自动释放号码公开直播,观看方无需绑定固定号码

Token鉴权流程

KRTC使用基于签名算法校验机制,无需将用户的账号、密码同步到KRTC平台,保障了用户隐私的安全性。

调用方需根据下面给出的算法,在自己的业务服务器上生成AccessToken,并传递给客户端。

Token的鉴权流程流程如下:

安全建议

调试时可以直接在客户端使用算法生成Token,但正式上线时,为了避免AppSecret泄露引发安全问题,应在服务端生成Token。

Token生成规则

Token生成需要使用AppKey、AppSecret、UserId及超时时间。

匿名登录时,UserId填空字符串。

超时时间单位为秒,为避免用户服务器和KRTC平台时间存在误差,有效期不应设置过短,默认为24小时。

Token生成代码

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.util.Base64;

public class AccessToken {
private String version;
private String appId;
private String appSecret;

public AccessToken(String appId, String appSecret) {
this.version = "1";
this.appId = appId;
this.appSecret = appSecret;
}

public String build(String userId, int expire) throws InvalidKeyException, NoSuchAlgorithmException {
SecretKeySpec keySpec = new SecretKeySpec(this.appSecret.getBytes(), "HmacSHA256");
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(keySpec);
String salt = String.valueOf(new SecureRandom().nextInt(99999999));
String expireTs = String.valueOf(System.currentTimeMillis() / 1000L + expire);
Base64.Encoder encoder = Base64.getEncoder();
byte[] signature = mac.doFinal((this.appId + userId + salt + expireTs).getBytes());
String token = String.join(":", this.version, this.appId, salt, expireTs, encoder.encodeToString(signature));
System.out.println("token : " + token);
return token;
}
}