浙政钉-扫码登录对接
前言
单位需要对接浙政钉,实现扫码登录,这里记录一下对接过程。
浙政钉扫码登录
登录入口
扫码流程图
sequenceDiagram participant 用户 as 用户 participant 三方应用 as 三方应用 participant 浙政钉登录服务 as 浙政钉登录服务 participant 浙政钉开放平台 as 浙政钉开放平台 用户->>三方应用: 访问 三方应用->>浙政钉登录服务: 跳转到: oauth2/auth.htm 浙政钉登录服务-->>用户: 展示二维码登录页面 用户->>浙政钉登录服务: 使用浙政钉扫码登录 浙政钉登录服务-->>三方应用: 授权成功 颁发临时code(重定向到回调地址) 三方应用->>浙政钉开放平台: 请求应用access_token: gettoken.json 浙政钉开放平台-->>三方应用: 返回access_token 三方应用->>浙政钉开放平台: 请求用户信息: getuserinfo_bycode.json 浙政钉开放平台-->>三方应用: 返回用户信息 三方应用-->>用户: 业务会话建立
扫码登录准备工作
创建轻应用
获取appKey和appSecret
配置回调地址
扫码登录对接
各环境域名/登录域名
环境 | 开放平台域名(调接口使用) | 登录域名(构造登录页面) |
---|---|---|
Saas | openplatform.dg-work.cn | login.dg-work.cn |
浙政钉 | openplatform-pro.ding.zj.gov.cn(域名对应政务外网IP:59.202.52.1) | login-pro.ding.zj.gov.cn |
构造扫码登录页面
使用专有钉钉提供的扫码登录页面
在企业Web系统里,用户点击使用钉钉扫码登录,第三方Web系统跳转到如下地址:1
https://login.dg-work.cn/oauth2/auth.htm?response_type=code&client_id=应用标识&redirect_uri=回调地址&scope=get_user_info&authType=QRCODE
URL中的client_id
和redirect_uri
两个参数的值填入第三方web系统的应用标识和回调地址。专有钉钉用户扫码登录并确认后,会302到你指定的redirect_uri
,并向url
参数中追加临时授权码code
此code
非authcode
及state
两个参数。authcode
是 web端使用jsapi
获取的临时code
参数redirect_uri
=回调地址”涉及的域名,需和创建扫码登录应用授权时填写的回调域名一致,否则会提示无权限访问。
支持网站将专有钉钉登录二维码内嵌到自己页面中
通过方式一构造的地址增加embedMode=true
的参数1
https://login.dg-work.cn/oauth2/auth.htm?response_type=code&client_id=应用标识&redirect_uri=回调地址&scope=get_user_info&authType=QRCODE&embedMode=true
扫码成功后需要在页面中监听结果1
2
3
4
5
6
7<script type="application/javascript">
window.addEventListener('message', function(event) {
// 这里的event.data 就是登录成功的信息
// 数据格式:{ "code": "aaaa", "state": "bbbb" }
alert(JSON.stringify(event.data));
});
</script>
生成的二维码size固定为 200*200px,不支持修改
获取应用access_token
获取access_token,请参考获取access_token。注意请使用扫码应用的ak/sk获取access_token
请求方式
GET(HTTPS)
接口名
/gettoken.json
请求参数
参数名 | 类型 | 是否必须 | 说明 |
---|---|---|---|
appkey | string | 是 | 应用唯一标识,创建应用后获得 |
appsecret | string | 是 | 应用密钥,创建应用后获得 |
例子(PHP)
1 |
|
返回结果
1 | { |
参数名 | 类型 | 说明 |
---|---|---|
access_token | string | 应用的access_token |
expires_in | int | access_token的过期时间,单位为秒 |
获取授权用户的个人信息
服务端通过临时授权码获取授权用户的个人信息
请求方式
POST(HTTPS)
接口名
/rpc/oauth2/getuserinfo_bycode.json
注意:请使用接口域名调用接口,不能使用登录域名调接口。
请求参数
参数名 | 类型 | 是否必须 | 说明 |
---|---|---|---|
access_token | string | 是 | 应用的access_token |
code | string | 是 | 用户授权的临时授权码code,只能使用一次;在前面步骤中跳转到redirect_uri时会追加code参数 |
例子(PHP)
1 |
|
返回结果
1 | { |
参数名 | 类型 | 说明 |
---|---|---|
accountId | int | 账号id |
realmId | int | 租户id |
clientId | string | 应用id |
tenantName | string | 租户名称 |
realmName | string | 租户名称 |
namespace | string | 租户命名空间 |
tenantId | int | 租户id |
tenantUserId | string | 租户用户id |
account | string | 账号 |
employeeCode | string | 员工编码 |