wangbo
e1e18dbe58
fix(k3s): 放宽数据库隔离探针容忍窗口
...
避免跨节点控制面短时拥塞导致主库被默认 30 秒 liveness 窗口误判并重启。\n\n保持隔离检查开启,将 livenessProbeTimeout 调整为 300 秒,并把隔离检查连接与请求超时调整为 5 秒。已通过线上 CRD 字段核验和 kubectl 服务端 dry-run。
2026-07-30 18:55:47 +08:00
wangbo
38f87b6970
fix(queue): 防止过期执行占位阻塞与重复提交
...
队列恢复后,仍在运行标记中的 River job 可能保留 waiting admission,形成全局 FIFO 队头阻塞;同时旧执行在租约被接管后仍可能创建 attempt 或切换到 submitting。
新增 stale admission 自动让出机制,并用当前 execution token 对 attempt 创建和上游提交状态切换做 fencing。任务、River job 和结算状态均不在让出流程中改写。
验证:go vet ./...;env -u AI_GATEWAY_TEST_DATABASE_URL go test ./... -count=1;真实 PostgreSQL 集成测试覆盖 stale admission 让出与旧 token 提交拦截。
2026-07-30 18:25:00 +08:00
wangbo
fa818e9ebf
fix(queue): 重新调度终态 River 任务
...
等待异步准入的任务只跳过仍处于活跃状态的 River Job;missing 或 terminal Job 交由准入调度器重新创建,避免非空 river_job_id 永久阻断旧任务。\n\n通用 River 恢复排除等待准入任务,消除双恢复循环与误导日志;事务回滚继续使用独立有界上下文。\n\n验证:真实 PostgreSQL 下异步 Worker 准入验收和跨 Store 队列集成测试均通过。
2026-07-30 17:42:33 +08:00
wangbo
e8893e2b8f
chore(release): 重新生成可回滚发布基线
...
当前 K3s 工作负载已核验并登记为 3aa78d3e5c0ba83227aaf33849c098405a89ceb5。\n\n使用新的不可变 SHA 重新生成 release manifest,避免覆盖已推送镜像 Tag,并恢复部署前后的自动回滚链。
2026-07-30 17:32:18 +08:00
wangbo
6bab0f0749
fix(worker): 防止事务泄漏并恢复滞留队列
...
为 PostgreSQL 连接增加可配置的事务空闲与锁等待超时,并在请求取消或 Worker 退出后使用独立有界上下文回滚事务。\n\n恢复过期任务时按批次使用 SKIP LOCKED,周期重建缺失或终态 River Job;锁等待超时只在确认尚未提交上游时安全重排,避免重复执行和重复结算。\n\n验证:完整 Go 测试、go vet、生产 Kustomize 渲染、gofmt 与 git diff --check 均通过。
2026-07-30 17:27:11 +08:00
wangbo
bc44af751e
fix(worker): 为容量扩展预留数据库连接
...
原因:单实例执行容量提升到 24 后,Worker 的 24 条数据库连接会被执行任务全部占用,导致心跳、选主、健康检查和并发租约续期超时。
影响:生产 Worker 连接池提高到 32,在 24 个执行槽之外保留 8 条控制连接;PostgreSQL max_connections=200,两实例与 API 的理论连接总量仍在安全范围内。
验证:kubectl kustomize deploy/kubernetes/production、git diff --check 通过;线上两地 Worker 按 32 条连接滚动后连续 3 分钟 Ready、0 重启、0 数据库控制错误、0 租约丢失。
2026-07-30 16:17:16 +08:00
wangbo
3aa78d3e5c
perf(worker): 按实例内存上限扩展异步容量
...
将策略推导出的集群目标与单 Worker 内存安全上限分离,避免失活实例的全部容量转移到单个 2 GiB Pod。
生产环境单实例上限和媒体物化并发设为 24;两实例正常时总容量由 16 提升至 48,后续可通过增加 Worker 节点继续扩展。新增 0093 迁移保存实例容量上限,并兼容滚动发布中的旧实例。
风险:更高媒体并发会增加 Worker 和节点内存压力,保留单实例 24 的硬边界并由持续监控观察 RSS、OOM、队列与节点余量。
验证:go test ./... -count=1;go vet ./...;真实 PostgreSQL 分配与故障转移测试;迁移安全检查;kubectl kustomize;gofmt -l;git diff --check。
2026-07-30 15:08:54 +08:00
wangbo
ea58d21d03
perf(queue): 限制大媒体任务内存并消除准入惊群
...
将同步与异步非文本任务的准入唤醒改为按任务和全局队首推进,批量续租等待者,避免大量请求同时争抢 advisory lock 和数据库连接。
对 Base64 请求解析、素材解码、上游媒体执行和结果物化增加分层并发限制,复用请求素材并释放重复 Gemini wire 数据;生产 API 默认入口解析并发 16,媒体物化并发 8。
新增 1000 个同步 Gemini 图像编辑请求的模拟上游压力验收,10 MiB 输入和输出下全部成功,Heap 峰值增长约 2.58 GiB,并验证共享上传哈希、单次 attempt 与本地零落盘。
验证:go test ./... -count=1;go vet ./...;gofmt -l 无输出;kubectl kustomize deploy/kubernetes/production;10 MiB Gemini Base64 千任务压力测试通过。
2026-07-30 13:13:32 +08:00
wangbo
fd3b6bf042
fix(worker): 增强队列启动与租约到期恢复
...
River 初始化遇到瞬时数据库超时时最多重试三次,并确保启动异常时先取消后台 LISTEN 和 Worker 上下文再关闭连接池,避免不就绪 Pod 卡在退出路径。Worker 维护循环每 15 秒执行幂等运行时恢复,使旧实例中断任务在执行租约到期后自动重排并继续触发孤儿 Job 救援。验证通过完整 Go 测试、go vet、竞态检查和迁移安全检查。
2026-07-29 23:55:49 +08:00
wangbo
f3dd7cd262
fix(queue): 自动救援失活 Worker 遗留任务
...
新增基于任务状态、执行租约和 Worker 心跳的孤儿 River Job 精确识别,每 15 秒将确认失活的 Job 恢复为可重试,避免等待 River 一小时通用救援窗口。运行时恢复同步清除中断及终态任务的 admission、执行令牌和并发租约,防止状态残留污染队列指标。正常运行中的长任务仍由 running 状态和活跃心跳保护。验证通过完整 Go 测试、go vet、竞态检查、迁移安全检查和 PostgreSQL 18 集成测试。
2026-07-29 23:44:29 +08:00
wangbo
98820378b7
perf(store): 消除同步复制下的鉴权与心跳锁阻塞
...
将 Worker 心跳与容量分配事务设为本地异步提交,避免同步副本延迟期间长期持有全局分配锁。API Key 使用时间改为异步提交并按分钟合并,消除高并发请求对同一热行的锁排队。业务任务、钱包、结算、并发租约等关键数据仍保持同步复制。验证通过完整 Go 测试、go vet、竞态测试、迁移安全检查及 PostgreSQL 18 集成测试。
2026-07-29 23:25:54 +08:00
wangbo
91451b3c86
fix(cluster): 修复身份事务阻塞与 Worker 容量抖动
...
将身份协调和安全事件心跳改为 PostgreSQL 单 Leader 执行,并从独立 Worker 进程中移除身份运行时,避免多副本重复写同一状态。
为安全事件事务增加锁等待、空闲事务超时及独立回滚上下文;Worker 需连续丢失六次心跳后才判定失效,降低跨节点抖动导致的容量反复扩缩。
验证:Go 全量测试、go vet、Race 聚焦测试、PostgreSQL 18 Leader/安全事件/Worker 分配集成测试及迁移测试通过。
2026-07-29 23:04:41 +08:00
wangbo
3886048e0f
fix(gemini): 移除空返图占位并暴露失败原因
...
Gemini 图片响应未包含可提取资源时,不再返回伪造占位图,改为非重试失败并保留安全拦截、候选结束状态和上游错误等结构化诊断。\n\n同步将诊断写入 HTTP 错误、任务结果、attempt 指标和日志,确保任务失败时不结算,并补充单元及 PostgreSQL 验收测试。\n\n验证:gofmt、go test ./... -count=1、go vet ./...、迁移安全检查、pnpm openapi。
2026-07-29 19:50:43 +08:00
wangbo
012823adff
fix(cluster): 保护 API 持久队列恢复启动阶段
...
API 角色启动时同样会恢复持久队列状态,积压较多时可能超过 liveness 初始窗口并被误杀。为两地 API 增加最长 10 分钟 startupProbe,旧 Pod 在新 Pod Ready 前继续服务。\n\n验证:kubectl kustomize、服务端 dry-run、生产滚动更新。
2026-07-29 19:18:42 +08:00
wangbo
d810881901
fix(cluster): 修正 server-main 内网端口
...
生产 easyai-server 实际监听 3001,原 K3s 配置指向 3000 导致内部调用和任务进度回调 connection refused。将 SERVER_MAIN_BASE_URL 与回调地址修正为 WireGuard 内网 3001。\n\n当前 server-main v3.8.3 尚未实现任务进度回调路由,后续仍需 backend 配套并重放回调。验证:两节点访问 3001、kubectl kustomize、服务端 dry-run。
2026-07-29 19:12:27 +08:00
wangbo
4371e57212
fix(cluster): 进一步收紧媒体 Worker 并发上限
...
全局 48 槽在持续观察中仍导致宁波 Worker OOM。按实测内存占用将生产全局异步执行上限降至 16,双节点各 8 槽,单节点接管最多 16 槽;高并发请求继续由持久队列吸收。\n\n未开启 queue_size 生产策略。验证:kubectl kustomize、服务端 dry-run。
2026-07-29 18:51:26 +08:00
wangbo
8ce1f857a4
fix(cluster): 延长 Worker 启动探针保护期
...
Worker 在切换后恢复积压 River 任务时可能超过原 liveness 初始窗口,导致健康端口尚未监听就被误杀。增加最长 10 分钟 startupProbe,启动完成后仍沿用原 readiness 和 liveness。\n\n验证:kubectl kustomize、服务端 dry-run、生产滚动更新。
2026-07-29 17:49:13 +08:00
wangbo
ba01cbef53
fix(cluster): 限制生产异步 Worker 执行容量
...
切换后集中恢复积压时,单 Worker 155 槽导致数据库连接池 24/24 饱和并触发香港 Pod OOM。将集群异步执行硬上限暂定为 48,使双 Worker 正常时各分配 24 槽,与每 Pod 连接池上限对齐。\n\n未开启任何 queue_size 生产策略。验证:kubectl kustomize、服务端 dry-run。
2026-07-29 17:45:23 +08:00
wangbo
4eb394bfbd
test(cluster): 支持固定成功候选执行文件验收
...
为跨节点真实文件验收增加可选平台模型筛选,避免同名模型的失效候选掩盖共享文件链路结果。\n\n验证:真实任务 7888708e-a870-4676-bdfc-4021853365a7 由香港 Worker 执行,输入与生成结果在两节点下载的长度和 SHA-256 一致;单 attempt、结算、扣费及回调去重断言通过。
2026-07-29 17:43:34 +08:00
wangbo
de1ce2274b
fix(cluster): 等待 Worker 完全退出后执行跨节点验收
...
修正缩容期间 Deployment 已显示零就绪但旧 Worker Pod 尚在退出时仍可能领取验收任务的竞态。真实任务提交前现在会确认宁波 Worker Pod 数量为零,并在失败路径尝试取消未完成的测试任务。\n\n验证:node --check、bash -n、ShellCheck、git diff --check。
2026-07-29 17:29:15 +08:00
wangbo
a073c840ac
fix(cluster): 兼容 Worker 缩容后的空就绪状态
...
Kubernetes 在 Deployment 缩容为 0 后可能省略 status.readyReplicas;验收脚本将空值按 0 处理,避免在提交真实任务前误判失败。
2026-07-29 17:05:59 +08:00
wangbo
39b1541fa1
build(migrations): 固化 OIDC 迁移安全复核
...
为已进入主干且会重建约束的 OIDC 迁移增加 SHA-256 锁定的精确规则豁免,文件内容或违规类型变化时仍会拒绝发布。
生产只读预检确认受影响表规模很小,现有 6 条身份配置均为 schema v1,OIDC 会话和撤销水位均为空;新增校验器测试覆盖允许项和校验和篡改。
2026-07-29 16:19:00 +08:00
wangbo
9e4fc7362d
feat(queue): 增加非文本模型分布式准入队列
...
使用 PostgreSQL 统一同步与异步非文本任务的并发准入、持久化等待和 Worker 容量分配,并将生产 API 与独立 Worker 角色拆分。
补充策略管理、共享契约、OpenAPI、Kubernetes 双节点 Worker 清单及跨节点验收脚本;未默认启用任何生产 queue_size 策略。
已在原基线完成 Go、前端、迁移、Shell、Kustomize 与长任务容量验收;合入最新主干后将重新执行发布门禁。
2026-07-29 16:15:43 +08:00
chengcheng
2e5a90731b
fix(oidc): 修复登录会话落库兼容问题
...
部分已配对环境在 0090 首次执行后缺少 oidc_client_id,导致统一认证完成投影后无法写入 Gateway 服务端会话。新增幂等前向迁移补齐该列,并为 Token 处理及会话创建增加不泄露凭据的稳定失败分类和关联诊断。\n\n验证:OIDC Session 全量单测、HTTP 回调定向测试、迁移升级集成测试、隔离 PostgreSQL 跨仓库 OIDC E2E 和本地 Chrome 真实登录均通过。
2026-07-29 10:40:33 +08:00
chengcheng
fd9bbbb508
chore(git): 合并远端主分支最新变更
2026-07-29 08:59:08 +08:00
wangbo
135fb3d5b8
fix(deploy): 延长数据库副本重同步门限
...
CNPG 主库在 5 秒内晋升,但跨地域 pg_rewind 需要重传约 1.27GB,原 6 分钟等待不足。将同步副本恢复等待扩展到 30 分钟,并增加退出时清理写入探针的保护。\n\n已通过 bash -n、ShellCheck 和 git diff --check。
2026-07-29 03:46:16 +08:00
wangbo
ea33be5d69
fix(deploy): 强化跨节点真实任务验收门禁
...
修正宁波旧 Worker 在滚动退场期间仍可能领取任务的竞态,提交任务前要求仅保留唯一且明确禁用 Worker 的新 Pod。\n\n为临时验收 Key 分配 gpt-image-2 所需的最小平台访问资源,并让 multipart 参数对齐线上 2K 图像编辑请求。已通过 bash -n、ShellCheck、node --check,并完成真实跨节点任务验收。
2026-07-29 03:24:02 +08:00
wangbo
a642f43cf2
fix(deploy): 校准跨节点图片验收请求
...
真实成功样本使用 2048x2048,验收脚本改用相同默认尺寸并允许环境覆盖。修正创建 API Key 响应中的 apiKey.id 读取,每次运行前清理本脚本遗留 Key,结束时删除新 Key。\n\n验证:bash -n、ShellCheck、node --check、git diff --check。
2026-07-29 03:13:01 +08:00
wangbo
5d5284e068
test(api): 显式启用异步执行验收 Worker
...
动态并发验收直接构造 Config 时需显式开启 AsyncQueueWorkerEnabled,避免零值 false 把该测试误变为仅入队模式。\n\n验证:gofmt、go test ./internal/httpapi -count=1。
2026-07-29 03:07:13 +08:00
wangbo
9a3cc582ce
fix(api): 分离异步队列入队与执行开关
...
AI_GATEWAY_ASYNC_QUEUE_WORKER_ENABLED=false 时仍初始化 River schema 与控制客户端,允许 HTTP 请求持久化并入队;仅跳过执行客户端和动态容量 Worker。关闭上下文时同步清理控制客户端引用。\n\n新增数据库集成测试覆盖无执行 Worker 时成功创建 River job 且 attempted_by 为空。验证:gofmt、go test ./... -count=1、go vet ./...。
2026-07-29 03:03:14 +08:00
wangbo
0bef13fbd7
fix(deploy): 完整读取边缘验收响应
...
OpenAPI 响应较大,curl 通过管道交给 grep -q 时会因下游提前退出报写端关闭,造成健康服务被误判失败。改为完整读取各响应后再断言内容。\n\n验证:bash -n、ShellCheck、git diff --check。
2026-07-29 02:56:50 +08:00
wangbo
6897fb3b66
fix(deploy): 使用站点专属 NodePort
...
HostPort 被命名空间 PodSecurity baseline 拒绝,因此恢复无特权 Pod 配置,并为宁波、香港的 API/Web 增加只选择本站 Pod 的专属 NodePort Service。双 NGINX 和验收脚本按站点使用 31088/31089 与 31178/31179,避免主机本地访问共享 NodePort 时随机命中不可达的跨站 Pod。\n\n验证:kubectl kustomize、服务端 dry-run、bash -n、ShellCheck、无 hostPort/hostIP、git diff --check。
2026-07-29 02:40:57 +08:00
wangbo
006609569d
fix(deploy): 稳定边缘到站点的固定入口
...
主机本地访问跨站点 NodePort 时 kube-proxy 会随机选择不可达的对端 Pod,导致约四分之一请求被拒绝。为两地应用绑定仅位于 WireGuard 地址的 HostPort 31088/31178,双 NGINX 和集群验收改用该固定入口;原 NodePort 30088/30178 继续保留。端口处于现有公网 DROP、wg0 私网放行范围。\n\n验证:kubectl kustomize、服务端 dry-run、bash -n、ShellCheck、Secret 与 digest 静态检查、git diff --check。
2026-07-29 02:36:29 +08:00
wangbo
8e387ca553
fix(deploy): 固定 API 容器运行身份
...
API 镜像使用名称用户 appuser,Kubelet 无法仅凭 runAsNonRoot 验证其非 root 身份,导致 CreateContainerConfigError。按照 Dockerfile 中固定 UID 10001 显式设置 runAsUser、runAsGroup 和 fsGroup,确保 EmptyDir 可写且满足 Pod 安全约束。\n\n验证:kubectl kustomize 渲染成功,两个 API Deployment 均包含 UID/GID 10001,git diff --check 通过。
2026-07-29 02:28:19 +08:00
wangbo
39a8fd2ce0
fix(deploy): 移除激活阶段外网依赖
...
正式激活时不再从 GitHub 下载并重装已健康运行的 cert-manager、CloudNativePG 和 Barman Operator;Operator 安装继续保留在 prepare 阶段。激活阶段只渲染、校验并启动已锁定 digest 的应用清单,避免维护窗口受外网波动影响。\n\n验证:bash -n、ShellCheck、git diff --check。
2026-07-29 02:25:43 +08:00
wangbo
f12f352bf0
fix(deploy): 规范化数据库版本对比
...
PostgreSQL 官方与 CNPG 镜像的 server_version 展示字符串包含不同构建后缀,造成同为 18.4 的数据库被误判不一致。改用 server_version_num 进行精确版本校验。\n\n验证:旧 Docker 与已恢复 CNPG 的完整验收快照 diff 无差异,server_version_num 均为 180004。
2026-07-29 02:17:13 +08:00
wangbo
945fc83c60
fix(deploy): 修正切换快照目录表名
...
切换前验收快照误用了不存在的 gateway_providers,导致在数据库导出前触发安全回滚。改为实际的 model_catalog_providers。\n\n验证:完整快照 SQL 已对线上旧库只读执行,版本、扩展、表、序列和关键计数均成功生成。
2026-07-29 02:11:48 +08:00
wangbo
5d2796337b
fix(deploy): 等待维护入口完成重载
...
NGINX 优雅重载期间旧 worker 可能短暂继续返回 200,单次状态码断言会误触发安全回滚。改为最多轮询 15 秒等待维护页返回 503。\n\n验证:bash -n、ShellCheck、git diff --check、真实维护页 503 与恢复后公网 200。
2026-07-29 02:09:45 +08:00
wangbo
b7c03d348e
fix(deploy): 适配宁波 NGINX 配置加载路径
...
宁波 NGINX 仅加载 conf.d/*.conf,原切换脚本写入 sites-enabled 后不会生效。统一将维护页、集群入口和回滚配置写入实际加载的 conf.d 入口,并保留切换前配置备份。\n\n验证:bash -n、ShellCheck、git diff --check、双节点 nginx -t 与 prepare。
2026-07-29 02:06:12 +08:00
wangbo
74cf0ed5c8
fix(deploy): 避免验收入口端口冲突
...
将宁波跨节点验收私有入口从被 staging Docker 占用的 18088 调整为 18089,避免 NGINX reload 在切换前失败。同步更新真实文件任务验收脚本默认地址。已通过 node --check、bash -n、ShellCheck 和 git diff --check。
2026-07-29 02:02:42 +08:00
chengcheng
021ee9ab8f
fix(identity): 允许清理未收到 Manifest 的配对
...
0090 的 Manifest 约束要求无 issuer 的 Revision 保持 draft,原取消流程将其改为 failed,导致取消事务被数据库拒绝。现在由 cancelled Pairing 记录终态,并仅允许明确标记 pairing_cancelled 的预 Manifest 草稿完成清理。\n\n验证:IdentityPairing PostgreSQL 定向测试通过;PairingService 定向测试通过。
2026-07-28 18:42:13 +08:00
chengcheng
206e367dbf
fix(identity): 兼容多租户 V2 无固定租户映射
...
多租户 Revision 改为按 Token tid 动态解析租户,配对和验证不再要求 default 映射;单租户 V1 继续保留固定映射门禁。同步补齐 tenantMode 共享契约与 OpenAPI 产物。\n\n验证:Web 测试 129 项通过;pnpm lint 通过;Web 生产构建通过;pnpm openapi 通过。
2026-07-28 18:02:59 +08:00
chengcheng
5c679ff13f
feat(identity): 接入认证中心多租户登录
...
支持 Manifest V2 动态 tid 验证、Tenant Context 同步和租户内 JIT 投影,并保留 Manifest V1 与旧 Session 兼容。\n\n增加 tenantHint、租户切换、普通注册关闭及 application/principal/tenant 两级 SSF 撤销;迁移、定向安全测试和本地双租户跨仓 E2E 已通过。\n\nrelease_required=true;未执行 Release、Staging 或真实链路。
2026-07-28 17:28:35 +08:00
chengcheng
0b02e62c72
chore(git): 同步主分支发布与业务变更
...
# Conflicts:
# apps/api/go.mod
# apps/api/go.sum
2026-07-28 10:47:41 +08:00
chengcheng
9dfd1aafa5
test(identity): 禁止 Gateway 依赖认证内核语义
...
将 OIDC 与安全事件集成测试中的 Realm 风格 Issuer 收敛为稳定 Issuer,并增加扫描所有 Gateway 已跟踪源码类别的回归门禁,避免 Keycloak 或 Realm URL 成为消费方契约。\n\n验证:go vet ./...;go test -race ./... -count=1;go test ./... -count=1;govulncheck ./...。
2026-07-28 10:17:39 +08:00
wangbo
7c142f5960
fix(deploy): 补齐集群备份兼容与切换前门禁
...
阿里云 OSS 的 S3 兼容层要求 virtual-hosted addressing,且 boto3 需要使用 Signature V2。本提交为 Barman 的归档、备份、保留与恢复统一挂载 AWS 配置,并将实际 WAL 归档和近期全备设为切换硬门禁。
同时补充 CNPG/etcdutl 固定版本安装、显式主库切换、三节点逐台停机、OSS 快照下载校验与远端临时 Secret 清理。已通过 ShellCheck、Kustomize、服务端 dry-run、迁移测试、发布脚本测试、敏感信息扫描及生产 precutover 验收。
2026-07-28 06:46:09 +08:00
chengcheng
4a464cacca
feat(observability): 增加 OIDC 失败关联诊断
...
将 OIDC Access Token 与 ID Token 校验失败映射为固定安全分类,并生成 diagnosticId 关联浏览器错误与服务端日志。日志不记录授权码、Token 或底层敏感输入,且保留 errors.Is(ErrUnauthorized) 兼容语义。
验证:go test ./... -count=1(apps/api)
2026-07-28 06:19:24 +08:00
wangbo
f5b6ff72f2
fix(deploy): 无损传输证书同步 SSH 公钥
...
将包含空格与注释的 Ed25519 host key、公钥先 Base64 编码为单个 SSH 参数,远端解码后再次校验,并清理前次失败产生的无效 authorized_keys 单词行。
验证:Base64 完整往返、bash -n、ShellCheck,两次首次连接失败现场。
2026-07-28 05:53:43 +08:00
wangbo
5d8ed1f293
fix(deploy): 固定证书同步的香港 SSH Host Key
...
通过已认证的香港管理连接读取 Ed25519 host 公钥,将 WireGuard 地址 10.77.0.2 的精确键写入宁波 known_hosts,再执行证书同步;不关闭 StrictHostKeyChecking。
验证:远端 host key 格式解析、bash -n、ShellCheck,首次同步因缺少 known_hosts 的现场复现。
2026-07-28 05:53:00 +08:00
chengcheng
b51ecc5eed
fix(identity): 拒绝跨站浏览器会话端点
...
统一认证使用 HttpOnly SameSite=Strict 会话 Cookie。配对时若 Public Base 与 Web Base 不属于同一 schemeful site,浏览器回调会丢失事务 Cookie。新增基于 Public Suffix List 的同站校验,并在运行时重建时重复门禁,防止旧持久化数据绕过。
验证:go test ./... -count=1(apps/api)
2026-07-28 05:52:46 +08:00