钉钉扫码登录网站

  • 前言

     由于本公司前后台分离,这里主要讲述后台的实现逻辑与过程,前端相关的一略而过。前端我们采用的是把二维码内嵌到我们的网页中。

流程如下:

1.登录钉钉后台创建一个企业应用

2.根据appid与app_secret获取access_token

  • access_token有效期为2个小时,可以自行缓存。
    /**
* 获取access token 有效期2 个小时,有效期获取,值不变,时间延长
* @return
*/
public static DdResult getAccessToken(String appid, String secret){
String requestUrl = "https://oapi.dingtalk.com/sns/gettoken?appid=APPID&appsecret=APPSECRET";
requestUrl = requestUrl.replace("APPID", appid).replace("APPSECRET", secret);
String accessTokenResult = HttpClientUtil.doGet(requestUrl);
log.info("------->> >> -------->> request ding ding access token result:{}", accessTokenResult);
if (StringUtils.isNotBlank(accessTokenResult)) {
return JSON.parseObject(accessTokenResult, new TypeReference<DdResult>(){});
}
return new DdResult();
}

3.获取持久码persistent_code

  • 根据前端传回来的code与上一步获取的access_token获取persistent_code,持久码暂时无过期时间。

/**
* 根据code与accessToken获取用户的持久授权码
* @param code 临时码,只能使用一次
* @param accessToken 有效期,2个小时
* @return
*/
public static DdResult getPersistentCode(String code, String accessToken){
String requestUrl = "https://oapi.dingtalk.com/sns/get_persistent_code?access_token=" + accessToken;
HashMap<String, String> params = Maps.newHashMap();
params.put("tmp_auth_code", code);
String accessTokenResult = HttpClientUtil.doPostJson(requestUrl, JSON.toJSONString(params));
log.info("------->> >> -------->> ding ding persistent token result: {}", accessTokenResult);
return JSON.parseObject(accessTokenResult, DdResult.class);
}

4.获取用户授权码SNS_TOKEN

  • 根据上一步获取的openid,persistent_code与2步中获取的access_token获取SNS_TOKEN

/**
* 获取sns token
* @param accessToken
* @param openId
* @param persistentCode
* @return
*/
public static DdResult getSnsToken(String accessToken, String openId, String persistentCode) {
HashMap<String, String> params = Maps.newHashMap();
params.put("openid", openId);
params.put("persistent_code", persistentCode);
String snsTokenRequestUrl = "https://oapi.dingtalk.com/sns/get_sns_token?access_token=" + accessToken;
String result = HttpClientUtil.doPostJson(snsTokenRequestUrl, JSON.toJSONString(params));
log.info("------->> >> -------->> request ding ding sns token result:{}", result);
return JSON.parseObject(result, new TypeReference<DdResult>(){});
}

5.获取用户信息

  • 根据上一步获取的SNS_TOKEN获取用户信息。

public static DdResult getUserInfo(String snsToken) {
String userInfoRequestUrl = "https://oapi.dingtalk.com/sns/getuserinfo?sns_token=" + snsToken;
String result = HttpClientUtil.doGet(userInfoRequestUrl);
log.info("------->> >> -------->> >> request ding ding sns token result:{}", result);
if (StringUtils.isBlank(result)) {
return null;
}
return JSON.parseObject(result, new TypeReference<DdResult>() {});
}

 拿到用户的信息就可以去做登录操作了。

钉钉扫码登录web网站的更多相关文章

  1. 使用Django2.0.4集成钉钉第三方扫码登录

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_124 钉钉作为阿里旗下的一款免费移动通讯软件,受众群体越来越多,这里我们使用Django来集成一下钉钉的三方账号登录,首先注册钉钉 ...

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

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

  3. uniapp实现钉钉扫码登录

    由于uniapp暂无钉钉授权登录所以本文将钉钉扫码登录作为网页嵌入uniapp,最终实现钉钉扫码登录app 1. 用H5调起钉钉扫码登录 钉钉在网页端的扫码登录可参考钉钉文档:扫码登录第三方网站 - ...

  4. Web应用多账号系统设计及微信扫码登录实现

    Web应用多账号系统设计及微信扫码登录实现 1   前言概述 公司对功能测试,性能测试,安全测试等等都做了比较好的自动化后,急需要一个MIS系统来统一管理这些结果及报表. 此MIS系统特点如下: 仅内 ...

  5. (钉钉)第三方WEB网站扫码登录

    年底在做钉钉和公司的知识库产品的对接,怎么使用钉钉api的如下: 第一步: 登录:https://oa.dingtalk.com/#/welcome 这点可以自己建立一个企业账号进行测试 点击工作台建 ...

  6. 【JavaWeb开发】初步实现网站应用钉钉扫码登录

    http://blog.csdn.net/baofeidyz/article/details/59059379 版权声明:转载请注明我的个人微信平台 暴沸 目录(?)[+] 写在前面:如果你还不知道钉 ...

  7. RobotFramework:钉钉扫码登录UI自动化

    背景: 遇到一个项目,使用的是钉钉扫码登录,一时间不知道该怎么下手了,还是先F12抓包看下都有什么数据传输吧. 分析: 先熟悉下钉钉扫码登录的逻辑,参考官文:https://open-doc.ding ...

  8. 二维码生成插件qrious及网站扫码登录的一些理解

    什么是二维码 ​ 二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型. ...

  9. 手机端可以和PC端同时在线-java QRCode 实现网站扫码登录(即支持同帐号多设备同时登录)

    微信扫码测试地址:: http://sms.reyo.cn 用户名:aa 密码:123456 扫码登录实现方式很多,比如ajax轮询,http长连接(comet...),websocket,event ...

随机推荐

  1. 05 Tensorflow中变量的初始化

    打开Python Shell,输入import tensorflow as tf,然后可以执行以下代码. 1.创建一个2*3的矩阵,并让所有元素的值为0.(类型为tf.float) a = tf.ze ...

  2. 调度器简介,以及Linux的调度策略

    进程是操作系统虚拟出来的概念,用来组织计算机中的任务.但随着进程被赋予越来越多的任务,进程好像有了真实的生命,它从诞生就随着CPU时间执行,直到最终消失.不过,进程的生命都得到了操作系统内核的关照.就 ...

  3. web认证

    前言: HTTP是无状态协议,之前已认证成功的用户状态无法通过协议层面保存下来.即无法实现状态管理,我们使用Cookie来管理Session(会话),以弥补HTTP协议中不存在的状态管理功能. 步骤: ...

  4. MFC原理第五讲.消息映射.以及如何添加消息

    MFC原理第五讲.消息映射.以及如何添加消息 一丶消息映射是什么 我们知道.Win32程序.都是通过消息去驱动的. 不断的在处理消息. 只要我们使用固定的宏.就可以让我们的框架知道一旦消息发生.该往哪 ...

  5. PEB标记反调试方法

    PEB标记反调试方法 一丶PEB结构简介 PEB.简称进程环境快. 我们在讲DLL隐藏的时候已经说过了. 具体博客链接: https://www.cnblogs.com/iBinary/p/96018 ...

  6. 【杂谈】没有公网IP的电脑如何与外部通信

    前言 前几天突然想到的问题,自己先猜测推理了一番,最后在谢希仁版<计算机网络>找到了权威的解答.这里记录一下自己的思考过程. 网站是如何找到我们的? 我们知道,互联网中的两台电脑要进行通信 ...

  7. 详细分析MySQL的日志(一)

    官方手册:https://dev.mysql.com/doc/refman/5.7/en/server-logs.html 不管是哪个数据库产品,一定会有日志文件.在MariaDB/MySQL中,主要 ...

  8. Jenkins+Git+Gitlab+Ansible实现持续集成自动化部署静态网站(一)--技术流ken

    前言 在之前已经写了关于Git,Gitlab以及Ansible的两篇博客<Git+Gitlab+Ansible剧本实现一键部署Nginx--技术流ken>,<Git+Gitlab+A ...

  9. dotnetcore-officeaddin-toolbox : Office 365 Add-in开发人员的工具箱

    在上一篇文章(.NET Core开源行动:一键创建Excel Add-in) 中我给大家展示了一套为Office 365 Add-in开发人员准备的模板库,你可以通过 dotnet new excel ...

  10. linux添加字体

    执行命令发现输入命令查看字体列表是提示命令无效: 如上图可以看出,不仅没有中文字体,连字体库都没有,那么接下来就记录一下在Linux CentOS 7中如何安装字体库以及中文字体. 安装字体库 在Ce ...