多地址授权在文章最后。

官方文档:

扫码登录第三方网站

剂的使用第二种方式,方便前后端无状态的情况下使用state进行传递参数。

方式二 支持网站将钉钉登录二维码内嵌到自己页面中

步骤1:在页面中先引入如下JS文件(支持https)

<script src="https://g.alicdn.com/dingding/dinglogin/0.0.5/ddLogin.js"></script>

步骤2:在需要使用钉钉登录的地方实例化以下JS对象

/*
* 解释一下goto参数,参考以下例子:
* var url = encodeURIComponent('http://localhost.me/index.php?test=1&aa=2');
* var goto = encodeURIComponent('https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=appid&response_type=code&scope=snsapi_login&state=STATE&redirect_uri='+url)
*/
var obj = DDLogin({id:"login_container",//这里需要你在自己的页面定义一个HTML标签并设置id,例如<div id="login_container"></div>或<span id="login_container"></span>goto: "", //请参考注释里的方式style: "border:none;background-color:#FFFFFF;",width : "365",height: "400"});
参数 说明
goto goto参数结构:https://oapi.dingtalk.com/connect/oauth2/sns_authorize?appid=APPID&response_type=code&scope=snsapi_login&state=STATE&redirect_uri=REDIRECT_URI, 并且要将goto参数urlencode编码。
style 渲染二维码的区域的样式,可以自定义去除背景颜色和边框
width 表示显示二维码的区域的宽。width和height不代表二维码的大小,二维码大小是固定的210px*210px。
height 表示显示二维码的区域的高。width和height不代表二维码的大小,二维码大小是固定的210px*210px。

您引入的js会在获取用户扫描之后将获取的loginTmpCode通过window.parent.postMessage(loginTmpCode,’*’);返回给您的网站。

您可以通过以下代码获取这个loginTmpCode:

var handleMessage = function (event) {var origin = event.origin;console.log("origin", event.origin);if( origin == "https://login.dingtalk.com" ) { //判断是否来自ddLogin扫码事件。var loginTmpCode = event.data; //拿到loginTmpCode后就可以在这里构造跳转链接进行跳转了console.log("loginTmpCode", loginTmpCode);}
};
if (typeof window.addEventListener != 'undefined') {window.addEventListener('message', handleMessage, false);
} else if (typeof window.attachEvent != 'undefined') {window.attachEvent('onmessage', handleMessage);
}

通过JS获取到loginTmpCode后,需要由你构造并跳转到如下链接:

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

此链接处理成功后,会302跳转到你goto参数指定的redirect_uri,并向url参数中追加临时授权码code及state两个参数。

参数 必须 说明
appid 参看第1步获取,代表了你提供的服务,
redirect_uri 重定向地址 (如果是第一种方式需要urlencode编码,如果是第二种方式则需要将JS goto参数整体urlencode编码,不要单独对redirect_uri编码),该地址使用域名需配置为appId对应的回调域名,回调域名是在获取appId及appSecret时填写
state 用于防止重放攻击,开发者可以根据此信息来判断redirect_uri只能执行一次来避免重放攻击
response_type 固定为code
scope 固定为snsapi_login
loginTmpCode 通过js获取到的loginTmpCode

服务端通过临时授权码获取授权用户的个人信息
通过临时授权码Code获取用户信息,临时授权码只能使用一次。
请求方式:POST(HTTPS)
请求地址:https://oapi.dingtalk.com/sns/getuserinfo_bycode?accessKey=xxx&timestamp=xxx&signature=xxx
请求包结构体:

{"tmp_auth_code": "23152698ea18304da4d0ce1xxxxx"
}

URL签名参数说明:

参数 说明
accessKey 应用的appId
timestamp 当前时间戳,单位是毫秒
signature 通过appSecret计算出来的签名值,签名计算方法

参数说明:

参数 类型 必须 说明
tmp_auth_code String 用户授权的临时授权码code,只能使用一次;在前面步骤中跳转到redirect_uri时会追加code参数

返回结果:

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

钉钉的多地址授权只能通过间接方式实现,再注册一个应用,使用unionid来进行用户唯一性判断,因为同一个账号下面的不同应用,获取到的用户信息里面unionid是一致的,openid不一致.
关于多地址授权的意见和实现方案,我已经反馈给钉钉开发者了,目前已经过了在计划中了,应该后期会安排上。
希望看到的朋友也去后台提一个需求建议,更多的人提,应该会加快进度。

提的方案:

登录授权回调可不可以填写多个地址?因为有的项目需要做迁移,然后需要新旧项目一起跑。我看官方文档关于这个都没有介绍,国外的第三方登录都是可以填写多个回调的,谷歌facebook都可以,连微信都可以了,希望钉钉也能允许多个地址回调。
多个回调不是一次真要回调多个,我们在地址里面填有redirect_uri,你们可以根据我填写的这个redirect_uri判断在不在钉钉这边设置的回调地址里面,如果在的话就回调这一个,不在的话旧报错,这个操作不会对服务器几乎没啥额外工作。希望尽快加上这个功能,多个回调地址用;分割就行了。

钉钉第三方登录,多地址授权相关推荐

  1. android qq三方登录授权失败,QQ第三方登录无法授权错误码110401的解决方法

    原标题:QQ第三方登录无法授权错误码110401的解决方法 一些网友在注册APP的时候,会选择QQ作为第三方登录方式,但是,最近,一些网友发现:选择QQ第三方登录的时候,会出现无法授权错误码11040 ...

  2. 通过js sdk 来进行第三方登录及授权(微博,微信,qq)

    微博第三方登录及授权 注册申请appkey 1.打开微博开发者平台http://open.weibo.com/development 2.点击创建微链接 3.选择类型(选择网站接入) 4.填写各项信息 ...

  3. 第三方登录出现授权失败,错误码:100044

    本人在项目开发的过程中,在sharedsdk集成的第三方QQ登录的时候,曾遇到过这样的问题,"该应用非官方正版应用,请去应用宝下载正版后进行qq登陆.(错误码:100044),详情见下图: ...

  4. 钉钉扫码免登-钉钉应用内免登的实现(附仓库及Demo)

    新版钉钉扫码免登及钉钉应用内免登的一次实现 (附仓库及Demo) Vue2, JDK1.8, SpringBoot2.x.x, 钉钉模块, 钉钉模块Demo, 钉钉开放平台 目录 新版钉钉扫码免登及钉 ...

  5. 友盟第三方登录精简版QQ遇到的坑

    这几天在项目中集成了友盟第三方登录,完成以后微信和微博基本都没什么问题,只有QQ遇到的问题比较烦人.具体的集成步骤我不在此赘述,官方文档上有,而且已经有不少介绍的很详细的文章.个人遇到问题可能不同,此 ...

  6. 单点登录和第三方登录

    最近做了一些登录相关的工作,顺便看了下常见的登录方案,这里主要从后端的角度梳理一些技术细节. 文章目录 单点登录 第三方登录 单点登录 单点登录(Single Sign On),简称SSO,是目前比较 ...

  7. 第三方登录的作用、价值与实现方式

    什么叫做第三方登录 第三方登录,是相对于应用而言,用户登录操作不是基于自身建设账号体系,而是基于用户在第三方平台上已有的账号和密码来快速完成登录的过程.目前国内比较广泛使用的第三方登录方式为微博.微信 ...

  8. 钉钉授权第三方WEB网站扫码登录

    一.阅读开发文档 首先阅读钉钉官方的开发文档,扫码登录其实用的是官方文档描述的第二种方式,即将钉钉登录二维码内嵌到自己页面中,用户使用钉钉扫码登录第三方网站,网站可以拿到钉钉的用户信息. 二.准备工作 ...

  9. OAUTH之 钉钉第三方授权登录

    文章目录 OAUTH之钉钉第三方授权登录 前期用到的工具 获取access_token 请求地址 请求方法 响应 扫码 / 使用账号密码 -- 获取 临时 code 参数重要说明 直接访问 扫码登录 ...

最新文章

  1. java model 中文乱码_Java解压zip 解决编码和中文乱码问题
  2. Python生成html邮件
  3. CG CTF WEB /x00
  4. SAP Spartacus 的 cx-page-layout selector 介绍 - PageLayoutComponent
  5. 山寨十年,东鹏特饮终于打败红牛!但却很尴尬
  6. JAVA-初步认识-第十章-多态-类型判断-instanceof
  7. springboot修改默认端口号,启动端口号
  8. Python简单监控键盘输入的木马实现
  9. Python基础(九)——print函数详解,配合参数示例详解
  10. ChatGLM-6B 安装试用
  11. 信号处理趣学D4——利用谐波叠加对周期方波进行逼近
  12. 正则表达式的含义于简介
  13. 龙贝格方法计算椭圆周长
  14. CATT eCATT
  15. mysql 建立超级用户_mysql创建超级用户
  16. 活动星投票如何进行大学生人物的制作网络投票系统投票制作免费
  17. 基因共表达网络分析java,WGCNA 加权基因共表达网络分析教程(1)
  18. 【ps功能精通】8.形状工具
  19. 高级计算机网络,高级计算机网络
  20. 求一个集合的所有子集问题实现

热门文章

  1. 3ds Max快速环境闭塞的使用
  2. css零到一基础教程042:CSS 谷歌字体
  3. 合作快准稳,电子合同助跑“林氏木业”供应链数字化
  4. 1-医疗挂号系统_【项目介绍与Mybatis Plus】
  5. python统计次数正则_Python提取信息必学基础——正则表达式
  6. 比尔总动员》座驾改装材料收集攻略
  7. MySQL探秘(八):InnoDB的事务
  8. 计算机技术及其关系,计算机技术和自动化的关系.doc
  9. 收集一些新婚祝词(成语)
  10. 计算机是我们生活中必需的工具英语,作业英语单词