通用开发技能系列:Authentication、OAuth、JWT 认证策略

云原生学习路线导航页(持续更新中)

本文是 通用开发技能系列 文章,主要对编程通用技能 Authentication、OAuth、JWT 认证策略 进行学习

1.Basic Authentication认证

  • 每个请求都需要将 用户名+密码 进行base64编码后,放在请求头的Authorization中,携带到服务端,实现HTTP基本认证
  • HTTP明码传输,不安全。一般会用HTTPS传输
  • HTTPS 在 HTTP 基础上面添加了 SSL 安全证书。但如果有人伪造CA证书,也可能造成不安全,用户名和密码直接放在请求里,太不安全了

2.OAuth认证

  • OAuth(Open Authorization)是一个用于授权的开放网络标准,允许用户授权第三方应用去访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方移动应用或分享他们数据的所有内容。

  • 目前主流的 第三方应用登陆,都是使用OAuth标准做的

  • OAuth标准目前大多使用2.0版本

  • OAuth2.0授权模式(授权码模式和密码模式比较常用)

    • 授权码模式(authorization code)
    • 简化模式(implicit)
    • 密码模式(resource owner password credentials)
    • 客户端模式(client credentials)
      在这里插入图片描述
  • 更多知识学习博客

    • OAuth2.0协议流程与授权模式、协议流程
    • http基本认证Authentication OAuth JWT

3.JWT认证

3.1.JWT是什么

  • JSON Web Token (JWT) 是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。
  • 本质上来说,jwt 就是规定了一种token的格式,按照 jwt 标准生成的 token,包含3部分:header、playload、signature,每一部分都有自己的功能,因此这种token自身就携带了多种特性。

3.2.JWT的3个组成部分

  • JWT包含3部分:
    • header
      • 头部,公开的,表示这是jwt的数据。这部分会使用base64url编码,会把编码成base64后的数据中的 “+、=、/” 替换掉,这样就可以把jwt生成的token拼接在 请求的url 参数上,用于浏览器禁止cookie时使用
    • playload
      • 有效载荷,可以携带一些数据,但是不要放私密数据。这部分都是base64编码,可以解密,相当于明文
    • signature
      • 验证签名,是用来验证发送者的JWT,同时也能确保客户端传来的JWT没有被篡改
      • signature 如何鉴别客户端带过来的Token是正确的?
        • signature 是 服务端在生成token时,使用 密钥secret,对header+playload进行加密,得到的验证签名。
        • 如果 下一次请求带来的token,拿着header+playload再次进行密钥加密,得到的signature不同,说明 数据被别人篡改了。如果加密后值相等,说明没有篡改。
  • 因此,JWT标准生成的Token,实际上并不是安全的,内部都使用base64编码,也相当于明文,但是有 signature 判断数据是否被修改过

3.3.JWT的优缺点

  • JWT优点:
    • json的通用性,所以JWT是可以进行跨语言支持的。很多语言都可以使用 json 传输
    • 有了payload部分,所以JWT可以在自身存储一些其他业务逻辑所必要的非敏感信息。
    • 便于传输,jwt的构成非常简单,字节占用很小
    • 不需要在服务端保存会话信息, 所以它易于应用的扩展,不用考虑服务器之间的同步问题
  • JWT缺点:
    • 不应该在jwt的payload部分存放敏感信息,因为该部分是客户端可解密的部分。
    • 一定得保护好服务端的secret私钥,该私钥非常重要。

3.4.使用 JWT + Redis 验证用户信息的过程

  • 在用户登陆成功时,服务端使用 JWT 的密钥,为该用户生成一个token。把userId存入载荷中,将token返回给前端。同时,我们会在redis中维护一个Hash表,键为token值,值为user的从数据库中查到的详细信息。
  • 下次用户再访问其他资源的时候,将token以 cookie请求头的Authorization字段url参数 的 方式一起发给服务端。
  • 服务端中,我们会在网关Gateway验证用户的登录状态。
    • 从request中取出token,使用 jwt 密钥尝试解密,如果发现 token 的 header+playload 再次加密后得到的 signature 与 token 中的 signature不再一样,说明数据被篡改了,就会拒绝服务
    • 如果验证通过,就会从载荷中取出我们事先放入的userId,将userId存到请求中,再把该请求放行。
    • 后续如果需要使用用户的详细信息,直接从请求头中获取userId,就可以到redis中查到详细信息。

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

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

相关文章

媒体偏见从何而来?--- 美国MRC(媒体评级委员会)为何而生?

每天当我们打开淘宝,京东,步入超市,逛街或者逛展会,各种广告铺天盖地而来。从原来的平面广告,到多媒体广告,到今天融合AR和VR技术的数字广告,还有元宇宙虚拟世界,还有大模型加持的智…

Unity Meta Quest MR 开发(五):空间锚点

文章目录 📕教程说明 此教程相关的详细教案,文档,思维导图和工程文件会放入 Spatial XR 社区。这是一个高质量 XR 开发者社区,博主目前在内担任 XR 开发的讲师。该社区提供专人答疑、完整进阶教程、从零到一项目孵化保姆服务&…

Java多态世界(day18)

多态:重写的方法调用和执行 1.静态绑定:编译器在父类中找方法,如: 上面的eat()方法是先在父类中找方法,父类没有的话,就算子类有编译也会报错。(如果引用方法在父类中存…

AI绘画:使用Stable Diffusion ComfyUI进行换脸:IPAdapter FaceID全面教程

在数字艺术和媒体编辑领域,换脸技术已经成为一种流行且强大的工具。它允许创作者将一个人物的面部特征无缝地转移到另一个人物上,创造出令人信服的视觉作品。Stable Diffusion ComfyUI提供了一个高效的平台,让用户能够轻松地实现换脸。本文将…

FLink学习(三)-DataStream

一、DataStream 1&#xff0c;支持序列化的类型有 基本类型&#xff0c;即 String、Long、Integer、Boolean、Array复合类型&#xff1a;Tuples、POJOs 和 Scala case classes Tuples Flink 自带有 Tuple0 到 Tuple25 类型 Tuple2<String, Integer> person Tuple2.…

PLC通过Modbus转Profine网关接温度传感器方案

Modbus转Profinet网关用于实现Modbus协议和Profinet协议之间的数据转换和传输。Modbus转Profinet网关接温度传感器的方案主要涉及将Modbus协议的温度传感器数据转换为Profinet协议&#xff0c;以便与工业自动化系统中的其他设备进行通信和数据交换。 以下是实现此方案的基本步骤…

韩顺平 | 零基础快速学Python

环境准备 开发工具&#xff1a;IDLE、Pycharm、Sublime Text、Eric 、文本编辑器&#xff08;记事本/editplus/notepad&#xff09; Python特点&#xff1a;既支持面向过程OOP、也支持面向对象编程&#xff1b;具有解释性&#xff0c;不需要编程二进制代码&#xff0c;可以直…

精准扶贫管理系统|基于Springboot的精准扶贫管理系统设计与实现(源码+数据库+文档)

精准扶贫管理系统目录 目录 基于Springboot的精准扶贫管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 &#xff08;1&#xff09;用户信息管理 &#xff08;2&#xff09;贫困户信息管理 &#xff08;3&#xff09;新闻类型管理 &a…

Centos7安装Docker与Docker-compose【图文教程】

个人记录 查看一下系统是否已经安装了Docker yum list installed | grep docker如下图代表没有安装Docker 卸载已有Docker yum remove docker docker-common docker-selinux docker-engine切换目录 cd /etc/yum.repos.d/查看当前目录所有的镜像源 ll安装yum-util与devi…

3月造车新势力销量出炉:问界继续领跑,哪吒下滑,岚图抢眼

进入4月份&#xff0c;各大造车新势力们纷纷公布了3月份最新销量成绩&#xff0c;根据相关数据显示&#xff0c;问界再度超越理想&#xff0c;夺得造车新势力头名的位置。而零跑、蔚来、小鹏的销量也实现不错的增长&#xff0c;岚图汽车的表现同样十分亮眼。不过日前遭到周鸿祎…

Vite为什么比Webpack快得多?

Vite为什么比Webpack快得多&#xff1f; 在前端开发中&#xff0c;构建工具扮演着至关重要的角色&#xff0c;而Vite和Webpack无疑是两个备受关注的工具。然而&#xff0c;众多开发者纷纷赞誉Vite的速度之快&#xff0c;本文将深入探讨Vite相较于Webpack为何更快的原因&#xf…

C语言数组详解

一维数组 创建和初始化 数组就是一组相同元素的集合。 他的创建&#xff1a; char arr[10]; int arr1[5]; 数组创建中 [] 里不能是变量&#xff0c;但是在c99标准之后就可以了被称为变长数组&#xff0c;但是不常用&#xff0c;而且变长数组不能初始化。 初始化&#xff…

浅聊什么是Redis?

需求&#xff1a;MySQL面临大量的查询&#xff0c;即读写操作&#xff0c;因此类比CPU&#xff0c;给数据加缓存&#xff0c;Redis诞生。应用程序从MySQL查询的数据&#xff0c;在Redis设置缓存&#xff08;记录在内存中&#xff0c;无需IO操作&#xff09;&#xff0c;后再需要…

8.list容器的使用

文章目录 list容器1.构造函数代码工程运行结果 2.赋值和交换代码工程运行结果 3.大小操作代码工程运行结果 4.插入和删除代码工程运行结果 5.数据存取工程代码运行结果 6.反转和排序代码工程运行结果 list容器 1.构造函数 /*1.默认构造-无参构造*/ /*2.通过区间的方式进行构造…

AJAX —— 学习(二)

目录 一、利用 JSON 字符串 返回数据 &#xff08;一&#xff09;基础代码 &#xff08;二&#xff09;原理及实现 二、nodmon 工具 自动重启服务 &#xff08;一&#xff09;用途 &#xff08;二&#xff09;下载 &#xff08;三&#xff09;使用 三、IE 缓存问题 &a…

计算机网络:数据链路层 - 可靠传输协议

计算机网络&#xff1a;数据链路层 - 可靠传输协议 可靠传输概念停止-等待协议 SW回退N帧协议 GBN选择重传协议 SR 可靠传输概念 如下所示&#xff0c;帧在传输过程中受到干扰&#xff0c;产生了误码。接收方的数据链路层&#xff0c;通过真伪中的真检验序列 FCS 字段的值&…

Python环境下基于离散小波变换的信号降噪方法

Mallat创造了小波分析中的经典理论之一&#xff0c;即多分辨率分析的概念。后来&#xff0c;在Mallat与Meyer的共同努力之下&#xff0c;他们又在这一理论的基础上发明了离散小波变换的快速算法&#xff0c;这就是Mallat塔式算法&#xff0c;这种算法可以大量减少计算时间。在之…

6、Cocos Creator 2D 渲染组件:​Sprite 组件​

Sprite 组件 Sprite&#xff08;精灵&#xff09;是 2D/3D 游戏最常见的显示图像的方式&#xff0c;在节点上添加 Sprite 组件&#xff0c;就可以在场景中显示项目资源中的图片。 属性功能说明Type渲染模式&#xff0c;包括普通&#xff08;Simple&#xff09;、九宫格&#x…

Android Monkey自动化测试

monkey一般用于压力测试&#xff0c;用户模拟用户事件 monkey 基本用法 adb shell monkey [参数] [随机事件数]monkey常用命令 -v&#xff1a;用于指定反馈信息级别&#xff0c;总共分三个等级-v -v -vadb shell mokey -v -v -v 100-s&#xff1a;用于指定伪随机数生成器的种…

Apache DolphinScheduler 【安装部署】

前言 今天来学习一下 DolphinScheduler &#xff0c;这是一个任务调度工具&#xff0c;现在用的比较火爆。 1、安装部署 1.0、准备工作 1.0.1、集群规划 dolphinscheduler 比较吃内存&#xff0c;所以尽量给 master 节点多分配一点内存&#xff0c;桌面和虚拟机里能关的应用…