Files
Genarrative/server-rs/crates/platform-auth/README.md

2.9 KiB
Raw Blame History

platform-auth 鉴权平台适配 crate 说明

日期:2026-04-21

1. crate 职责

platform-auth 是 Rust 工作区中的鉴权平台适配 crate当前与后续负责

  1. Access token JWT 的 claims 结构、签发与校验适配。
  2. refresh cookie 的读写、签名与轮换适配。
  3. 手机验证码发送、校验与外部 provider 适配。
  4. 微信 OAuth start / callback 的平台调用适配。
  5. module-authcrates/api-server 复用的鉴权基础设施能力。

2. 当前阶段已落地内容

本阶段已经完成 JWT 基础能力首版落地:

  1. 新增 JwtConfig,统一管理 issuersecret 与 access token TTL。
  2. 新增 AccessTokenClaimsInputAccessTokenClaims,把文档中冻结的 iss/sub/sid/provider/roles/ver/phone_verified/binding_status/display_name 映射到 Rust 结构。
  3. 新增 sign_access_token(...),按 HS256 签发 access token。
  4. 新增 verify_access_token(...),统一校验 iss/sub/exp/iat 与 JWT 签名。
  5. 增加单元测试,覆盖基本签发/校验、issuer 不匹配与空角色拒绝。

当前阶段仍未进入:

  1. refresh cookie 读写与轮换。
  2. 短信 provider 适配。
  3. 微信 OAuth 适配。
  4. module-auth 领域规则与数据库真相读取。

3. 本阶段 API

当前开放给工作区其它 crate 的最小 API

  1. JwtConfig::new(...)
  2. AccessTokenClaims::from_input(...)
  3. sign_access_token(...)
  4. verify_access_token(...)
  5. AuthProvider
  6. BindingStatus

4. 配置口径

当前 api-server 接入时采用以下环境变量口径:

  1. GENARRATIVE_JWT_ISSUER 默认值:https://auth.genarrative.local
  2. GENARRATIVE_JWT_SECRET 默认值:genarrative-dev-secret
  3. GENARRATIVE_JWT_ACCESS_TOKEN_TTL_SECONDS 默认值:7200
  4. 兼容读取旧变量:JWT_ISSUERJWT_SECRETJWT_EXPIRES_IN

说明:

  1. JWT_EXPIRES_IN 当前兼容 2h30m900 这类简单时长格式。
  2. 当前阶段保持 HS256,优先保证与旧 Node 方案迁移平滑。

5. 边界约束

  1. platform-auth 只承接平台适配,不承接 module-auth 的业务规则和状态真相。
  2. sub 必须是稳定 user_idsid 必须是会话 ID不能退化为一次 token 的随机 ID。
  3. 不允许把手机号、openid、refresh token hash、风控状态等敏感或高频变化字段塞进 JWT。
  4. 鉴权状态最终由 module-authcrates/spacetime-module 管理,前端接口由 crates/api-server 暴露。
  5. 不允许把短信、微信、Cookie、JWT 等外部细节重新散落到多个业务模块中各自实现。

6. 关联文档

  1. ../../../docs/technical/OIDC_JWT_CLAIMS_DESIGN_2026-04-21.md
  2. ../../../docs/technical/PLATFORM_AUTH_JWT_ADAPTER_DESIGN_2026-04-21.md