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