文档
03 平台02 platform02_需求与工作包

PLAT-02-010 身份与权限

全局登录、会话、产品如何识别用户、平台角色与产品角色

产品要求

在任一 OceanWay 产品(Site、Console、Admin、Studio、Drama、Commerce)登录后,所有产品都识别为同一个用户,无需再次输入凭据。具体要求:

  • 登录可以从任何产品发起,登录后回到发起时的页面。
  • 已打开的其他产品页面,在下次请求受保护内容时识别出同一用户,用户不需要手动“同步登录”。
  • 公开内容(Site、Console的模型与公开标准价)未登录也能看;登录后显示统一的账户入口。
  • 登录只回答“你是谁”,每个产品再判断“你能做什么”。普通客户打开 Admin,看到的是“已登录但没有权限”,而不是再次被要求登录。
  • 账号停用后,所有产品拒绝新的访问与执行;会话撤销后,所有产品的会话访问失效。已签发 Run 授权的撤销条件见下方专节。
  • 2026-10-02 用户明确:Studio、Drama、Commerce、Console共用用户登录会话,任意一站退出须结束当前浏览器在所有平台的登录状态;Site/Admin沿用同一规则。登录统一不改变既有角色和动作权限。
  • 全局退出撤销平台权威会话;其他站点的下一次会话受保护请求立即拒绝,不允许以产品缓存继续访问或发起新的会话授权调用。已签发 Run 授权与会话分开,后台按该委托继续执行;跨主域会话入口仍须绑定同一全局会话及撤销状态。
  • “退出所有设备”是另一个单独操作;默认全局退出结束当前浏览器跨平台会话,不自动结束其他设备。

首个正式主域名为 oceanway.tech(2026-10-02 用户确定)。主域名、产品入口、Origin 与返回地址白名单从配置读取,不写死在代码。当前隔离平台入口已为 console.oceanway.tech;各产品入口、Origin与共享Cookie的实际联验配置按切片交接。

同一主域名下的受控产品共享主域 Cookie。后续需要支持 oceanway.ai 等其他受控主域,并继续使用同一套用户账号、钱包和平台会话权威。浏览器不能将 .oceanway.tech Cookie直接共享给.oceanway.ai;新增主域须通过统一登录授权跳转建立该域自己的会话 Cookie,全局注销/封禁仍由平台会话权威统一校验。平台已实现 /api/platform/v1/sso/challenges、/sso/authorize、/sso/callback 的受控一次性交接及同一SID撤销;实际多主域/多产品部署仍按T-04联验,不能仅把Cookie Domain改成两个域名或复制长期凭据进URL。

域名扩展仅限显式配置并由OceanWay控制的第一方入口;oceanway.ai是后续接入需求示例,本轮未配置DNS、证书或上线。

  1. 登录由平台完成。 登录页由平台提供,产品把用户带到登录页时附上返回地址;平台只接受白名单内的返回地址。
  2. 平台写入会话 Cookie。 Cookie 的作用域设为主域名、Path=/,并设置 HttpOnly、Secure、SameSite=Lax。名称可配置,默认 oceanway_session,正式平台模式沿平台SID权威校验;不能直接复用默认仅限刷新路径的Cookie。当前隔离部署采用host-only独立Cookie,实际共享产品配置仍须另验。
  3. 产品后端向平台确认身份。 产品收到请求后,把会话 Cookie 转给平台的身份接口,取得用户 ID、状态和角色。首期不缓存身份结果,直接核验权威会话;账号停用或会话撤销后下一受保护请求立即拒绝。
  4. 防跨站请求伪造。 修改数据的请求除了 Cookie,还要校验来源(Origin)或 CSRF Token。

new-api 已有登录、会话、刷新、撤销和 Token 鉴权,平台在此基础上补充:主域名 Cookie、返回地址白名单、供产品调用的身份接口。

共享 Cookie 的主域名只能包含受控的第一方服务;客户自定义域名和不可信内容站不加入该作用域。产品仅转发指定的身份 Cookie,不转发整份 Cookie/Header,也不共享平台的会话签名密钥。来自兄弟子域名的请求不能仅因 SameSite 判定而放行:写操作校验允许的 Origin 与 CSRF 防护,缺少来源时使用明确的服务鉴权路径。

身份缓存键必须绑定会话,账户切换后清除旧用户数据。首期身份请求直接核验平台权威会话,不启用此前提出的30秒身份缓存。会话受保护内容、普通单次新调用、Run 授权签发或显式继续、管理写入必须核验当前身份;注销或封禁后下一次会话请求立即拒绝。已签发 Run 的后台执行核验其委托、账号、产品访问与产品凭据,不依赖当前会话。已打开页面的退出提示可通过通知/重新查询同步,但页面展示不作为任何授权依据。权威会话读取及受控SSO已有实现和列明本地分项,多主域/实际产品撤销传播仍需T-04联验。身份或权限校验失败时拒绝相应的新受保护写入;Admin 的资金和权限操作重新向平台核验,不仅依赖产品缓存。全局退出会撤销平台会话并清除同名、同路径、同域 Cookie;缓存失效上限在验证阶段确定。

产品服务凭据(现行实现)

用户在各产品使用同一套账号和登录状态。产品服务凭据由Studio、Drama、Commerce后端分别持有,仅证明可信产品及允许动作,不创建第二套用户账号,也不发给浏览器。正式格式已确定为 Header X-Platform-Product-Key: key_id.secret;服务端按持久记录校验secret哈希、绑定产品、动作/Origin白名单与撤销状态。独立撤销/轮换产品凭据影响相应后端调用,不自动注销用户或改变其他产品登录状态。

调用情境当前鉴权与授权事实边界
本人身份查询转发指定的平台会话Cookie,调用 /api/platform/v1/identityCookie证明用户;不凭普通Header/Body声称可信产品或任意用户
普通单次新产品调用、创建/开始操作、原操作补充预留产品服务凭据+有效本人平台Cookie+严格允许的Origin;产品后端可转发 X-User-Origin每次核当前用户与产品动作;退出/停用不允许从此入口发起新的付费动作,服务Key不能单独指定用户扣费
已授权原操作的后台查询/事实/结算/恢复具有对应动作的产品服务凭据,引用平台持久化的原 operation_id 并校验同产品/任务/请求身份用户已不在线也可按原授权完成原账务;没有授权新调用或扩大预算
Worker读取已保存原文本结果服务凭据 operation:result,原操作ID+原 business_task_id+原调用 idempotency_key,调用 /operations/:id/relay/result/reconcile无会话只读入口拒绝浏览器会话Cookie,不调用供应商、生成或改资金;结果未就绪保持pending

当前依据为平台 service/platform_identity.go、middleware/platform_identity.go、router/platform-router.go 和唯一契约 docs/openapi/platform.json。Cookie只能证明用户,不能单独创建可信产品付费操作;Console/Admin直接调用平台业务接口仍按会话、Origin/CSRF与动作权限校验,不要求浏览器持有产品服务凭据。原操作号尚未收到或持久化前全丢的安全定位、匹配实际供给的产品协议、完整返回体验和实际产品部署联验继续各自交接,不能改幂等标识重发原请求。

委托调用必须满足的约束

  1. 产品服务凭据只证明调用产品,不能单独授权它对任意用户扣费。创建业务操作时,平台必须校验有效用户会话或已绑定该用户的委托凭据,再保存用户、产品、业务任务、请求指纹和允许的动作。
  2. 普通请求 Header/Body 中的 user_id、product 或角色不能覆盖已验证身份。来源产品由服务凭据或受控的用户 Key 元数据推导;公共 API 默认记录为 API,客户不能伪造产品来源。
  3. 后台查询、结算和释放引用平台 operation_id,校验服务凭据的产品和动作与原操作一致。跨用户、跨产品、同键不同输入必须拒绝。一个应用承载三个子站也要分别区分产品作用域。
  4. 用户退出后,已授权且已发出的任务仍需恢复、登记结果与完成原账务;没有 Run 授权时不能发起新的付费调用。已签发 Run 按下方委托继续执行;封禁停止新的执行,已经发生的成本和退款按原操作核对,不遗失任务或强行标失败。
  5. 服务凭据仅存服务器,可轮换、撤销,不发给浏览器。产品工作人员没有平台财务权限时,不得通过产品接口变更余额。

现行后台授权使用平台持久化原操作引用和新鲜产品动作权限;不以自签凭据或服务Key替代原授权事实。原操作号全丢的定位契约仍待对应切片补齐。

Run 授权与会话分开(P2 待实现交接)

Run 授权是绑定平台用户、可信产品、Run 与允许动作的委托凭据,由 Platform 在用户通过当前有效会话发起 Run 时签发,产品不能自行构造。后续调用使用产品服务凭据和该 Run 授权,无需浏览器 Cookie。注销、修改密码、安全重置或 AuthVersion 变化撤销的是会话访问,不撤销既已签发的 Run 委托;每次新执行仍须校验授权有效性、账号状态、产品访问、动作及产品凭据,停用账号、撤销产品访问或产品凭据不能被委托绕过。

用户有适用余额或权益即可发起,Platform 在启动及每次收费调用按模型、规格、资源范围与有效性核验,自动处理分配与原子预留;不要求用户填写、确认或追加 Run 金额预算、额度或付费偏好。运行中资源不足则暂停并保留结果,补足资源后由用户在当前会话显式继续原 Run;继续不得重发 UNKNOWN 或重建原收费调用。资金与资源细则见钱包与计费及多资源权益。

用户停止、授权到期、账号停用、产品访问或产品凭据撤销阻止新的执行;已发出的调用仍按原操作保存结果并完成实际账务。P2 的签发、读取、继续、停止、逐次核验及撤销契约仍待 Platform 实现交接,本节不代表现行普通单次接口已支持无会话新调用。

角色与权限

类型例子由谁校验
平台角色普通用户、员工、财务、超级管理员平台
产品角色studio:admin、drama:admin、commerce:operator产品向平台查询,产品自己执行
  • 员工和客户使用同一套账号体系,不另建员工账号。
  • 产品角色由员工在 Admin 中分配,产品通过平台接口查询当前用户的角色。
  • new-api 已有 user / admin / root 三级角色和基于 Casbin 的权限规则,作为扩展基础。
  • 2026-10-02用户调整:一期全部个人用户,企业/FDE专属账户与企业价格功能移至二期;同一账号体系下的员工/财务/产品角色仍须独立校验,不因移除企业模块削减权限。

用户组、客户Key与模型开放

2026-10-05用户确认:客户API Key没有分组,也不配置逐Key模型白名单;每个有效Key均可调用平台全部已上架、已开放且有有效价格的模型。同一模型/规格使用相同个人标准销售价,按实际用量结算。账户状态、Key归属/启停/额度/有效期、钱包与必要调用限制仍校验;用户组只作账户归属管理,不筛选个人用户的模型或售价。上游Key由后台按模型接入配置选择,供应渠道及采购价格留在uumi(文本)或媒体网关(视频)。未验收能力不开放。

本决定替代2026-10-03 PL-018中的Key组、显式获准关系与Key绑定要求;用户组管理保留账户归属与独立审计。产品委托和员工角色仍分别校验产品作用域与动作,不能把客户Key调用全部模型解释为任意用户扣费或管理授权。既有实现/历史数据的兼容处理待G-14与AC-03/13验证,不能只隐藏组选择器。

验收场景

场景预期
以每个产品为登录起点登录后回到原页面;再访问其他产品无需登录,识别为同一用户
已打开多个产品,在其中一个登录其他产品在下次受保护请求时识别该用户
普通客户进入 Admin显示已登录但无权限,不循环跳转登录
非白名单的返回地址拒绝跳转
账号停用、会话撤销、切换账号各产品在约定时间内失效或更新,不残留前一个账户的数据
身份服务故障显示可恢复的错误,不形成重定向循环,不重复提交支付或生成
已签发 Run 后注销或变更 AuthVersion(P2 待验)会话访问失效,Run 仍按原委托执行;账号停用或产品访问/产品凭据撤销阻止新执行,已发生调用沿原操作恢复

每个产品都要分别作为起点和终点验证。

部署与联验待完成项

  • 首个主域名已确定为 oceanway.tech;各产品入口、后续主域接入配置与既有跨主域SSO的实际部署/联验待完成。
  • 产品服务凭据格式与本人Cookie/Origin、原操作后台授权已确定;各产品实际凭据/动作/Origin配置、轮换交接、部署版本与跨产品拒绝仍按切片联验。
  • 首期身份不缓存、下一次受保护请求即时核验已确定;主动通知已打开页面、跨主域会话交接及全局撤销实现仍需验收。
  • P2 Run 委托与会话撤销分离、自动资源核验、不足暂停、当前会话显式继续及停止仍待实现交接,不以普通原操作恢复接口代替。

On this page