钉钉统一身份认证对接前后端代码

1. 钉钉统一身份认证平台的对接方式

钉钉统一身份认证平台提供了多种对接方式,包括OAuth2.0、SAML、CAS等,其中OAuth2.0是最常用的一种方式。OAuth2.0的对接流程如下:

1.开发人员在钉钉开放平台上创建应用,并获取应用的AppID和AppSecret。

2.在应用的授权回调页面中,添加钉钉授权登录按钮,并将其链接到钉钉授权登录接口。

3.用户点击钉钉授权登录按钮后,将被重定向到钉钉授权登录页面,用户输入钉钉账号和密码进行登录。

4.用户完成登录后,将被重定向回应用的授权回调页面,同时携带授权码。

5.应用使用授权码向钉钉授权服务器请求访问令牌,并获取访问令牌和刷新令牌。

6.应用使用访问令牌向钉钉开放平台API请求用户信息。

7.钉钉开放平台API返回用户信息后,应用将其保存在本地,并使用刷新令牌定期刷新访问令牌。

2. 前端代码示例

以下是一个简单的前端代码示例,用于实现钉钉授权登录按钮的展示和跳转:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>钉钉授权登录</title>
</head>
<body>
    <button onclick="loginWithDingTalk()">使用钉钉授权登录</button>
    <script src="https://g.alicdn.com/dingding/dingtalk-jsapi/2.10.0/dingtalk.open.js"></script>
    <script>
        function loginWithDingTalk() {
            var appid = "your_appid"; // 应用的AppID
            var redirect_uri = encodeURIComponent("http://your_redirect_uri"); // 授权回调页面的URL
            var state = "your_state"; // 可选参数,用于防止CSRF攻击
            var url = "https://oapi.dingtalk.com/connect/oauth2/sns_authorize?" + 
                      "appid=" + appid + "&response_type=code&scope=snsapi_login&state=" + state + 
                      "&redirect_uri=" + redirect_uri;
            window.location.href = url;
        }
    </script>
</body>
</html>

在上面的代码中,我们使用了钉钉开放平台提供的JavaScript SDK,以便在前端页面中调用钉钉授权登录接口。具体实现过程如下:

1.在HTML头部引入钉钉JavaScript SDK的脚本文件。

2.在页面中添加一个按钮,并在其onclick事件中调用loginWithDingTalk函数。

3.在loginWithDingTalk函数中,构造钉钉授权登录接口的URL,并将页面重定向到该URL。

4.用户点击按钮后,将被重定向到钉钉授权登录页面,输入钉钉账号和密码进行登录。

5.用户完成登录后,将被重定向回应用的授权回调页面,同时携带授权码。

3. 后端代码示例

以下是一个简单的Node.js后端代码示例,用于处理钉钉授权登录回调并获取用户信息:

const express = require('express');
const axios = require('axios');
const qs = require('querystring');
const app = express();

const appid = "your_appid"; // 应用的AppID
const appsecret = "your_appsecret"; // 应用的AppSecret
const redirect_uri = "http://your_redirect_uri"; // 授权回调页面的URL

// 处理授权回调请求
app.get('/callback', async (req, res) => {
    const code = req.query.code; // 授权码
    const url = `https://oapi.dingtalk.com/sns/gettoken?appid=${appid}&appsecret=${appsecret}`;
    const response = await axios.get(url);
    const access_token = response.data.access_token; // 访问令牌
    const userinfo_url = `https://oapi.dingtalk.com/sns/getuserinfo?sns_token=${access_token}`;
    const userinfo_response = await axios.get(userinfo_url);
    const userinfo = userinfo_response.data.user_info; // 用户信息
    // TODO: 将用户信息保存到数据库或Session中
    res.send(userinfo);
});

app.listen(3000, () => {
    console.log('Server started on port 3000');
});

在上面的代码中,我们使用了Node.js和Express框架,以便在后端服务器上处理钉钉授权登录回调并获取用户信息。具体实现过程如下:

1.在Node.js中安装axios和querystring等依赖包。

2.创建一个Express应用,并定义授权回调处理的路由。

3.在授权回调处理路由中,从请求参数中获取授权码,并使用AppID和AppSecret向钉钉授权服务器请求访问令牌。

4.使用访问令牌向钉钉开放平台API请求用户信息。

5.将获取到的用户信息保存到数据库或Session中,并返回给前端页面。

需要注意的是,上述代码中的AppID和AppSecret需要替换为实际的值,同时授权回调页面的URL也需要替换为实际的值。另外,上述代码中的用户信息保存方式仅作为示例,实际应用中需要根据具体情况进行调整。

4. 总结

以上就是使用钉钉授权登录的全部流程和代码示例。总结一下,钉钉授权登录的实现主要包括以下几个步骤:

1.在前端页面中展示钉钉授权登录按钮,并在用户点击按钮后跳转到钉钉授权登录页面。

2.用户在钉钉授权登录页面中输入钉钉账号和密码进行登录,并授权给应用访问用户信息的权限。

3.钉钉授权服务器返回授权码,应用使用授权码向授权服务器请求访问令牌和刷新令牌。

4.应用使用访问令牌向钉钉开放平台API请求用户信息,并将其保存到本地。

5.应用使用刷新令牌定期刷新访问令牌,以确保能够持续访问用户信息。

需要注意的是,钉钉授权登录需要AppID和AppSecret进行身份验证,因此应用需要在钉钉开放平台上注册并获取AppID和AppSecret。同时,应用还需要在钉钉开放平台上配置授权回调页面的URL,以便接收授权回调请求并获取用户信息。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

力扣---LeetCode141/142. 环形链表 (I)和(II) (代码详解+流程图+数学逻辑拓展)

文章目录 前言141. 环形链表 I1.1 链接&#xff1a;1.2 思路&#xff1a;1.3 代码&#xff1a;快慢指针1.4 流程图&#xff1a; 142. 环形链表 II2.1 链接&#xff1a;2.2 思路&#xff1a;2.3 代码&#xff1a;2.4 流程图&#xff1a; 拓展问题及证明(面试常问)&#xff1a;3.…

线上问题-CPU使用频率飙升

描述 中午收到群内人员反馈环境访问速度慢。登录验证码打不开等问题。通过查看日志发现是kafka出现问题&#xff0c;无法处理消息。联系运维解决。在排查的过程中使用mobaXterm连接服务器。左下角看到CPU使用频率非常高。于是记录一下通过CPU查看程序占用情况分析问题。 过程 …

Ansys Lumerical | CMOS - 光学仿真方法

通过使用更小的像素尺寸和更大的填充因子&#xff0c;基于CMOS图像传感器像素的数码相机系统的成本正在降低。但是&#xff0c;只有在不牺牲图像质量的情况下&#xff0c;CMOS像素尺寸减小才是可以接受的。随着CMOS像素尺寸的不断减小&#xff0c;图像信噪比降低&#xff0c;相…

2.1 Linux命令行

系列文章目录 第1章 Linux Shell简介 第2章 Shell基础 <本章所在位置> 第3章 Bash Shell基础命令 第4章 Bash Shell命令进阶 第5章 Linux Shell深度理解 第6章 Linux环境变量 第7章 Linux文件权限 第8章 Linux文件系统的管理 第9章 Linux软件安装 第10章 Linux文本编辑器…

记录一次docker容器引起的时间相差8h的问题

一、背景 系统打印日志时间小8h&#xff0c;部分插入mysql的日期却大8h&#xff0c;简直诡异。 测试时间是上午10:05 经过排查&#xff0c;mysql设置的时区&#xff0c;链接url设置的时区都是ok的。而且有其他服务时间正常&#xff0c;故排除MySQL的问题。 二、排查 2.1 查…

聚焦丨酷雷曼荣列XRMA联盟成员单位

自“元宇宙”概念兴起之初&#xff0c;酷雷曼VR所属北京同创蓝天云科技有限公司就积极布局、探索和实践。2022年12月&#xff0c;酷雷曼VR成功加入虚拟现实与元宇宙产业联盟&#xff08;XRMA&#xff09;&#xff0c;正式被接纳为联盟成员单位&#xff0c;意味着酷雷曼公司将进…

【电动车】基于双层凸优化的燃料电池混合动力汽车研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清…

rosbag相关进阶操作

一些很好用的网站 时间戳在线转换网页 旋转矩阵、四元数、绕轴旋转、欧拉角在线转换网页 四元数、欧拉角可视化在线转换网页 一、按时间截取bag 使用如下代码&#xff1a; rosbag filter 原始包名.bag 截取后的包名.bag "t.to_sec() > 开始时间 and t.to_sec() <…

初识Elasticsearch

初识Elasticsearch Elasticsearch 是一个分布式&#xff0c;RESTful 风格的搜索和数据分析引擎。它能够提供实时的搜索与数据分析功能&#xff0c;且能够将几乎所有类型的数据存储和搜索&#xff0c;包括结构化和非结构化数据。 在该博文中&#xff0c;我们将介绍 Elasticsea…

在CentOS上安装Jenkins并配置Docker

文章目录 步骤1 - 安装Java 11步骤2 - 安装Jenkins步骤3 - 安装Docker步骤4 - 配置Docker Cloud步骤 5 - 验证步骤 6 - 可能会遇到的问题 在本教程中&#xff0c;我们将展示如何在CentOS上安装Jenkins和Docker&#xff0c;并将它们配置在同一台机器上&#xff0c;使Jenkins能够…

开发必备,开源 or 免费的 AI 编程助手

AI 大模型的火热&#xff0c;让开发圈近来如虎添翼&#xff0c;各种各样基于 AI 技术的开发者工具和新范式不断涌现&#xff0c;尤其是 Github 和 OpenAI 共同推出的 Copilot X &#xff0c;更是一骑绝尘。本文推荐一些开源 or 免费的 AI 编程工具&#xff0c;不妨试着用起来。…

当今自然语言处理领域中的成功之路:Transformer模型

当今自然语言处理领域中最重要和最成功的模型之一是Transformer模型。它是一种基于自注意力机制的神经网络模型&#xff0c;最初由Google公司的研究人员提出&#xff0c;并被广泛应用于机器翻译、文本生成、情感分析等任务中。 Transformer模型之所以被广泛使用&#xff0c;是因…

边缘化你必须知道的一件事!(FEJ知识点总结)

vins和g2o边缘化的异同&#xff1a;(已经做到ppt里面了&#xff0c;简单回顾一下) 1.《视觉slam14讲》中提及的边缘化(G2O边缘化)是在计算求解过程中&#xff0c;先消去路标点变量&#xff0c;实现先求解相机位姿&#xff0c;然后再利用求解出来的相机位姿反过来计算路标点的过…

springboot第七章 结合Dubbo

实现Dubbo分布式框架&#xff0c;需要公共接口maven项目&#xff0c;需要服务提供者springboot项目&#xff0c;需要服务消费者springboot项目。 因为公共接口只有数据类和接口&#xff0c;后期提供者和消费者需要根据maven唯一坐标来导入公共接口项目的jar包&#xff0c;因此公…

GraphHopper调研笔记

一、 GraphHopper GraphHopper是一种快速且内存有效的Java导航引擎&#xff0c;默认使用OSM和GTFS数据&#xff0c;也可导入其他的数据源。支持CH&#xff08;Contraction Hierarchies&#xff09;、A*、Dijkstra算法。 1、应用介绍 graphhopper有以下几种常见的地图应用&am…

25000 字详解 23 种设计模式(多图 + 代码)

25000 字详解 23 种设计模式&#xff08;多图 代码&#xff09; 目录 创建型模式结构型模式行为型模式总结 前言 一直想写一篇介绍设计模式的文章&#xff0c;让读者可以很快看完&#xff0c;而且一看就懂&#xff0c;看懂就会用&#xff0c;同时不会将各个模式搞混。 设计…

前端项目的通用优化策略

一、虚拟滚动 当我们开发的时候&#xff0c;遇到大数据加载&#xff0c;页面卡顿的问题应该如何处理&#xff1f;大多数情况下&#xff0c;我们都是尽量通过分页的方式处理这类问题&#xff0c;但是总有一些特殊的情况我们必须把数据全部加载到前端进行处理。我曾经遇到过一个…

MySQL入门

创建数据库 用CREATE DATABASE关键字&#xff08;也可以小写但建议关键字用大写方便区分&#xff09;创建一个名为“mydatabase”的数据库。 CREATE DATABASE mydatabase; 如果名称和关键字相撞&#xff0c;可以用Esc键下面的反引号括起来&#xff08;关键字会显示蓝色&#…

kafka安装及配置

1. 下载 下载地址&#xff1a;Apache Kafka 我这里下载的是 3.2.1 版本。 2. 上传并解压 上传到 linux 下的 /home/software/ 目录下&#xff0c;然后解压 kafka_2.13-3.2.1.tgz 包到/usr/local/ cd /home/software tar -zxvf kafka_2.13-3.2.1.tgz -C /usr/local # -C 选…

处理日期和时间的 chrono 库

C11 中提供了日期和时间相关的库 chrono&#xff0c;通过 chrono 库可以很方便地处理日期和时间&#xff0c;为程序的开发提供了便利。chrono 库主要包含三种类型的类&#xff1a;时间间隔duration、时钟clocks、时间点time point。 1. Ratio 时间精度(节拍) std::chrono::ra…
最新文章