当前位置: 首页 > article >正文

OpenID Connect 和 OAuth 2.0 有什么不同?

目录

OAuth 2.0

OpenID Connect (OIDC)

功能不同

参与方稍微不同

协议流程不同

Token 类型不同

使用场景不同


在理解 OpenID Connect(OIDC)和 OAuth 2.0 之间的区别之前,再回顾下它们各自的基本概念。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0,开放授权 2.0)是被广泛使用的一种开放的标准授权协议,用于授权一个应用程序访问用户在另一个应用程序上的受保护资源,而无需共享用户的访问凭证(如用户名和密码)。OAuth 2.0 的设计不仅提高了安全性,并且简化了开发者的集成过程。OAuth 2.0 并不是一种身份验证协议,而是专注于授权,即允许一个系统在不暴露用户凭证的情况下获得对另一个系统的访问权限。

OpenID Connect (OIDC)

OpenID Connect 是一种基于 OAuth 2.0 的身份验证层,通过引入一些新的概念和组件,使客户端能够验证用户的身份并获取用户的基本信息。OpenID Connect 的核心目标是提供一种简单、安全且标准化的方式,让客户端能够确认用户的身份。OIDC 通过在 OAuth 2.0 的基础上添加 ID 令牌(ID Token)来实现身份验证。

接下来具体看下 OpenID Connect 与 OAuth 2.0 的区别:

功能不同

  • OAuth 2.0 主要用于授权,即允许第三方应用访问用户的资源而不需要用户提供其用户名和密码。通过 OAuth 2.0,应用可以请求对特定数据的访问权限,比如查看用户的照片或者发布状态更新。
  • OpenID Connect 则主要用于身份认证,即确认用户的身份。在 OAuth 2.0 的基础上增加了一层身份验证功能,使得应用不仅能够获得授权,还能验证用户的身份。

参与方稍微不同

  • OAuth 2.0 定义了四个角色:客户端(Client)、资源所有者(Resource Owner)、授权服务器(Authorization Server)和资源服务器(Resource Server)。
  • OpenID Connect 在 OAuth 2.0的基础上增加了身份提供者(IDP)角色,负责发放 ID Token。

协议流程不同

  • OAuth 2.0 定义了不同的授权流程(authorization flows),包括授权码授权流程(Authorization Code Grant)、隐式授权流程(Implicit Grant)、密码授权流程(Resource Owner Password Credentials Grant)和客户端凭证授权流程(Client Credentials Grant),用于获取 Access Token。
  • OpenID Connect 在 OAuth 2.0 的基础上添加了 ID Token 以及用于获取用户信息的端点。OpenID Connect 支持的流程和 OAuth 2.0 略有不同,OpenID Connect 支持的流程包括授权码流程(Authorization Code Flow)、隐式流程(Implicit Flow)和混合流程(Hybrid Flow)

Token 类型不同

  • OAuth 2.0 通常颁发 Access Token 和 Refresh Token,主要用于访问资源,包含访问范围、有效期等信息。
  • OpenID Connect 在 OAuth 2.0 基础上多颁发了一个 ID Token,ID Token 是 JWT(JSON Web Token)格式的,包含了用户身份的信息,例如用户标识符、签名算法、过期时间等,主要用于身份认证。

使用场景不同

  • OAuth 2.0 通常用于授权第三方应用程序访问受保护资源,如用户的照片、视频等。
  • OpenID Connect 通常用于实现身份验证,允许用户使用其在身份提供者上的凭据登录到不同的客户端应用程序。


http://www.kler.cn/a/380829.html

相关文章:

  • 苍穹外卖Bug集合
  • 爬虫学习4
  • Template Method(模板方法)
  • 读数据工程之道:设计和构建健壮的数据系统28数据服务常见关注点
  • 又一次安装autoware.universe的过程
  • Python酷库之旅-第三方库Pandas(193)
  • 揭秘rust中默认参数类型不为人知的秘密,你确定不来了解下吗?
  • Java 基于SpringBoot+Vue 的公交智能化系统,附源码、文档
  • Django Form 实现多层(嵌套)模型表单
  • 深度学习模块创作(缝合)教程|适合1-360月小宝宝食用,干货满满
  • 深度学习基础知识-损失函数
  • 【C/C++】memcpy函数的模拟实现
  • Mac OS 配置Docker+Mysql
  • C++中的继承——第一篇
  • ​CSS之三
  • 【OJ题解】C++实现字符串大数相乘:无BigInteger库的字符串乘积解决方案
  • vue中强制更新视图
  • 网络信息系统的整个生命周期
  • 服务器作业2
  • AUTOSAR COM 模块的主要功能导读以及示例
  • 【jvm】如何设置Eden、幸存者者区的比例
  • C语言 | Leetcode C语言题解之第521题最长特殊序列I
  • C++模拟实现list
  • NRF52832学习笔记(41)——添加串口库libuarte
  • GPT-SoVITS 部署方案
  • sqlalchemy连接mysql数据库