# SSO 应用默认身份水印规范

更新：2026-09-22。用户已明确要求：后续开发的新网站、新应用，只要接入 SSO，就默认同时接入统一身份水印，作为开发与发布验收的一部分，无需逐个再询问是否增加水印。适用于业务网页及 App 内打开的网页；原生界面需平台适配，不能声称网页脚本自动覆盖原生界面。

## 默认效果

每页只保留一层全局身份水印，沿用电芯平台样式：单行“凝聚未来新能源  姓名  时间”，根据背景自适应明暗（浅底深色、深底浅色）、18%不透明度、倾斜24度、UTC+8时间，移动端自适应。弹窗、全屏和页面切换后保持覆盖，不拦截点击、输入或光标操作。用户名仅从服务端验证的当前登录会话取得，不接受 URL、自填昵称或本地缓存作为身份依据。退出、身份切换或验证失败时不得继续显示上一个用户姓名。

## 实际接入步骤

1. 沿用应用现有的 SSO 会话与权限校验，提供同源身份接口；成功返回 JSON，例如 `{"user":{"name":"虚构用户"},"verifiedAt":1790000000}`，verifiedAt 为服务器 Unix 秒。未登录返回401，禁止返回令牌或密钥，响应应 no-store。仅注册 SSO 客户端不等于已安装水印。
2. 复用已发布组件 https://ai.njwl.ai/guide/assets/identity-watermark.v1.js 。当前实现使用源码中的 routes 路径映射；新应用必须登记并加入实际页面前缀和同源身份接口，核对返回字段。仅复制 script 标签而不添加路由，不会启用新应用水印。专用域名采用应用自己的组件副本及适配，避免修改共享根路径映射影响其他域名。将组件版本、SHA256与适配源码纳入项目交付。
3. 在所有业务 HTML 入口统一引入组件（模板、应用外壳或已验证的 HTML 代理注入），不能只装在首页。已有香港别名的站点可用 `<script defer src="/_njwl/identity-watermark.v1.js"></script>`；其他部署需先提供真实可访问的同源静态地址。保持现有 CSP，核对脚本加载、身份请求及图片策略；新域名不得假定能读 Portal Cookie或跨域身份接口。
4. 有旧页面覆盖水印时，只关闭已确认的旧覆盖层，保留业务图片、PDF与导出水印。旧脚本如兼有心跳、访问记录等功能，保留这些功能。不要叠加第二套全局层。
5. 将本规范链接及“接入SSO默认同时接入身份水印”写入新项目 AGENTS.md/README 和发布验收清单。没有完成水印适配与验证，不得将 SSO 接入任务标为全部完成；用户另行明确例外时按用户要求执行。

## 接入模板与验收

```text
SSO 身份水印：默认启用
业务域名与全部页面前缀：
服务端验证的同源身份接口与返回字段：
组件来源、SHA256、适配源码与静态地址：
旧覆盖层去重范围（无则填无）：
验收：登录身份正确；刷新/跳转/手机/弹窗/全屏只有一层；输入与点击正常；退出/换号/接口失败不残留旧姓名
真实会话验收结果与尚未完成项：
发布登记号与回滚版本：
```

这是后续开发的默认要求，当前没有“注册任意 SSO 应用就自动注入网页”的全局技术机制。外部第三方网页、原生界面和下载文件不因接入 SSO 自动获得网页覆盖水印。

2026-09-22 深色模式修复：共享组件以白色18%透明度配合 difference 合成，根据实际底色产生对比，不依赖安卓强制深色是否触发主题事件。保持单层；验收须增加深浅背景切换及深色页面内的浅色弹窗。
