Springboot——钉钉(站内)实现登录第三方应用

文章目录

  • 前言
  • 准备
    • 1、创建钉钉应用,并开放网页应用
    • 2、配置网页应用各项参数
    • 发布版本
  • 前端改造
  • 后端逻辑
    • 1、获取应用免登录 Access_token
    • 2、通过免登录 Access_token 和 Auth_Code 获取对应登录人信息
  • 注意事项

前言

PC端的钉钉工作台,增加第三方应用,实现点击后自动授权登录逻辑。

准备

1、创建钉钉应用,并开放网页应用

在这里插入图片描述

2、配置网页应用各项参数

在这里插入图片描述

https://ip:port/#/midPageDingTalk?apiParams=$CORPID$

发布版本

在这里插入图片描述

前端改造

参考官方文档requestAuthCode

当点击站内的应用后,钉钉会按照配置页面地址,自动进入到配置的前端页面中。此时前端页面中增加一些逻辑,用来获取随机码AuthCode

dd.requestAuthCode({corpId: 'corpid',clientId: 'clientid',onSuccess: function (result) {/*{code: 'hYLK98jkf0m' //string authCode}*/},onFail: function (err) {},
});

返回数据样例:

{ "code": "fea65576013237fba6ca6c5b16a85ff5" }

后端逻辑

主体逻辑可以参考官方文档中给出的demo,但有坑,已自己踩过。
在这里插入图片描述

1、获取应用免登录 Access_token

官方给出的这个案例中,不存在对应的GetTokenRequest对象,但整体逻辑可以使用下面这个做替换。

import com.alibaba.fastjson.JSONObject;
import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponse;
import lombok.extern.slf4j.Slf4j;/*** https://open.dingtalk.com/document/orgapp/obtain-the-access_token-of-an-internal-app*/
@Slf4j
public class GetAccessTokenDemo {/*** 使用 Token 初始化账号Client* @return Client* @throws Exception*/public static com.aliyun.dingtalkoauth2_1_0.Client createClient() throws Exception {com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config();config.protocol = "https";config.regionId = "central";return new com.aliyun.dingtalkoauth2_1_0.Client(config);}public static void main(String[] args) throws Exception {com.aliyun.dingtalkoauth2_1_0.Client client = createClient();com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest getAccessTokenRequest = new com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenRequest().setAppKey("应用clientId").setAppSecret("应用 Client Secret ");GetAccessTokenResponse accessToken = client.getAccessToken(getAccessTokenRequest);log.info("请求回执信息:{}", JSONObject.toJSONString(accessToken.getBody()));// {"accessToken":"6315e4d453583c69b1fb89ae455ba772","expireIn":7200}System.out.println(accessToken.getBody().accessToken);}
}

2、通过免登录 Access_token 和 Auth_Code 获取对应登录人信息

官方文档:通过免登码获取用户信息

import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiV2UserGetuserinfoRequest;
import com.dingtalk.api.response.OapiV2UserGetuserinfoResponse;
import com.taobao.api.ApiException;public class GetUserInfo {public static void main(String[] args) throws ApiException {DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/v2/user/getuserinfo");OapiV2UserGetuserinfoRequest req = new OapiV2UserGetuserinfoRequest();req.setCode("钉钉返回给出的 authcode 值");OapiV2UserGetuserinfoResponse rsp = client.execute(req, "获取到的 access_token 值");System.out.println(rsp.getBody());}
}

返回数据案例:

{"errcode": 0, "result": {"associated_unionid": "N2o5U3axxxx", "unionid": "gliiW0piiii02zBUjUxxxx", "device_id": "12drtfxxxxx", "sys_level": 1, "name": "张xx", "sys": true, "userid": "userid123"}, "errmsg": "ok"
}

注意事项

钉钉开发中心中配置项,配置完成后想要钉钉工作台中出现指定的入口,必须进行发布操作。只有发布成功后才会生效。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/505766.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

完美解决VMware 17.0 Pro安装ubuntu、Deepin等虚拟机后卡顿、卡死问题

这两天在 VM 17 Pro 中安装了ubuntu 24.1 和Deepin 23.9 等Linux操作系统,在使用过程中出现过数次卡顿、卡死问题,现记录整理解决方法如下: 一、问题描述 安装虚拟机时、以及安装完成后正常使用时出现鼠标点击卡顿、系统反应慢、卡死等问题…

计算机的错误计算(二百零七)

摘要 利用两个数学大模型计算 arccot(0.125664e2)的值,结果保留16位有效数字。 实验表明,它们的输出中分别仅含有3位和1位正确数字。 例1. 计算 arccot(0.125664e2)的值,结果保留16位有效数字。 下面是与一个数学解题器的对话。 以上为与…

Linux内核TTY子系统有什么(6)

接前一篇文章:Linux内核TTY子系统有什么(5) 本文内容参考: Linux TTY子系统框架-CSDN博客 一文彻底讲清Linux tty子系统架构及编程实例-CSDN博客 linux TTY子系统(3) - tty driver_sys tty device driver-CSDN博客 Linux TTY …

03_Redis基本操作

1.Redis查询命令 1.1 官网命查询命令 为了便于学习Redis,官方将其用于操作不同数据类型的命令进行了分类整理。你可以通过访问Redis官方网站上的命令参考页面https://redis.io/commands来查阅这些分组的命令,这有助于更系统地理解和使用Redis的各项功能。 1.2 HELP查询命令…

@LocalBuilder装饰器: 维持组件父子关系

一、前言 当开发者使用Builder做引用数据传递时,会考虑组件的父子关系,使用了bind(this)之后,组件的父子关系和状态管理的父子关系并不一致。为了解决组件的父子关系和状态管理的父子关系保持一致的问题,引入LocalBuilder装饰器。…

kubernetes第七天

1.影响pod调度的因素 nodeName 节点名 resources 资源限制 hostNetwork 宿主机网络 污点 污点容忍 Pod亲和性 Pod反亲和性 节点亲和性 2.污点 通常是作用于worker节点上,其可以影响pod的调度 语法:key[value]:effect effect:[ɪˈfek…

FFmpeg Muxer HLS

使用FFmpeg命令来研究它对HLS协议的支持程度是最好的方法: ffmpeg -h muxerhls Muxer HLS Muxer hls [Apple HTTP Live Streaming]:Common extensions: m3u8.Default video codec: h264.Default audio codec: aac.Default subtitle codec: webvtt. 这里面告诉我…

maven高级(day15)

Maven 是一款构建和管理 Java 项目的工具 分模块设计与开发 所谓分模块设计,顾名思义指的就是我们在设计一个 Java 项目的时候,将一个 Java 项目拆分成多 个模块进行开发。 分模块设计我们在进行项目设计阶段,就可以将一个大的项目拆分成若干…

【json】

JSON JSON是一种轻量级的,按照指定的格式去组织和封装数据的数据交互格式。 本质上是一个带有特定格式的字符串(py打印json时认定为str类型) 在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互,类似于计算机普通话 python与json关系及相互转换…

计算机网络 笔记 数据链路层 2

1,信道划分: (1)时分复用TDM 将时间等分为“TDM帧”,每个TDM帧内部等分为m个时隙,m个用户对应m个时隙 缺点:每个节点只分到了总带宽的1/m,如果有部分的1节点不发出数据,那么就会在这个时间信道被闲置,利用…

OpenPCDet从环境配置到模型训练

一、环境安装: 操作系统 :ubuntu 20.04+docker [11.8.0-cudnn8-devel-ubuntu18.04] 代码下载地址:GitHub - open-mmlab/OpenPCDet: OpenPCDet Toolbox for LiDAR-based 3D Object Detection.OpenPCDet Toolbox for LiDAR-based 3D Object Detection. - open-mmlab/OpenPCD…

【Python】Python与C的区别

文章目录 语句结束符代码块表示变量声明函数定义注释格式Python的标识符数据输入input()函数数据输出print()函数 语句结束符 C 语言 C 语言中每条语句必须以分号;结束。例如,int a 10;、printf("Hello, World!");。分号是语句的一部分,用于…

了解模2除法:原理与应用

模2除法,也被称为二进制除法或XOR除法,是一种在二进制数制下进行的特殊除法运算。与常规的十进制或其他进制的除法不同,模2除法使用异或(XOR)运算代替减法,并且不涉及进位或借位。这种除法运算在数字通信、…

【GESP】C++二级练习 luogu-B2079, 求出 e 的值

GESP二级练习,循环语句嵌套,难度★✮☆☆☆。 题目题解详见:https://www.coderli.com/gesp-2-luogu-b2079/ https://www.coderli.com/gesp-2-luogu-b2079/https://www.coderli.com/gesp-2-luogu-b2079/

鼠标自动移动防止锁屏的办公神器 —— 定时执行专家

目录 ◆ 如何设置 ◇ 方法1:使用【执行Nircmd命令】任务 ◇ 方法2:使用【模拟键盘输入】任务 ◆ 定时执行专家介绍 ◆ 定时执行专家最新版下载 ◆ 如何设置 ◇ 方法1:使用【执行Nircmd命令】任务 1、点击工具栏第一个图标【新建任务】&…

2025新年源码免费送

2025很开门很开门的源码免费传递。不需要馒头就能获取4套大开门源码。 听泉偷宝,又进来偷我源码啦👊👊👊。欢迎偷源码 🔥🔥🔥 获取免费源码以及更多源码,可以私信联系我 我们常常…

微信小程序实现登录注册

文章目录 1. 官方文档教程2. 注册实现3. 登录实现4. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/路由跳转的几种方式: https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.switchTab…

1. Doris分布式环境搭建

一. 环境准备 本次测试集群采用3台机器hadoop1、hadoop2、hadoop3, Frontend和Backend部署在同一台机器上,Frontend部署3台组成高可用,Backend部署3个节点,组成3副本存储。 主机IP操作系统FrontendBackendhadoop1192.168.47.128Centos7Foll…

docker-compose安装canal并利用rabbitmq同步多个mysql数据

必看:本文默认已经安装好了docker-compose、rabbitmq、mysql并且mysql开启了binlog日志,不需要再安装; 流程图 如上图所示,左边是MQ模式流程图,右边则是TCP模式的流程图; 最终的目的是利用canal监听多个M…

ue5动画重定向,一键重定向。ue4小白人替换成ue5

这就是我们下载的 初学者动画内容包 点击设置选中列 绿色的是动画 黄色的关卡 蓝色是蓝图 ctrla 全选 ctrl鼠标左键 选中所有动画 重定向动画资产 不要选错,只要绿色 选择目标网格体 选择所有的绿色 动画 导出动画 添加前缀ycn 导出 一定要提前新建好存放的…