---
title: "第三方登录与关联"
description: "Google、Lark 身份均登录同一个 KAI 账号。下游应用仍使用既有 KAI OAuth/OIDC 授权接口和 issuer，无需按第三方来源分别接入。"
url: "https://auth.kai.com/docs/external-sign-in"
language: "zh-CN"
version: "Better Auth 1.7.1"
updated: "2026-10-19"
---

# 第三方登录与关联

Google、Lark 身份均登录同一个 KAI 账号。下游应用仍使用既有 KAI OAuth/OIDC 授权接口和 issuer，无需按第三方来源分别接入。

首次登录时，Auth 先检查稳定的第三方身份。已有绑定继续进入原 KAI 账号，第三方邮箱变化不覆盖 KAI 的邮箱、昵称或头像。没有绑定时，同邮箱已有账号进入“验证原账号 → 确认关联”；新用户进入“验证邮箱归属（需要时）→ 确认资料和条款 → 创建账号”。本流程不会按邮箱自动合并，也不会在确认前创建正式账号。

第三方登录是首因子。KAI 要求二步验证时仍需完成已配置的二步验证，Lark 企业身份不自动获得 KAI 组织成员或管理员权限。

个人中心的“已关联账号”支持 Google、Lark 关联与解除。关联要求第三方邮箱与 KAI 已验证主邮箱相同。解除需要其他独立可用的验证方式和近期身份确认；解除后保留已登录设备、应用会话及授权，可在设备管理中另行退出。

浏览器通过 `GET /api/auth/external/flows/:flowId` 查询流程下一步。流程编号并非凭据：服务端同时验证浏览器绑定、目标账号、用途和有效期。注册意图最多 10 分钟，关联证明最多 5 分钟；验证码重发不会延长流程有效期。响应为 `private, no-store`，URL 不携带用户资料、服务商令牌或可独立使用的证明。

每次发起第三方登录或主动关联都使用独立的 OAuth state 校验 Cookie，避免不同标签页互相覆盖，或较早回调清除较新流程的校验状态。浏览器校验 Cookie 与服务端 OAuth state 的有效期均为 10 分钟。Cookie 隔离不替代签名、服务端 state、有效期和一次性使用校验。升级前尚未完成的旧流程需要重新发起。

如果页面显示 `STATE_MISMATCH`，表示本次第三方登录请求无法验证，请重新发起登录。这不等于密码错误，也不能仅凭该错误断定服务商不可用或请求已过期；排查时保留错误码及页面提供的请求编号，不提供 Cookie、授权码或完整回调地址。

新用户需确认当期服务条款和隐私政策版本，不必设置 KAI 密码。Google Gmail 或满足 Workspace 验证条件的邮箱可使用服务商归属证据；普通外部邮箱需要补做 KAI 邮箱验证。Lark 企业邮件证据与普通资料邮箱分别处理。

来自第三方应用的请求完成后继续原授权流程。原授权过期时须从原应用重新发起，不以跳到个人中心代替授权成功。服务商暂时不可用只影响该服务商入口；使用错误码与请求编号排查，参见[错误处理](/docs/errors)。

## 发布开关

服务端使用 `LARK_ENABLED`、`GOOGLE_ENABLED` 分别控制服务商入口；`EXTERNAL_ACCOUNT_LINKING_ENABLED` 和 `EXTERNAL_ACCOUNT_UNLINKING_ENABLED` 独立控制关联与解除。Google、关联和解除默认关闭，验证数据与流程后逐项开放。关闭入口不删除既有绑定或撤销已签发的 KAI 会话。服务商配置不完整或上游暂时失败只影响该入口，不应影响其他登录方式。
