为保证通信安全,当用户使用 Agora 服务时,Agora 需要对其鉴权。Agora 提供如下鉴权方案,你可以根据自己的实际使用场景,选择合适的鉴权方式:
鉴权方案 | 详情 | 适用场景 |
---|---|---|
App ID | 频道内所有客户端均使用 App ID 鉴权 | 低安全需求场景,如测试环境 |
Token | 频道内所有客户端均使用 Token 鉴权 | 高安全需求场景,如生产环境 |
开发者在 Agora 控制台注册账号后,可以创建多个项目,每一个项目的唯一标识就是 App ID。如果有人非法窃取了你的 App ID,他就可以在自己的项目中使用你的 App ID。因此,只使用 App ID 鉴权,安全性较低,我们推荐只在测试环境,或对安全要求不高的场景里使用 App ID 鉴权。
进入控制台,按照屏幕提示注册账号并登录控制台。详见注册与登录。
点击左侧导航栏的 图标进入项目管理页面。
点击创建按钮。
在弹出的对话框内输入项目名称,选择 APP ID 为鉴权机制,并点击提交。
项目创建成功后,你会在项目列表中看到刚刚创建的项目。点击 查看并复制该项目对应的 App ID。
在调用 Agora 的 API 接口实现功能,如 SDK 初始化时,Agora 会需要你填入 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 (Electron) | 所有版本 | getVersion |
语音或视频 SDK (Unity) | 所有版本 | GetSdkVersion |
本地服务端录制 SDK | v2.1.0 及以上 | / |
云端录制录制 | 所有版本 | / |
实时码流加速 SDK | 所有版本 | / |
互动游戏 SDK | v2.2.0 及以上 | getVersion |
云信令(原实时消息) SDK | 所有版本 | / |
参考上文步骤获取 App ID。
App 证书是 Agora 控制台为开发项目生成的字符串。根据不同的安全需求,Agora 在项目中设置了两种 App 证书,区别如下:
如果你是第一次启用 App 证书,你需要先启用主要证书。
参考如下步骤启用主要证书:
在正式环境中,Token 需要在你的服务端生成。Agora 在 GitHub 提供一个开源的 AgoraDynamicKey 仓库,支持使用 C++、Java、Python、PHP、Ruby、Node.js、Go 等语言在你的服务端部署生成 Token。详细的仓库说明及如何使用 Agora 提供的示例代码快速生成 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 |
你在 Agora 控制台创建项目时生成的 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:
为提高项目的安全性,Agora 会逐步取消对 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 |