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

微服务实战系列之Token

前言

什么是“Token”? 它是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便返回给客户端;以后客户端只携带此Token请求数据即可。

简言之,Token其实就是用户身份的另一个标识而已,取代了繁琐的用户和密码校验,同时也减轻了服务器的压力,减少频繁的数据库交互,使服务器更加健壮。

那么我们在应用中如何使用token呢?且听博主分解。

在这里插入图片描述


流程原理
1. OAuth2.0

我们在熟悉Token之前,先了解一下“OAuth2.0”,各位盆友可能有疑问,这又是什么东东?能干嘛?

“OAuth(Open Authorization)”是一个关于授权(authorization)的开放网络标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容。
目前已开放的标准是2.0,于是我们通常简称为“Oauth2.0”协议。

在这个协议或标准基础之上,提供了4种授权模式,今天我们重点讲其中一种:“授权码模式”

授权码(authorization code)模式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌。

这种方式目前是最常用的模式,兼顾安全与性能。同时令牌存储在后端,在前后端分离场景下,可以避免令牌泄漏。

2. Token(令牌)

有了前面的背景知识,是不是大概也理解了OAuth的意义了?接下来我们看Token是怎么回事,它有哪些作用?

  • Token完全由应用程序进行管理,所以它可以避开同源策略;
  • Token可以避免CSRF(跨站请求访问)攻击;
  • Token可以是无状态的,可以在多个服务器之间共享;
  • 使用Token减轻服务器的压力,减少频繁的查询数据库。

所以,从以上作用来看,还是达到了“降本增效”的目的,这也正反映当代世界的一个主题:“节能减排,绿色环保”

在这里插入图片描述

应用实践

到此为止,大家是否已学习了到关于Token的理论知识呢?接下来我们看在实际应用中,应该如何处理。

1. appKey/appSecret

首先看一组名词解释:

“appKey”:名为应用标识,通常代表客户身份,即客户端的唯一标识。
“appSecret”:名为应用密钥,通常与appK组合配对使用,用于客户身份认证。

通常appKey作为公钥存在,可以用于数据传输;而appSecret作为私钥存在,只能在服务端存储,禁止网络传输。

从发展趋势而言,以“appKey/appSecret”组合使用,可以灵活定义客户端使用权限,从而提高了用户管理能力,这也正是当前建设OpenAPI的基础。

2. 生成Token

当客户收到一组“appKey/appSecret”, 便可通过token服务获取授权。如果认证通过后,服务端即向客户端颁发令牌Token。因为Token具备时效性,需根据实际情况定义。
请看Token调用示例:

{"appKey": "c5fc1ce17ea311eb02628fce294","appSecret": "f0310ba586bb0e73c375"
}
{"code": 200,"msg": "认证成功","data": {"access_token": "eyJhbGciOiJIUzUxMiJ9.eyJ1c2VyX2lkIjoiRklOMSIsInVz","expires_in": 120}
}
3. 使用Token

有了Token这块金字“腰牌”,我们可以一定程度上,掌握了主动,在有限的时间内,可以自由支配授权的资源。那如何支配呢?即需要的时候,主动出示Token即可。此时,我们把镜头转向如何出示的画面:
在这里插入图片描述
各位盆友,谜底已揭晓,学到了吧?通过Header传参实现Token的出示和后续的服务认证。此刻,我们已经一只脚踏入了客户的家门。


好了,夜深了,博主也该休息了。今天分享到这里,欢迎路过的、拿凳的、嗑瓜子的盆友们,分享与讨论。
咱们有空接着聊~

相关文章:

微服务实战系列之Token

前言 什么是“Token”? 它是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便返回给客户端;以后客户端只携带此Token请求数据即可。 简言之,Token其实就是用户身…...

DRF纯净版项目搭建和配置

一、安装模块和项目 1.安装模块 pip install django pip install djangorestframework pip install django-redis # 按需安装 2.开启项目和api (venv) PS D:\pythonProject\env_api> django-admin startproject drf . (venv) PS D:\pythonProject\env_api> python ma…...

AUTODL云服务器使用大致步骤(适合本人版)

(一)在官网上创建一个服务器 (二)远程连接指令: 改为: (三)连接后,可在中进行代码运行 输入一些指令 python .........

无需云盘,不限流量实现Zotero跨平台同步:内网穿透+私有WebDAV服务器

🔥博客主页: 小羊失眠啦. 🎥系列专栏:《C语言》 《数据结构》 《Linux》《Cpolar》 ❤️感谢大家点赞👍收藏⭐评论✍️ 无需云盘,不限流量实现Zotero跨平台同步:内网穿透私有WebDAV服务器 文章目…...

简朴博客系统测试报告

文章目录 一. 项目简介二. 测试概要三. 测试环境四. 测试执行概况及功能测试1. 手工测试1.1 手动测试用例编写1.2 执行的部分测试用例 2. 自动化测试Selenium2.1 编写测试用例2.2 自动化测试代码 3. 测试结果 五. 发现的问题 一. 项目简介 简朴博客系统是采用前后端分离的方式…...

Qt遇到常见问题记录

1.Qt版本选择 Qt4.8.7是Qt4的终结版本,是Qt4系列版本中最稳定最经典的 (很多嵌入式板子还是用Qt4.8),其实该版本是和Qt5.5差不多时间发布的。 参考链接 Qt 5.5 Released Qt5.6.3最最后支持xp系统的长期支持版本,Q…...

pm2在Windows环境中的使用

pm2 进程管理工具可以Windows操作系统上运行,当一台Windows电脑上需要运行多个进程时,或者运维时需要运行多个进程以提供服务时。可以使用pm2,而不再是使用脚本。 1. 使用PM2管理进程 1.1. 启动PM2项目 1.1.1. 直接启动项目 参数说明&…...

使用百度翻译API或腾讯翻译API做一个小翻译工具

前言 书到用时方恨少,只能临时抱佛脚。英文pdf看不懂,压根看不懂。正好有百度翻译API和腾讯翻译API,就利用两个API自己写一个简单的翻译工具,充分利用资源,用的也放心。 前期准备 关键肯定是两大厂的翻译API&#x…...

Flutter笔记:桌面应用 窗口定制库 bitsdojo_window

Flutter笔记 桌面应用窗口管理库 bitsdojo_window 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://blog.csdn.net/qq_28550263/article/details/13446…...

iOS_折叠展开 FoldTextView

1. 显示效果 Test1:直接使用: Test2:在 cell 里使用: 2. 使用 2.1 直接使用 // 1.1 init view private lazy var mooFoldTextView: MOOFoldTextView {let view MOOFoldTextView(frame: .zero)view.backgroundColor .cyanvie…...

java使用 TCP 的 Socket API 实现客户端服务器通信

一:什么是 Socket(套接字) Socket 套接字是由系统提供于网络通信的技术, 是基于 TCP/IP 协议的网络通信的基本操作,要进行网络通信, 需要有一个 socket 对象, 一个 socket 对象对应着一个 socket 文件, 这个文件在 网卡上而不是硬盘上, 所以有了 sokcet…...

conda从4.12升级到最新版23.9 自动升级失败 手动升级方法

最新版conda有多线程下载,还做了一些其它易用性改动,所以决定从很老的4.12版本升级到最新版。因为版本差别过大,使用自带的conda update conda已经不起作用了。 手动升级最先想到的是把老环境全部导出为yaml文件,在新环境里全部重…...

WPF下实现拖动任意地方都可以拖动窗口

首先在xaml中添加事件 <Window PreviewMouseLeftButtonDown"Window_PreviewMouseLeftButtonDown"PreviewMouseMove"Window_PreviewMouseMove"PreviewMouseLeftButtonUp"Window_PreviewMouseLeftButtonUp"/>然后脚本输入 Point _pressedP…...

Swin Transformer

Swin Transformer 简介 下采样的层级设计&#xff0c;能够逐渐增大感受野。采用window进行注意力计算&#xff0c;极大降低了内存消耗&#xff0c;避免了整张图像尺寸大小的qkv矩阵滑窗操作包括不重叠的 local window&#xff0c;和重叠的 cross-window。不重叠的local window…...

【csapp lab】lab2_bomblab

文章目录 前言实验内容phase_1phase_2phase_3phase_4phase_5phase_6secret_phase 前言 刚做了csapp lab2&#xff0c;记录一下。 我这里用的的系统环境是Ubuntu22.04&#xff0c;是64位系统&#xff0c;与用32位系统可能有所差异。 实验共包括七个阶段&#xff0c;每个阶段考…...

开发者分享 | Ascend C算子开发及单算子调用

本文分享自《AscendC算子开发及单算子调用》&#xff0c;作者&#xff1a;goldpancake。 笔者在阅读Ascend C官方文档的过程中发现&#xff0c;对于初学者来说&#xff0c;尤其是第一次接触异构编程思想的初学者&#xff0c;有部分内容是无需特别关注的&#xff0c;例如算子工…...

如何在 Linux 上部署 RabbitMQ

如何在 Linux 上部署 RabbitMQ 文章目录 如何在 Linux 上部署 RabbitMQ安装 Erlang从预构建的二进制包安装从源代码编译 Erlang RabbitMQ 的安装使用 RabbitMQ Assistant 连接 RabbitMQ Assistant 是一款优秀的RabbitMQ 可视化管理工具&#xff0c;提供丰富的管理功能。下载地址…...

解决更换NodeJs版本后npm -v返回空白

一、问题描述 win11电脑上输入cmd进入控制台&#xff0c;输入 node --version 有正常返回安装的nodejs的版本号 再输入 npm -v 返回空白。正常情况应该是要返回版本号。 二、问题背景 最近准备学习vue&#xff0c;在不久前已经安装了NodeJs和python。运行了好几个开源项…...

【ES常用查询】基于ElasticsearchRestTemplate及NativeSearchQuery的查询

包含当前es所有的查询&#xff0c; 需要什么代码直接照搬&#xff0c;改个参数就行&#xff01; 用的好请务必给我点赞&#xff01;&#xff01;&#xff01;感谢爱你们&#xff01;&#xff01;&#xff01; &#xff08;周末更 筒&#xff09; 为啥写这篇文章呢&#xff…...

全志XR806基于http的无线ota功能实验

XR806不仅硬件功能多&#xff0c;XR806也提供了功能极其丰富的SDK&#xff0c;几天体验下来非常容易上手。常见的功能几乎都有相应的cmd或demo实现&#xff0c;HAL也做得非常全面&#xff0c;非常适合快速开发。这一点超级好评&#xff01;本文章要实现的无线OTA也基于该SDK。 …...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析

一、变量声明设计&#xff1a;let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性&#xff0c;这种设计体现了语言的核心哲学。以下是深度解析&#xff1a; 1.1 设计理念剖析 安全优先原则&#xff1a;默认不可变强制开发者明确声明意图 let x 5; …...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

spring Security对RBAC及其ABAC的支持使用

RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型&#xff0c;它将权限分配给角色&#xff0c;再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...