面向国内团队的 SSO 桥接服务:把钉钉变成 Cloudflare Access 的身份源。员工用熟悉的钉钉 App 扫码进门,受保护的应用一行代码不用改。
登录链路
Cloudflare Access 拦下未登录访客,转到登录页,员工选择「钉钉」。
Access 走标准 OIDC 协议,找到你的租户专属入口 *.sso.服务域名。
服务把标准协议翻译成钉钉的私有协议,员工在钉钉 App 上点确认。
服务签回 RS256 签名的身份令牌,Access 验签放行,种下登录会话。
为什么需要
Cloudflare Access 原生支持 Google、GitHub、Okta……唯独没有钉钉。因为钉钉的「OAuth2」有三处和规范对不上,标准 OIDC 客户端根本走不通:
只收 JSON camelCase 请求体,而所有标准实现发的都是表单或 Basic 头。
要求专用的 x-acs-dingtalk-access-token 头,不认标准的 Bearer。
授权码塞在 authCode 参数里,不是规范里的 code,标准端直接找不到。
桥接服务在中间做完整翻译:对钉钉说钉钉的话,对 Cloudflare 说标准 OIDC。这套翻译已经过真实企业环境全链路验证。
接入方式
用企业管理员账号在钉钉开发者后台建一个企业内部应用,开通「通讯录个人信息读权限」,回调白名单加上:
https://你的租户子域.sso.服务域名/cb登记钉钉凭证和你的 Cloudflare 团队域名后,你会得到一对 OIDC 凭证,以及一组专属端点。你的组织信息(corpId)会配置进登录白名单——只有你企业成员能通过。
Zero Trust 控制台 → Integrations → Identity providers → OpenID Connect:
保存后点 IdP 旁的 Test 按钮真实扫码验证,再把该登录方式挂到 Access 应用上。可选项保持默认:PKCE 不要开。
安全设计
常见问题
unionId@dingtalk.local 生成,可直接用在 Access 策略白名单里。/authorize、/token、/jwks,无尾斜杠)。完整的报错对照表在接入文档里。