feat(server): OIDC 登录支持(F23)

- 引入 openid-client,新增 /api/auth/oidc/login + /api/auth/oidc/callback
- 通过 email 绑定既有员工账号,保留密码登录 fallback
- OIDC 状态存 cookie(HMAC) + PKCE + SameSite=lax 防 CSRF
- 更新 env/README 与 v3 CSV 状态推进
这个提交包含在:
2026-02-09 21:01:36 +08:00
父节点 1855a82011
当前提交 3cc3013d5a
共修改 10 个文件,包含 386 行新增和 1 行删除
+18
查看文件
@@ -64,6 +64,12 @@ services:
APP_ORIGIN: ${APP_ORIGIN}
JWT_SECRET: ${JWT_SECRET}
FIELD_ENCRYPTION_KEY: ${FIELD_ENCRYPTION_KEY}
OIDC_ENABLED: ${OIDC_ENABLED}
OIDC_ISSUER_URL: ${OIDC_ISSUER_URL}
OIDC_CLIENT_ID: ${OIDC_CLIENT_ID}
OIDC_CLIENT_SECRET: ${OIDC_CLIENT_SECRET}
OIDC_REDIRECT_URI: ${OIDC_REDIRECT_URI}
OIDC_SCOPES: ${OIDC_SCOPES}
DATABASE_URL: ${DATABASE_URL}
STORAGE_DIR: ${STORAGE_DIR}
STORAGE_DRIVER: ${STORAGE_DRIVER}
@@ -120,6 +126,12 @@ services:
APP_ORIGIN: ${APP_ORIGIN}
JWT_SECRET: ${JWT_SECRET}
FIELD_ENCRYPTION_KEY: ${FIELD_ENCRYPTION_KEY}
OIDC_ENABLED: ${OIDC_ENABLED}
OIDC_ISSUER_URL: ${OIDC_ISSUER_URL}
OIDC_CLIENT_ID: ${OIDC_CLIENT_ID}
OIDC_CLIENT_SECRET: ${OIDC_CLIENT_SECRET}
OIDC_REDIRECT_URI: ${OIDC_REDIRECT_URI}
OIDC_SCOPES: ${OIDC_SCOPES}
DATABASE_URL: ${DATABASE_URL}
STORAGE_DIR: ${STORAGE_DIR}
STORAGE_DRIVER: ${STORAGE_DRIVER}
@@ -164,6 +176,12 @@ services:
APP_ORIGIN: ${APP_ORIGIN}
JWT_SECRET: ${JWT_SECRET}
FIELD_ENCRYPTION_KEY: ${FIELD_ENCRYPTION_KEY}
OIDC_ENABLED: ${OIDC_ENABLED}
OIDC_ISSUER_URL: ${OIDC_ISSUER_URL}
OIDC_CLIENT_ID: ${OIDC_CLIENT_ID}
OIDC_CLIENT_SECRET: ${OIDC_CLIENT_SECRET}
OIDC_REDIRECT_URI: ${OIDC_REDIRECT_URI}
OIDC_SCOPES: ${OIDC_SCOPES}
DATABASE_URL: ${DATABASE_URL}
STORAGE_DIR: ${STORAGE_DIR}
STORAGE_DRIVER: ${STORAGE_DRIVER}