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.mzph.cn/pingmian/67030.shtml

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

相关文章

马斯克的Grok-2 Beta APP在苹果应用商店上限了,Grok-2安装尝鲜使用教程

马斯克的Grok-2 Beta APP 已经上线苹果商城了,移动端的Grok挺好用的!无需登录即可使用! (文末有安装教程) 实测之后,Grok-2 绘画方面个人感觉比GPT-4的绘画还要强一些。而且速度还挺快,可以多次…

深入理解 C 语言中浮点型数据在内存中的存储

文章目录 一、浮点型数据存储格式(IEEE 754 标准)二、举例说明单精度浮点数存储过程三、绘图说明四、双精度浮点数存储示例(以1.5为例) 在 C 语言的世界里,数据类型丰富多样,而浮点型数据用于表示实数&…

hutool糊涂工具通过注解设置excel宽度

import java.lang.annotation.*;Documented Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER}) public interface ExcelStyle {int width() default 0; }/*** 聊天记录*/ Data public class DialogContentInfo {/**…

自定义日期转换配置

文章目录 1.日期问题出现原因以及解决方案概述1.图示2.三种解决方案概述1.对于表单数据 application/x-www-form-urlencoded2.对于JSON数据1.使用JsonFormat注解2.自定义Jackson日期转换配置 2.解决方案common-web-starter1.目录2.BaseController.java 使用InitBinder解决表单数…

Ubuntu更改内核

需求背景: 由于软件需要在较低版本或者指定版本才可以运行 版本: 配置文件: vi /etc/default/grub 启动界面: 可运行版本: 解决方案: 方案1、更改启动顺序 sudo vi /etc/default/grub 方案2、调整启动顺…

Android系统定制APP开发_如何对应用进行系统签名

前言 当项目开发需要使用系统级别权限或frame层某些api时,普通应用是无法使用的,需要在AndroidManifest中配置sharedUserId: AndroidManifest.xml中的android:sharedUserId“android.uid.system”,代表的意思是和系统相同的uid&a…

解决idea中无法拖动tab标签页的问题

1、按 Ctrl Alt S 打开设置,找到路径 File | Settings | Appearance & Behavior | Appearance 2、去掉勾选 Drag-and-drop with Alt pressed only 即可

【芯片封测学习专栏 -- D2D 和 C2C 之间的区别】

请阅读【嵌入式开发学习必备专栏 Cache | MMU | AMBA BUS | CoreSight | Trace32 | CoreLink | ARM GCC | CSH】 文章目录 OverviewD2D(Die-to-Die)互联D2D 定义D2D 特点D2D 使用场景 C2C(Chip-to-Chip)互联C2C 定义C2C 特点C2C 使…

SQL美化器优化

文章目录 1.目录2.代码 1.目录 2.代码 package com.sunxiansheng.mybatis.plus.inteceptor;import org.apache.ibatis.executor.statement.StatementHandler; import org.apache.ibatis.mapping.*; import org.apache.ibatis.plugin.*; import org.apache.ibatis.reflection.*…

CC工具箱使用指南:【类Json文本转面要素】

一、简介 有一些面要素是通过Json数据存储的,但有可能在某些转化过后,变成了文本信息存储在字段里,如下截图: 字段值中保存了完整的点坐标信息。 工具要做的是将这点坐标信息提取出来,创建成面要素。 二、工具参数介…

英伟达Project Digits赋能医疗大模型:创新应用与未来展望

英伟达Project Digits赋能医疗大模型:创新应用与未来展望 一、引言 1.1 研究背景与意义 在当今数字化时代,医疗行业作为关乎国计民生的关键领域,正面临着前所未有的挑战与机遇。一方面,传统医疗模式在应对海量医疗数据的处理、复…

力扣 岛屿数量

从某个点找,不断找相邻位置。 题目 岛屿中被“0”隔开后 ,是每一小块状的“1”,本题在问有多少块。可以用dfs进行搜索,遍历每一个点,把每一个点的上下左右做搜索检测,当检测到就标记为“0”表示已访问过&a…

An FPGA-based SoC System——RISC-V On PYNQ项目复现

本文参考: 👉 1️⃣ 原始工程 👉 2️⃣ 原始工程复现教程 👉 3️⃣ RISCV工具链安装教程 1.准备工作 👇下面以LOCATION代表本地源存储库的安装目录,以home/xilinx代表在PYNQ-Z2开发板上的目录 ❗ 下载Vivad…

Windows下调试Dify相关组件(2)--后端Api

1.部署依赖的服务(代码最外层的docker目录) 1.1 将middleware.env.example复制,并改名为middleware.env。 1.2 查看docker-compose.middleware.yaml,有5个服务 db:postgres数据库。 redis:redis缓存。 sa…

CSS | CSS实现两栏布局(左边定宽 右边自适应,左右成比自适应)

目录 一、左边定宽 右边自适应 1.浮动 2.利用浮动margin 3.定位margin 4.flex布局 5.table 布局 二、左右成比自适应 1:1 1flex布局 table布局 1:2 flex布局 <div class"father"><div class"left">左边自适应</div><div class"r…

Spring Framework 5.3.x源码构建 (jdk-1.8, gradle 7.5.1, idea2024.3)

1、下载jdk安装并配置环境变量&#xff08;自行百度&#xff09; https://www.oracle.com/java/technologies/downloads/#java8 2、下载spring-framework源码&#xff0c;切换分支到5.3.x https://github.com/spring-projects/spring-framework.git 备用地址 https://gitco…

合洁科技电子洁净工程公司分享晶圆厂百级净化车间建设的关键要点

电子厂百级净化车间的设计装修是一个复杂而精细的过程&#xff0c;它直接关系到电子产品的生产质量、员工的健康安全以及生产环境的稳定性。为了满足高洁净度、低污染的生产要求&#xff0c;设计装修过程中需要综合考虑多个方面的因素。以下是合洁科技电子净化工程公司对电子厂…

CentOS7下Spark-2.4.3-bin-without-hadoop版本安装详细图文教程

1、该Spark版本说明 1、依赖关系 该版本不包含Hadoop的依赖库。适用于那些不直接需要Hadoop集群或者已经通过其他方式管理Hadoop依赖的用户。用户可以在不依赖Hadoop的环境中运行Spark&#xff0c;或者如果已有一个Hadoop环境但希望使用Spark自带的Hadoop客户端库&#xff0c;…

论文解析 | 基于语言模型的自主代理调查

论文 《A Survey on Large Language Model-based Autonomous Agents》 对基于大型语言模型&#xff08;LLM&#xff09;的自主智能体&#xff08;Autonomous Agents&#xff09;进行了全面调查。随着大型语言模型&#xff08;如 GPT 系列、BERT、T5 等&#xff09;的快速发展&a…

【DB-GPT】开启数据库交互新篇章的技术探索与实践

一、引言&#xff1a;AI原生数据应用开发的挑战与机遇 在数字化转型的浪潮中&#xff0c;企业对于智能化应用的需求日益增长。然而&#xff0c;传统的数据应用开发方式面临着诸多挑战&#xff0c;如技术栈复杂、开发周期长、成本高昂、难以维护等。这些问题限制了智能化应用的…