feat: add provider login flow
This commit is contained in:
+19
-3
@@ -108,11 +108,27 @@ Fake 只用于开发和测试,不能作为真实 ABox 或真实硬件验收证
|
||||
|
||||
Bridge 本轮尚未加入 `android/app` 依赖,App debug 仍绑定 Fake。提供方选择、安全凭据和真实 Bridge 绑定由后续 `feat/provider-login` 完成;在获批的传输控制方案明确前,不得在 App 中启用真实 Bridge。协议证据与限制记录在 `docs/protocol/absdk-0630.md`。
|
||||
|
||||
## 9. 后续边界
|
||||
## 9. Provider Session
|
||||
|
||||
`:android:core:session` 负责提供方登录的持久化与 Android 安全边界:
|
||||
|
||||
- `ProviderProfileStore` 使用 DataStore 保存 profile、当前活动 profile、记住用户名和自动登录开关;
|
||||
- `CredentialStore` 使用 Android Keystore 中的 AES-256-GCM 密钥加密自动登录凭据,DataStore 只保存带随机 IV 的密文;
|
||||
- `ProviderProfileId` 作为 GCM AAD,防止不同 profile 的密文互换;
|
||||
- `LocalSessionGateway` 只维护本地内存 Session,不调用 HTTP 或 ABSDK;
|
||||
- `UnavailableRemoteSessionGateway` 在远端入口未获批准时明确拒绝登录。
|
||||
|
||||
纯 Kotlin `SessionCoordinator` 统一处理启动恢复、提供方选择、登录偏好、自动登录、Token 失效重登、退出和切换提供方。远端退出清除密码和 Session,但保留 profile 与 remembered username;本地体验退出后回到提供方选择。
|
||||
|
||||
App 按构建变体声明远端可用性:debug 的 ABox 入口明确是开发模拟,release 的 ABox 因传输安全待确认而禁用;兼容后端在协议明确前始终禁用;本地体验始终可用。App 没有依赖或创建 `AbsdkBridge`,也没有对 `@CleartextAbsdkTransport` opt-in。
|
||||
|
||||
登录完成后进入 `authenticated` 协作路由。当前仅有占位页面,设备列表与主导航由 alZerNest 的设备导航模块接管。
|
||||
|
||||
## 10. 后续边界
|
||||
|
||||
后续 KremeCN 工作保持为独立短期分支:
|
||||
|
||||
- `feat/provider-login`:提供方入口、安全凭据、自动登录、重新登录和真实 Bridge 绑定;
|
||||
- 在获批传输控制明确后,单独评审真实 ABox Bridge 的 App 绑定;
|
||||
- `feat/compatible-server`:在协议与连接方式确认后建立服务端、CLI 和 Docker 基础。
|
||||
|
||||
Room、DataStore 和 Android Keystore 的具体 schema/key 只在对应数据所有权明确后创建。历史示例中的 AsyncTask、明文密码存储、全局明文网络和散落 SDK 调用不得进入正式架构。
|
||||
Room 与设备业务 DataStore 的具体 schema/key 只在对应数据所有权明确后创建。历史示例中的 AsyncTask、明文密码存储、全局明文网络和散落 SDK 调用不得进入正式架构。
|
||||
|
||||
Reference in New Issue
Block a user