验证状态:已源码核验、未联调(无 app 调用图);services 基线:源码归纳 @ 2026-09-14
把一个第三方账号标识(类型 + 账号)登记到当前登录用户名下,建立「第三方账号 → 平台用户」的绑定关系。绑定成功后即可用第三方账号登录免密换取该用户的登录态。App 场景:第三方平台 OAuth/授权成功后,取其用户标识作为 thirdPartyAccount 在已登录状态下落绑定。
| 判定证据 | 内容 |
|---|---|
| 旧 app 文档收录记录 | 旧 app 文档仓在 docs/api/main-service/system-api/user-center/third-party-account/bind/ 收录本端点,属 App 既有调用面 |
| 两代分工语义 | /v1/retail 第二代无第三方绑定对应物;第三方绑定的现役写通道只有本端点(管理端另有 @PreAuthorize 的 ThirdPartyAccountController 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=200 且 data=true 表示绑定记录已落库、归属当前登录用户;此后可用该(类型, 账号)组合走第三方账号登录。绑定成功后立即生效;重复绑定同一组合不会幂等成功,而是业务拒绝。
绑定前提是有效登录态;同一(类型, 账号)组合全局唯一占用(不限绑定者),并发绑定冲突走 striped 锁(一端成功、另一端并发错误)。业务失败均为 HTTP 200 + status=422 族,参数缺失或超长走请求校验出口,判定口径见错误响应差异。
无客户端长连接资源需要释放。绑定成功后无需刷新既有登录态(绑定不影响当前 token);数据去向:绑定行归属当前用户名,注销时随个人空间数据异步删除(见注销账号(零售端))。
未执行真实联调:code 不被服务端校验,App 必须自行保证 thirdPartyAccount 来源可信——绑定链路的鉴权强度等于登录态本身,拿到他人有效 token 即可把任意第三方账号绑到他人名下(进而免密登录),这是本端点当前契约的已知安全边界(wire 细节见用户中心业务 · third-party-account 第三方账号)。解绑在 app 面不可达的行为、以及第三方登录错误文案与 bind 查重文案的差异均已按源码核验但无实测佐证。