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

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

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

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

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

✔单点登录是什么?

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

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

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

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

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

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

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

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

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

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

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

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

  • JWTJson 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 是什么?

JWTJson 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 授权协议😁😁

✔OAuth2.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

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

欢迎点赞,关注,收藏

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

好了,本次就到这里

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

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

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

相关文章
|
JSON 数据格式 Python
Python json中一直搞不清的load、loads、dump、dumps、eval
Python json中一直搞不清的load、loads、dump、dumps、eval
936 0
Python json中一直搞不清的load、loads、dump、dumps、eval
|
12月前
|
NoSQL Java Redis
Springboot使用Redis实现分布式锁
通过这些步骤和示例,您可以系统地了解如何在Spring Boot中使用Redis实现分布式锁,并在实际项目中应用。希望这些内容对您的学习和工作有所帮助。
1237 83
|
9月前
|
人工智能 Java API
MCP客户端调用看这一篇就够了(Java版)
本文详细介绍了MCP(Model Context Protocol)客户端的开发方法,包括在没有MCP时的痛点、MCP的作用以及如何通过Spring-AI框架和原生SDK调用MCP服务。文章首先分析了MCP协议的必要性,接着分别讲解了Spring-AI框架和自研SDK的使用方式,涵盖配置LLM接口、工具注入、动态封装工具等步骤,并提供了代码示例。此外,还记录了开发过程中遇到的问题及解决办法,如版本冲突、服务连接超时等。最后,文章探讨了框架与原生SDK的选择,认为框架适合快速构建应用,而原生SDK更适合平台级开发,强调了两者结合使用的价值。
12247 33
MCP客户端调用看这一篇就够了(Java版)
|
12月前
|
存储 Java
几种锁:偏向锁、轻量级锁、重量级锁、自旋锁
**锁机制简介:** Java中,锁分为偏向锁、轻量级锁和重量级锁。偏向锁适用于单一线程多次获取同一锁的情况,减少无竞争下的性能消耗;轻量级锁在多线程竞争时通过自旋避免阻塞,提升效率;重量级锁则是在自旋超时或多个线程竞争时,将其他线程阻塞以防止CPU空转,但性能较低。锁的升级路径为:偏向锁 → 轻量级锁 → 重量级锁,且不可降级。偏向锁默认开启,可通过JVM参数调整或关闭。
472 13
几种锁:偏向锁、轻量级锁、重量级锁、自旋锁
|
SQL 存储 数据挖掘
快速入门:利用AnalyticDB构建实时数据分析平台
【10月更文挑战第22天】在大数据时代,实时数据分析成为了企业和开发者们关注的焦点。传统的数据仓库和分析工具往往无法满足实时性要求,而AnalyticDB(ADB)作为阿里巴巴推出的一款实时数据仓库服务,凭借其强大的实时处理能力和易用性,成为了众多企业的首选。作为一名数据分析师,我将在本文中分享如何快速入门AnalyticDB,帮助初学者在短时间内掌握使用AnalyticDB进行简单数据分析的能力。
689 2
|
消息中间件 NoSQL Java
订单出现超时未关闭场景解决方案
订单出现超时未关闭场景解决方案
657 5
|
消息中间件 Dubbo Java
聊聊单体服务VS微服务系统
聊聊单体服务VS微服务系统
|
网络协议 应用服务中间件 网络安全
阿里云免费SSL申请流程(白嫖20张SSL免费证书)2024年新版教程
本文详述了2024年最新的阿里云免费SSL证书申请流程。用户可通过阿里云数字证书管理服务控制台一键申请最多20张免费单域名SSL证书,每张证书有效期为3个月。首先登录控制台,选择“SSL证书管理”下的“个人测试证书”,同意协议并完成购买流程。之后需创建证书、输入域名等信息并进行域名验证。验证方法包括手动DNS验证、域名授权自动化验证或文件验证。完成验证后,等待审核通过即可下载适用于不同服务器类型的SSL证书。请注意,阿里云免费SSL证书到期后不支持续费,需重新申请。了解更多详情,请访问阿里云官方SSL证书页面。
|
消息中间件 存储 数据库
消息队列有什么用
通过异步处理提高系统性能(减少响应所需时间) 削峰/限流 降低系统耦合性。
290 0
|
JavaScript Java 测试技术
基于SpringBoot+Vue的在线文档管理系统的设计与实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的在线文档管理系统的设计与实现(源码+lw+部署文档+讲解等)
312 1
基于SpringBoot+Vue的在线文档管理系统的设计与实现(源码+lw+部署文档+讲解等)