Authn.tech
首页
  • SAML 2.0
  • OAuth 2.0
  • OIDC
  • JWT / JOSE
  • WebAuthn / Passkey
  • MFA / TOTP
  • LDAP
  • GraphQL
  • SCIM 2.0
  • 国内平台 SSO
  • 工具总览
  • JWT 解析
  • JWT 签名
  • JWK 生成
  • JWK → PEM
  • PEM → JWK
  • PKCE 生成
  • OIDC Discovery
  • 扫码登录演示
  • TOTP
  • WebAuthn
  • SAML 编解码
  • SAML Metadata
  • SAML Response
  • 飞书 SAML
  • X.509 证书
  • PEM 解析
  • Base64URL
  • LDAP 过滤器
  • 概览 / 角色术语
  • OIDC Mock
  • SAML Mock
  • 邮件服务器
  • LDAP 目录
  • OIDC 登录演示
  • SAML 登录演示
  • 微信扫码登录
  • 企业微信扫码登录
  • 简体中文
  • English
  • Deutsch
GitHub
首页
  • SAML 2.0
  • OAuth 2.0
  • OIDC
  • JWT / JOSE
  • WebAuthn / Passkey
  • MFA / TOTP
  • LDAP
  • GraphQL
  • SCIM 2.0
  • 国内平台 SSO
  • 工具总览
  • JWT 解析
  • JWT 签名
  • JWK 生成
  • JWK → PEM
  • PEM → JWK
  • PKCE 生成
  • OIDC Discovery
  • 扫码登录演示
  • TOTP
  • WebAuthn
  • SAML 编解码
  • SAML Metadata
  • SAML Response
  • 飞书 SAML
  • X.509 证书
  • PEM 解析
  • Base64URL
  • LDAP 过滤器
  • 概览 / 角色术语
  • OIDC Mock
  • SAML Mock
  • 邮件服务器
  • LDAP 目录
  • OIDC 登录演示
  • SAML 登录演示
  • 微信扫码登录
  • 企业微信扫码登录
  • 简体中文
  • English
  • Deutsch
GitHub
  • 国内平台 SSO

    • 国内平台 SSO 标准化与安全评测
    • 国内平台 SSO 标准化与安全评价方法
    • 国内平台 SSO 标准化与安全横向评价
    • 飞书 SSO 对接实现
    • 飞书身份接口标准化与安全评价
    • 钉钉 SSO 对接实现
    • 钉钉身份接口标准化与安全评价
    • WPS 365 外部系统接入
    • WPS 365 身份接口标准化与安全评价
    • 华为云 WeLink 外部系统接入
    • 华为云 WeLink 身份接口标准化与安全评价
    • Microsoft 365 中国版外部系统接入
    • Microsoft 365 中国版接口标准化与安全评价
    • 亚马逊云科技中国区域企业身份与 API 接入
    • 亚马逊云科技中国区域接口标准化与安全评价
    • 极狐 GitLab 外部系统接入
    • 极狐 GitLab 接口标准化与安全评价
    • 阿里云上的 Salesforce 外部系统接入
    • 阿里云上的 Salesforce 接口标准化与安全评价
    • 微信扫码登录
    • 微信开放平台身份接口标准化与安全评价
    • QQ 互联账号接入
    • QQ 互联身份接口标准化与安全评价
    • 腾讯云 CloudBase 应用身份接入
    • 腾讯云 CloudBase 应用身份标准化与安全评价
    • 华为账号 Account Kit 接入
    • 华为账号 Account Kit 标准化与安全评价
    • 抖音开放平台账号接入
    • 抖音开放平台身份接口标准化与安全评价
    • 百度账号开放授权接入
    • 百度账号开放授权标准化与安全评价
    • 支付宝开放平台授权接入
    • 支付宝开放平台授权标准化与安全评价
    • 微博开放平台账号接入
    • 微博开放平台身份接口标准化与安全评价
    • Gitee 开放平台账号与 API 接入
    • Gitee 开放平台身份接口标准化与安全评价
    • 企业微信扫码登录
    • 企业微信身份接口标准化与安全评价
    • 喜马拉雅车载 SDK 账户互通对接实现
    • 喜马拉雅身份接口标准化与安全评价
    • QQ 音乐第三方登录(账号绑定)对接实现
    • QQ 音乐身份接口标准化与安全评价
    • 网易云音乐 OpenAPI 登录对接实现
    • 网易云音乐身份接口标准化与安全评价

钉钉(DingTalk)SSO 对接实现

本文讲钉钉登录的落地流程;面向企业客户的 OpenAPI、SDK、事件、权限和交付评价见 钉钉标准安全评价。

标准化边界

本页说明如何兼容平台当前协议,不表示本站建议继续扩展私有实现。新系统应优先要求标准 OIDC/OAuth/SAML/SCIM;必须接入私有流程时,应将它限制在身份网关适配器内。评价基线见统一协议安全评价方法。

和 企业微信扫码登录 一样,钉钉的登录本质也是私有 OAuth2 变体,凭据、字段、端点都是钉钉自有的,不能直接套标准 OAuth 2.0 / OIDC 客户端库。先把方向分清楚再动手。

先分清方向和形态

"钉钉 SSO"在现实里是几件不同的事,混在一起最容易踩坑。先对号入座:

形态方向协议能不能落地
钉钉作 IdP(私有 OAuth2)用钉钉账号登录你自己的系统钉钉自有 OAuth2 变体✅ 主流做法,本文重点
外部 IdP 登录钉钉用企业已有 IdP 登录钉钉客户端能力随普通版、专属版和采购方案变化⚠️ 不凭历史资料下结论,须在目标版本后台与合同中确认 SAML/OIDC 支持
专属钉钉收外部 IdP外部 IdP 登录专属版钉钉历史资料显示存在 OIDC 对接;当前流程以专属版后台为准⚠️ 账号类型、授权模式、claim 映射和安全要求需项目验证
IDaaS 桥接需要标准 SAML/OIDC 对接钉钉对外标准协议 + 对内钉钉私有 OAuth2✅ 业界普遍做法

一句话判断

  • 想让别人拿钉钉登录你 → 走「钉钉私有 OAuth2」(下一节)。
  • 想让员工拿公司账号登录钉钉 → 先确认所购版本是否原生提供所需 SAML/OIDC;不支持时再评估 IDaaS 桥接。

钉钉私有 OAuth2 登录(钉钉作 IdP)

这是最常见的场景:在你的登录页放钉钉扫码 / 免登,员工确认后浏览器拿到一次性 authCode,再由后端用它换 userAccessToken,最后取用户信息。

整体流程

第 1~3 步在浏览器里拿到 authCode;第 4~5 步是后端换 token、取信息、建会话。密钥换 token 的动作只能在后端做。

后端两步

新版统一走 api.dingtalk.com 域,只需两个调用:

步骤端点入参出参
① 换用户令牌POST https://api.dingtalk.com/v1.0/oauth2/userAccessTokenclientId、clientSecret、code(即前端拿到的 authCode)、grantType=authorization_codeaccessToken(即 userAccessToken)、refreshToken、expireIn
② 取用户信息GET https://api.dingtalk.com/v1.0/contact/users/me请求头 x-acs-dingtalk-access-token: <userAccessToken>nick、avatarUrl、mobile、unionId、openId 等

新旧版差异

旧版扫码登录走 login.dingtalk.com/oauth2/auth 授权 + 私有 userinfo 端点;新接入直接用上面 api.dingtalk.com/v1.0/oauth2/userAccessToken 这套即可,别再混用旧端点。

私有字段的本地映射

钉钉返回的用户标识是私有字段,没有现成的 sub/email 语义,需要你手动映射进自己的账号体系:

钉钉字段含义映射到标准的建议
unionId用户在同一开发者企业下所有应用内唯一可作同一开发者主体内的关联键;不能直接冒充标准 sub
openId用户在当前单个应用内唯一单应用场景可作 sub,跨应用不稳定
userid用户在企业通讯录内的 ID企业内主键;需调通讯录接口获取,users/me 不直接给
mobile手机号需申请对应权限;不是所有企业都可读
——邮箱钉钉不保证返回标准邮箱,email/sub 常需自行补全或与内部账号手动关联

不要臆造字段

钉钉登录接口返回的是平台字段,而不是完整 OIDC claim 集。跨应用关联可优先评估 unionId,但数据库仍须保存开发者主体、组织和应用作用域,不能把裸 unionId 当跨主体全局主键。

外部 IdP 登录钉钉:按产品版本核验

历史专属钉钉资料描述过 OIDC id_token 隐式模式和 SSO 类型账号限制,但这不能证明 2026 年所有专属版或普通版仍采用相同配置。落地时应从目标租户后台和厂商方案确认:

  • 当前支持 SAML、OIDC 还是厂商自有桥接,以及能力属于哪个套餐;
  • OIDC 是否已支持授权码模式与 PKCE;若仍要求 implicit,应记录风险并要求迁移计划;
  • 用哪个 claim 匹配钉钉账号,账号创建、变更、离职和冲突如何处理;
  • metadata/JWKS、签名算法、密钥轮换、回调地址和测试账号如何交付。

注意

本节仅保留历史方案的风险提示,不把“只有专属版”“必须 implicit”“仅限 SSO 类型账号”写成当前永久事实。最终配置以目标产品版本的官方文档和合同附件为准。

用 IDaaS 桥接(业界普遍做法)

如果你的系统只认标准 SAML 或标准 OIDC,又想用钉钉账号登录,直接对接钉钉私有 OAuth2 意味着每个应用都要写一遍钉钉专属逻辑。业界更常见的是加一层 IDaaS 中间件(阿里云 IDaaS / EIAM、竹云、宁盾等)来桥接:

  • 为什么:IDaaS 对外暴露标准协议(标准 SAML/OIDC),你的应用当成普通标准 IdP 接即可;对内由 IDaaS 用钉钉私有 OAuth2 完成对接和字段映射。私有部分被封装在 IDaaS 里,应用侧零私有代码。
  • 怎么接:
    1. 在 IDaaS 里把钉钉配置为身份源 / 认证源(填 clientId/clientSecret 等,由 IDaaS 完成上面的 userAccessToken → users/me 流程)。
    2. 在 IDaaS 里把你的应用登记为标准 SAML/OIDC 应用,拿到标准的元数据 / discovery 端点。
    3. 应用侧用标准客户端库对接 IDaaS,sub/email 等 claim 由 IDaaS 统一映射输出。

提示

需要多个应用统一用钉钉登录、或需要标准协议、或需要把钉钉与其它身份源(AD/LDAP 等)合并时,IDaaS 桥接通常比每个应用各自对接钉钉私有 OAuth2 更省事。

参考来源

  • 钉钉 SSO 概述 —— 钉钉开放平台
  • 获取用户 token(userAccessToken)—— 钉钉开放平台
  • 获取用户信息 contact/users/me —— 钉钉开放平台
  • 通过钉钉 SSO 登录应用 —— 阿里云 IDaaS EIAM
  • 专属钉钉 SSO —— 阿里云 IDaaS EIAM
最近更新: 2026/7/27 06:46
贡献者: linux, Claude Opus 4.8
Prev
飞书身份接口标准化与安全评价
Next
钉钉身份接口标准化与安全评价