认证接入
GGGGoods 当前通过外部认证中心完成托管登录页、authorization code 换 token、refresh token 轮换以及 userinfo 拉取。
必要环境变量
text
AUTH_CENTER_LOGIN_URL=https://login.ggggoods.com/login
AUTH_CENTER_API_BASE=https://api.ggggoods.com/api
AUTH_CLIENT_ID=<oauth_client_id>
AUTH_CLIENT_SECRET=<oauth_client_secret>
AUTH_TENANT=ggggoods
AUTH_SCOPE=basic offline_access
BETTER_AUTH_SECRET=<shared_hs256_secret>标准链路
- Website 调用 Worker 的 /api/auth/login-url
- Worker 生成托管登录页 URL 并带上 state
- 用户登录后回到 /auth/callback
- Website 调用 Worker 的 /api/auth/exchange-code
- Worker 调外部认证中心 /oauth/token 和 /oauth/userinfo
- Worker 将用户 upsert 到 D1
- Website 保存 access token / refresh token 并继续访问 account/billing API
兼容模式
如果认证中心仍返回 token 直接回跳,/auth/callback 也能接收 token 并通过 /api/auth/session 建立本地会话,但当前线上实现与标准 code flow 不同:
/auth/callback?token=<jwt>先在浏览器端按 JWTiss请求签发方的/api/oauth/userinfo- 浏览器将
Authorization: Bearer <jwt>和补充身份头一起发给业务 Worker 的/api/auth/session - 业务 Worker 使用
BETTER_AUTH_SECRET本地校验 HS256 JWT - Worker 用浏览器补充的身份信息或本地 D1 已有用户记录恢复 session
- 恢复成功后,Website 将 access token 和 session 快照写入 Pinia、cookie 与浏览器存储
兼容模式下的补充身份头为:
text
X-Auth-User-Id
X-Auth-Email
X-Auth-Email-Verified
X-Auth-Organization-Id
X-Auth-Scope现网注意点
- legacy
workers.dev的userinfo不应再被业务 Worker 当成唯一依赖,优先本地 JWT 校验可以减少 404 和 522 探测噪音 - 首次兼容登录时,JWT 若不包含
email,就需要浏览器端先拿一次userinfo再把身份提示带给业务 Worker - 后续带同一 JWT 的 API 请求可以直接由业务 Worker 基于
BETTER_AUTH_SECRET和本地 D1 用户记录恢复会话