golang语言系列:Authentication、OAuth、JWT 认证策略

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

本文是 golang语言系列 文章,主要对编程通用技能 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/294808.html

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

相关文章

uniapp 微信小程序 输入框跟随手机键盘弹起

需求&#xff1a;手机键盘弹起后&#xff0c;页面底部的输入框跟随弹起&#xff0c;且页面不被顶上去 html: <textareaclass"textinput"placeholder-class"input-place"auto-height:maxlength"2000"v-model"text"placeholder"…

每天五分钟计算机视觉:使用神经网络完成人脸的特征点检测

本文重点 我们上一节课程中学习了如何利用神经网络对图片中的对象进行定位,也就是通过输出四个参数值bx、by、bℎ和bw给出图片中对象的边界框。 本节课程我们学习特征点的检测,神经网络可以通过输出图片中对象的特征点的(x,y)坐标来实现对目标特征的识别,我们看几个例子。…

关于v114之后的chromedriver及存放路径

使用selenium调用浏览器时&#xff0c;我一直调用谷歌浏览器&#xff0c;可浏览器升级后&#xff0c;就会再次遇到以前遇到过的各种问题&#xff0c;诸如&#xff1a;1、怎么关闭浏览器更新&#xff1b;2、去哪儿下载chromedriver&#xff1b;3、114版本之后的驱动去哪儿下载&a…

鸿蒙原生应用开发-网络管理HTTP数据请求

一、场景介绍 应用通过HTTP发起一个数据请求&#xff0c;支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 二、接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 涉及的接口如下表&#xff0c;具体的…

【深耕 Python】Data Science with Python 数据科学(7)书352页练习题

写在前面 关于数据科学环境的建立&#xff0c;可以参考我的博客&#xff1a; 【深耕 Python】Data Science with Python 数据科学&#xff08;1&#xff09;环境搭建 往期数据科学博文&#xff1a; 【深耕 Python】Data Science with Python 数据科学&#xff08;2&#xf…

蓝桥杯算法题——暴力枚举法

先估算这个数小于3的50次方 cnt0 for i in range(50):for j in range(50):for k in range(50):a3**ib5**jc7**kif a*b*c<59084709587505:cnt1 print(cnt-1)#当ijk都为0时&#xff0c;a*b*c1不是幸运数字所以要减去

流量卡VS随身WIFI?手把手教你怎么选!流量卡和随身WiFi哪个好?流量卡和随身WiFi的区别!流量卡和随身WiFi哪个更划算?流量卡和随身WiFi怎么选?

出门在外&#xff0c;网络、流量已经成为了我们必不可少需要考虑的问题&#xff01;在选择如何获取大流量时&#xff0c;很多人都选择困难&#xff1a;是选择一张流量卡&#xff0c;还是一个随身WIFI&#xff1f; 今天&#xff0c;将从功能与形态、信号、适用场景、限制条件等多…

简单而复杂的Python

Python是一种简单&复杂的编程语言。简单的时候可以到极致&#xff1a; print(hello world!)另一方面&#xff0c;Python 也具有许多复杂的语法特性&#xff0c;例如面向对象编程、装饰器、迭代器、生成器等等。这些特性使得 Python 适用于各种不同的编程任务和项目。 当我…

四信AI视频盒成为时代“卷王”的五大秘诀

2023年12月中央经济工作会议聚焦“发展新质生产力”和 “加快推动人工智能发展”&#xff0c;2024年国务院国资委召开“AI赋能 产业焕新”中央企业人工智能专题推进会&#xff0c;推动中央企业在人工智能领域实现更好发展、发挥更大作用&#xff0c;越来越多的利好人工智能政策…

AR智能眼镜解决方案_MTK平台安卓主板硬件芯片方案开发

AR智能眼镜&#xff0c;是一个可以让现场作业更智能的综合管控设备。采用移动互联网、大数据和云计算等技术&#xff0c;现场数据的采集与分析&#xff1b;同时实现前端现场作业和后端管理的实时连动、信息的同步传输与存储。让前端现场作业更加智能&#xff0c;后端管理更加高…

自己动手写数据库:基于哈希的静态索引设计

数据库设计中有一项至关重要的技术难点&#xff0c;那就是给定特定条件进行查询时&#xff0c;我们需要保证速度尽可能快。假设我们有一个 STUDENT 表&#xff0c;表中包含学生名字&#xff0c;年龄&#xff0c;专业等字段&#xff0c;当我们要查询给定年龄数值的记录&#xff…

2024年MathorCup数学建模思路A题B题C题D题思路分享

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

C语言联合体,枚举详解

1. 前言 前边我们已经了解了结构体在C语言当中是如何使用的&#xff0c;今天咱来一起聊一聊联合体与枚举在C语言当中又是如何运用的呢 2. 联合体的了解与运用 2.1 联合体的声明&#xff1a; 相比于结构体来说&#xff0c;联合体最大的区别就在于它是联合体当中所有成员共用一…

vue3+threejs新手从零开发卡牌游戏(十八):己方场上手牌添加画线

手牌上场后&#xff0c;点击己方怪兽区卡牌会跟随鼠标移动画出线条&#xff0c;之后可以通过判断鼠标移动到对方场地的某卡牌进行战斗操作&#xff0c;代码主要改动在game/index.vue文件。 1.添加鼠标移动监听事件&#xff08;移动端&#xff09;&#xff1a; window.addEven…

Golang 内存管理和垃圾回收底层原理(二)

一、这篇文章我们来聊聊Golang内存管理和垃圾回收&#xff0c;主要注重基本底层原理讲解&#xff0c;进一步实战待后续文章 垃圾回收&#xff0c;无论是Java 还是 Golang&#xff0c;基本的逻辑都是基于 标记-清理 的&#xff0c; 标记是指标记可能需要回收的对象&#xff0c…

泛域名站群,泛域名程序

泛域名站群是一种利用大量类似的泛域名来建立多个网站&#xff0c;并通过这些网站链接到主网站&#xff0c;以提升主网站的排名和流量的策略。泛域名站群通常包含大量的子域名&#xff0c;这些子域名指向不同的页面&#xff0c;但它们的内容大部分是重复或相似的&#xff0c;目…

Linux 系统 docker搭建LNMP环境

1、安装nginx docker pull nginx (默认安装的是最新版本) 2、运行nginx docker run --name nginx -p 80:80 -d nginx:latest 备注&#xff1a;--name nginx 表示容器名为 nginx -d 表示后台运行 -p 80:80 表示把本地80端口绑定到Nginx服务端的 80端口 nginx:lates…

机器学习模型及其使用方法——《机器学习图解》

本书教你两件事——机器学习模型及其使用方法 机器学习模型有不同的类型&#xff0c;有些返回确定性的答案&#xff0c;例如是或否&#xff0c;而另一些返回概率性的答案。有些以问题的形式呈现&#xff1b;其他则使用假设性表达。这些类型的一个共同点是它们都返回一个答案或…

怎么在UE游戏中加入原生振动效果

我是做振动触感的。人类的五感“视听嗅味触”&#xff0c;其中的“触”就是触觉&#xff0c;是指皮肤、毛发与物体接触时的感觉。触感可以带来更加逼真的沉浸式体验。但也许过于司空见惯&#xff0c;也是习以为常&#xff0c;很多人漠视了触感的价值。大家对触感的认知还远远不…

Maplesoft Maple 2024(数学科学计算)mac/win

Maplesoft Maple是一款强大的数学计算软件&#xff0c;提供了丰富的功能和工具&#xff0c;用于数学建模、符号计算、数据可视化等领域的数学分析和解决方案。 Mac版软件下载&#xff1a;Maplesoft Maple 2024 for mac激活版 WIn版软件下载&#xff1a;Maplesoft Maple 2024特别…