钉钉单点登录方案
目录
企业内部应用实现。
钉钉单点登录
获取企业内部应用的access_token
在获取access_token前,需要在开发者后台查看应用的AppKey和AppSecret:
- 登录钉钉开发者后台。
- 在应用开发页面,单击目标应用进入应用详情页面。
- 在基础信息页面,复制应用的AppKey和AppSecret。
参数:
基本信息
请求方式:GET
请求地址:https://oapi.dingtalk.com/gettoken
请求参数
名称 | 类型 | 是否必填 | 示例值 | 描述 |
---|---|---|---|---|
appkey | String | 是 | dingeqqpkv3xxxx | 应用的唯一标识key。 |
appsecret | String | 是 | GT-lsu-taDAsTsxxxx | 应用的密钥。AppKey和AppSecret可在钉钉开发者后台的应用详情页面获取。 |
返回参数
名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
access_token | String | fw8ef8we8f76e6f7s8dxxxx | 生成的access_token。 |
expires_in | Number | 7200 | access_token的过期时间,单位秒。 |
errmsg | String | ok | 返回码描述。 |
errcode | Number | 0 | 返回码。 |
根据sns临时授权码获取用户信息
基本信息
请求方式:POST
请求地址:https://oapi.dingtalk.com/sns/getuserinfo_bycode
Query参数
名称 | 类型 | 是否必填 | 示例值 | 描述 |
---|---|---|---|---|
accessKey | String | 是 | 3a2ca6aa3231b7xxxx | 应用的AppKey |
timestamp | String | 是 | 1546084445901 | 当前时间戳,单位毫秒。 |
signature | String | 是 | ddsdssfsdfxxxx | 通过appSecret计算出来的签名值,签名算法为HmacSHA256,签名数据是当前时间戳timestamp,密钥是appId对应的appSecret,使用密钥对timestamp计算签名值。 |
Body参数
名称 | 类型 | 是否必填 | 示例值 | 描述 |
---|---|---|---|---|
tmp_auth_code | String | 否 | 4a2c5695b78738d495f47bxxxxxx | 用户授权的临时授权码 |
返回参数
名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
user_info | UserInfo | 用户信息。 | |
errmsg | String | ok | 返回描述。 |
errcode | Number | 0 | 返回码。 |
用户信息
"user_info":{
"nick":"名字",
"unionid":"dingdkjjojoixxxx",
"openid":"dingsdsqwlklklxxxx",
"main_org_auth_high_level":true
}
根据unionid获取用户userid
基本信息
请求方式:POST
请求地址:https://oapi.dingtalk.com/topapi/user/getbyunionid
Query参数
名称 | 类型 | 是否必填 | 示例值 | 描述 |
---|---|---|---|---|
access_token | String | 是 | be3Fxxxx | 调用服务端API的应用凭证 |
Body参数
名称 | 类型 | 是否必填 | 示例值 | 描述 |
---|---|---|---|---|
unionid | String | 是 | z21HjQliSzpw0Yxxxx | 员工在当前开发者企业账号范围内的唯一标识,系统生成,不会改变。 |
返回参数
名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
request_id | String | zcqi5450rpit | 请求ID。 |
errcode | Number | 0 | 返回码。 |
errmsg | String | ok | 返回码描述。 |
result | UserGetByUnionIdResponse | 返回结果。 |
结果结构
"result":{
"contact_type":"0",
"userid":"zhangsan"
}
根据userid获取用户详情
基本信息
请求方式:POST
请求地址:https://oapi.dingtalk.com/topapi/v2/user/get
Query参数
名称 | 类型 | 是否必填 | 示例值 | 描述 |
---|---|---|---|---|
access_token | String | 是 | be3Fxxxx | 调用服务端API的应用凭证 |
Body参数
名称 | 类型 | 是否必填 | 示例值 | 描述 |
---|---|---|---|---|
userid | String | 是 | manager4220 | 用户的userid。 |
language | String | 否 | zh_CN | 通讯录语言。zh_CN:中文(默认值)en_US:英文 |
返回参数
名称 | 类型 | 示例值 | 描述 |
---|---|---|---|
request_id | String | 4e7exhl6pm0t | 请求ID。 |
errcode | Number | 0 | 返回码。 |
errmsg | String | ok | 返回码描述。 |
result | UserGetResponse | 返回结果。 |
结果结构
"result": {
"extension": "{\"爱好\":\"旅游\",\"年龄\":\"24\"}",
"unionid": "xBnhjgjmofhhsLxxx",
"boss": false,
"unionEmpExt": {
"corpId": "ding1c417cfd9e3142d1acaaa37764f9xxxx",
"userid": "45694432-1019596262",
"unionEmpMapList": [
{
"corpId": "ding1c417cfd9e3142d1acaaa37764f9xxxx",
"userid": "45694432-1019596262"
}
]
},
"role_list": [
{
"group_name": "默认",
"id": 1507113578,
"name": "主管理员"
}
],
"admin": true,
"remark": "杨XX",
"title": "服务经理",
"hired_date": 1598457600000,
"userid": "manager4220",
"work_place": "杭州",
"dept_order_list": [
{
"dept_id": 1,
"order": 176318669012199520
},
{
"dept_id": 379661095,
"order": 176318556766960500
}
],
"real_authed": true,
"dept_id_list": [
1,
379661095
],
"job_number": "10001",
"email": "1@example.com",
"leader_in_dept": [
{
"dept_id": 379661095,
"leader": false
},
{
"dept_id": 1,
"leader": false
}
],
"manager_userid": "user01",
"mobile": "188xxxx1234",
"active": true,
"telephone": "010-8xxxx6-2345",
"avatar": "",
"hide_mobile": false,
"senior": false,
"name": "杨xxx",
"state_code": "86"
}
注意:单点的依据是unionid的,只需要获取到unionid即可,同理依据为userid的只需要获取到userid。
开发者后台设置
插件应用授权
应用开发 ---> 工作台 ---> 登录 ---> 创建扫码登录应用授权
完成之后,可以在列表看到相应的appid与appsecret。
创建钉钉应用
应用开发 ---> 创建应用(创建之后) ---> 点击应用 ---> 开发管理
服务器出口,填写需要调用钉钉接口的服务器ip,首页地址填写https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=${授权应用appid}&response_type=code&scope=snsapi_auth&state=STATE&redirect_uri=${服务sso url}
填写保存之后,在版本管理与发布页面,选择发布范围,保存即可。
作者:红雨
出处:https://www.cnblogs.com/52why
微信公众号: 红雨python