鉴权认证

最近更新时间:2023-08-15 05:57:36

anyRTC提供两种鉴权机制:APP ID 和 同时使用APP ID 和Token 鉴权,若您对安全性要求不高则建议使用App ID鉴权模式,若您对安全要求较高则建议开启 APP ID 和Token 鉴权模式。

鉴权方案场景
使用 App ID 鉴权低安全需求场景
同时使用 App ID 和 Token 鉴权高安全需求场景

为提高项目的安全性,建议你将所有项目升级至使用 App ID 和 Token 鉴权。

适用范围

适用于所有线上4.0版本SDK,以及所配套的服务。

App ID 鉴权

创建项目时默认为 APP ID 鉴权机制。

App ID 和 Token 鉴权

Token 是一种动态密钥,通过 App ID、权限密钥、用户名、频道名和 Token 有效时间戳等参数生成,安全性较高。在正式生产环境等对安全要求较高的场景中,我们推荐同时使用App ID + Token 鉴权。

生成 Token

Token 需要在你的服务端生成。参考如下步骤,在 anyRTC 控制台获取 App ID、启用 权限密钥,然后调用 API 生成 Token。

1. 获取 App ID

  1. 进入控制台,按照屏幕提示注册账号并登录控制台。详见 注册与登陆

  2. 点击左侧导航栏的项目管理图标进入 项目管理 页面。

  3. 点击创建按钮。

  1. 在弹出的对话框内输入项目名称,项目默认 APP ID 为鉴权机制,并点击提交

  2. 项目创建成功后,你会在项目列表中看到刚刚创建的项目。点击 查看并复制该项目对应的 App ID。

  1. 在调用 anyRTC 的 API 接口实现功能,如 SDK 初始化时,anyRTC 会需要你填入 App ID。将你获取到的 App ID 直接填入即可。

  2. 如果你需要升级至 Token 鉴权方案,点击编辑进入编辑项目页面即可启用 权限密钥。

创建项目的时候默认为App ID 认证。

2. 启用权限密钥

权限密钥是 anyRTC 控制台为开发项目生成的字符串。

参考如下步骤启用权限密钥:

  • 如果你在创建项目后,在编辑项目页面,你可以点击启用权限密钥。

3. 生成临时 Token

  • 为方便在测试阶段中鉴权,anyRTC 控制台提供接入工具来生成临时 Token。生成步骤:

    1.生成临时 Token 前,请确保你已开启权限密钥功能。
    2.临时 Token 适用于对安全要求一般的测试场景。对于正式生产环境,我们推荐使用正式 Token。
    3.临时 Token 不适用于 anyRTC RTM SDK。

    进入项目管理页面,在项目列表中,点击临时token按钮。

    进入 Token 页面,输入待加入的频道名,并点击生成临时 Token 即可。

  • 在正式生产环境中,anyRTC 建议你在服务端调用 buildTokenWithUserAccount 生成正式 Token。详见生成 Token

anyRTC 支持使用 C++、Java、Python、PHP 等语言在你的服务端生成正式 Token。本节 API 注释以 C++ 示例代码为例。

Token 采用业界标准化的 HMAC/SHA1 加密方案,在 Node.js、Java、Python、C++ 等绝大多数通用的服务端开发平台上均可获得所需加密库。具体加密方案可参看 Authentication code。 示例代码

c++
   static std::string buildTokenWithUserAccount(
       const std::string& appId,
       const std::string& appCertificate,
       const std::string& channelName,
        const std::string& userAccount,
       UserRole role,
       uint32_t privilegeExpiredTs = 0);

参数描述
appId你的项目 App ID。
appCertificate你的项目 权限密钥。
channelName该字符串不可超过 64 字节。不可设为空、null 或 "null"。以下为支持的字符集范围:
  • 26 个小写英文字母 a-z
  • 26 个大写英文字母 A-Z
  • 10 个数字 0-9
  • 空格
  • 常规符号等
  • userAccount用户 ID,64位字符串类型。如果不填或设置为nil,SDK 会自动分配一个。 规则同 channelName 。
    role用户角色。暂时只支持一种角色,请使用默认值 Role_Publisher = 1
    privilegeExpiredTsToken 有效时间戳,为自 1970 年 1 月 1 日零时起经过的秒数。比如,如果你将 privilegeExpiredTs 设为当前时间戳再加 600 秒,那么 Token 会在生成 10 分钟后过期。Token 的最大有效期为 24 小时。如果你设为 0,或超过 24 小时,则 Token 有效期依然是 24 小时。

    我们在 GitHub 上提供了一个开源的 anyRTC Dynamic Key 仓库,并覆盖了 C++、C#、Go、Java、Node.js、Perl、PHP、Python、Ruby 等语言。你可以根据实际开发环境,选择一种语言,查看 src 文件夹中的源代码或 sample 文件夹中的示例代码。

    4. 关闭或者更换权限密钥

    开启权限密钥功能后,用户如果存在APP 权限密钥泄露,可以联系客服进行更改APP权限密钥。

    使用 Token

    你可以参考如下步骤使用 Token:

    1. app 客户端调用 anyRTC 的 API 接口实现功能,如加入频道时,需要填入生成的 Token、以及生成 Token 时使用的用户名、频道名等。
    2. anyRTC 服务端接收到填入的 Token 等信息后,会验证用户是否有权限访问频道。如果验证通过,用户可以加入频道并使用相应的 anyRTC 服务。
    3. Token 具有有效期。在 Token 失效后,你需要在 app 服务端重新生成 Token,并使用新的 Token 加入频道或使用相应的 anyRTC 服务。