-- ZITADEL 统一登录(v2.9.0):身份绑定 + 一次性授权 state -- 身份主键是 (issuer, subject),email 仅作资料展示、绝不参与判定(实例无 SMTP,邮箱可能缺失) -- OIDC 身份绑定:统一登录账号 ↔ 本地 users 的映射(重复登录同一 subject 刷新资料,不报冲突) CREATE TABLE IF NOT EXISTS oidc_identities ( id TEXT PRIMARY KEY, issuer TEXT NOT NULL, -- IdP 签发者(如 https://auth.my.qiaonao.net) subject TEXT NOT NULL, -- IdP 的 sub(身份主键的一部分) user_id TEXT NOT NULL, -- 本地 users.id display_name TEXT, -- 展示名(兜底链取值,可为空) email TEXT, -- 纯资料,可为空,永不作为身份键 created_at TEXT NOT NULL, updated_at TEXT NOT NULL, UNIQUE(issuer, subject) ); CREATE INDEX IF NOT EXISTS idx_oidc_identities_user ON oidc_identities(user_id); -- OIDC 一次性 state:承载 code_verifier(PKCE)与回跳路径,用后即删 CREATE TABLE IF NOT EXISTS oidc_states ( state TEXT PRIMARY KEY, code_verifier TEXT NOT NULL, return_to TEXT NOT NULL, created_at TEXT NOT NULL, expires_at TEXT NOT NULL );