当前位置: 首页 > 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的出示和后续的服务认证。此刻,我们已经一只脚踏入了客户的家门。


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

相关文章:

  • cocos3.4.2 2d射线检测 和 animation动画
  • Unity 预制体放在场景中可见,通过代码复制出来不可见的处理
  • CSS相关
  • 2D 3D 工业组态技术 meta2d JavaScript
  • Page分页records有数据,但是total=0,解决办法
  • NET8 ORM 使用AOT SqlSugar
  • 设计模式解码:软件工程架构的航标
  • 线性表的概念
  • 基于模拟退火算法优化概率神经网络PNN的分类预测 - 附代码
  • 如何把小米路由器刷入OpenWRT系统并通过内网穿透工具实现公网远程访问
  • 移动硬盘打不开?正确操作方法分享!
  • 有什么好用的后勤管理软件?学校后勤服务要怎么提升满意度?
  • 【MySQL】聚合函数:汇总、分组数据
  • 谷歌浏览器F12/打开开发者工具网络就无法连接报错
  • webpack的安全保障是怎么做的?
  • 【跃迁之路】【669天】程序员高效学习方法论探索系列(实验阶段426-2018.12.13)...
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • Angular Elements 及其运作原理
  • css系列之关于字体的事
  • express如何解决request entity too large问题
  • js算法-归并排序(merge_sort)
  • k8s 面向应用开发者的基础命令
  • maya建模与骨骼动画快速实现人工鱼
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Vim Clutch | 面向脚踏板编程……
  • vue数据传递--我有特殊的实现技巧
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 服务器之间,相同帐号,实现免密钥登录
  • 基于HAProxy的高性能缓存服务器nuster
  • 记一次和乔布斯合作最难忘的经历
  • 前端性能优化——回流与重绘
  • 浅谈web中前端模板引擎的使用
  • 应用生命周期终极 DevOps 工具包
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • #NOIP 2014#Day.2 T3 解方程
  • #数学建模# 线性规划问题的Matlab求解
  • $jQuery 重写Alert样式方法
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (十六)串口UART
  • (一)Thymeleaf用法——Thymeleaf简介
  • .NET Core中Emit的使用
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NET 命令行参数包含应用程序路径吗?
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET关于 跳过SSL中遇到的问题
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .net下的富文本编辑器FCKeditor的配置方法
  • .NET性能优化(文摘)