使用环信 App Token 鉴权
小于 1 分钟
REST API
使用环信 App Token 鉴权
环信提供的 REST API 需要 app token (管理员权限 token) 才能使用,即发送 HTTP 请求时需要携带 app token。本文介绍如何获取 app token。
另外,环信 Server SDK 提供了用户、消息、群组、聊天室等资源的操作管理能力,详见 Java Server SDK 和 PHP Server SDK。
获取管理员权限 Token
获取 token 时,服务器会返回 token 有效期,即响应中的 expires_in
字段的值。由于网络延迟等原因,系统不保证 token 在此值表示的有效期内绝对有效。如果发现 token 使用异常,如返回 HTTP 状态码 401,请重新获取新的 token。
提示
请不要频繁向服务器发送获取 token 的请求,同一账号发送此请求超过一定频率会被服务器封禁。
HTTP 请求
POST https://{host}/{org_name}/{app_name}/token
路径参数
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
host | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 获取环信即时通讯 IM 的信息。 |
org_name | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 获取环信即时通讯 IM 的信息。 |
app_name | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 获取环信即时通讯 IM 的信息。 |
请求 header
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
Content-Type | String | 是 | 内容类型。请填 application/json 。 |
Accept | String | 是 | 内容类型。请填 application/json 。 |
请求 body
参数 | 类型 | 是否必需 | 描述 |
---|---|---|---|
grant_type | String | 是 | 授权方式。该参数设置为固定字符串 client_credentials ,即客户端凭证模式。 |
client_id | String | 是 | App 的 client_id ,用于生成 app token 调用 REST API。详见 环信即时通讯云控制台的应用详情 页面。 |
client_secret | String | 是 | App 的 client_secret ,用于生成 app token 调用 REST API。详见 环信即时通讯云控制台的应用详情 页面。 |
ttl | Long | 否 | token 有效期,单位为秒。 - 若传入该参数,token 有效期以传入的值为准。 - 若不传该参数,以 环信即时通讯云控制台的 用户认证 页面的 token 有效期的设置为准。- 若设置为 0 ,则 token 永久有效。 注意:VIP 5 集群该参数单位为毫秒。 |
HTTP 响应
响应 body
如果返回的 HTTP 状态码为 200
,表示成功返回 token。响应 body 包含如下字段:
参数 | 类型 | 描述 |
---|---|---|
access_token | String | 有效的 Token 字符串。 |
expires_in | Long | Token 有效时间,单位为秒,在有效期内不需要重复获取。 |
application | String | 当前 App 的 UUID 值。 |
如果返回的 HTTP 状态码非 200
,表示请求失败。你可以参考 响应状态码 了解可能的原因。
示例
请求示例
curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -d '{
"grant_type": "client_credentials",
"client_id": "YXA6i-Ak8Ol4Eei2l11ZjV-EAg",
"client_secret": "YXA6VunqiNxoB7IwXHInk1cGiXOOJfc",
"ttl": 1024000
}' 'http://a1.easemob.com/easemob-demo/testapp/token'
响应示例
{
"access_token": "YWMte3bGuOukEeiTkNP4grL7iwAAAAAAAAAAAAAAAAAAAAGL4CTw6XgR6LaXXVmNX4QCAgMAAAFnKdc-ZgBPGgBFTrLhhyK8woMEI005emtrLJFJV6aoxsZSioSIZkr5kw",
"expires_in": 1024000,
"application": "8be024f0-e978-11e8-b697-5d598d5f8402"
}
错误码
如果返回的 HTTP 状态码非 200
,表示请求失败,可能提示以下错误码:
HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 |
---|---|---|---|---|
400 | illegal_argument | client_id must be provided. | 请求 body 中没有传 client_id 。 | 详见 环信即时通讯云控制台的 应用详情 页面中 app key 对应的 Client ID 参数。 |
400 | illegal_argument | client_secret must be provided | 请求 body 中没有传 client_secret 。 | 详见 环信即时通讯云控制台的 应用详情 页面中 app key 对应的 ClientSecret 参数。 |
400 | invalid_grant | client_id does not match | app key 对应的 client_id 与请求 body 中传入的 client_id 不匹配。 | 详见 环信即时通讯云控制台的 应用详情 页面中 app key 对应的 Client ID 参数,确保请求 body 中传入的与该参数一致。 |
400 | invalid_grant | client_secret does not match | app key 对应的 client_secret 与请求 body 中传入的 client_secret 不匹配。 | 详见 环信即时通讯云控制台的 应用详情 页面中 app key 对应的 ClientSecret 参数,确保请求 body 中传入的与该参数一致。 |
404 | organization_application_not_found | Could not find application for XXX/XXX from URI: XXX/XXX/users | App key 不存在。 | 检查 orgName 和 appName 是否正确或创建应用。 |