Token 鉴权是什么?
Token 也称为动静密钥,是在退出频道时用于校验用户权限的一组字符串;鉴权是指在用户拜访你的零碎前,对其进行身份校验。用户在应用声网服务,如退出音视频通话或登录信令零碎时,声网会应用 Token 对其鉴权。
咱们为这种形式提供了一个较为形象的比喻,即:
某个展览馆须要游客实名认证后,获取专属入场券才可参观。游客在实现实名认证后能够获取到具备有效期限度的专属入场券,在进场时提供在有效期内的入场券,方能进场。其中:
● 展览馆相当于声网的服务,即音视频频道或信令零碎等;
●专属入场券相当于 Token;
●实名认证步骤相当于联合 声网 AppID、频道号、用户 ID 等信息 获取到专属 Token 的步骤;
●进场时校验入场券相当于鉴权,即校验 Token 是否和 声网 AppID、频道号、用户 ID 等信息匹配,且在有效期内。
声网的产品和服务中大部分采纳 Token 鉴权的形式。上面,咱们针对如何生成和应用 Token,以及 Token 鉴权中常见的问题进行具体的解说。
如何生成和应用 Token?
2.1 Token 鉴权原理
在理解如何生成和应用 Token 前,须要先理解 Token 鉴权的原理。
如图所示,共分为 9 个步骤:
1. 客户端依据须要,向 app 服务端申请 Token
2.App 服务端生成并返回 Token
3. 客户端以 UID、频道名以及获取到的 Token 退出频道
4. 声网平台读取该 Token 中蕴含的信息,并进行校验
5. 客户端收到退出频道胜利回调,并获取用户 UID
6.Token 最大有效期为 24 小时。当即将过期时,客户端会收到 Token 行将过期的回调
7. 此时,如果客户端须要持续进行音视频互动,须要申请新的 Token
8.App 服务端生成并返回 Token
9. 客户端更新 Token 这个过程中,用户须要自行实现步骤 1、2、3、7、8、9 的代码逻辑。
其中,对应的 Token 蕴含以下信息:
● 你在声网控制台创立我的项目时生成的 App ID
● 频道名
● 用户 ID
● 用户权限,如是否能发流或收流
● Token 的过期工夫
2.2 申请与生成 Token
能够看到,在用户退出频道前,客户端须要先向服务器申请 Token,并在 服务器 生成 Token,且 Token 必须与 须要退出频道的用户所对应的 AppID、频道名、用户 ID(UID)信息、用户权限 (是否能发流或收流) 一一对应,并且确保生成的 Token 在有效期内。而后能力以 UID、频道号 和 Token 退出对应频道。
向服务器申请 Token,能够通过向服务器发送 GET 申请等形式自行实现,以下文章以供参考:
● 部署 Token 服务器(官网文档):https://docs.agora.io/cn/live-streaming-premium-4.x/token_ser…
●用 Token-Flutter 连贯 Agora (2021-09-15) https://www.rtcdeveloper.cn/cn/community/blog/22929
● 应用 Swift 部署声网 Token 服务器 (2022-10-27):https://www.rtcdeveloper.cn/cn/community/blog/24981
●在 NET Core 上建设 Agora AccessToken 服务 (2020-11-14):https://www.rtcdeveloper.cn/cn/community/blog/19790
● 如何用 GoLang 为声网 Agora 利用构建 Token 服务器 (2020-12-09):https://www.rtcdeveloper.cn/cn/community/blog/20102
● 如何应用 NodeJS 为声网 Agora 利用构建 Token 服务器 (2020-12-03):https://www.rtcdeveloper.cn/cn/community/blog/20024
● 应用 Java 构建 Agora 令牌服务器 (2021-02-07):https://www.rtcdeveloper.cn/cn/community/blog/20709
● 用 Java 构建声网令牌服务器 (2023-01-10):https://www.rtcdeveloper.cn/cn/community/blog/25430
生成 Token,能够应用声网提供的 Demo 实现,Demo 地址请参考:Token 生成器代码
* 请务必留神:例如用户应用 UID=123456(int 型)退出频道 ChannelName=”test”,那么生成 Token 时传入的参数 UID 和 ChannelName 必须是绝对应的,即 UID=123456(int 型)且 ChannelName=”test”,否则会导致鉴权失败。
2.3 Token 过期解决
Token 最大有效期为 24 小时。当即将过期时,客户端会收到 Token 行将过期的回调;Token 过期时,SDK 会触发 Token 过期回调。具体解决形式如下:
● 在 Token 过期前 30 秒,SDK 会触发 tokenPrivilegeWillExpire 回调。收到该回调后,客户端须要从服务器获取新的 Token 并调用 renewToken 将新生成的 Token 传给 SDK。
● Token 过期时,SDK 会触发 rtcEngineRequestToken 回调。收到该回调后,客户端须要从服务器获取新的 Token 并调用 joinChannel 办法,再应用新的 Token 重新加入频道。
一般来说,咱们倡议在 Token 过期前,及时更新 Token,即从服务器获取新的 Token 并调用 renewToken 将新生成的 Token 传给 SDK。
常见问题
当你的声网我的项目中不存在无证书并且启用了次要 / 主要证书,则示意你抉择应用动静密钥 Token 对用户进行鉴权。
因为 Token 具备肯定的时效性,因而 app 在运行过程中,你有可能会收到如下与 Token 相干的错误码或事件回调。本文对这些事件进行了梳理,提供触发的起因以及解决办法,帮忙你在 App 出现异常时进行问题排查。
101:App ID 有效
问题形容:
● Native 端:SDK 在初始化声网服务时返回错误码 ERR_INVALID_APP_ID(101);或调用 joinChannel 办法退出频道时,SDK 回调 onError 事件,并报告错误码 ERR_INVALID_APP_ID(101)。
● Web 端:在初始化 声网服务或调用 Client.join 办法退出频道时,Console 控制台打印错误码 ERR_INVALID_VENDOR_KEY(101)。
问题起因:
不是无效的 App ID,个别是因为 App ID 的数据类型不对引起的。
解决办法:
倡议查看 App ID 数据格式是否无效。声网的 App ID 为 String 型,请应用正确数据类型的 App ID,从新初始化声网服务。
109/118/2:Token 已过期
问题形容:
● Native 端:调用 joinChannel 办法退出频道时,SDK 回调 onError 事件,并报告错误码 ERR_TOKEN_EXPIRED(109)。
● Web 端:调用 Client.join 办法退出频道时,Console 控制台打印错误码 ERR_DYNAMIC_KEY_TIMEOUT(109) 或 ERR_DYNAMIC_KEY_EXPIRED(118)。
问题起因:Token 过期。
解决办法:
Token 一旦过期,你就须要在服务端从新生成一个 Token,而后调用 renewToken 办法尝试重新加入频道。
110:Token 有效
问题形容:
● Native 端:调用 joinChannel 办法退出频道时,SDK 回调 onError 事件,并报告错误码 ERR_INVALID_TOKEN(110)。
● Web 端:调用 Client.join 办法退出频道时,Console 控制台打印错误码 ERR_NO_AUTHORIZED(110)。
问题起因:
生成的 Token 有效。个别有以下起因:
● 你的声网我的项目中不存在无证书并且启用了次要 / 主要证书,然而退出频道时却未传入 Token;或者我的项目未开启次要 / 主要证书,就试图应用 Token 退出频道。
● 你在服务端生成 Token 时填入的 App ID、用户 ID 和频道名,与你初始化和退出频道时填入的 App ID、用户 ID 和频道名不匹配。
解决办法:
● 在退出频道前,请确认你在初始化时填入的 App ID 对应的我的项目是否已启用次要 / 主要证书。
● 如果未启用次要 / 主要证书,则不能应用 Token 退出频道。
● 如果我的项目中存在无证书并且已启用次要 / 主要证书,则既能够仅应用 App ID 退出频道,也能够应用次要 / 主要证书生成的 Token 退出频道。
● 如果我的项目中不存在无证书并且已启用次要 / 主要证书,则必须应用 Token 退出频道。
● 当确认应用 Token 退出频道时,还须要确认:
● 用于生成 Token 的 App ID 和初始化服务时填入的 App ID 统一。
● 用于生成 Token 的用户 ID 和退出频道时填入的用户 ID 统一,且数据类型也统一。● 用于生成 Token 的频道名和退出频道时填入的频道名统一。
119: 动态厂商应用动静密钥
该错误码仅实用于 RTC Web SDK。
问题形容:
Web 端调用 Client.join 办法退出频道时,Console 控制台打印错误码 ERR_STATIC_USE_DYNAMIC_KEY(119)。
问题起因:
示意动态厂商应用了动静密钥。个别是因为应用的 App ID 对应的声网我的项目未启用次要 / 主要证书,却试图应用 Token 退出频道引起。
解决办法:
对于未开启次要 / 主要证书的我的项目,你能够不应用 Token 退出频道。你也能够先启用次要 / 主要证书,而后在服务端生成 Token 后重新加入频道。
120:动静厂商应用动态密钥
该错误码仅实用于 RTC Web SDK。
问题形容:
Web 端调用 Client.join 办法退出频道时,Console 控制台打印错误码 ERR_DYNAMIC_USE_STATIC_KEY(120)。
问题起因:
示意动静厂商应用了动态密钥。个别是因为应用的 App ID 对应的声网我的项目中不存在无证书并且已启用次要 / 主要证书,退出频道时却没有传入 Token 引起。
解决办法:
如果 App ID 对应的我的项目中不存在无证书并且已启用次要 / 主要证书,则必须应用 Token 进行鉴权。你也能够换一个没有启用次要 / 主要证书的我的项目的 App ID,而后尝试重新加入频道。
Token 过期相干事件回调
为保障通信体验,声网提供如下两个回调,揭示用户 Token 行将过期或曾经过期:
● onTokenPrivilegeWillExpire:该回调示意 Token 行将在 30 秒内生效。收到这个回调时,你须要在服务端从新生成 Token,而后调用 renewToken 办法,将新生成的 Token 传给 SDK。
● onRequestToken(Web 平台为 onTokenPrivilegeDidExpire):该回调示意 Token 曾经生效。收到这个回调时,你须要在服务端从新生成 Token,而后调用 joinChannel 办法从新尝试退出频道。
各语言 Token 错误码对照
附录
- 注册并试用每月 10000 分钟收费的声网视频 SDK,体验四行代码、三十分钟疾速构建沉迷式实时互动场景
- 下载体验声网相干 SDK & Demo