文档反馈
文档反馈

获取 NERTC Token

重要通知

网易云信新版文档中心现已正式上线!

音视频通话2.0互动直播2.0多人语音聊天室PK 直播等产品和场景方案已迁移至新版文档中心维护,欢迎体验!

安全认证签名(Token)是 App 用户在加入房间时采用的一种鉴权方式。用户加入房间或登录服务时,客户端需要向服务端申请 NERTC Token;服务器生成 NERTC Token 后,再将其传给客户端。

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

基本流程

安全模式下,需要使用 NERTC Token 才能加入房间。获取 NERTC Token 的基本流程如下:

  1. 客户端向应用服务器发起安全认证签名的请求。

    该步骤交互由开发者自行完成。

  2. 应用服务器调用接口 getToken,向云信服务器申请 NERTC Token。

    请求成功,云信服务器会将 NERTC Token 返回给应用服务器。

  3. 应用服务器将获取到的 NERTC Token 返回给客户端。

客户端通过以上步骤获取 NERTC Token 之后,可以携带 NERTC Token 加入房间。

API 参考

如果需要更新 NERTC Token 有效期,可以在该 Token 过期之前,重复使用同样的 uid 和 channelName 再次调用该接口,通过 expireAt 参数修改 Token 有效期。服务端不会返回新的 Token,但会更新此 Token 的有效期。

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

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

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

请求参数

参数名称 类型 是否必选 示例值 描述
uid Long 必选 123456 用户 ID。
channelName String 可选 abc 绑定的房间名称。未设置时,表示此 Token 不限房间,加入任何房间时均可使用。
repeatUse Boolean 可选 640 在 Token 有效期内该用户是否可以多次使用该 Token,默认为 true。
  • true:有效期内可多次使用。
  • false:有效期内只能使用一次。
expireAt int 可选 640 NERTC Token 的过期时间,过期后,该用户将无法通过此 Token 加入房间。
取值范围为 1~86400 秒,默认为 600 秒。

请求示例

curl请求示例如下:

curl -X POST -H "AppKey: go9dnk********" -H "Nonce: 4tggger********" -H "CurTime: 1443592222" -H "CheckSum: 9e9db3b6c9ab********************" -H "Content-Type: application/x-www-form-urlencoded" -d 'uid=123456' 'https://api.netease.im/nimserver/user/getToken.action'

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

import 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/user/getToken.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的计算方式请参考《服务端API-调用方式-请求结构》

        // 设置请求的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"));
        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 表示成功调用。
token String xxxxx 服务端返回的 Token。

返回示例

JSON格式的返回示例如下:

"Content-Type": "application/json; charset=utf-8"
{
   "code":200,
   "token":"xxxxx"  //安全认证模式下的签名。
}
×

反馈成功

非常感谢您的反馈,我们会继续努力做得更好。