获取Token

更新时间: 2021/03/28 14:26:21

安全认证签名(Token)是 本地服务端录制 SDK 在加入房间时采用的一种鉴权方式。加入房间时,本地 Linux 服务器需要向网易云信服务端申请 Token;服务器生成 Token 后,再将其传给本地 Linux 服务器。

本文档为您介绍如何生成安全认证签名。

基本流程

本地服务端录制 SDK 需要使用 Token 才能加入房间。获取 Token 的基本流程如下:

  1. 本地 Linux 服务器调用接口 getRecordSdkUserChecksum,向云信服务器申请 Token。

  2. 请求成功,云信服务器会将 Token 返回给本地 Linux 服务器。

本地 Linux 服务器通过以上步骤获取 Token 之后,可以携带 Token 加入房间。

注意事项

  • 获取 Token 之前,请确认您已经创建了音视频房间,且房间中至少有一位成员。否则调用接口获取 Token 时会返回错误码 414。
  • 请在 Token 过期之前及时加入房间,若 Token 已过期,需要重新调用本接口获取新的 Token。
  • 本地服务端录制和音视频通话 2.0 通过不同的接口获取 Token,URL 及请求参数均不相同。录制 SDK 加入房间时请确保传参中的 Token 是通过 getRecordSdkUserChecksum 获取的 Record Token。

API 参考

请求 Header 的相关说明请参考服务端 API 请求结构

注意: getToken 接口的 Content-Type 为 application/x-www-form-urlencoded,服务端其他 API 接口的 Content-Type 为 application/json。

POST https://api.netease.im/nimserver/nrtc/getRecordSdkUserChecksum.action HTTP/1.1
Content-Type:application/x-www-form-urlencoded;charset=utf-8

请求参数

参数名称 类型 是否必选 示例值 描述
channelName String 必选 abc 绑定的房间名称。
type int 必选 1 请设置为 1。
uid Long 必选 123456 用户 ID。
expireSeconds Long 可选 640 Token 有效期。在 Token 有效期内该用户可以多次使用该 Token。单位为秒,最长可设置为30 天。默认为 10 分钟。

请求示例

curl 请求示例如下:

curlcurl -X POST -H "AppKey: go9dnk********" -H "Nonce: 4tggger********" -H "CurTime: 1443592222" -H "CheckSum: 9e9db3b6c9ab********************" -H "Content-Type: application/x-www-form-urlencoded" -d 'channelName=xxxx&uid=123456&type=1' 'https://api.netease.im/nimserver/nrtc/getRecordSdkUserChecksum.action'

HttpClient 请求示例如下,此处以 JAVA 为例。

javaimport org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class Test {
    public static void main(String[] args) throws Exception{
        DefaultHttpClient httpClient = new DefaultHttpClient();
        String url = "https://api.netease.im/nimserver/nrtc/getRecordSdkUserChecksum.action";
        HttpPost httpPost = new HttpPost(url);

        String appKey = "94kid09c9ig9k1loimjg012345123456";
        String appSecret = "123456789012";
        String nonce =  "12345";
        String curTime = String.valueOf((new Date()).getTime() / 1000L);
        String checkSum = CheckSumBuilder.getCheckSum(appSecret, nonce ,curTime);//参考 计算CheckSum的java代码

        // 设置请求的header
        httpPost.addHeader("AppKey", appKey);
        httpPost.addHeader("Nonce", nonce);
        httpPost.addHeader("CurTime", curTime);
        httpPost.addHeader("CheckSum", checkSum);
        httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");

        // 设置请求的参数
        List<NameValuePair> nvps = new ArrayList<NameValuePair>();
        nvps.add(new BasicNameValuePair("uid", "123456"));
        nvps.add(new BasicNameValuePair("channelName", "ac"));
        nvps.add(new BasicNameValuePair("type", "1"));
        httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));

        // 执行请求
        HttpResponse response = httpClient.execute(httpPost);

        // 打印执行结果
        System.out.println(EntityUtils.toString(response.getEntity(), "utf-8"));
    }
}

返回参数

参数名称 类型 示例值 描述
code Number 200 状态码。200 表示成功调用。403 表示未开通音视频通话2.0 或本地服务端录制功能。 414 表示参数错误。
cid Number 123 房间 ID。
checksum String xxxxx 服务端返回的 Token。本地服务端录制 SDK 加入房间时,请在 joinChannel 的 token 字段中传入此值。

返回示例

JSON格式的返回示例如下:

json"Content-Type": "application/json; charset=utf-8"
{
   "code":200,
   "cid":123,
   "checksum":"xxxxx"  //获取到的Token,本地服务端录制 SDK 加入房间时,请在 joinChannel 的 token 字段中传入此值。
}
此文档是否对你有帮助?
有帮助
去反馈
  • 基本流程
  • 注意事项
  • API 参考
  • 请求参数
  • 请求示例
  • 返回参数
  • 返回示例