当前位置: 首页 > news >正文

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"
}

注意事项

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

相关文章:

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

文章目录 前言准备1、创建钉钉应用,并开放网页应用2、配置网页应用各项参数发布版本 前端改造后端逻辑1、获取应用免登录 Access_token2、通过免登录 Access_token 和 Auth_Code 获取对应登录人信息 注意事项 前言 PC端的钉钉中工作台,增加第三方应用&a…...

基于深度学习算法的AI图像视觉检测

基于人工智能和深度学习方法的现代计算机视觉技术在过去10年里取得了显著进展。如今,它被广泛用于图像分类、人脸识别、图像中物体的识别等。那么什么是深度学习?深度学习是如何应用在视觉检测上的呢? 什么是深度学习? 深度学习是…...

cJson——序列化格式json和protobuf对比

cJson——序列化格式json和protobuf对比 1. 更小的消息体积2. 更快的序列化与反序列化速度3. 类型安全4. 向后和向前兼容性5. 更低的带宽消耗6. 高效的编码方式7. 易于跨语言支持8. 支持复杂的数据结构9. 更好的支持大型数据交换总结 Protocol Buffers (Protobuf) 和 JSON 都是…...

搭建一个fastapi的项目,调用ollama服务

1. 项目结构 my_project/ │ ├── app/ │ ├── main.py # FastAPI应用的入口 │ ├── services/ # 包含服务逻辑 │ │ └── ollama_service.py │ ├── models/ # 定义数据模型 │ │ └── response.py │ ├─…...

Wireshark编译手册(Windows)

以下是对 Wireshark 官方文档中“Windows 平台的设置和构建说明”部分的翻译和总结: 2.2. Windows 平台 本节提供了在 Windows 上进行 Wireshark 开发的快速设置指南,包含推荐的配置。 2.2.1. 使用 Microsoft Visual Studio 注意:除非您非…...

在高德地图上加载3DTilesLayer图层模型/天地瓦片

1. 引入必要的库 Three.js:一个用于创建和显示3D图形的JavaScript库。vuemap/three-layer:一个Vue插件,它允许你在高德地图中添加Three.js图层。vuemap/layer-3dtiles:一个用于处理3D Tiles格式数据的Vue插件,可以用来…...

深入浅出负载均衡:理解其原理并选择最适合你的实现方式

负载均衡是一种在多个计算资源(如服务器、CPU核心、网络链接等)之间分配工作负载的技术,旨在优化资源利用率、提高系统吞吐量和降低响应时间。负载均衡的实现方式多种多样,以下是几种常见的实现方式: 1. 硬件负载均衡&…...

STM32的存储结构

STM32F103 芯片是基于 ARM Cortex-M3 内核的微控制器,它集成了多种类型的存储器,每种存储器都有其特定的作用和存储对象。以下是关于 STM32F103 中 Flash、ROM 和 SRAM 的详细介绍: 1. Flash Memory (闪存) 作用:Flash 是非易失性…...

@SneakyThrows 注解详解

SneakyThrows 注解详解 1. 基本介绍 SneakyThrows 是 Lombok 提供的注解,用于简化异常处理,自动生成 try-catch 代码块,将检查型异常转换为非检查型异常。 2. 使用对比 2.1 传统写法 public String readFile(String path) {try {return …...

js监测页面可见性

监测切换页面 检测页面的可见性状态document.visibilityState:document.hiddenvisibilitychange 事件 js 检测页面切换至别的应用 检测页面的可见性状态 在JavaScript中,你可以使用Page Visibility API来检测页面的可见性状态。这个API提供了一组接口,允…...

Android wifi常见问题及分析

参考 Android Network/WiFi 那些事儿 前言 本文将讨论几个有意思的网络问题,同时介绍 Android 上常见WiFi 问题的分析思路。 网络基础Q & A 一. 网络分层缘由 分层想必大家很熟悉,是否想过为何需要这样分层? 网上大多都是介绍每一层…...

EFCore HasDefaultValueSql

今天小伙伴在代码中遇到了有关 HasDefaultValue 的疑问,这里整理澄清下... 在使用 Entity Framework Core (EFCore) 配置实体时,HasDefaultValue 方法会为数据库列设置一个默认值。该默认值的行为取决于以下条件: 1. 配置 HasDefaultValue 的…...

Win10微调大语言模型ChatGLM2-6B

在《Win10本地部署大语言模型ChatGLM2-6B-CSDN博客》基础上进行,官方文档在这里,参考了这篇文章 首先确保ChatGLM2-6B下的有ptuning AdvertiseGen下载地址1,地址2,文件中数据留几行 模型文件下载地址 (注意&#xff1…...

什么叫区块链?怎么保证区块链的安全性?

区块链(Blockchain)是一种分布式数据库或账本技术,它通过去中心化的方式记录交易或其他数据,并确保这些记录是安全、透明和不可篡改的。区块链最初是作为比特币(Bitcoin)加密货币的基础技术而被公众所知&am…...

一、智能体强化学习——强化学习基础

1.1 强化学习与深度学习的基本概念 1.1.1 强化学习的核心思想 什么是强化学习? 强化学习(Reinforcement Learning, RL):指在与环境(Environment)的反复交互中,智能体(Agent&#x…...

【DES加密】

什么是DES DES(Data Encryption Standard) 是一种对称加密算法。它的设计目标是提供高度的数据安全性和性能。 DES的概念 DES使用56位的密钥和64位的明文块进行加密。DES算法的分组大小是64位,因此,如果需要加密的明文长度不足64位,需要进…...

.NET中的框架和运行环境

在.NET生态系统中,框架和运行环境是两个不同的概念,它们各自扮演着重要的角色。 下面我将分别介绍.NET中的框架和运行环境,并解释它们之间的区别。 .NET 框架(Frameworks) 框架提供了一套预定义的类库、工具和服务&…...

探索微软 M365 安全:全方位守护数字世界

在当今这个科技呈井喷式飞速发展,数字化浪潮以汹涌澎湃、锐不可当之势席卷全球的时代,企业与个人仿若置身于一片浩瀚无垠、信息奔涌的海洋之中,尽情畅享着技术革新所带来的无穷无尽便利。然而,恰如平静海面下潜藏着暗礁与汹涌暗流,网络安全问题恰似隐匿在暗处、随时可能给…...

深入探索AI核心模型:CNN、RNN、GAN与Transformer

在人工智能的飞速发展中,众多深度学习模型和算法不断涌现,推动了许多领域的进步。特别是在图像识别、自然语言处理、生成建模等方向,AI模型的应用越来越广泛。本文将介绍几种最常用的AI模型,包括卷积神经网络(CNN&…...

Java - Http 通讯

Java - Http 通讯 PS&#xff1a; 1. Http 协议 POST | GET 请求&#xff1b; 2. 支持 报头、报文、参数 自定义配置&#xff1b; 3. GET 返回支持 String | Stream; 4. 相关依赖&#xff1a; <dependency><groupId>org.apache.httpcomponents</groupId><…...

C++ Qt练习项目 QChar功能测试

个人学习笔记 代码仓库 GitCode - 全球开发者的开源社区,开源代码托管平台 新建项目 设计UI 1、拖入group box去掉名字 2、拖入2个LineEdit 3、拖入两个Label 4、拖入两个PushButton 5、点栅格布局 1、拖入GroupBox 2、拖入4个PushButton 3、点栅格布局 1、拖入GroupBo…...

android 官网刷机和线刷

nexus、pixel可使用google官网线上刷机的方法。网址&#xff1a;https://flash.android.com/ 本文使用google线上刷机&#xff0c;将Android14 刷为Android12 以下是失败的线刷经历。 准备工作 下载升级包。https://developers.google.com/android/images?hlzh-cn 注意&…...

二叉树层序遍历 Leetcode102.二叉树的层序遍历

二叉树的层序遍历相当于图论的广度优先搜索&#xff0c;用队列来实现 &#xff08;二叉树的递归遍历相当于图论的深度优先搜索&#xff09; 102.二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右…...

DELTA并联机械手视觉方案荣获2024年度机器人应用典型案例奖

直击现场 2025年1月9日晚&#xff0c;2024深圳市机器人年度评选颁奖典礼在深圳市南山区圣淘沙酒店正式拉开帷幕。本次颁奖活动由中国科学院深圳先进技术研究院指导&#xff0c;深圳市机器人协会与《机器人与智能系统》杂志组织承办。 正运动公司受邀参与此次典礼&#xff0c;…...

Netty 入门学习

前言 学习Spark源码绕不开通信&#xff0c;Spark通信是基于Netty实现的&#xff0c;所以先简单学习总结一下Netty。 Spark 通信历史 最开始: Akka Spark 1.3&#xff1a; 开始引入Netty&#xff0c;为了解决大块数据&#xff08;如Shuffle&#xff09;的传输问题 Spark 1.6&…...

Magentic-One、AutoGen、LangGraph、CrewAI 或 OpenAI Swarm:哪种多 AI 代理框架最好?

目录 一、说明 二、 AutoGen-自动生成&#xff08;微软&#xff09; 2.1 特征 2.2 局限性 三、 CrewAI 3.1 特征 3.2 限制&#xff1a; 四、LangGraph 4.1 特征&#xff1a; 4.2 限制&#xff1a; 五、OpenAI Swarm 5.1 特征 5.2 限制 六、Magentic-One 6.1 特征 6.2 限制 七、…...

openstack下如何生成centos9 centos10 和Ubuntu24 镜像

如何生成一个centos 10和centos 9 的镜像1. 下载 对应的版本 wget https://cloud.centos.org/centos/10-stream/x86_64/images/CentOS-Stream-GenericCloud-x86_64-10-latest.x86_64.qcow2 wget https://cloud.centos.org/centos/9-stream/x86_64/images/CentOS-Stream-Gener…...

Kivy App开发之UX控件Slider滑块

在app中可能会调节如音量,亮度等,可以使用Slider来实现,该控件调用方便,兼容性好,滑动平稳。在一些参数设置中,也可以用来调整数值。 支持水平和垂直方向,可以设置默认值,最小及最大值。 使用方法,需用引入Slider类,通过Slider类生成一个滑块并设置相关的样式后,再…...

CSS——22.静态伪类(伪类是选择不同元素状态)

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>静态伪类</title> </head><body><a href"#">我爱学习</a></body> </html>单击链接前的样式 左键单击&#xff08;且…...

python学opencv|读取图像(三十)使用cv2.getAffineTransform()函数倾斜拉伸图像

【1】引言 前序已经学习了如何平移和旋转缩放图像&#xff0c;相关文章链接为&#xff1a; python学opencv|读取图像&#xff08;二十七&#xff09;使用cv2.warpAffine&#xff08;&#xff09;函数平移图像-CSDN博客 python学opencv|读取图像&#xff08;二十八&#xff0…...

怎么在新建网站上做分享代码/成都新一轮疫情

V8 JavaScript 团队宣布优化异步函数和 promises 对象。团队还提升了异步代码的调试体验&#xff0c;这也是 JavaScript 开发人员的共同痛点。正文V8 JavaScript 团队宣布优化了异步函数和 promises 对象。团队还提升了异步代码的调试体验&#xff0c;这也是 JavaScript 开发人…...

谁家网站用户体验做的好/网站怎么推广效果好一点呢

SQL SERVER 2012数据库&#xff1a;删除用户时提示“数据库主体在该数据库中拥有架构”无法删除解决办法http://blog.csdn.net/aminfo/article/details/21470293[sql] view plaincopy use 数据库名 ALTER AUTHORIZATION ON SCHEMA::db_owner TO dbo...

html5 微网站模版/今日国内重大新闻事件

1.【未证实】在S2SH框架中Spring对Session中对象的维护&#xff0c;在select出数据对象后&#xff0c;如果对该对象进行set新值&#xff0c;Spring会自动更新该对象使数据库与其保持一致&#xff0c;而就程序自身来说是不需要该更新立马进行的&#xff1a; a.可能会放到某个更新…...

摄影网站开发的背景/免费seo软件

背景 在看阿里巴巴Java开发手册手册时&#xff0c;看到了有关hashCode()和equals()方法的使用规范。 只要重写 equals&#xff0c;就必须重写 hashCode。 因为 Set 存储的是不重复的对象&#xff0c;依据 hashCode 和 equals 进行判断&#xff0c;所以 Set 存储的对象必须重写…...

如何做网站跳转页面/疫情最新消息今天

最简单、快速的方法&#xff1a; 将需要进行排序的字段编码设置为GBK&#xff0c;然后在查询时直接使用asc/desc就可以啦 转载于:https://www.cnblogs.com/yulongcode/p/11338813.html...

网站建设的策划/深圳百度推广联系方式

原因就是在odoo.conf配置文件中没有说明 模块查找的路径 转载于:https://www.cnblogs.com/one-tom/p/11567238.html...