easyai-ai-gateway/docs/security/ssf-session-revocation.md

4.2 KiB
Raw Blame History

SSF/CAEP 实时会话撤销运行手册

Gateway 可选接收 Auth Center 通过 RFC 8935 Push 投递的 RFC 8417 Security Event Token并处理 OpenID CAEP session-revoked。默认关闭;关闭时不会注册接收路由或启动状态机,也不会改变 OIDC、BFF、API Key 或 Legacy JWT 行为。

启用前提

  • Auth Center 已创建属于当前 Application/租户的 paused StreamAudience 为 urn:easyai:ssf:receiver:{application-public-id}
  • Gateway OIDC isstid 与 Stream 绑定完全一致Stream ID 为公开 UUID不使用认证内核 ID。
  • 接收 Bearer、Management Client Secret、RFC 7662 Client Secret 仅从 Git 忽略的 .env、Kubernetes Secret 或 Secret Manager 注入。
  • OIDC_SECURITY_EVENTS_PUBLIC_ENDPOINT 必须是外部可访问的精确 HTTPS 地址;本地测试环境才允许 localhost HTTP。
  • Management Client 至少有 ssf.stream.read ssf.stream.verify,不能使用浏览器 PKCE Client。

完整配置键见仓库根目录 .env.example。启用时 OIDC_SECURITY_EVENTS_ENABLED=true,且 RFC 7662 Client ID/Secret 必须同时存在,否则启动失败。

启用顺序

  1. 运行数据库迁移,部署仍保持功能关闭。
  2. 在 Secret Store 创建接收 Bearer、Management Client Secret 和内省 Client Secret不要把值放进日志或工单。
  3. 启用 Gateway。启动模式为 bootstrap,所有 OIDC Token 都先内省。
  4. 在 Auth Center 对 paused Stream 发起 Verification确认 Gateway 返回空 Body 的 202
  5. 启用 Stream。首次 Verification 成功后仍内省 360 秒,覆盖启用前已签发的最长 300 秒 Token。
  6. 观察 easyai_gateway_ssf_mode{mode="push_healthy"} 变为 1再执行测试用户撤销。

健康时 Gateway 每 60 秒请求一次 Verification不按业务 QPS 请求 Auth Center。180 秒没有匹配的有效 Verification 会进入 introspection_fallback;只有最近收到的 Stream 状态为 enabled 时,连续两次 Verification 成功才会恢复,paused/disabled 状态下心跳不会错误恢复推送信任。降级期间内省不可用会对 OIDC 返回可审计的 503API Key 继续工作。

零停机 Bearer 轮换

  1. 在 Gateway 写入 OIDC_SECURITY_EVENTS_BEARER_SECRET_NEXT,同时接受 current/next。
  2. 更新 Auth Center 的 Stream credential_ref 指向 next。
  3. 发起 Verification并确认投递和状态机健康。
  4. 等待至少 180 秒后,将 next 提升为 current 并清空旧值。

Gateway 使用常量时间比较两个值。响应、日志、审计和指标都不得包含 Authorization Header 或原始 SET。

监控与告警

GET /metrics 输出以下低基数指标;生产入口应仅允许监控网络访问该路径:

  • easyai_gateway_ssf_receipts_total{outcome}accepted/rejected/duplicate。
  • easyai_gateway_ssf_sessions_deleted_total:被撤销删除的 BFF Session。
  • easyai_gateway_ssf_watermark_rejections_total:本地水位拒绝的 Token。
  • easyai_gateway_ssf_processing_duration_secondsReceiver 数据库事务处理直方图,用于 P99 告警。
  • easyai_gateway_ssf_verification_age_secondseasyai_gateway_ssf_mode{mode}
  • easyai_gateway_ssf_heartbeat_requests_total{outcome}
  • easyai_gateway_oidc_introspection_total{outcome}
  • easyai_gateway_jwks_refresh_failures_total{source}SSF/OIDC JWKS 刷新失败。

至少配置以下告警Verification age 超过 120 秒、fallback 超过 5 分钟、内省 failed 增长、SET rejected 增长、撤销端到端 P99 超过 3 秒。日志只能携带脱敏 Trace ID、Audit ID 和错误类别。

回滚

先在 Auth Center 暂停 Stream再保持 Gateway 启用但持续使用 RFC 7662确认没有遗漏撤销后才关闭接收功能。保留迁移表和 Secret不做破坏性数据库回滚。Legacy HS256 Token 和 API Key 不在本协议撤销范围内。

验收证据

真实链路验收只能使用明确标记为测试用途的 Application且必须在自动化测试通过后执行。报告需包含脱敏 Trace、Claims 结构、截图、Audit ID、投递延迟、fallback 与恢复证据。涉及人工、真实设备或第三方操作时记录 SKIPPED_HUMAN_OR_THIRD_PARTY_REQUIREDMock、契约和安全测试不得跳过。