文档
07 过程记录02_验收证据

PROC-02-017 OceanWay上游调用身份只读核对20261022

实际模型连接、上游令牌、文件服务身份与已部署原件分支核对,附分桶改动依据

1. 结论与边界

2026-10-22(Asia/Shanghai)核对运行容器、实际数据库与对应制品源码。可以按鉴权后的实例+令牌身份建立分流,但当前还不能认为所有OceanWay请求都已可靠分到正式桶。不能按user_id=1或管理员组分流,也不能只检查一个namespace请求头。 当前图片有独立开发原件链,视频仍有启用模型绑定旧网关;旧网关图片连接仍启用,但本次目录查询下其13个模型均未启用。

本次未发起生成、验证收费调用、写业务库、变更连接/凭据/桶配置或部署。数据库使用BEGIN READ ONLY、10秒statement_timeout、SELECT及ROLLBACK;没有启动应用或执行迁移。只读取必要配置、身份元数据及聚合计数,不取客户提示词、结果正文、对象字节或日志content。

凭据在受控进程内解密/匹配,数据库令牌以本轮随机HMAC比较,保存材料不含密钥、密文或可复用匹配摘要。一次初始工具输出的过滤遗漏了嵌套File Bridge凭据;已告知用户并修正为过滤PRINCIPALS,未将该输出保存进证据或文档,也未擅自轮换。已出现的会话输出无法由本次文件编辑撤回,相关服务凭据需要另行安排轮换。 后续结论文件仅保存身份ID和匹配布尔值。

2. 实际运行基线

实例制品revision作用
oceanway / oceanway-platform-staging-app-11ad4ef18f5624906217aa7d1e97459c30646b97a实际平台;托管模型连接权威开关managed=true
oceanway / oceanway-studio-development-producer-18c243f103078c0cf3178041250d0a2547f34c3c2https://console.oceanway.tech:18445对应的开发原件链配置;独立库oceanway_studio_source_dev
pic-vps / new-api-oceanway-app8c243f103078c0cf3178041250d0a2547f34c3c2https://new.ocean-way.top旧顾客网关;库newapi_oceanway

两处new-api实例制品相同,数据库、调用身份与桶配置不同。代码依据使用上述Git对象读取,未以本机当前HEAD/dirty替代线上版本;未对镜像进行完整源码可复现构建验证。另只读确认Drama客户测试实例为同revision及独立测试桶,不将其并入本次分流。

3. 凭据匹配与模型绑定

令牌ID只在所属数据库内有效,表中不含完整凭据。当前模型数量来自目录绑定及status=1且未删除的计数,不能等同已经通过真实生成验收。

平台connection_id实际上游及匹配身份连接/模型现状
model-81e86f2a-ee80-43f7-969b-e72e924302d8旧网关token 100,user 1连接启用;13个绑定模型,0个status=1未删除模型;已有历史调用
model-9d352a43-09eb-44b7-896b-1dabfaf79483旧网关token 101,user 1视频连接启用;6个绑定模型,其中4个status=1未删除
product-unified-images-20261019-v1开发原件服务token 3,user 2启用;9个绑定模型均status=1且未删除
studio-dev-unified-image-v1开发原件服务token 1,user 2启用,无当前目录模型绑定;保留历史Operation
drama-dev-gemini-reference-v1开发原件服务token 2,user 2连接启用,但凭据已于2026-10-20 05:38:14北京时间到期;无当前目录模型绑定
media-http-image / media-http-video旧网关token 63 / 48,均user 1平台连接已停用且归档;上游令牌仍有效,不改作新业务身份

其余4个启用文本连接指向api.uumi.lol,不属于本次图片/视频分桶;没有改动UUMI。

旧网关user 1为role=100,持有30条令牌记录,其中15条在查询时有效且未删除;token100/101当前均status=1、未到期、未删除。共享用户或分组不是OceanWay独占身份。 精确令牌匹配证明平台持有哪一个凭据,不证明该凭据未被测试工具或其他客户端共用;本轮未做所有机器秘密源的全量盘点,不能把“名称像平台令牌”当专用证明。

开发服务user 2为普通用户,共3个令牌,当前有效2个,三者均匹配上表已知平台连接;其凭据未匹配旧网关token表。数据库隔离使两个实例的user_id/token_id数值不可混用。

4. File Bridge身份与现行分支

平台File Bridge启用、准入启用、original-output启用,Base URL为https://console.oceanway.tech:18445,principal=platform-studio-dev、namespace=studio-dev-v1。其Bearer凭据与开发原件服务配置的同名principal精确匹配,该principal绑定source_user_id=2、source_project=studio-dev、can_adopt=true。开发服务另有Runtime上传principal;这里只核对其服务端声明,未验证各Runtime运行进程持有对应凭据。

旧网关File Bridge则绑定platform-studio-local / runtime-studio-local、namespace=studio-canvas-local、source_user_id=36;平台当前File Bridge凭据均不匹配这些principal。旧网关token100/101的user 1不满足现行原件namespace的user 36绑定,不能仅补一个header就复用该分支。

已部署源码事实:

  • Platform:service/platform_model_connections.go解密数据库连接Key,service/platform_media_gateway.go按模型绑定选择连接。图片派发service/platform_image_adapter_openai.go用该Key设置Bearer,只有FileOutputNamespace非空才添加X-Oceanway-File-Output-Namespace。
  • Platform:service/platform_media_original_outputs.go要求产品授权、图片输出合同和File Bridge同源等条件;namespace保存到价格快照。普通API调用或不同origin不因此自动进入原件分支,视频没有同一图片原件合同。
  • 网关:middleware/auth.go把验证后的token.UserId、token.Id放入上下文;service/async_image.go再读namespace并调用FileOriginalOutputAdmission(namespace, info.UserId)。后者只检查namespace+source_user_id+can_adopt,未绑定TokenId;空namespace直接通过,仍可能走普通归档。
  • service/file_original_output.go已有先登记写入意图、直接Put到permanentBucket、返回output_refs的实现;service/image_output_archive.go在originalTask存在时进入该分支,普通分支才用全局存储Put。不能再概括为“当前所有图片都只会写全局S3_BUCKET”。
  • 该原件准入限定异步图片路径,并拒绝OpenAI images/edits及customer TargetBucket组合。不能推断同步图片、所有编辑和视频已覆盖。
  • persistOriginalImage在实际保存时读取当前permanentBucket并与已有意图比较;受理时仅存namespace,尚未固定完整存储策略。配置变化可能造成intent冲突,不是已完成所有恢复场景。
  • service/seedance_v2_archive_runtime.go仍以全局S3MediaStorage初始化视频归档;service/seedance_v2_archive.go写入后按retention设置ExpiresAt,读取时也检查到期。service/media_storage.go默认7天并限制1~30天;仅把环境值设为0不代表永久保留。
  • model/seedance_v2_archive.go已有StorageType/ObjectPath/ExpiresAt,尚无每条记录的bucket/策略版本;不能只切全局桶而让旧记录读错位置。

5. 实际持久记录佐证

只列查询时聚合数,不据此认定全部请求成功、全部字节仍可读,或每个token都仅被平台使用:

范围持久记录
开发原件服务oceanway_original_file_outputs有168条ready,namespace=studio-dev-v1,source_user_id=2,bucket=oceanway-assets-cn
开发token3任务176条image_async携带studio-dev-v1,另有5条namespace为空;证明同一令牌下现存两种路径,不能只看凭据就声称原件分流已强制执行
旧网关token10083条image_async,namespace均为空
旧网关token10124条platform=55任务,图片output namespace为空;不把空图片字段当作视频协议错误
旧网关正式原件表1条ready,source_user_id=36,namespace=studio-canvas-local,bucket=oceanway-assets-cn;不是token100/101的原件记录
平台Operationproduct-unified-images连接有175条携带namespace,另1条为空;旧图片/视频连接历史快照均不带图片原件namespace

开发服务全局S3_BUCKET为oceanway-studio-dev-unused,正式桶与素材桶为oceanway-assets-cn;旧网关全局桶为oceanway-media-cn、MEDIA_RETENTION_DAYS=7,正式桶为oceanway-assets-cn。unused值是当前配置值,不代表该桶真实存在或可写。本次未核验对象数据面;云桶生命周期事实沿用PROC-02-016。

开发服务现有5个启用渠道的base_url为api.vakv.cn或origingateway.com,未发现该表base_url指向旧网关。未审计DNS/代理/动态覆盖,不把此观察扩大为所有底层传输都不经旧网关。

6. 具体实施结论

改动矩阵、顺序及新增验收见实施规格7.3。近期应复用已实现的原件分支,补强令牌级绑定与缺省拒绝,不重造一整套原件服务,也不把全体user 1或旧token48/63切到正式桶。

旧网关token100/101是可核对的分流候选,是否沿用须核实专用性;若与旧业务共用,另配OceanWay专用调用令牌并绑定业务用途。保持原账户结算语义,不为分桶直接迁移客户账务。开发user 2已有独立性,仍应把具体令牌授权和统一存储策略纳入强制判定。到期的旧开发连接先标为待处理,不能自动续期或启停。

证据目录:本机/Users/wangzihao/.codex/visualizations/2026/10/21/01a15ce9-52a1-7131-a3b6-da75259ef02f/identity-audit/。安全结果包括identity-matches-safe.json、activity-safe.json、model-bindings-safe.json、development-channel-origins-safe.json、inventory-safe.jsonl及manifest.json。不同查询非跨库原子快照,查询期间业务可能继续变化;原始凭据不落盘。

后续方向调整(用户确认)

上述审计保留为切换前事实。用户随后选择复制服务、直接复制数据库到新库,地址media.oceanway.tech,全部使用新桶;开发阶段不处理旧数据/文件迁移,不复制旧文件或提供旧引用兼容。此前第6节提出的在旧实例做token分流不再是执行方向,最新方案见DEV-X-01-006的7.2~7.4。本次未复制数据库、创建桶、配置域名或部署。

On this page