获取 Token
安全认证签名(Token)是 App 用户在加入房间时采用的一种鉴权方式。用户加入房间或登录服务时,客户端需要向服务端申请 Token;服务器生成 Token 后,再将其传给客户端。
本文档为您介绍如何生成安全认证签名。
基本流程
安全模式下,需要使用 Token 才能加入房间。获取 Token 的基本流程如下:
客户端向应用服务器发起安全认证签名的请求。
该步骤交互由开发者自行完成。
应用服务器调用接口 getToken,向云信服务器申请 Token。
请求成功,云信服务器会将 Token 返回给应用服务器。
应用服务器将获取到的 Token 返回给客户端。
客户端通过以上步骤获取 Token 之后,可以携带 Token 加入房间。
API 参考
如果需要更新 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。 |
repeatUse | Boolean | 可选 | 640 | 在 Token 有效期内该用户是否可以多次使用该Token,默认为true。
|
expireAt | int | 可选 | 640 | Token 的过期时间,过期后,该用户将无法通过此 Token 加入房间。 取值范围为 1~86400 秒,默认为 600 秒。 |
channelName | String | 可选 | abc | 绑定的房间名称。若未设置,该用户可以通过此 Token 加入任何房间。 |
请求示例
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的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"));
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" //安全认证模式下的签名。
}
本篇文档内容是否对您有帮助?


此文档对你是否有帮助
×


×