# 第四阶段:外部服务解耦 状态:已完成。 ## 目标 - 完全移除 Supabase Auth / Storage 兼容层。 - 业务层只依赖身份、短信、对象存储、支付和通知抽象。 - 第三方 SDK、账号、bucket、密钥和 claim 结构只出现在 Infrastructure provider 边界。 ## 结果 - Provider 配置统一为 `TenantExternalProvider` + `TenantSecret`。 - `Capability` 覆盖 Identity、ObjectStorage、Sms、Payment、Notification。 - 同一租户内 `Capability + Provider` 唯一。 - `ConfigPublic` 只保存公开配置;敏感字段必须进入 `TenantSecret`。 - 删除旧 `TenantAuthProvider`、`TenantPaymentAccount` 和 Supabase storage provider 路径。 - 阿里云 OSS、阿里云短信、微信、支付宝 SDK 只允许在 Infrastructure 使用。 ## 接口边界 - `IIdentityProvider`:封装 password、sms、wechat_web、wechat_miniapp 身份解析,不签发 JWT。 - `ISmsProvider`:只负责发送,验证码生成、哈希、频控和校验归业务服务。 - `IObjectStorageService`:bucket/provider 从租户配置解析,业务输入不得任意覆盖。 - `IPaymentProvider`:支付账户和密钥从统一 Provider 配置加载。 - `INotificationProvider`:默认站内通知持久化,后续外发通道按 provider 扩展。 ## 验收 - 租户 A/B Provider 配置和密钥互不读取。 - `ConfigPublic` 拒绝 `secret`、`token`、`key`、`privateKey` 等敏感字段。 - 资产上传不能伪造 bucket/provider。 - 业务层不引用第三方 SDK namespace。 - 生产代码不回流 Supabase provider 或旧专用配置表。 ```bash dotnet build TIKU-BACKEND.slnx --no-restore dotnet test Tiku.UnitTests/Tiku.UnitTests.csproj --no-build dotnet test Tiku.IntegrationTests/Tiku.IntegrationTests.csproj --no-build dotnet ef migrations script --project Tiku.Infrastructure --startup-project Tiku.DbMigrator git diff --check ```