接入管理是为第三方系统接入LarkXR平台时提供授权访问使用的,避免未经允许的第三方任意使用应用。也可进行多租户管理,多个客户托管到服务器上,单独授权安全访问,并发数,和接入凭证
appKey和appSecret用于租户URL加密分享,加密分享进入应用,或者应用一览的链接,有效期默认为 15 分钟。有效期是指根据 appKey和appSecret生成的签名参数的有效期,例如您复制生成的最终公开分享的 URL 地址,在15分钟之后就会过期,页面也将不能访问,这时只有通过重新计算签名参数来生成新的 URL 地址才能访问,若开启了一次性校验,生成的签名只能使用一次,再次使用时,即使没有到15分钟有效期,也无法继续使用,这样就充分保证了您页面的安全性。
默认设置了客户端凭证验证密钥,页面提示“权限不足”,表示您的访问被拒绝了。 如果想要打开页面,需要完成以下步骤:
- 添加应用时选择相应所属的接入凭证
- 记录接入管理中对应的appKey和appSecret
- 将appKey和appSecret和当前时间戳(long型数值)按字母序排序,然后进行SHA-1摘要签名,示例代码最后附上
- 将时间和加密后的签名分别命名为timestamp , signature
- 将appKey,timestamp, signature参数放入 URL 的 querystring 中。适用于进入应用接口(enterAppli、getEnterAppliURL),以及获取列表接口(getAppliList)切忌不要带上appSecret,否则密钥将泄露。
限制某租户并发数
例如某个租户托管应用到服务器上,服务器总并发数是根据系统授权定的,每个租户可以划分其中一部分授权数,需要完成以下步骤。
- 添加应用时选择相应所属的接入凭证
- 设置接入凭证的并发数,0表示无限制,数量不可超过系统总并发数。
- 所有在以上接入凭证下的应用,总并发数为以上设置的并发数,
adminKey和adminSecret用于接口安全调用
一部分接口,例如上传应用,修改应用等,需要安全调用,租户URL加密分享,实现方式相似,凭证15分钟之后就会过期,接口也将不能访问,这时只有通过重新计算签名参数来生成新的接口地址才能访问,这样就充分保证了接口调用的安全性
- 添加应用时选择相应所属的接入凭证
- 记录接入管理中对应的adminKey和adminSecret
- 将adminKey和adminSecret和当前时间戳(long型数值)按字母序排序,然后进行SHA-1摘要签名,示例代码最后附上
- 将时间和加密后的签名分别命名为timestamp , signature
- 将adminKey,timestamp, signature参数放入接口的header部分
java代码示例
public static String getSignature( String key, String secret, String timestamp){
String[] arr = new String[] { key, secret, timestamp };
// appKey、appSecret、timestamp三个参数进行字典序排序
Arrays.sort(arr);
StringBuilder sb = new StringBuilder();
//将三个参数字符串拼接成一个字符串
for (int i = 0; i < arr.length; i++) {
sb.append(arr[i]);
}
MessageDigest md;
String signature = null;
try {
md = MessageDigest.getInstance("SHA-1");
// 进行sha1摘要
byte[] digest = md.digest(sb.toString().getBytes());
signature = byteToStr(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return signature;
}
/**
* 将字节数组转换为十六进制字符串
*
* @param byteArray
* @return
*/
private static String byteToStr(byte[] byteArray) {
String strDigest = "";
for (int i = 0; i < byteArray.length; i++) {
strDigest += byteToHexStr(byteArray[i]);
}
return strDigest;
}
/**
* 将字节转换为十六进制字符串
*
* @param mByte
* @return
*/
private static String byteToHexStr(byte mByte) {
char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
char[] tempArr = new char[2];
tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
tempArr[1] = Digit[mByte & 0X0F];
String s = new String(tempArr);
return s;
}
PHP代码示例
// 排序
sort($arr, SORT_NATURAL);
$string = implode('', $arr);
$signature = sha1($string);