钉钉扫码登录网站

  • 前言

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

流程如下:

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. [Jenkins][Git]ssh原理以及与https的区别

    -------------------------------------------------------------------- 本文参考多篇文章结合自身情况完成,可自由转载,需保留本文出处! ...

  2. Cannot retrieve metalink for repository: epel/x86_64. Please verify its path and try again 解决方法

    vim /etc/yum.repos.d/epel.repo 1 [epel] 2 name=Extra Packages for Enterprise Linux 7 - $basearch 3 # ...

  3. linux磁盘管理增加,扩容

    一.磁盘空间不足,添加新的磁盘 一般来说,当我们在服务上插入新的磁盘时,服务器是会对磁盘进行识别的.但是,有的时候服务器并没有对这些新插入的磁盘进行识别.这时,我们可以通过重启服务器,来使服务器重新加 ...

  4. ASP.NET Core中的Startup类

    ASP.NET Core程序要求有一个启动类.按照惯例,启动类的名字是 "Startup" .Startup类负责配置请求管道,处理应用程序的所有请求.你可以指定在Main方法中使 ...

  5. git 上传本地项目

    一.下载和安装git 官网下载,默认一直点下一步安装. https://git-scm.com/ 二.在www.gitee.com 注册一个账号 1.点击加号“+”在gitee中新建一个项目 2.下面 ...

  6. 1. 七种join的sql编写

    一.join图 二.sql演示 a.创建演示表及数据 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0; -- ----------------------- ...

  7. SpringBoot快速开始Hello World

    介绍 Spring Boot跟Spring MVC不太一样,Spring MVC建新项目的时候是要配置很多东西的,而Spring Boot讲究的是快速,提供了很多默认配置,所以新建一个项目不需要手动配 ...

  8. python文件

    目录 1. 文件的概念 1.1 文件的概念和作用 1.2 文件的存储方式 2. 文件的基本操作 2.1 操作文件的套路 2.2 操作文件的函数/方法 2.3 read 方法 -- 读取文件 2.4 打 ...

  9. Partition(hdu4651)2013 Multi-University Training Contest 5

    Partition Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  10. Hibernate入门(十二)离线条件检索

    Hibernate——离线条件检索DetachedCriteria DetachedCriteria翻译为离线条件查询,因为它是可以脱离Session来使用的一种条件查询对象,我们都知道Criteri ...