钉钉内部应用免密登录

您所在的位置:网站首页 钉钉的用户名和密码 钉钉内部应用免密登录

钉钉内部应用免密登录

2024-07-11 14:12| 来源: 网络整理| 查看: 265

当开发的系统(H5页面)只是在钉钉客户端打开,但并不是一个钉钉应用时,系统可以自动获得正在访问用户的钉钉身份信息,而无需用户再次输入账户密码。

注意:此功能与企业应用/第三方企业应用无关,只能用于钉钉客户端内打开的网站,并且不是钉钉内的应用免登,此流程只能做到获取到用户身份。

获取appId及appSecret

点击进入钉钉开发者平台 的页面,点击左侧菜单的【移动接入应用-登录】,然后点击右上角的【创建扫码登录应用授权】,创建用于免登过程中验证身份的appId及appSecret,创建后即可看到appId和appSecret。

image.png

需提交字段

说明

名称

授权微应用的名称,必填

描述

说明扫码登录使用的场景,必填

授权页面LOGO地址

会显示在授权页面的中间页中,以http或https开头,必填

回调域名

微应用回调的URL,以http或https开头,必填

构造要跳转的链接

构造如下跳转链接,此链接处理成功后,会重定向跳转到指定的redirect_uri,并向url追加临时授权码code及state两个参数。

https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=APPID&response_type=code&scope=snsapi_auth&state=STATE&redirect_uri=REDIRECT_URI

参数

说明

appid

参看第1步获取,代表了你提供的服务,必填

redirect_uri

重定向地址(需要urlencode编码),该地址所在域名需要配置为appid对应的安全域名,必填

state

用于防止重放攻击,开发者可以根据此信息来判断redirect_uri只能执行一次来避免重放攻击, 选填

response_type

固定值为code,必填

scope

取值为snsapi_auth,必填(snsapi_auth用于钉钉容器内获取用户授权)

服务端通过临时授权码获取授权用户的个人信息

通过临时授权码Code获取用户信息,临时授权码只能使用一次。

请求方式:POST(HTTPS)

请求地址:https://oapi.dingtalk.com/sns/getuserinfo_bycode?accessKey=xxx×tamp=xxx&signature=xxx

请求包结构体:

{ "tmp_auth_code": "23152698ea18304da4d0ce1xxxxx" }

URL签名参数说明:

参数

说明

accessKey

应用的appId

timestamp

当前时间戳,单位是毫秒

signature

通过appSecret计算出来的签名值,签名计算方法

参数说明:

参数

类型

必须

说明

tmp_auth_code

String

用户授权的临时授权码code,只能使用一次;在前面步骤中跳转到redirect_uri时会追加code参数

SDK请求示例(JAVA):

DefaultDingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/sns/getuserinfo_bycode"); OapiSnsGetuserinfoBycodeRequest req = new OapiSnsGetuserinfoBycodeRequest(); req.setTmpAuthCode("4a2c5695b78738d495f47b5fee9160cd"); OapiSnsGetuserinfoBycodeResponse response = client.execute(req,"yourAppId","yourAppSecret");

SDK请求示例(PHP):

include "TopSdk.php"; $c = new DingTalkClient(DingTalkConstant::$CALL_TYPE_OAPI, DingTalkConstant::$METHOD_POST , DingTalkConstant::$FORMAT_JSON); $req = new OapiSnsGetuserinfoBycodeRequest; $req->setTmpAuthCode("4a2c5695b78738d495f47b5fee9160cd"); $resp=$c->executeWithAccessKey($req, "https://oapi.dingtalk.com/sns/getuserinfo_bycode","yourAppId","yourAppSecret"); var_dump($resp)

返回结果:

{ "errcode": 0, "errmsg": "ok", "user_info": { "nick": "张三", "openid": "liSii8KCxxxxx", "unionid": "7Huu46kk" } }

参数

说明

errcode返回码errmsg对返回码的文本描述内容

user_info

└ nick

用户在钉钉上面的昵称

└ openid

用户在当前开放应用内的唯一标识

└ unionid

用户在当前开放应用所属企业的唯一标识

根据unionid获取userid

如果开发者需要通过unionid获取到userid,可参考《根据unionid获取userid》。

注意,接口调用需要使用AccessToken,可参考《获取access_token》。

根据userid获取用户信息

如果开发者希望获取用户更多信息,比如部门信息、邮箱等,可以调用服务端API-通讯录管理-用户管理-“获取用户详情”接口获取,可参考《获取用户详情》。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3