agora-ruby 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +6 -0
  5. data/Gemfile +11 -0
  6. data/Gemfile.lock +56 -0
  7. data/LICENSE.txt +21 -0
  8. data/README.md +187 -0
  9. data/Rakefile +6 -0
  10. data/agora-ruby.gemspec +29 -0
  11. data/bin/console +13 -0
  12. data/bin/setup +8 -0
  13. data/lib/agora/cloud_recording/client.rb +139 -0
  14. data/lib/agora/config.rb +12 -0
  15. data/lib/agora/dynamic_key/access_token.rb +55 -0
  16. data/lib/agora/dynamic_key/rtc_token_builder.rb +112 -0
  17. data/lib/agora/dynamic_key/rtm_token_builder.rb +46 -0
  18. data/lib/agora/dynamic_key/sign.rb +73 -0
  19. data/lib/agora/dynamic_key.rb +13 -0
  20. data/lib/agora/dynamic_key2/access_token.rb +220 -0
  21. data/lib/agora/dynamic_key2/apaas_token_builder.rb +73 -0
  22. data/lib/agora/dynamic_key2/chat_token_builder.rb +42 -0
  23. data/lib/agora/dynamic_key2/education_token_builder.rb +73 -0
  24. data/lib/agora/dynamic_key2/fpa_token_builder.rb +21 -0
  25. data/lib/agora/dynamic_key2/rtc_token_builder.rb +215 -0
  26. data/lib/agora/dynamic_key2/rtm_token_builder.rb +22 -0
  27. data/lib/agora/dynamic_key2/util.rb +60 -0
  28. data/lib/agora/dynamic_key2.rb +12 -0
  29. data/lib/agora/errors.rb +14 -0
  30. data/lib/agora/version.rb +3 -0
  31. data/lib/agora-ruby.rb +18 -0
  32. data/sample/README.md +12 -0
  33. data/sample/apaas_token_builder_sample.rb +29 -0
  34. data/sample/chat_token_builder_sample.rb +23 -0
  35. data/sample/education_token_builder_sample.rb +29 -0
  36. data/sample/fpa_token_builder_sample.rb +16 -0
  37. data/sample/rtc_token_builder2_sample.rb +55 -0
  38. data/sample/rtc_token_builder_sample.rb +40 -0
  39. data/sample/rtm_token_builder_sample.rb +27 -0
  40. data/token_compare.md +143 -0
  41. metadata +101 -0
data/token_compare.md ADDED
@@ -0,0 +1,143 @@
1
+ # 声网 AccessToken 与 AccessToken2 对比及使用指南
2
+
3
+ ## 引言
4
+
5
+ 声网 (Agora) 使用 Token (令牌) 机制对其服务进行用户身份验证和权限控制。随着技术的发展和安全需求的提升,声网推出了 AccessToken2(通过 `Agora::DynamicKey2` 模块提供),作为对其早期 Token 机制 (AccessToken V1,通过 `Agora::DynamicKey` 模块提供) 的升级。理解这两者之间的差异对于确保应用程序的安全性和功能的正常运行至关重要。本文档旨在详细比较 AccessToken V1 和 AccessToken2,并明确各自的使用场景。
6
+
7
+ **参考文档:**
8
+ * [AccessToken 升级指南 (官方文档)](https://doc.shengwang.cn/doc/rtc/android/advanced-features/token-server-upgrade#%E5%8D%87%E7%BA%A7%E8%87%B3-accesstoken2)
9
+ * [声网 Ruby Token 生成库 (GitHub)](https://github.com/AgoraIO/Tools/tree/master/DynamicKey/AgoraDynamicKey/ruby) - 请注意,本项目已将这两个版本的代码整合。
10
+
11
+ ## 核心差异对比
12
+
13
+ | 特性 | AccessToken V1 (`Agora::DynamicKey`) | AccessToken2 (`Agora::DynamicKey2`) | 说明与影响 |
14
+ | :--------------- | :------------------------------------------------------- | :---------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
15
+ | **核心模块/类** | `Agora::DynamicKey::AccessToken`<br>`Agora::DynamicKey::RtcTokenBuilder`<br>`Agora::DynamicKey::RtmTokenBuilder` | `Agora::DynamicKey2::AccessToken`<br>`Agora::DynamicKey2::RtcTokenBuilder`<br>`Agora::DynamicKey2::RtmTokenBuilder`<br>以及 Chat, FPA, Education, APaaS Token Builder | 升级时需要修改服务端代码引用的模块和类名。V2 提供了更丰富的 Token 类型支持。 |
16
+ | **生成方法 (RTC)** | `Agora::DynamicKey::RtcTokenBuilder.build_token_with_uid(...)` | `Agora::DynamicKey2::RtcTokenBuilder.build_token_with_uid(...)`<br>`Agora::DynamicKey2::RtcTokenBuilder.build_token_with_user_account(...)`<br>以及带特定权限设置的方法 | 升级时需修改调用的类名和确认方法签名。V2 增加了对 User Account 的直接支持和更细粒度的权限生成方法。 |
17
+ | **有效期参数** | `privilege_expired_ts` (Integer, **绝对过期时间戳**, 秒) | `token_expire` (Integer, **相对时长**, 秒)<br>`privilege_expire` (Integer, **相对时长**, 秒) | **重大变化**: <br> - V1 使用 **绝对过期时间戳** (秒)。<br> - V2 使用两个 **相对有效期时长** (秒):Token 本身的有效期和权限(如发流)的有效期。<br> - V2 提供了更灵活的控制,可以将 Token 的有效期和具体权限(如发布流)的有效期分开设置。 |
18
+ | **时间戳计算** | 需要手动获取当前时间戳 (`Time.now.to_i`),然后加上有效期时长得到 `privilege_expired_ts`。 | 直接传入 Token 和权限的**有效时长**(例如 3600 代表 1 小时)。库内部处理时间计算。 | V2 的方式更简洁,减少了手动计算时间戳的步骤和潜在错误。 |
19
+ | **用户角色 (RTC Role)** | 在 `Agora::DynamicKey::RtcTokenBuilder` 中定义常量:<br>`Role_Attendee = 0` (废弃)<br>`Role_Publisher = 1`<br>`Role_Subscriber = 2`<br>`Role_Admin = 101` (废弃) | `Agora::DynamicKey2::RtcTokenBuilder` 接受**数字参数**代表角色 (如 `1` 代表发布者, `2` 代表订阅者)。代码内定义了 `ROLE_PUBLISHER = 1`, `ROLE_SUBSCRIBER = 2` 可供使用。<br>旧的 `Attendee` 和 `Admin` 角色已废弃。 | V2 简化了角色定义,`ROLE_PUBLISHER` 拥有发布和订阅权限,`ROLE_SUBSCRIBER` 仅拥有订阅权限(需后台配置生效)。升级时需要使用 V2 的常量或数字,并移除对废弃角色的使用。 |
20
+ | **支持的服务类型** | 主要支持 RTC, RTM | 支持 RTC, RTM, **FPA, Chat (User/App), Education (RoomUser/User/App), APaaS (RoomUser/User/App)** | AccessToken2 极大地扩展了支持的声网服务范围,为不同场景提供专门的 Token 构建器。 |
21
+ | **安全性与控制** | 相对基础的权限控制。 | 更精细的权限控制(通过分离 Token 和权限有效期),内部结构更模块化。 | AccessToken2 提供了更现代、更灵活、可能更安全的鉴权机制。 |
22
+ | **兼容性** | 旧版本 SDK 和服务广泛支持。 | 新版本 SDK 推荐使用。**注意**: 文档提示,如果同时使用 RTC 扩展产品或服务(如云录制、旁路推流),升级前**建议联系声网技术支持**确认兼容性或进行必要配置。 | 升级到 AccessToken2 可能需要确保所有使用的声网服务(包括扩展服务)都兼容新版 Token。 |
23
+
24
+ ## 使用场景与建议
25
+
26
+ ### 何时使用 AccessToken V1 (`Agora::DynamicKey`)
27
+
28
+ * **维护现有旧项目**: 如果你的项目已经在使用 V1 Token (`Agora::DynamicKey`) 并且运行稳定,暂时没有计划或资源进行升级。
29
+ * **特定扩展服务的兼容性要求**: 在极少数情况下,如果使用的某个声网扩展服务(如较旧版本的云录制或旁路推流配置)尚未完全适配 AccessToken2,或者声网技术支持建议暂时维持 V1 Token 以确保兼容性,则可能需要继续使用 V1。**但在采取此方案前,务必与声网官方确认。**
30
+
31
+ **注意**: AccessToken V1 是旧版机制,除非有明确的兼容性原因,否则不建议在新项目中使用,并推荐将现有项目升级到 AccessToken2 (`Agora::DynamicKey2`)。
32
+
33
+ ### 何时使用 AccessToken2 (`Agora::DynamicKey2`, 推荐)
34
+
35
+ * **所有新项目**: 对于所有新开发的、需要集成声网服务的应用程序,**强烈推荐**直接使用 AccessToken2 (`Agora::DynamicKey2`)。
36
+ * **升级现有项目**: 为了获得更好的安全性、更灵活的权限控制、更广泛的服务支持以及与声网最新功能和优化的兼容性,建议将使用 V1 的现有项目升级到 V2。
37
+ * **需要精细化权限有效期控制**: 当你需要 Token 本身的有效期与用户具体操作权限(如发布流)的有效期分开管理时,AccessToken2 是必需的。
38
+ * **需要使用 FPA, Chat, Education, APaaS 服务**: AccessToken2 提供了这些服务的专用 Token 生成器。
39
+
40
+ **核心优势**: AccessToken2 (`Agora::DynamicKey2`) 提供了更精细、更安全、更易于管理、支持服务更广泛的鉴权方式,是声网推荐的标准实践。
41
+
42
+ ## 从 V1 升级到 AccessToken2 (服务端 Ruby 语言示例要点)
43
+
44
+ 升级主要涉及以下服务端代码修改(假设您的 Gem 已经加载了 `Agora::DynamicKey` 和 `Agora::DynamicKey2` 模块):
45
+
46
+ 1. **修改引用的模块和类**:
47
+ ```ruby
48
+ # 移除旧的引用 (如果之前是直接引用文件)
49
+ # require_relative './path/to/old/RtcTokenBuilder'
50
+ # require_relative './path/to/old/AccessToken'
51
+
52
+ # 确保 Gem 已加载,通常在 Gemfile 中指定并执行 bundle install
53
+ # require 'your-gem-name' # 加载 Gem
54
+
55
+ # 使用新的模块路径
56
+ # 旧 V1 模块: Agora::DynamicKey
57
+ # 新 V2 模块: Agora::DynamicKey2
58
+ ```
59
+
60
+ 2. **更新 Token 生成调用 (以 RTC 为例)**:
61
+ ```ruby
62
+ app_id = "your_app_id"
63
+ app_certificate = "your_app_certificate"
64
+ channel_name = "your_channel_name"
65
+ user_id_int = 12345 # 使用整数 UID
66
+ user_account_str = "user_account_name" # 或使用字符串账户
67
+
68
+ # --- V1 示例 (使用 Agora::DynamicKey) ---
69
+ # expire_duration_seconds = 3600 # V1 需要手动计算绝对时间戳
70
+ # expire_ts = Time.now.to_i + expire_duration_seconds
71
+ # v1_role = Agora::DynamicKey::RtcTokenBuilder::Role_Publisher
72
+ #
73
+ # token_v1 = Agora::DynamicKey::RtcTokenBuilder.build_token_with_uid({
74
+ # app_id: app_id,
75
+ # app_certificate: app_certificate,
76
+ # channel_name: channel_name,
77
+ # uid: user_id_int,
78
+ # role: v1_role,
79
+ # privilege_expired_ts: expire_ts
80
+ # })
81
+ # puts "V1 Token: #{token_v1}"
82
+
83
+
84
+ # --- V2 示例 (使用 Agora::DynamicKey2) ---
85
+ token_expire_seconds = 3600 # Token 本身有效期 (1小时)
86
+ privilege_expire_seconds = 3600 # 权限有效期 (1小时)
87
+ v2_role = Agora::DynamicKey2::RtcTokenBuilder::ROLE_PUBLISHER # 使用 V2 的角色常量
88
+
89
+ # 使用整数 UID 生成 V2 Token
90
+ token_v2_uid = Agora::DynamicKey2::RtcTokenBuilder.build_token_with_uid(
91
+ app_id,
92
+ app_certificate,
93
+ channel_name,
94
+ user_id_int,
95
+ v2_role,
96
+ token_expire_seconds,
97
+ privilege_expire_seconds
98
+ )
99
+ puts "V2 Token (with UID): #{token_v2_uid}"
100
+
101
+ # 使用字符串 User Account 生成 V2 Token
102
+ token_v2_account = Agora::DynamicKey2::RtcTokenBuilder.build_token_with_user_account(
103
+ app_id,
104
+ app_certificate,
105
+ channel_name,
106
+ user_account_str, # 使用字符串账户
107
+ v2_role,
108
+ token_expire_seconds,
109
+ privilege_expire_seconds
110
+ )
111
+ puts "V2 Token (with User Account): #{token_v2_account}"
112
+
113
+ # --- V2 示例 (生成 RTM Token) ---
114
+ rtm_user_id = "rtm_user_1"
115
+ rtm_token_expire = 3600
116
+ token_v2_rtm = Agora::DynamicKey2::RtmTokenBuilder.build_token(
117
+ app_id,
118
+ app_certificate,
119
+ rtm_user_id,
120
+ rtm_token_expire
121
+ )
122
+ puts "V2 RTM Token: #{token_v2_rtm}"
123
+
124
+ # --- V2 示例 (生成 Chat User Token) ---
125
+ chat_user_id = "chat_user_abc"
126
+ chat_token_expire = 3600
127
+ token_v2_chat_user = Agora::DynamicKey2::ChatTokenBuilder.build_user_token(
128
+ app_id,
129
+ app_certificate,
130
+ chat_user_id,
131
+ chat_token_expire
132
+ )
133
+ puts "V2 Chat User Token: #{token_v2_chat_user}"
134
+
135
+ ```
136
+
137
+ 3. **更新角色常量**: 确保使用 `Agora::DynamicKey2::RtcTokenBuilder` 中定义的 `ROLE_PUBLISHER` 或 `ROLE_SUBSCRIBER` 常量(或直接使用对应的整数 1 或 2),并移除对 V1 中已废弃角色的引用 (如 `Role_Attendee`, `Role_Admin`)。
138
+
139
+ **重要提示**: 上述 Ruby 示例假设您的项目已经正确配置并加载了包含 `Agora::DynamicKey` 和 `Agora::DynamicKey2` 模块的 Gem。
140
+
141
+ ## 结论
142
+
143
+ AccessToken2 (`Agora::DynamicKey2`) 是声网当前推荐的、更安全、更灵活且支持服务更广泛的鉴权机制。**所有新项目都应采用 AccessToken2**。对于现有项目,强烈建议评估并尽快升级到 AccessToken2,以充分利用其优势并确保与声网平台的长期兼容性。在升级涉及云录制、旁路推流等扩展服务的项目时,务必参考声网最新文档或咨询技术支持。
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: agora-ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - yfscret
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2025-05-13 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: httparty
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.20'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.20'
27
+ description: This gem provides an easy-to-use interface for interacting with Agora.io's
28
+ RESTful services, initially focusing on cloud recording functionalities, including
29
+ uploading to Aliyun OSS.
30
+ email:
31
+ - yfscret@gmail.com
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - ".gitignore"
37
+ - ".rspec"
38
+ - ".travis.yml"
39
+ - Gemfile
40
+ - Gemfile.lock
41
+ - LICENSE.txt
42
+ - README.md
43
+ - Rakefile
44
+ - agora-ruby.gemspec
45
+ - bin/console
46
+ - bin/setup
47
+ - lib/agora-ruby.rb
48
+ - lib/agora/cloud_recording/client.rb
49
+ - lib/agora/config.rb
50
+ - lib/agora/dynamic_key.rb
51
+ - lib/agora/dynamic_key/access_token.rb
52
+ - lib/agora/dynamic_key/rtc_token_builder.rb
53
+ - lib/agora/dynamic_key/rtm_token_builder.rb
54
+ - lib/agora/dynamic_key/sign.rb
55
+ - lib/agora/dynamic_key2.rb
56
+ - lib/agora/dynamic_key2/access_token.rb
57
+ - lib/agora/dynamic_key2/apaas_token_builder.rb
58
+ - lib/agora/dynamic_key2/chat_token_builder.rb
59
+ - lib/agora/dynamic_key2/education_token_builder.rb
60
+ - lib/agora/dynamic_key2/fpa_token_builder.rb
61
+ - lib/agora/dynamic_key2/rtc_token_builder.rb
62
+ - lib/agora/dynamic_key2/rtm_token_builder.rb
63
+ - lib/agora/dynamic_key2/util.rb
64
+ - lib/agora/errors.rb
65
+ - lib/agora/version.rb
66
+ - sample/README.md
67
+ - sample/apaas_token_builder_sample.rb
68
+ - sample/chat_token_builder_sample.rb
69
+ - sample/education_token_builder_sample.rb
70
+ - sample/fpa_token_builder_sample.rb
71
+ - sample/rtc_token_builder2_sample.rb
72
+ - sample/rtc_token_builder_sample.rb
73
+ - sample/rtm_token_builder_sample.rb
74
+ - token_compare.md
75
+ homepage: https://rubygems.org/gems/agora-ruby
76
+ licenses:
77
+ - MIT
78
+ metadata:
79
+ homepage_uri: https://rubygems.org/gems/agora-ruby
80
+ source_code_uri: https://github.com/yfscret/agora-ruby
81
+ changelog_uri: https://github.com/yfscret/agora-ruby
82
+ post_install_message:
83
+ rdoc_options: []
84
+ require_paths:
85
+ - lib
86
+ required_ruby_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: 2.5.0
91
+ required_rubygems_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ requirements: []
97
+ rubygems_version: 3.4.22
98
+ signing_key:
99
+ specification_version: 4
100
+ summary: A Ruby client for Agora.io RESTful APIs, starting with Cloud Recording.
101
+ test_files: []