docs:补充浏览器免重登 + CDROP_SESSION_SECRET 配置

- README:已落地补「浏览器免重登 + PWA」一项;prod 配置清单新增
  CDROP_SESSION_SECRET(prod 强制非空,缺则拒启动)
- .env.example、docker/compose.snippet.yaml:补 CDROP_SESSION_SECRET 模板项
This commit is contained in:
2026-06-16 01:08:05 +08:00
parent e51666c52e
commit e903b03afe
3 changed files with 9 additions and 2 deletions
+3
View File
@@ -14,6 +14,9 @@ CDROP_DEV_TOKEN=replace-with-32-byte-random-base64
# CDROP_OIDC_CLIENT_ID=your-client-id # CDROP_OIDC_CLIENT_ID=your-client-id
# CDROP_OIDC_REDIRECT_URI=https://your-domain.example/oauth/callback # CDROP_OIDC_REDIRECT_URI=https://your-domain.example/oauth/callback
# CDROP_OIDC_SCOPES=openid profile email # CDROP_OIDC_SCOPES=openid profile email
# prod 强制非空:浏览器免重登会话的 refresh_token 落盘加密密钥(任意长度高熵串,
# 内部 SHA-256 派生为 32 字节 AES-256 密钥)。留空则 prod 启动期校验失败、拒启动。
# CDROP_SESSION_SECRET=
# CDROP_HS256_SECRET= # CDROP_HS256_SECRET=
# CDROP_TURN_URL=stun:your-stun.example:3478 # CDROP_TURN_URL=stun:your-stun.example:3478
+4 -2
View File
@@ -24,6 +24,7 @@ MVPM0M13)已上线 prodOIDC PKCE 接入自建 CasdoorCloudflare Re
- **剪贴板同步**:单条覆写式云剪贴板(短 TTL 限暴露面)+ 文本消息一次性通道 - **剪贴板同步**:单条覆写式云剪贴板(短 TTL 限暴露面)+ 文本消息一次性通道
- **桌面客户端**Wails v2macOS universal `.app` + Windows `.exe`)—— 瘦客户端复用 web,业务全走后端 APIrefresh_token 存系统密钥库(信封加密) - **桌面客户端**Wails v2macOS universal `.app` + Windows `.exe`)—— 瘦客户端复用 web,业务全走后端 APIrefresh_token 存系统密钥库(信封加密)
- **浏览器免重登 + PWA**:可安装为独立 PWA;浏览器侧 refresh_token 不再进 JS,改由服务端 HttpOnly cookie 会话持有(AES-256-GCM 落盘),关闭重开自动免重登(7 天滑动失活),设备名随会话持久化(抗 PWA 存储清除)
- **iOS Shortcut**HS256 scoped token 手动签发路径(网页签发 UI 暂停) - **iOS Shortcut**HS256 scoped token 手动签发路径(网页签发 UI 暂停)
- **安全加固**:中继会话防耗尽、HS256 强制 jti、prod 强制 audience、TURN 短 TTL、OAuth 端点限流(详见 CHANGELOG - **安全加固**:中继会话防耗尽、HS256 强制 jti、prod 强制 audience、TURN 短 TTL、OAuth 端点限流(详见 CHANGELOG
@@ -156,6 +157,7 @@ env 见 [`.env.example`](.env.example) / `compose.snippet.yaml`。要点:
1. `CDROP_AUTH_MODE=prod`,删掉 `CDROP_DEV_TOKEN` 1. `CDROP_AUTH_MODE=prod`,删掉 `CDROP_DEV_TOKEN`
2.`CDROP_OIDC_*`(你的 OIDC provider,如自建 Casdoor / Keycloak);在 IdP 建 confidential + PKCE client,回调白名单加 `https://<your-domain>/oauth/callback` 2.`CDROP_OIDC_*`(你的 OIDC provider,如自建 Casdoor / Keycloak);在 IdP 建 confidential + PKCE client,回调白名单加 `https://<your-domain>/oauth/callback`
3. **`CDROP_OIDC_AUDIENCE` 必须非空**(你的 client_id,多值逗号分隔)—— 留空会跳过 audience 校验,同一 JWKS 下其他应用的 token 也能验过;后端 prod 启动期强制此项,缺则拒启动 3. **`CDROP_OIDC_AUDIENCE` 必须非空**(你的 client_id,多值逗号分隔)—— 留空会跳过 audience 校验,同一 JWKS 下其他应用的 token 也能验过;后端 prod 启动期强制此项,缺则拒启动
4. `CDROP_HS256_SECRET`iOS Shortcut scoped token 用,不用可留空) 4. **`CDROP_SESSION_SECRET` 必须非空**(任意长度高熵串)—— 浏览器免重登会话的 refresh_token 落盘加密密钥(内部 SHA-256 派生 AES-256 密钥);后端 prod 启动期强制此项,缺则拒启动
5. 可选 `CDROP_CF_TURN_KEY_ID` + `CDROP_CF_TURN_API_TOKEN` 启用 Cloudflare Realtime TURN over TLS(不配则前端 STUN-only 兜底 5. `CDROP_HS256_SECRET`iOS Shortcut scoped token 用,不用可留空
6. 可选 `CDROP_CF_TURN_KEY_ID` + `CDROP_CF_TURN_API_TOKEN` 启用 Cloudflare Realtime TURN over TLS(不配则前端 STUN-only 兜底)
+2
View File
@@ -31,6 +31,8 @@ NN-cdrop:
# CDROP_OIDC_CLIENT_ID: <你的 OAuth client_id> # CDROP_OIDC_CLIENT_ID: <你的 OAuth client_id>
# CDROP_OIDC_REDIRECT_URI: https://your-domain.example/oauth/callback # CDROP_OIDC_REDIRECT_URI: https://your-domain.example/oauth/callback
# CDROP_OIDC_SCOPES: "openid profile email" # CDROP_OIDC_SCOPES: "openid profile email"
# prod 强制非空:浏览器免重登会话 refresh_token 落盘加密密钥(SHA-256 派生 AES-256
# CDROP_SESSION_SECRET: REPLACE_WITH_RANDOM_HEX64
# CDROP_HS256_SECRET: REPLACE_WITH_RANDOM_HEX64 # CDROP_HS256_SECRET: REPLACE_WITH_RANDOM_HEX64
# ---- 可选:Cloudflare Realtime TURN over TLS(不配则前端 STUN-only 兜底)---- # ---- 可选:Cloudflare Realtime TURN over TLS(不配则前端 STUN-only 兜底)----