xsl
6c77ff4989
feat(identity): Huawei Account Kit login via OIDC JWKS verification
POST /auth/huawei:JWKS 验签(kid 缓存/轮换)+ claims 严格校验 +
UnionID 映射 + T4 双令牌签发(FR-ACC-01;真实联调待 AGC 配置)。
- packages/identity/huawei.py(新建):HuaweiIdTokenVerifier——RS256 验签,
JWKS 内存缓存(TTL 可配 + 单调钟;kid 未命中强制刷新一次重试,锁内用
拉取代数防止强制刷新被新鲜缓存短路);aud/iss/exp/iat 全查,audience
空配置直接拒绝而非跳过;union_id 缺失拒绝(降级 open_id 策略不做,
留联调期决定);错误映射 40102/40101/60000,无新错误码。
HuaweiLoginRequest/HuaweiClaims 一并定义于此,未动 schemas.py。
- apps/api/routers/auth.py:追加 /huawei 端点;get_huawei_verifier 依赖
建于路由模块内(缓存到 app.state,可预注入替换),未动 deps.py;
复用 T4 的 get_or_create_by_external_identity + issue_session +
TokenPairResponse 与既有 _token_pair/_access_token。
- tests/unit/test_huawei_verifier.py:cryptography 自造 RSA + 本地 JWKS
(零外网),19 例覆盖合法 claims/错误签名/过期/aud/iss/iat 缺失/
audience 未配置/union_id 缺失/HS256 混淆/JWKS 拉取失败/kid 轮换/缓存
TTL。
- tests/integration/test_auth_huawei.py:FakeFetcher 预注入 app.state,
真实 PG 验证首次建用户 + 双令牌、同 union_id 复登同 user_id、新 access
调 /quota、refresh 可轮换、伪造 token 40102。
检查:ruff/format/mypy(T6 列表)/lint-imports 全绿;单测 257 passed
(基线 238 + 新增 19);集成 18 passed(含新增 2)。
偏差说明:无
2026-08-14 19:59:15 +08:00
..
2026-08-14 16:23:14 +08:00
2026-08-14 00:54:40 +08:00
2026-08-14 00:54:40 +08:00
2026-08-14 16:27:21 +08:00
2026-08-14 00:26:39 +08:00
2026-08-14 16:16:26 +08:00
2026-08-14 16:27:21 +08:00
2026-08-14 19:59:15 +08:00
2026-08-14 00:54:40 +08:00
2026-08-14 00:54:40 +08:00
2026-08-14 01:02:13 +08:00
2026-08-14 00:26:39 +08:00
2026-08-14 00:26:39 +08:00
2026-08-14 11:28:35 +08:00
2026-08-14 16:21:52 +08:00
2026-08-14 00:26:39 +08:00
2026-08-14 00:26:39 +08:00
2026-08-14 16:23:14 +08:00
2026-08-14 00:26:39 +08:00
2026-08-14 00:54:40 +08:00
2026-08-14 16:27:21 +08:00
2026-08-14 16:17:49 +08:00