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");