跳到主要内容

账号体系

账号分配方式#

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

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

Token鉴权流程#

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

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

Token的鉴权流程流程如下:

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;    }}