为保证通信安全,当用户使用声网服务时,声网需要对其鉴权。声网提供如下鉴权方案,你可以根据自己的实际使用场景,选择合适的鉴权方式:
鉴权方案 | 详情 | 适用场景 |
---|---|---|
App ID | 频道内所有客户端均使用 App ID 鉴权 | 低安全需求场景,如测试环境 |
Token | 频道内所有客户端均使用 Token 鉴权 | 高安全需求场景,如生产环境 |
在调用声网的 API 接口实现功能,如 SDK 初始化时,声网会需要你填入 App ID。
开发者在声网控制台注册账号后,可以创建多个项目,每一个项目的唯一标识就是 App ID。如果有人非法窃取了你的 App ID,他就可以在自己的项目中使用你的 App ID。因此,只使用 App ID 鉴权,安全性较低,我们推荐只在测试环境,或对安全要求不高的场景里使用 App ID 鉴权。
进入控制台,按照屏幕提示注册账号并登录控制台。详见注册与登录。
点击左侧导航栏的 图标进入项目管理页面。
点击创建按钮。
在弹出的对话框内输入项目名称,选择 APP ID 为鉴权机制,并点击提交。
项目创建成功后,你会在项目列表中看到刚刚创建的项目。点击 查看并复制该项目对应的 App ID。
Token 是一种动态密钥,通过 App ID、App 证书、用户名、频道名和 Token 有效时间戳等参数生成,安全性较高。在正式生产环境等对安全要求较高的场景中,我们推荐使用 Token 鉴权。
如下产品可以用 Token 进行鉴权:
产品 | 支持 Token 的版本 | 查看版本信息 |
---|---|---|
语音或视频 SDK (Native) | v2.1.0 及以上 | getSdkVersion |
语音或视频 SDK (Web) | v2.4.0 及以上 | AgoraRTC.VERSION |
三方框架 SDK | 所有版本 | / |
本地服务端录制 SDK | v2.1.0 及以上 | / |
云端录制录制 | 所有版本 | / |
媒体流加速(原实时码流加速) SDK | 所有版本 | / |
云信令(原实时消息) SDK | 所有版本 | / |
参考上文步骤获取 App ID。
App 证书是声网控制台为开发项目生成的字符串。根据不同的安全需求,声网在项目中设置了两种 App 证书,区别如下:
如果你是第一次启用 App 证书,你需要先启用主要证书。
参考如下步骤启用主要证书:
注意:临时 Token 不适用于声网 RTM SDK。
在正式环境中,Token 需要在你的服务端生成。声网在 GitHub 提供一个开源的 AgoraDynamicKey 仓库,支持使用 C++、Java、Python、PHP、Ruby、Node.js、Go 等语言在你的服务端部署生成 Token。详细的仓库说明及如何使用声网提供的示例代码快速生成 Token 请参考在服务端生成 Token。
下文以 C++ 的 API 为例,介绍生成 RTC Token 的 API 参数含义。
static std::string buildTokenWithUid(
const std::string& appId,
const std::string& appCertificate,
const std::string& channelName,
uint32_t uid,
UserRole role,
uint32_t privilegeExpiredTs = 0);
参数 | 描述 |
---|---|
appId |
你在声网控制台创建项目时生成的 App ID。 |
appCertificate |
你的 App 证书。 |
channelName |
标识通话的频道名称,长度在 64 字节以内。以下为支持的字符集范围:
|
uid |
用户 ID,32 位无符号整数。建议设置范围:1 到 (232-1),并保证唯一性。如果不需要校验 uid,即客户端使用任何 uid 都可以加入频道或登录服务,请把 uid 设为 0。 |
role |
用户发流权限:
|
privilegeExpiredTs |
Token 过期的 Unix 时间戳,单位为秒。该值为当前时间戳和 Token 有效期的总和。比如,如果你将 privilegeExpiredTs 设为当前时间戳再加 600 秒,那么 Token 会在生成 10 分钟后过期。Token 的最大有效期为 24 小时。如果你设为 0,或超过 24 小时,则 Token 有效期依然是 24 小时。 |
你可以参考如下步骤使用 Token:
为提高项目的安全性,声网会逐步取消对 App ID 鉴权方案的支持。对于创建时选择 APP ID 为鉴权机制的项目,你可以参考如下步骤升级鉴权方案:
joinChannel
或 login
中的 token
参数填入服务端实际生成的 Token。onTokenPrivilegeWillExpire
和 onRequestToken
回调提醒你在服务端生成新的 Token。生成新的 Token 后,app 客户端还需要再调用 renewToken
将新生成 Token 传给 SDK 或者调用 joinChannel
重新加入频道。本文中的 API 以 C++ 为例。你可以参考下表查看各 API 在不同开发语言下的名称及描述。
C++ | Java | Objective-C | JavaScript | |
---|---|---|---|---|
加入频道 | joinChannel |
joinChannel |
joinChannelByToken |
join |
Token 即将失效回调 | onTokenPrivilegeWillExpire |
onTokenPrivilegeWillExpire |
tokenPrivilegWillExpire |
client.on("token-privilege-will-expire") |
Token 已失效回调 | onRequestToken |
onRequestToken |
rtcEngineRequestToken |
client.on("token-privilege-did-expire") |
更新 Token | renewToken |
renewToken |
renewToken |
renewToken |