钉钉扫码登录第三方网站
更新时间:2022-02-24
简介
本教程指导你如何实现用户通过钉钉扫码直接登录到第三方网站。在本场景中,第三方网站可以获取在正在访问用户的钉钉身份无需用户输入账号密码。
准备工作
在开始本教程前,确保你已经完成了以下准备工作:
已经完成了钉钉开发者的注册与激活并拥有了子管理员和开发者权限。若尚未完成,请参考成为钉钉开发者。
已经安装了Java开发环境。若未安装,请访问Oracle官网下载。
已经安装了Java项目构建工具Maven。若未安装,请访问Apache Maven下载。
已下载并安装了IntelliJ IDEA开发工具。若未安装,请访问IntelliJ IDEA。
创建应用
在本部分,你将在开发者后台创建一个H5微应用,并完成通讯录权限的配置,用于本企业用户登录。
登录钉钉开发者后台。
说明 只有管理员和子管理员可登录开发者后台。
在开发者后台页面,选择企业内部开发,然后单击创建应用。

![]()
在弹出的创建应用页面中填写基本信息,然后单击确定创建。
应用类型:选择H5微应用。
开发方式:选择企业自助开发。

应用创建完成后,在基础信息页面,复制应用的AppKey和AppSecret备用。

单击开发管理进入开发管理页面,然后单击修改,并根据以下内容配置开发信息。
开发模式:选择开发应用。
服务器出口IP:输入调用钉钉服务端API时使用的IP即企业服务器的公网IP,多个IP请以英文逗号","隔开,支持带一个*号通配符的IP格式。
本教程设置为127.0.0.1。
应用首页地址:输入应用首页URL,在移动端工作台点击应用图标会跳转到此页面。可输入后端服务部署的服务器的IP或域名。例如:http://公网IP:8080。
本教程设置为https://ding-doc.dingtalk.com/。

单击权限管理进入权限管理页面,然后根据以下配置添加接口调用权限。
权限范围选择全部员工,然后选择通讯录管理。
选择通讯录部门信息读权限和通讯录部门成员读权限,然后单击申请权限。

配置内网穿透
在本部分,你将使用钉钉内网穿透工具生成一个公网域名用于教程测试。
打开命令行工具,执行以下命令,下载内网穿透工具。
git clone https://github.com/open-dingtalk/pierced.git一键复制
执行以下命令,启动内网穿透。
Windows执行以下命令:
说明 Windows需使用cmd工具打开命令行。
cd windows_64
ding -config=ding.cfg -subdomain=abcde 8080
一键复制MAC执行以下命令:
cd mac_64
chmod 777 ./ding
./ding -config=./ding.cfg -subdomain=abcde 8080一键复制
注意 启动内网穿透时,请不要直接使用abcde字符串,如果需要使用默认端口8080,需确保在同一内网环境下该字符串唯一且未重复使用,如果重复,启动后可能会出现访问端口不一致问题。
启动完客户端后,你访问http://abcde.vaiwan.cn/xxxxx都会映射到http://127.0.0.1:8080/xxxxx。
创建扫码登录
在本部分,你将在开发者后台创建扫码登录,并完成基础配置。
登录钉钉开发者后台。
在应用详情页,单击钉钉登录与分享,然后输入回调域名,再点击添加。
说明 如果你还没有域名,可以先使用配置内网穿透时设置的服务端域名,请求地址设置为/login。

搭建后端服务
在本部分,你将使用spring.io快速搭建服务端项目。
使用浏览器访问https://start.spring.io/。
根据以下操作下载服务端代码。
配置项目信息。
Project:选择Maven项目。
Language:选择Java。
Packaging:选择Jar包
Java:本教程选择Java8,你可以根据自身需要选择相应的Java版本。

单击GENERATE生成项目文件及下载。
解压下载的项目文件,然后使用IntelliJ IDEA打开。
参考以下步骤,下载并导入钉钉Java SDK。
单击这里下载钉钉服务端Java SDK。
解压dingtalk-sdk-java.zip。
在IntelliJ IDEA工具的顶部菜单栏中,选择File > Project Structure。

选择Libraries,然后单击 + 号,在弹出的界面单击Java。

选中下载的SDK,然后依次单击OK > Apply完成导入。

打开pom.xml文件,添加如下依赖。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.6version>
dependency>
org.springframework.boot
https://oapi.dingtalk.com/connect/qrconnect?appid=APPID&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=REDIRECT_URI一键复制
参数
是否必填
说明
appid
是
创建的登录应用的appid。
response_type
是
固定值为code。
scope
是
取值为snsapi_login用于钉钉容器外获取用户授权。
state
是
用于防止重放攻击,开发者可以根据此信息来判断redirect_uri只能执行一次来避免重放攻击。
redirect_uri
是
创建扫码登录应用授权时填写的回调域名。
浏览器显示如下图。
说明 如果你需要将钉钉登录二维码内嵌到自己页面中,可以参考扫码登录第三方网站步骤二中的方式二将钉钉登录二维码内嵌到自己页面中。

使用手机钉钉扫描浏览器中的二维码,扫描结果如下图所示。

单击登录网页版三方登陆测试后,浏览器返回信息如下。
扫码成员在本企业内。
扫码成员不在企业内,返回的数据格式如下。
{
"errcode": 0,
"errmsg": "ok",
"user_info": {
"nick": "杨XX",
"unionid": "E2Mmii4axxx",
"dingId": "\(:LWCP_v1:\)gtEp97Mxxxgg==",
"openid": "AzF8w80nfpiSFxxxxx",
"main_org_auth_high_level": true
}
}一键复制
恭喜
你已完成本教程的全部内容!
你可以通过修改访问链接的方式实现钉钉内免登第三方网站和使用钉钉账号登录第三方网站。
例如:
钉钉内免登第三方网站
https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=APPID&response_type=code&scope=snsapi_auth&state=STATE&redirect_uri=REDIRECT_URI一键复制
使用钉钉账号登录第三方网站
https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=APPID&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=REDIRECT_URI一键复制