集成应用免登对接说明

概述

本文档面向开发者,介绍如何通过集成应用接入简道云,实现账户免登功能。

简道云提供两种免登授权流程,两者均为必做对接,但面向的使用场景不同:

  • 主页跳转流程:适用于从简道云「管理后台 > 产品中心 > 进入应用」登录第三方系统的场景。
  • 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 嵌入

文档内容是否对您有帮助?
有帮助
没帮助没帮助
如需获取即时帮助,请联系技术支持
咨询
扫码领取100+零代码资料简道云官方微信号400-111-0890
图标在线咨询
立即体验