feat: isolate external application conversations

This commit is contained in:
2026-08-03 18:57:19 +08:00
parent 26109648af
commit cd3c875106
26 changed files with 843 additions and 110 deletions

View File

@@ -14,6 +14,7 @@
2. 新增接入应用;
3. 保存系统只展示一次的应用密钥;
4. 如需学员从千问千答返回来源应用,配置完整的回跳地址白名单。
5. 选择是否允许自动注册新学员;开启时必须同时选择默认权益版本。
首次免登录时,接入应用必须提供学员在本应用内的稳定用户 ID 和已经由本应用验证过的手机号。手机号仅用于首次匹配千问千答学员,后续以账号绑定为准。
@@ -93,13 +94,22 @@ signature = hmac.new(APP_SECRET.encode(), canonical, hashlib.sha256).hexdigest()
- 已经绑定:按“应用 ID + 外部用户 ID”直接找到千问千答学员
- 首次进入:使用已验证手机号匹配现有学员并建立绑定;
- 手机号不在学员名单:拒绝进入,不自动创建无权益账号
- 手机号不在学员名单且应用未开启自动注册:拒绝进入;
- 手机号不在学员名单且应用已开启自动注册:必须同时提供姓名,系统创建学员、分配该应用的默认权益,再建立外部账号绑定;
- 学员已禁用、尚未生效或权益已过期:拒绝进入;
- 同一应用中的一个千问千答学员只能绑定一个外部用户 ID。
绑定错误时,管理员可以在“应用接入 → 账号绑定”中解除绑定,学员下次进入时重新核对手机号。
## 5. 安全规则
## 5. 账号与会话数据规则
- 同一手机号只对应一个千问千答学员账号,不会因接入多个应用重复注册;
- 学员的会话、消息、AI 请求和衍生的求助卡/分享稿仍保存在千问千答服务器;
- 会话按登录来源强制隔离:直接登录只能看到直接会话,从应用 A 进入只能看到应用 A 的会话,不能访问应用 B 或直接登录会话;
- 隔离规则由后端根据签名登录态强制执行,不依赖前端传入来源参数;
- 管理员可在“记录审计”按直接访问、第三方应用和具体应用筛选会话。
## 6. 安全规则
- 所有生产接口必须使用 HTTPS
- 应用密钥只保存在接入应用服务端;
@@ -111,10 +121,12 @@ signature = hmac.new(APP_SECRET.encode(), canonical, hashlib.sha256).hexdigest()
- 停用接入应用后,该应用不能继续申请或兑换登录态;
- 登录成功和失败都会写入登录审计。
## 6. 验收清单
## 7. 验收清单
- 已登录来源应用的学员点击后直接进入千问千答;
- 首次进入能按已验证手机号正确绑定;
- 开启自动注册时,新手机号能创建学员并获得指定的默认权益;
- 未开启自动注册时,新手机号仍被拒绝;
- 后续进入不再依赖手机号;
- 同一个授权码第二次兑换失败;
- 错误签名、过期时间戳、重复随机数均被拒绝;
@@ -122,3 +134,4 @@ signature = hmac.new(APP_SECRET.encode(), canonical, hashlib.sha256).hexdigest()
- 禁用或过期学员不能进入;
- 停用应用和更新密钥立即生效;
- 手机号验证码登录仍可正常使用。
- 直接登录、应用 A 和应用 B 各自只能查看、修改和删除本来源会话。