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

news2024/11/20 4:25:26

对于刚开始接触身份认证的朋友对于单点登录,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.coloradmin.cn/o/1035425.html

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

相关文章

从Python代码到诗

🐳序言 在Python社区,没有强制的编码标准,这虽然赋予了开发者更多的自由,但也导致代码风格不一致性。使得部分代码变得晦涩难懂,本文将探讨一系列的开发技巧和最佳实践,开发出优雅的Python脚本。 1、参数接…

OpenMesh 网格平滑

文章目录 一、简介二、相关参数二、实现代码三、实现效果参考资料一、简介 由于物理采样过程固有的局限性,三维扫描仪获得的网格通常是有噪声的。为了消除这种噪声,所谓的平滑算法被开发出来。这类方法有很多,OpenMesh主要为我们提供了两种平滑算法,一种是较为经典的Laplac…

dp训练题解

训练链接 CF101E 题目链接 点击打开链接 题目解法 朴素的 d p dp dp 很好写,但发现难以得到最优路径 考虑对于 ( x , y ) (x,y) (x,y) 的转移方式只有两种,可以想到用 b i t s e t bitset bitset 来维护转移,这样可以很节约空间 但我…

113双周赛

题目列表 2855. 使数组成为递增数组的最少右移次数 2856. 删除数对后的最小数组长度 2857. 统计距离为 k 的点对 2858. 可以到达每一个节点的最少边反转次数 一、使数组成为递增数组的最少右移次数 这题可以直接暴力求解,枚举出每种右移后的数组,将…

MySQL学习笔记4

客户端工具的使用: MySQL: mysql命令行工具,一般用来连接访问mysql的数据。 案例:使用mysql客户端工具连接服务器端(用户名:root;密码:123456). [rootmysql-server ~]#…

不甘于被强势厂商捆绑,中国移动未来或自研5G基站

一直以来运营商被认为只是做服务,而设备等都是由设备商提供的,甚至由于如今的设备高度复杂,设备商已承包越来越多的基站运维工作,运营商的技术水平越来越低,不过随着中国移动发布5G射频芯片8676,似乎显示出…

centos7用docker安装WireGuard教程

1、 检查centos内核版本 uname -r2、升级内核 下载脚本上传到服务器运行脚本进行升级内核 链接:https://pan.baidu.com/s/1vYmqVy2St3nFnJWGPIwdOw 提取码:owac 3、安装WireGuard 方案一:使用脚本安装 执行第二步脚本进行安装#启动wg0wg…

CSRF攻击(跨站请求伪造)

1.CSRF原理 程序员开发的时候,未对相关页面进行token和referer判断,造成攻击者可构造自己的URL地址欺骗用户进行点击 漏洞分析(低级可绕过) 通过这个可以更改密码 改为了password 中级多了referer头可以绕过 源代码 多了一个refer…

简单好用的Python装饰器详解

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

linux服务器加固-密码验证设置

安全问题 安全控制点 风险分析 风险等级 标准要求 查看登录/etc/login.defs文件PASS_MAX_DAYS参数为99999,查看/etc/pam.d/system-auth文件,未对密码策略进行有效配置,如:密码更换周期,密码是否包括字母、数字与特…

基于SpringBoot的网上点餐系统

目录 前言 一、技术栈 二、系统功能介绍 用户功能模块 管理员功能模块 美食店功能模块 前台首页功能模块 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 系统管理也都将通过计算机进行整体智能化操作,对于网上点餐系统所牵扯的管理及数据保存…

【从0学习Solidity】 32. 代币水龙头

【从0学习Solidity】32. 代币水龙头 博主简介:不写代码没饭吃,一名全栈领域的创作者,专注于研究互联网产品的解决方案和技术。熟悉云原生、微服务架构,分享一些项目实战经验以及前沿技术的见解。关注我们的主页,探索全…

兴达易控EtherCAT转Modbus网关用Modbus Slave模拟从站配置案例

兴达易控EtherCAT到Modbus网关可以用作Modbus从站的配置。EtherCAT到Modbus网关允许Modbus协议转换为EtherCAT,实现不同通信系统之间的互操作性。通过配置从站到网关的Modbus,您可以访问和控制Modbus设备。同时,网关还可以扩展Modbus网络的范…

[C++基础]-继承

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一、模板的…

2023-9-23 最大不相交区间数量

题目链接&#xff1a;最大不相交区间数量 #include <iostream> #include <algorithm>using namespace std;const int N 100010;int n;struct Range {int l, r;bool operator< (const Range &W) const {return r < W.r;} }range[N];int main() {cin >…

Unity中的两种ScriptingBackend

一&#xff1a;前言 二&#xff1a;两种模式的介绍 ios&#xff1a;unity只有il2cpp模式的编译才支持64位系统&#xff0c;mono是不支持的&#xff0c;在快速开发阶段仍然支持Mono&#xff0c;但是不能再向Apple提交Mono(32位)的应用 苹果在2016年1月就要求所有新上架游戏必须支…

ASO优化之竞争对手的选择取决于什么

任何具有良好ASO策略的应用程序都是来自于良好的基准&#xff0c;不仅可以对市场有总体概述&#xff0c;还可以发现应用的增长潜力以及如何在不同的应用商店中获得知名度。在发布应用之前&#xff0c;需要制定ASO策略以获得搜索和浏览可见性&#xff0c;所以研究竞争对手是基础…

【小沐学NLP】关联规则分析Apriori算法(Mlxtend库,Python)

文章目录 1、简介2、Mlxtend库2.1 安装2.2 功能2.2.1 User Guide2.2.2 User Guide - data2.2.3 User Guide - frequent_patterns 2.3 入门示例 3、Apriori算法3.1 基本概念3.2 apriori3.2.1 示例 1 -- 生成频繁项集3.2.2 示例 2 -- 选择和筛选结果3.2.3 示例 3 -- 使用稀疏表示…

Klocwork 2023.2 windows

Klocwork 2023.2 windows 2692407267qq.com&#xff0c;更多内容请见http://user.qzone.qq.com/2692407267/