绑定第三方账号

验证状态:已源码核验、未联调(无 app 调用图);services 基线:源码归纳 @ 2026-09-14

用途与场景

把一个第三方账号标识(类型 + 账号)登记到当前登录用户名下,建立「第三方账号 → 平台用户」的绑定关系。绑定成功后即可用第三方账号登录免密换取该用户的登录态。App 场景:第三方平台 OAuth/授权成功后,取其用户标识作为 thirdPartyAccount 在已登录状态下落绑定。

App 现役依据

判定证据 内容
旧 app 文档收录记录 旧 app 文档仓在 docs/api/main-service/system-api/user-center/third-party-account/bind/ 收录本端点,属 App 既有调用面
两代分工语义 /v1/retail 第二代无第三方绑定对应物;第三方绑定的现役写通道只有本端点(管理端另有 @PreAuthorizeThirdPartyAccountController CRUD,非 app 面)
后端持续维护迹象 ThirdPartyAccountPlusController 2026-08-27 仍有维护提交;第三方绑定表随注销链路(UserDeactivateListener)一并纳入删除范围,属在维护的活跃数据面

端点

POST /main-service/system-api/user-center/third-party-account/bind — 把第三方账号标识绑定到当前登录用户名下。

端点全量事实(参数、请求/响应字段、错误码、权限点)见清单层 user-center · third-party-account 第三方账号;绑定语义(全局唯一占用、并发锁、code 占位不校验、app 面无解绑端点)见用户中心业务 · third-party-account 第三方账号

动线与完成判据

先登录、后绑定(绑定归属取当前认证上下文)。status=200data=true 表示绑定记录已落库、归属当前登录用户;此后可用该(类型, 账号)组合走第三方账号登录。绑定成功后立即生效;重复绑定同一组合不会幂等成功,而是业务拒绝。

错误与边界

绑定前提是有效登录态;同一(类型, 账号)组合全局唯一占用(不限绑定者),并发绑定冲突走 striped 锁(一端成功、另一端并发错误)。业务失败均为 HTTP 200 + status=422 族,参数缺失或超长走请求校验出口,判定口径见错误响应差异

调用关系与资源清理

无客户端长连接资源需要释放。绑定成功后无需刷新既有登录态(绑定不影响当前 token);数据去向:绑定行归属当前用户名,注销时随个人空间数据异步删除(见注销账号(零售端))。

已知缺口

未执行真实联调:code 不被服务端校验,App 必须自行保证 thirdPartyAccount 来源可信——绑定链路的鉴权强度等于登录态本身,拿到他人有效 token 即可把任意第三方账号绑到他人名下(进而免密登录),这是本端点当前契约的已知安全边界(wire 细节见用户中心业务 · third-party-account 第三方账号)。解绑在 app 面不可达的行为、以及第三方登录错误文案与 bind 查重文案的差异均已按源码核验但无实测佐证。