什么是单点登录?什么又是 OAuth2.0?

对于刚开始接触身份认证的朋友对于单点登录,OAuth2.0,JWT 等等会有诸多疑惑,甚至还会问既然有了 JWT 还拿 单点登录做什么?还拿 OAuth2.0 做什么?

不知做过身份认证的 xdm 看到这里是不是感觉这句话有点迷??👀👀 他们有啥必然的关系吗,并没有

这篇文章旨在阐述 单点登录 ,OAuth2.0 以及 JWT 具体是个啥,其他的关联内容会简单提及,希望能够对你有帮助

✔单点登录是什么?

单点登录 英文翻译为 Single Sign On,简称就是SSO

他是一种思想,期望的是在多系统的应用中,只要在其中一个系统上进行登录,那么就可以直接访问其他任何一个互信的系统

简单来说就是,一次登录,多系统多次使用😁😁

✔为什么要使用单点登录?

自然是为了让用户能够更简单更高效更便捷的访问多个关联系统

其实通过这个简单有趣的思想,我们就可以知道,单点登录的由来,自然还是用户的需求驱动的

过去我们的系统比较少,每个系统都会去实现和维护一个登录认证模块,基本上是账号密码登录,手机短信验证码登录等等

可发展到现在,很多业务是关联多个子系统的,如果我们访问每一个子系统,都要完成一次认证,(例如每个系统都要我们输入账号密码) ,那么我们可能会疯掉,这种设计太反人类 😂😂

不过还是有一点好,就是我们可以把我们的密码记得更加牢固

因此,如果你是用户,你也期望,只用登录认证一次,我就可以访问其关联的所有系统,这样更加人性化

✔通用的单点登录实现方式有哪些

现在用的比较多的单点登录实现方式有如下四种,从实现方式从简单到复杂排序为

  • JWT Json web token )基于 Token 的认证授权机制
  • CAS (Central Authentication Service)中心授权服务
  • OAuth2.0 (Open Authorization 2.0) 开放授权协议
  • SAML (Security Assertion Markup Language) 安全断言标记语言

每一种协议都有自己的一个认证流程,思想都差不多,本篇文章重点聊聊 JWT 和 OAuth2.0

✔什么叫做认证,什么叫做授权?

首先,对于上述内容,一会儿认证,一会儿授权,到底有啥不一样??

对于看到 Authorization 这个单词,你认为是授权,还是认证?

看到 Authentication 这个单词,又是如何理解的呢?

认证 Authentication ,关注的是需要你证明你是谁,是一个证明自己身份的过程

👀例如咱们去参加演唱会,你如何证明你可以进去听?

是不是可以用你手上的票来证明你的身份,是一个给了钱买了票能听歌的人

这个时候,你过了演唱会的大门,进入到场子内,你会发现你这样的身份,只是被授权 Authorization 可以进入某些区域,另外的一些区域你是没有办法进入的

所以,我们此刻就知道了

  • 认证是去证明你的身份,授权是判断你可以访问哪一些资源
  • 认证发生在授权之前,授权发生在认证之后

✔JWT 是什么?

JWT Json web token 是基于 Token 的认证授权机制

见名知意,jwt 也是一种 token ,只不过这种 token 有自己的一些约束和规定

一个 JWT 由 头(header),载荷(payload),签名(signature) 组成,具体细节可以查看这篇文章内容:JWT身份认证(附带源码讲解)

此处聊一下关于使用 JWT 的方式来实现单点登录,

简单流程如下

对于此处,我们一般会去使用 IDaaS (作为认证中心) 来进行认证,在 IDaaS 中,是可以创建应用的,此处的应用即是我们的关联系统

IDaaS 认证完毕后会将用户信息,具体的签名算法,生成一个 JWT ,给到具体的应用(关联系统) ,关联系统用秘钥解析 JWT 并拿到具体的用户信息之后,再去完成自己平台内部的各种校验,进而让该用户完成认证和授权

可以查看到,更多的是需要处理 JWT 产生和解析的一个过程,约定好协议字段就可以了,这种方式最简单

✔OAUTH2.0 是什么?

OAuth2.0 (Open Authorization 2.0) 开放授权协议

见名知意,他是一个授权协议,而不是一个认证协议

此处的 2.0 协议是不兼容之前的 1.0 协议的,此处需要注意,具体更加细节的内容可以查阅:RFC 6749

👀先举一个例子说明为什么要用 OAuth

咱们登录掘金的时候,我们不想在掘金上注册账号密码,而且我们还想直接通过登录微信,来达到登录掘金的目的

那么掘金就不得不和微信有交互,就需要获取到微信的授权

用过这种方式登录的人就知道这种场景,在掘金页面选择微信登录的时候,会弹出掘金正在申请微信授权用户的昵称和头像,需要我们同意

我们同意之后,掘金获取到微信授权,拿到昵称和头像,我们就可以顺利的使用微信账号登录到掘金平台上了

此刻是否会有同学问,直接让微信告诉掘金账号密码不就可以了吗?这样岂不是更方便?

方便是方便了,但是这会埋下巨大的安全问题

  • 对于各大平台来说,密码是隐私,怎么可以给多第三方平台呢
  • 如果微信将账号密码给了掘金,那么掘金就可以随时随地的登录我们用户的账号,这是不安全的,而且也是没有办法设置掘金可以使用账号密码的方式访问微信的资源范围和其有效期的
  • 按照这种方式,其他平台也可以这样来通过微信授权的方式来登录其他第三方平台,若密码被泄漏了,那么用户在微信上的数据就全部泄漏了,安全问题很大哟

正是因为这样的方式行不通,有智慧的大佬们便推出了 OAuth 授权协议😁😁

✔OAuth3.0 的基本流程

举个例子:在掘金中使用微信认证的方式来登录掘金,主要看大体的方向和流程

通过上述流程我们可以发现和解释关于OAuth2.0 涉及到的名词

其中,我们可以看到微信在整个过程中所处的角色是:

  • 资源服务器
  • 授权服务器

登录的这个微信用户,叫做:

  • 资源拥有者

掘金向微信请求授权的过程中会带上 Redirect_Uri 和 State

  • Redirect_Uri 表示经过微信用户同意之后,页面会被重定向到的地方,并且还会给这个Redirect_Uri 带上用户的登录凭证 code 和 State 原值(用于防篡改

掘金获取到授权许可之后,通过登录凭证向微信拿到访问令牌 Access Token

掘金拿着 Access Token 即可访问微信的昵称和头像,这个就属于

  • Scope 访问范围,决定掘金可以对用户可以访问哪些资源

总结

至此,相信你应该知道什么是单点登录,什么是 JWT ,什么是 OAuth2.0 协议了吧

单点登录是一种思想

JWT 是一种 Token 的形式

OAuth2.0 协议是一种授权协议

单点登录 可以用OAuth2.0 协议来进行实现,实现 OAuth2.0 协议过程中,使用到的 Token 就可以使用 JWT 的方式来生成 Token

感谢阅读,欢迎交流,点个赞,关注一波 再走吧

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

文中提到的技术点,感兴趣的可以查看这些文章:

  • OAUTH之钉钉第三方授权
  • JWT身份认证(附带源码讲解)
  • go-zero jwt 鉴权快速实战
    可以进入地址进行体验和学习:https://xxetb.xet.tech/s/3lucCI

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

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

相关文章

简单好用的Python装饰器详解

装饰器(Decorators)是Python中一种强大而灵活的功能,用于修改或增强函数或类的行为。装饰器本质上是一个函数,它接受另一个函数或类作为参数,并返回一个新的函数或类。它们通常用于在不修改原始代码的情况下添加额外的…

LaTex打出上大下小的公式

想要在latex中打出如下word公式 首先使用 \atop符号 使用如下语句 d_{H(A,B)} max\{{sup\, inf \atop {a \in A\,b \in B}}\,d(a,b), {sup\, inf\,\atop {b\in B\,a\in\,A}}d(b,a)\}. ![在这里插入图片描述](https://img-blog.csdnimg.cn/0c842594716a4693b1124523d53bfcad…

java框架-Spring-IOC

文章目录 一、组件注册包扫描组件注解0)、 ComponentScans1)、 RestController2)、 Srevice3)、 Rerpository4)、Component 导入第三方包里的组件1)、Configuration1)、Bean1)、Cond…

JavaScript 期约 Promise 总结

同步与异步的概念 JavaScript 是一门单线程的语言,这意味着它在任何给定的时间只能执行一个任务。 然而,JavaScript 通过异步编程技术来处理并发操作,以避免阻塞主线程的情况。 在上图中,同步行为的进程 A 因为等待进程 B 执行完…

elsarticle class not displaying email addresses

See https://tex.stackexchange.com/questions/84573/elsarticle-class-not-displaying-email-addresses

iPhone辐射超标,发布三年突然禁售了

昨晚 iPhone 15 预售大家抢到了吗? 虽然13日发布会后大家的反应十分冷静,但身体还是很诚实,官网都排到6-7周以后了... 在大伙都争着第一波尝鲜的时候,有一个地方正准备禁售 iPhone 。 不用想肯定是欧盟某个国家啦,这…

点分治维护dp+连通块上新型dp思路+乘积方面进行根号dp:0922T4

首先连通块,所以点分治肯定是 Trick1 钦定选根的连通块dp 对于钦定选根的连通块dp,有一种常见思路 先对原树求其dfn序,按dfn序倒序求解 具体的,对于当前点 i i i(注意这里都是指dfn序),我们…

进程间通信(IPC)的方法:UNIX域套接字

UNIX域套接字(UNIX domain socket)为我们提供了一种在进程之间建立通信通道的便捷方法,具有许多有用的内置功能。它支持面向流(TCP)和面向数据报(UDP)协议作为TCP/IP互联网套接字。我们还可以在阻塞和非阻塞模式之间进行选择。 首先需要创建套接字并在套接字函…

Qt事件处理

1. 事件 众所周知Qt是一个基于C的框架,主要用来开发带窗口的应用程序(不带窗口的也行,但不是主流)。我们使用的基于窗口的应用程序都是基于事件,其目的主要是用来实现回调(因为只有这样程序的效率才是最高…

基于SpringBoot的旅游系统

基于SpringBootVue的旅游系统、前后端分离 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/Ecilpse、Navicat、Maven 【主要功能】 角色:管理员、用户 用户:浏览旅游…

【论文阅读】内存数据库并发控制算法的实验研究

内存数据库并发控制算法的实验研究 原文链接jos.org.cn/jos/article/pdf/6454 摘要 并发控制算法的基本思想归纳为"先定序后检验”,基于该思想对现有各类并发控制算法进行 了重新描述和分类总结,于在开源内存型分布式事务测试床 3TS 上的实际对比实…

详解TCP/IP协议第四篇:数据在网络中传输方式的分类概述

文章目录 前言 一:面向有连接型与面向无连接型 1:大致概念 2:面向有连接型 3:面向无连接型 二:电路交换与分组交换 1:分组交换概念 2:分组交交换过程 三:根据接收端数量分…

免费玩云上大数据--海汼部落实验室

玩大数据遇到的问题 大家好,这次分享一个免费的大数据部署工具,并非是给人家打广告,试过了真的爽。 学习大数据的人都知道,如果用VMware模拟Linux搭建大数据集群的话我们需要很高的内存和硬盘内存,随随便便跑一下mapre…

【云原生】Kubernetes学习笔记

部署 在部署前强调几点 不要使用IPv6, 很多组件都不支持IPv6不要使用最新版本, 最新版本非常不稳定, 甚至可能存在无法运行的bug不要版本更新, 安装后就将版本固定下来, 新的版本可能会引入新功能, 或移除旧功能, 导致Kubernetes无法运行 Kubeadm介绍 K8s是由多个模块构成的…

2023华为杯数模C题——大规模创新类竞赛评审方案研究

B题——大规模创新类竞赛评审方案研究 思路:采用数据分析等手段改进评分算法性能 完成情况(1-2问已经完成) 代码下载 问题一 在每个评审阶段,作品通常都是随机分发的,每份作品需要多位评委独立评审。为了增加不同评审专家所给成绩之间的可比…

解决因为修改SELINUX配置文件出错导致Faild to load SELinux poilcy无法进入CentOS7系统的问题

一、问题 最近学习Kubernetes,需要设置永久关闭SELINUX,结果修改错了一个SELINUX配置参数,关机重新启动后导致无法进入CentOS7系统,卡在启动进度条界面。 二、解决 多次重启后,在启动日志中发现 Faild to load SELinux poilcy…

简单的自托管书签服务NeonLink

什么是 NeonLink ? NeonLink 是一个简单且开源的自托管书签服务。它是轻量级的,使用最少的依赖项,并且易于通过 Docker 安装。由于系统要求较低,该应用程序非常适合部署在 RaspberryPI 上。 安装 在群晖上以 Docker 方式安装。 …

【ES6】

ES6 1 ES6简介1.1 什么是ES61.2 为什么使用ES6 2 ES6的新增语法2.1 let2.2 const2.3 let、const、var的区别2.4 解构赋值2.4.1 数组解构2.4.2 对象解构 2.5 箭头函数2.6 剩余参数 3 ES6的内置对象扩展3.1 Array的扩展方法3.1.1 扩展运算符(展开语法)3.1.2 构造函数方法&#xf…

Docker 部署 Bitwarden RS 服务

Bitwarden RS 服务是官方 Bitwarden server API 的 Rust 重构版。因为 Bitwarden RS 必须要通过 https 才能访问, 所以在开始下面的步骤之前, 建议先参考 《Ubuntu Nginx 配置 SSL 证书》 配置好域名和 https 访问。 部署 Bitwarden RS 拉取最新版本的 docker.io/vaultwarden…

第一百五十二回 自定义组件综合实例:游戏摇杆三

文章目录 内容回顾优化性能示例代码我们在上一章回中介绍了 如何实现游戏摇杆相关的内容,本章回中将继续介绍这方面的知识.闲话休提,让我们一起Talk Flutter吧。 内容回顾 我们在前面章回中介绍了游戏摇杆的概念以及实现方法,并且通过示例代码演示了实现游戏摇杆的整个过程…