iOS

# token流程介绍

鉴权是指用户在接入视频能力平台前,对其进行身份校验。本文展示如何在服务端部署一个Token生成器,以及如何搭建一个使用 Token 鉴权的客户端。

# 鉴权原理

# 方案一 对接jrtcAuthServer生成Token

下图展示了鉴权的基本流程

客户端通过 安全的业务接口 向服务端申请接入视频平台的Token,其有效期最大为24小时,默认1小时。Token包含以下信息:

  • 应用接入 AppKey
  • 房间号(可选)
  • 用户ID
  • 用户权限(可选)
  • Token过期时间(Unix时间戳)

当前暂不支持 设置Token 校验次数

# 方案二 服务端集成 jrtc-access-token 库

本方案提供生成 Token 算法库(jar包),这样可以去除 jrtcAuthServer 依赖。

# API 参考

# Token生成

Token 生成 API,以 java 为例:

    @Test
    public void testBuildToken() throws Exception {
        /// 业务管理平台Portal创建完应用后会提供
        String appSecret = "test";
        /// 同上
        String appKey = "05c97ce0d0a84d2592334093";
        /// 用户ID
        String userId = "zhangsan";
        /// 房间号
        String roomId = "123456";
        
        JrtcAccessToken token = new JrtcAccessToken();
        /// 盐值
        token.setNonce((byte) 0xFF);
        token.setAppKey(appKey);
        token.setUserId(userId);
        token.setRoomId(roomId);
        token.setExpiredAt(0);

        String ret = JrtcTokenBuilder.build(appSecret, token);
        log.info(ret);

        Assert.assertEquals("02ff00007f00000000k6W0CUk/CQ3lneWy+faSu0PUpuLwvgDhbqs7d2QyTis=", ret);
        // 0 0 FF 0000 7F 00000000 rNYaXVTvtjhQ1LAXUqenMYRUBC9h7CXuEhZygkrbWGQ=
        //
        ret = JrtcTokenBuilder.build(appSecret, token);

        token.setNonce((byte) 0x00);
        token.setEnableLogin(false);
        token.setEnableCreateRoom(false);
        token.setEnableJoinRoom(false);
        token.setEnableSendAudio(false);
        token.setEnableSendVideo(false);
        token.setEnableRecvAudio(false);
        token.setEnableRecvVideo(false);
        ret = JrtcTokenBuilder.build(appSecret, token);
        log.info(ret);
        // 0 0 00 0000 00 00000000 XNUHyd/4rERNOCn301sEPu4FOF6gDw9nCxdNsBnhxg4=
        Assert.assertEquals("020000000000000000lUKLw/LYrDYn4a/ZUnTF99CMEKnNEs+qfbQKanenE/k=", ret);
    }

参数介绍

参数名称 必选 类型 描述
version String 默认0, 当前固定为0
type String 0 - 房间Token1 - 消息Token2 - 房间&消息Token
appKey String 应用ID,20,在Juphoon平台创建应用时生成
userId String 用户ID,1~64
roomId String 房间ID,1~64,type=1时必选
expireAt Long 有效期,UNIX时间戳, 单位秒,最长不超过24h
reuseable Boolean 是否可以重复使用, 默认 truetrue - 在有效期内重复使用false - 在有效期内只能使用一次
enableCreateRoom Boolean 权限, 是否可以创建房间, 默认 true
enableJoinRoom Boolean 权限, 是否可以加入房间, 默认 true
enableSendAudio Boolean 权限, 是否可以发送音频, 默认 true
enableSendVideo Boolean 权限, 是否可以发送视频, 默认 true
enableRecvAudio Boolean 权限, 是否可以接收音频, 默认 true
enableRecvVideo Boolean 权限, 是否可以接收视频, 默认 true
enableLogin Boolean 权限, 是否可以登录Signal, 默认 true

# 终端集成

注:Token鉴权 要求SDK或者插件版本以及服务器版本为R22C02。

其中 tokenType 参数介绍:如果使用 Juphone Token 鉴权平台则填写固定字符串 'jrtc_access",如果使用自己Token 鉴权平台对接Juphone,则填写对接时定义的 tokenType 。

示例代码如下:

# Android

# SDK集成

JRTCClientLoginParam param = new JRTCClientLoginParam();
//设置token
param.setToken("02ff00007f00000000k6W0CUk/CQ3lneWy+faSu0PUpuLwvgDhbqs7d2QyTis=");
//tokenType由Juphoon平台提供
param.setTokenType("jrtc_access");
//...设置其他登录参数...
client.login("userId", "password", param);

# 访客插件集成

JCCGuestConfig config = new JCCGuestConfig();
//设置token
config.setToken("02ff00007f00000000k6W0CUk/CQ3lneWy+faSu0PUpuLwvgDhbqs7d2QyTis="); 
//tokenType由Juphoon平台提供
config.setTokenType("jrtc_access");
//...设置其他登录参数...
JCCGuestManager.getInstance().login(context, config);

# IOS

# SDK集成

JRTCClientLoginParam *param = [[JRTCClientLoginParam alloc] init];
//设置token
param.token = @"02ff00007f00000000k6W0CUk/CQ3lneWy+faSu0PUpuLwvgDhbqs7d2QyTis=";
param.tokenType = @"jrtc_access";
//...设置其他登录参数...
[client login:@"userId" password:@"password" loginParam:param];

# 访客插件集成

JCCGuestConfig *config = [[JCCGuestConfig alloc] init];
//设置token
config.token = @"appkey";
config.tokenType = @"jrtc_access";
//...设置其他登录参数...
[JCCGuestManager.shared login:config];

# Windows-Java & UOS-Java

# SDK集成

JRTCClientLoginParam param = new JRTCClientLoginParam();
//设置token
param.setToken("02ff00007f00000000k6W0CUk/CQ3lneWy+faSu0PUpuLwvgDhbqs7d2QyTis=");
param.setTokenType("jrtc_access");
//...设置其他登录参数...
client.login("userId", "password", param);

# 访客&座席&多方插件集成

//设置token
webPlugin.Login("userId", "displayname", "password", "server", "token", "jrtc_access");