提交工单
咨询集成、功能及报价等问题
获取服务器 access_token,用于调用服务端 API 时进行鉴权。
请求方法:POST
请求地址:
服务环境 | 调用频率限制 | 请求地址 |
---|---|---|
国内正式环境 |
10 次/秒 |
https://roomkit-api.zego.im/auth/get_access_token |
传输协议:HTTPS
参数 | 类型 | 是否必选 | 示例 | 描述 |
---|---|---|---|---|
token |
String |
是 |
"CIE7hNPK6Y55DeUJBSDrInP" |
后台服务认证凭证。 |
secret_id |
Int |
是 |
12580 |
创建企业时,ZEGO 分配的 secret ID【登录 RoomKit 管理后台,在鉴权信息页面中获取】。 |
token 生成规则说明:
我们提供了 Postman Collection 帮助您调测,内含本参数的生成逻辑,您可参考 服务端 API 调测指南 使用 Postman 快速调试该接口。
tokenInfo = '{
"ver": 1,
"hash": "adfdkjakka1213aa",
"nonce": "1b9c42gh1k0ax19y",
"expired": 1531446463
}'
注意这里要先构造 JSON,再转成字符串。
token = base64(tokenInfo)
token 字段说明:
参数 | 类型 | 是否必选 | 描述 |
---|---|---|---|
ver |
Int |
是 |
版本号,默认填 1。 |
hash |
String |
是 |
|
nonce |
String |
是 |
随机串,8 bytes。 |
expired |
Int |
是 |
请求参数中的 token 的失效时间,Unix 时间戳,单位:秒,(例:time.now().unix()[当前时间戳]+3600[有效期])。 |
hash 字段说明:
参数 | 类型 | 是否必选 | 描述 |
---|---|---|---|
secret_id |
Int |
是 |
创建企业时,ZEGO 分配的 secret ID【登录 RoomKit 管理后台,在鉴权信息页面中获取】。 |
secret_key |
String |
是 |
创建企业时,ZEGO 分配的 secret key【登录 RoomKit 管理后台,在鉴权信息页面中获取】。 |
nonce |
String |
是 |
随机串,8 bytes。跟 token 中的 nounce 保持一致。 |
expired |
Int |
是 |
请求参数中的 token 失效时间,Unix 时间戳,单位:秒。跟 token 中的 expired 保持一致。 |
以下是 access_token 接口的请求示例。
{
"token" : "CIE7hNPK6Y55DeUJBSDrInP",
"secret_id": 12580
}
参数 | 类型 | 示例 | 描述 |
---|---|---|---|
ret |
Object |
- |
接口调用结果。 |
ret.code |
Int |
0 |
错误码。 |
ret.msg |
String |
"succeed" |
错误信息。 |
ret.version |
String |
"1.0.0" |
版本号。 |
data |
Object |
- |
接口调用返回数据。 |
data.access_token |
String |
"access_token_value" |
服务端返回的 access_token。 |
data.expires_in |
Int |
3600 |
access_token 过期时间,单位:秒。 |
以下是 access_token 接口的响应示例。
{
"ret": {
"code": 0,
"msg": "succeed",
"version": "1.0.0"
},
"data": {
"access_token": "access_token",
"expires_in": 7200
}
}
import base64
import time
import hashlib
import json
import requests
# secret_id 创建企业时,ZEGO 分配的 整型 secret ID
# secret_key 创建企业时,ZEGO 分配的 字符串长度为32的 secret key
def get_access_token(secret_id, secret_key):
nonce = 'asdasdss'
expire_second = int(time.mktime(time.localtime(time.time()))) + 3600
hashSrc = ("%d%s%s%d" % (secret_id, secret_key.lower(), nonce, expire_second))
hash = hashlib.md5(hashSrc.encode()).hexdigest()
tokeninfo1 = {"ver": 1, "hash": hash, "nonce": nonce, "expired": expire_second}
tokeninfo = json.dumps(tokeninfo1)
token = base64.b64encode(tokeninfo.encode()).decode()
url = 'https://roomkit-api.zego.im/auth/get_access_token'
data = {
"token": token,
"secret_id": secret_id
}
r = requests.post(url=url, json=data)
respondStr = r.content.decode()
access_token = json.loads(respondStr)["data"]["access_token"]
return access_token
import (
"bytes"
"crypto/md5"
"encoding/base64"
"encoding/json"
"errors"
"fmt"
"io/ioutil"
"net/http"
"strings"
"testing"
"time"
)
// secret_id 创建企业时,ZEGO 分配的 整型 secret ID
// secret_key 创建企业时,ZEGO 分配的 字符串长度为32的 secret key
func GetAccessToken(secretId int, secretKey string) (accessToken string, err error) {
nonce := "asdasdss"
expired := time.Now().Unix() + 3600
m := md5.New()
m.Write([]byte(fmt.Sprintf("%d%s%s%d", secretId, strings.ToLower(secretKey), nonce, expired)))
hash := fmt.Sprintf("%x", m.Sum(nil))
var tokenInfo struct{
Ver int `json:"ver"`
Hash string `json:"hash"`
Nonce string `json:"nonce"`
Expired int `json:"expired"`
}
tokenInfo.Hash = hash
tokenInfo.Expired = int(expired)
tokenInfo.Ver = 1
tokenInfo.Nonce = nonce
tokenInfoStr, _ := json.Marshal(tokenInfo)
var reqStruct struct{
SecretId int `json:"secret_id"`
Token string `json:"token"`
}
reqStruct.SecretId = secretId
reqStruct.Token = base64.StdEncoding.EncodeToString(tokenInfoStr)
reqBody, _ := json.Marshal(reqStruct)
req, err := http.NewRequest(http.MethodPost, "https://roomkit-api.zego.im/auth/get_access_token", bytes.NewBuffer(reqBody))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
var resp *http.Response
resp, err = client.Do(req)
if err != nil {
return
}
defer resp.Body.Close()
var respBody []byte
respBody, err = ioutil.ReadAll(resp.Body)
if err != nil {
return
}
var ret struct{
Ret struct{
Code int `json:"code"`
Msg string `json:"msg"`
Version string `json:"version"`
} `json:"ret"`
Data struct{
AccessToken string `json:"access_token"`
ExpiresIn int `json:"expires_in"`
}
}
err = json.Unmarshal(respBody, &ret)
if err != nil {
return
}
if ret.Ret.Code != 0 {
return "", errors.New(ret.Ret.Msg)
}
return ret.Data.AccessToken, nil
}
package demo;
import java.io.UnsupportedEncodingException;
import java.security.*;
import java.util.*;
import com.alibaba.fastjson.*;
public class tokenTest {
public static void main(String[] args) throws UnsupportedEncodingException {
long current_time = System.currentTimeMillis()/1000; //获取当前unix时间戳
long expired_time = current_time+3600; //过期unix时间戳,单位:秒
String secretId = "1000000"; // 创建企业时,ZEGO 分配的 整型 secret ID
String secretKey = "123456abcdefghijklmnopqrstuvwxyz"; // 创建企业时,ZEGO 分配的 字符串长度为32的 secret key
String nonce = "xxxxxxxxx"; //自定义的随机字符串
// 待加密信息
String originString = secretId + secretKey + nonce + Long.toString(expired_time);
//hash加密
String hashString = getMD5(originString);
//定义一个tokeninfo json
LinkedHashMap hashMap = new LinkedHashMap();
hashMap.put("ver",1);
hashMap.put("hash",hashString);
hashMap.put("nonce",nonce);
hashMap.put("expired",expired_time);
String tokeninfo= JSON.toJSONString(hashMap);
//Base64 加密
final Base64.Encoder encoder = Base64.getEncoder(); //加密
final byte[] textByte = tokeninfo.getBytes("UTF-8");
final String encodeToken = encoder.encodeToString(textByte);
System.out.println("--token--:"+encodeToken);
}
//生成MD5
public static String getMD5(String message) {
String md5 = "";
try {
MessageDigest md = MessageDigest.getInstance("MD5"); // 创建一个md5算法对象
byte[] messageByte = message.getBytes("UTF-8");
byte[] md5Byte = md.digest(messageByte); // 获得MD5字节数组,16*8=128位
md5 = bytesToHex(md5Byte); // 转换为16进制字符串
} catch (Exception e) {
System.out.println("erro md5 creat!!!!");
e.printStackTrace();
}
return md5;
}
// 二进制转十六进制
public static String bytesToHex(byte[] bytes) {
StringBuffer hexStr = new StringBuffer();
int num;
for (int i = 0; i < bytes.length; i++) {
num = bytes[i];
if(num < 0) {
num += 256;
}
if(num < 16){
hexStr.append("0");
}
hexStr.append(Integer.toHexString(num));
}
return hexStr.toString();
}
}
/**
* 最后,将生成的Token复制到以下curl -X POST替换掉其中的token,修改对应的secret_id,然后取请求得到正确的"access_token"
*
* */
// curl -X POST https://roomkit-api.zego.im/auth/get_access_token -d '{"secretId": 1000000,"token": encode_token}'
<?php
$current_time = time(); //获取当前时间
$expired_time = $current_time + 3600; //过期时间,单位:秒
$secretId = 1000000; // 创建企业时,ZEGO 分配的 整型 secret ID
$secretKey = "123456abcdefghijklmnopqrstuvwxyz"; // 创建企业时,ZEGO 分配的 字符串长度为32的 secret key
$nonce = "xxxxxxxxx"; //自定义的随机字符串
// 待加密信息
$origin = $secretId . $secretKey . $nonce . $expired_time;
//hash加密
$hash = md5($origin);
$token = [
'ver' => 1,
'hash' => $hash,
'nonce' => $nonce,
'expired' => $expired_time
];
//定义一个tokeninfo json
$token = json_encode($token);
//Base64 加密
$encode_token = base64_encode($token);
echo $encode_token;
/**
* 最后,将生成的Token复制到以下curl -X POST替换掉其中的token,修改对应的secret_id,然后取请求得到正确的"access_token"
*
* */
// curl -X POST https://roomkit-api.zego.im/auth/get_access_token -d '{"secretId": 1000000,"token": encode_token}'
?>
联系我们
文档反馈