本文档由 g2rain-shell-template 的
# 安全边界
docs/security/security-boundaries.md 自动同步生成。# Shell 负责
- 浏览器侧会话协调与 Token Store(
platform/stores/token.store.ts;不得写入公开 props)。 - SSO 编排(
runtime/auth/sso.ts)与@g2rain/http鉴权注入;签名走同域{contextPath}/lua/sign_code(OpenResty,main-shell 同款)。 - OpenResty Application-DPoP(
lua/+nginx/default.conf.template);私钥仅运行时挂载。 - 可信应用目录与
entry白名单;禁止把 URL query 当作微应用 entry。 - Auth Bridge:
REQUEST_TOKEN/TOKEN_INVALID校验 RuntimeInstance 后定向下发共享token/tokenKid/ client 浅拷贝。 - 公开运行时配置(Context Path、后端 origin)与静态 / OpenResty 托管。
- 日志中避免输出 Token、Cookie、DPoP、API Key、密码与 Secret;不得
console.log消息整包 detail。
# Shell 不负责
- IAM 的身份签发、会话存储与后端授权决策。
- Gateway 与领域服务的最终 API / 数据级鉴权。
- 子应用内部业务校验与租户规则。
# 硬性禁止
- Token、Token Kid、私钥、生产 Secret 进入源码、Mock、模板默认值、Git 或镜像层。
- 将 Token / client 放入
@g2rain/platform/main公开 props 或路由 query。 - 在文档或测试中新增真实凭据。
- 信任浏览器任意来源的
postMessage;定向消息须校验 instance / requestId(见 Auth Bridge Handler)。 - 把
/lua/sign_code误配到 Gateway;签名必须由 OpenResty(或等价)提供。
# 模板基线
- 已登录时 Header 展示
/basis/authority/user非敏感摘要;未登录跳转 SSO。 - Token 可持久化于
localStorage(g2rain-shell-token:${applicationCode}),按 applicationCode 命名空间,避免同 origin 多独立 Shell 互相覆盖;见偏差 TPL-007。 - Application-DPoP 密钥目录
lua/keys/已 gitignore;用scripts/generate-sign-keys.*本地生成。 REQUEST_TOKEN与TOKEN_INVALID已接;同页消息可含 client 浅拷贝,见偏差 TPL-009。