3.6 KiB
3.6 KiB
platform-auth 鉴权平台适配 crate 说明
日期:2026-04-21
1. crate 职责
platform-auth 是 Rust 工作区中的鉴权平台适配 crate,当前与后续负责:
- Access token JWT 的 claims 结构、签发与校验适配。
- refresh cookie 的读写、签名与轮换适配。
- 手机验证码发送、校验与外部 provider 适配。
- 微信 OAuth start / callback 的平台调用适配。
- 供
module-auth与crates/api-server复用的鉴权基础设施能力。
2. 当前阶段已落地内容
本阶段已经完成 JWT 基础能力首版落地:
- 新增
JwtConfig,统一管理issuer、secret与 access token TTL。 - 新增
AccessTokenClaimsInput与AccessTokenClaims,把文档中冻结的iss/sub/sid/provider/roles/ver/phone_verified/binding_status/display_name映射到 Rust 结构。 - 新增
sign_access_token(...),按HS256签发 access token。 - 新增
verify_access_token(...),统一校验iss/sub/exp/iat与 JWT 签名。 - 新增
RefreshCookieConfig、RefreshCookieSameSite与read_refresh_session_token(...),统一 refresh cookie 读取口径。 - 增加单元测试,覆盖 JWT 回环、issuer 不匹配、空角色拒绝与 refresh cookie 读取。
当前阶段仍未进入:
- refresh cookie 写入与轮换。
- 短信 provider 适配。
- 微信 OAuth 适配。
module-auth领域规则与数据库真相读取。
3. 本阶段 API
当前开放给工作区其它 crate 的最小 API:
JwtConfig::new(...)AccessTokenClaims::from_input(...)sign_access_token(...)verify_access_token(...)RefreshCookieConfig::new(...)read_refresh_session_token(...)AuthProviderBindingStatusRefreshCookieSameSite
4. 配置口径
当前 api-server 接入时采用以下环境变量口径:
GENARRATIVE_JWT_ISSUER默认值:https://auth.genarrative.localGENARRATIVE_JWT_SECRET默认值:genarrative-dev-secretGENARRATIVE_JWT_ACCESS_TOKEN_TTL_SECONDS默认值:7200- 兼容读取旧变量:
JWT_ISSUER、JWT_SECRET、JWT_EXPIRES_IN
说明:
JWT_EXPIRES_IN当前兼容2h、30m、900这类简单时长格式。- 当前阶段保持
HS256,优先保证与旧 Node 方案迁移平滑。 - refresh cookie 当前采用
AUTH_REFRESH_COOKIE_NAME、AUTH_REFRESH_COOKIE_PATH、AUTH_REFRESH_COOKIE_SAME_SITE、AUTH_REFRESH_COOKIE_SECURE、AUTH_REFRESH_SESSION_TTL_DAYS。 - refresh cookie 默认值与 Node 基线保持一致:
genarrative_refresh_session、/api/auth、Lax、false、30天。
5. 边界约束
platform-auth只承接平台适配,不承接module-auth的业务规则和状态真相。sub必须是稳定user_id,sid必须是会话 ID,不能退化为一次 token 的随机 ID。- 不允许把手机号、openid、refresh token hash、风控状态等敏感或高频变化字段塞进 JWT。
- 鉴权状态最终由
module-auth与crates/spacetime-module管理,前端接口由crates/api-server暴露。 - 不允许把短信、微信、Cookie、JWT 等外部细节重新散落到多个业务模块中各自实现。