集成应用免登对接说明
概述
本文档面向开发者,介绍如何通过集成应用接入简道云,实现账户免登功能。
简道云提供两种免登授权流程,两者均为必做对接,但面向的使用场景不同:
- 主页跳转流程:适用于从简道云「管理后台 > 产品中心 > 进入应用」登录第三方系统的场景。
- OAuth 授权流程:适用于从「仪表盘/页面 > 嵌入页面」登录第三方系统的场景。
两种流程的核心逻辑一致:均通过 code 换取用户信息,但触发方式和实现细节不同。请根据实际使用场景分别对接。
本文仅讲解接口理论,具体实现示例请参考:集成应用免登对接示例
注:简道云仅负责提供接口,帮助获取经过验证的用户身份信息(如用户编号),第三方系统需自行搭建获取服务,以及维护本系统的登录态(Session、Token、Cookie 等)。
接入准备
客户平台技术要求
对接简道云集成应用 SSO,客户平台需要具备以下能力:
能力 | 说明 | 必须/可选 |
HTTPS | 简道云校验可信域名时一般为 HTTPS 域名 | 必须 |
服务端 HTTP 请求能力 | auth_info 接口必须在服务端调用,不能在前端 | 必须 |
接收 GET 请求并解析 query 参数 | 简道云回调时会带 ?code=xxx 或 ?code=xxx&state=yyy | 必须 |
302 重定向能力 | OAuth 流程下需重定向用户到简道云授权页 | 必须 |
用户/租户映射 | 拿到 tenant_id + username 后,需在客户自有系统中查找用户 | 必须 |
自有登录态管理 | 简道云不负责登录态管理,客户平台需自行生成 Session/Token/Cookie | 必须 |
密钥安全存储 | app_secret 必须存在服务端,不能写在前端代码或暴露给浏览器 | 必须 |
state 生成与校验 | OAuth 流程需要随机生成 state 并在回调时校验,防 CSRF | OAuth 授权必须 |
可信域名配置 | 客户平台域名需在简道云后台配置为可信域名(精确匹配) | 必须 |
创建集成应用并获取凭证
请先参考文档创建集成应用,获取凭证,配置可信域名与应用主页:集成应用功能说明
免登授权流程
简道云提供两种免登授权流程,两者均为必做对接,面向的使用场景不同:
- 主页跳转流程:适用于从简道云「管理后台 > 产品中心 > 进入应用」登录第三方系统的场景。
- OAuth 授权流程:适用于从「仪表盘/页面 > 嵌入页面」登录第三方系统的场景。
主页跳转流程
适用场景:从简道云「管理后台 > 产品中心 > 进入应用」登录第三方系统。
在简道云产品中心可以为应用配置主页地址。用户点击进入产品时,简道云自动跳转到应用的主页地址,并携带一个 code 参数。
客户产品端需要实现以下逻辑:
1)接收并解析 code 参数:从简道云跳转回调中获取 code,注意 code 为一次性凭证,需在回调后立即使用。
2)调用 auth_info 接口:在服务端调用,请求头中携带 Authorization: Bearer {app_secret} 换取用户信息。
3)用户登录:根据 username + tenant_id 在自有系统中查找对应用户,建立映射关系。
4)维护登录态:自行生成 Token/Session/Cookie 管理登录状态,简道云不负责应用登录态管理。
5)访问业务系统:重定向到业务首页。
完整交互流程如下图所示:(其中橙色高亮区域为客户产品端需要自行实现的内容。)

OAuth 授权流程
适用场景:从「仪表盘/表单页面 > 嵌入页面」登录第三方系统。
如需从产品端发起授权,需构造以下 URL 地址引导用户访问:
https://www.jiandaoyun.com/open/user/oauth/login
?app_id={Suite ID}
&state={STATE}
&redirect_uri={REDIRECT_URI}
参数说明:
参数值 | 说明 | 必填 |
{Suite ID} | 集成应用的 Suite ID | 是 |
{STATE} | 随机字符串,用于防止 CSRF 攻击,回调时需校验其与发起时的值一致 | 是 |
{REDIRECT_URI} | 授权成功后的回调地址,域名须已配置为可信域名,值需进行 URL 编码 | 是 |
客户产品端需要实现以下逻辑:
1)构造授权 URL 并发起重定向:拼接 app_id、state、redirect_uri 参数构造简道云授权页 URL,引导用户跳转。
2)生成并校验 state:每次授权生成随机 state,在回调时校验是否匹配,防止 CSRF 攻击。
3)接收 code 参数:从简道云回调中获取 code,注意 code 为一次性凭证,需在回调后立即使用。
4)调用 auth_info 接口:在服务端调用,请求头中携带 Authorization: Bearer {app_secret} 换取用户信息。
5)用户登录:根据 username + tenant_id 在自有系统中查找对应用户,建立映射关系。
6)维护登录态:自行生成 Token/Session/Cookie 管理登录状态,简道云不负责应用登录态管理。
完整交互流程如下图所示:(其中橙色高亮区域为客户产品端需要自行实现的内容。)

扩展推荐:统一回调接口
两种流程虽然触发方式不同,但获取 code 后的逻辑完全一致。推荐用一个 URL 同时处理两种情况,减少维护成本:
GET /your-callback-url
情况 1:query 中有 code
→ 视为「主页跳转」或「OAuth 回调」
→ 调用 auth_info 接口换取 username
→ 建立登录态,跳转业务页
情况 2:query 中没有 code
→ 视为「客户主动发起 OAuth」
→ 生成 state,构造授权 URL
→ 302 跳转到简道云
伪代码参考:(python版)
def handle_callback(request):
code = request.query.get("code")
# 情况 2:没有 code → 主动发起 OAuth 跳转
if not code:
state = generate_random_string(32)
save_state(session, state)
auth_url = "https://www.jiandaoyun.com/open/user/oauth/login"
+ "?app_id=" + APP_ID
+ "&state=" + state
+ "&redirect_uri=" + url_encode(YOUR_CALLBACK_URL)
return redirect(auth_url)
# 情况 1:有 code → 换取用户身份
if request.query.get("state"):
validate_state(session, request.query["state"]) # OAuth 流程下校验
response = http_post(
url="https://api.jiandaoyun.com/api/v3/user/oauth/auth_info",
headers={
"Authorization": "Bearer " + APP_SECRET,
"Content-Type": "application/json"
},
body={"code": code},
timeout=10
)
if response.status != 200:
return error("SSO 失败: " + response.body)
username = response.json["username"]
tenant_id = response.json["tenant_id"]
user = find_or_create_user(username, tenant_id)
session = create_session(user)
return redirect("/your-business-home", session)获取简道云登录用户信息接口
两种流程在获取 code 后,均调用同一个接口换取用户身份信息。
接口信息
接口作用 | 获取当前登录用户的信息,用于简道云集成第三方应用时,通过传递用户信息实现免登录访问第三方。 |
请求地址 | https://api.jiandaoyun.com/api/v3/user/oauth/auth_info |
请求方式 | POST |
请求说明
请求头:
参数名 | 参数值 | 是否必填 | 描述说明 |
Authorization | Bearer {Suite Secret} | 是 | Suite Secret是从集成应用中获取的核心凭证,必须在服务端使用,切勿暴露在前端代码中。 |
Content-Type | application/json | 是 | - |
请求体:
{
"code": "xxxxx"
}响应说明
成功响应字段:
字段 | 类型 | 说明 |
tenant_id | string | 租户ID,企业在简道云中的唯一ID 在「管理后台>企业信息」中可查看企业在简道云的租户ID
|
username | string | 成员编号,成员在当前企业中的唯一ID 在「管理后台>内部组织」中可查看成员在企业内的编号
|
成功响应示例:
{
"tenant_id": "620a31c23e7c5a00081e7acf",
"username": "jdy-developer"
}完整调用示例(cURL)
curl --location 'https://api.jiandaoyun.com/api/v3/user/oauth/auth_info' \
--header 'Authorization: Bearer YOUR_SUITE_SECRET' \
--header 'Content-Type: application/json' \
--data '{
"code": "USER_CODE"
}'其中:
- YOUR_SUITE_SECRET:替换为集成应用中获取的 Suite Secret
- USER_CODE:替换为简道云跳转时传入的 code 参数值
注意事项与接口限制
- code 一次性使用:简道云返回的 code 只能用一次。建议在回调后立即调用 auth_info,不要缓存或重试。
- Suite Secret 仅服务端使用:绝对不能放在前端 JS、移动端 APP 包、配置文件、Git 仓库等任何客户端可见的地方。
- state 防 CSRF:OAuth 流程必须生成随机 state 并在回调时校验。
- 超时处理:调用简道云 API 建议设置 10 秒超时。
- 错误处理:根据简道云返回的状态码和错误信息,给用户友好的错误提示。
- 登录态自维护:简道云仅返回 username + tenant_id,应用的 Session/Token/Cookie 全部由客户系统自行生成和管理。
- 可信域名校验:系统会校验可信域名,确保 referer 以及回调地址的域名已在产品设置中配置。
FAQ
code 有效期多久?
code 为一次性使用凭证,建议在回调后立即调用接口换取用户信息。
回调地址需要配置吗?
暂无配置入口,请在集成应用中配置可信域名,系统会校验请求来源的合法性。后续迭代可能会开放更灵活的重定向地址配置入口。
支持哪些开发语言?
本接口为标准 HTTP API,任何支持发送 HTTP 请求的语言均可调用,包括 Java、Python、JavaScript、Go 等。
如何维持登录状态?
简道云仅提供用户身份信息,应用需要在本地生成并维护登录态(如 Session、Token、Cookie 等)。建议在首次获取用户信息后,将登录态写入应用域下的 Cookie 或 Storage 中。
iframe 嵌入场景下遇到第三方 Cookie 问题怎么办?
Chrome 无痕模式、钉钉/企微内置浏览器会阻止第三方 Cookie。建议:
- 优先使用 URL Token 或 postMessage 方式传递登录态,不依赖 Cookie
- 必须用 Cookie 时,设置 SameSite=None; Secure=True(仅在部分浏览器有效)
- 完全规避 iframe:用新窗口打开(target="_blank")替代 iframe 嵌入



400-111-0890
在线咨询