”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > SAML、OAuth 与 OpenID Connect

SAML、OAuth 与 OpenID Connect

发布于2024-11-06
浏览:267

这篇文章最初发布在我的博客上。使用以下链接查看原始来源:

SAML vs. OAuth vs. OpenID Connect

SAML、OAuth 与 OpenID Connect

本文将探讨 SAML、OAuth 和 OpenID Connect、它们的用例以及它们如何相互交互

SAML vs. OAuth vs. OpenID Connect rahulvijayvergiya.hashnode.dev

身份验证和授权对于确保应用程序和数据的安全至关重要。用于管理这些流程的三种广泛使用的协议是 OAuth、SAML 和 OpenID。

当您使用 Facebook、Google 或 LinkedIn 等应用程序登录其他网站时,您会遇到一些重要的协议:OAuthSAMLOpenID Connect 。这些协议有助于确保您的信息安全,同时允许您访问不同的服务。

1.SAML(安全断言标记语言)

SAML 是一种开放标准,用于在各方之间交换身份验证和授权数据,特别是在身份提供商 (IdP) 和服务提供商 (SP) 之间。它主要用于单点登录 (SSO) 场景,使用户能够进行一次身份验证并获得对多个应用程序的访问权限。

SAML 的工作原理

角色/演员:

  • 用户: 访问应用程序的个人。

  • 身份提供商 (IdP): 对用户进行身份验证并提供身份断言的服务。

  • 服务提供商 (SP): 用户尝试访问的应用程序或服务。

请求流程图:

SAML vs. OAuth vs. OpenID Connect

SAML 的主要特性

  • 单点登录 (SSO): 用户对多项服务进行一次身份验证。

  • 基于 XML: 使用 XML 来处理消息,使其更加强大。

  • 安全断言: 安全地传输用户身份和属性。


2.OAuth(开放授权)

OAuth 是一种开放的访问委托标准,通常用于基于令牌的身份验证和授权。它允许第三方应用程序访问用户数据而不暴露其凭据。 OAuth 主要用于授权,使用户能够向另一站点授予对其在一个站点上托管的资源的有限访问权限。

OAuth 的工作原理

角色/演员:

  • 资源所有者: 拥有数据并授予数据访问权限的用户。

  • 资源服务器: 托管用户数据的服务器(例如 Google、Facebook)。

  • 客户端:请求访问用户数据的第三方应用程序。

  • 授权服务器:在验证资源所有者身份后负责向客户端颁发访问令牌的服务器。

请求流程图:

SAML vs. OAuth vs. OpenID Connect

OAuth 的主要特点

  • 委派访问: 用户可以在不共享凭据的情况下授予访问权限。

  • 访问令牌:限制访问持续时间的短期令牌。

  • 范围: 定义授予客户端的访问范围。


3.OpenID连接

OpenID Connect 是构建在 OAuth 2.0 之上的身份验证层。它添加了身份验证,并为客户端提供了一种基于授权服务器执行的身份验证来验证用户身份的方法。

OpenID Connect 的工作原理

角色/演员:

  • 最终用户:想要进行身份验证的用户。

  • 客户端:请求用户身份验证的应用程序。

  • 授权服务器:对用户进行身份验证并颁发令牌的服务器。

请求流程图:

SAML vs. OAuth vs. OpenID Connect

OpenID Connect 的主要特性

  • ID 令牌: 提供用户信息和声明的 JWT。

  • 与 OAuth 无缝集成: 结合身份验证和授权。

  • 用户信息端点: 允许获取其他用户信息。

OpenID ConnectOAuth

看起来很相似,但它们都有不同但互补的目的:

  • OAuth:用于授权。它允许应用程序从其他服务(例如 Facebook 或 Google)访问资源(例如您的个人资料或照片),而无需您的密码。当您想要授予对您的数据的有限访问权限(例如,第三方应用程序访问您的日历)时,请使用 OAuth。

  • OpenID Connect (OIDC):构建在 OAuth 之上,用于身份验证。它会验证您的身份并允许应用程序知道您是谁。当您需要使用 Google 等服务登录网站或应用程序以证明您的身份时,请使用 OpenID Connect。

何时使用:

  • 使用 OAuth:

    • 当您希望应用程序代表您访问数据或资源时(例如,应用程序为您在 Twitter 上发布信息)。
    • “这个应用程序可以访问我的数据吗?” (授权)
  • 使用 OpenID Connect:

    • 当您需要验证用户身份时(例如,使用您的 Google 帐户登录网站)。
    • “这个用户是谁?” (验证)

OAuth、SAML 和 OpenID Connect 的快速比较

特征 OAuth SAML OpenID 连接
目的 授权 验证 身份验证与授权
格式 JSON、令牌 XML JSON
用例 API 访问、移动应用程序 Web 应用程序、SSO 网络和移动应用程序
复杂 缓和 高的 缓和
用户体验 重定向至 IdP 重定向至 IdP 重定向到授权服务器

结论

了解 OAuth、SAML 和 OpenID Connect 对于构建有效处理用户身份验证和授权的安全应用程序至关重要。每个协议都有其目的,确保您可以访问所需内容,同时保证数据安全。

参考

  1. OAuth 2.0 简单解释

  2. 什么是 SAML?

  3. OpenID Connect 概述

  4. 了解差异:OAuth、SAML 和 OpenID Connect

版本声明 本文转载于:https://dev.to/rahulvijayvergiya/saml-vs-oauth-vs-openid-connect-29m4?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • Java的Map.Entry和SimpleEntry如何简化键值对管理?
    Java的Map.Entry和SimpleEntry如何简化键值对管理?
    A Comprehensive Collection for Value Pairs: Introducing Java's Map.Entry and SimpleEntryIn Java, when defining a collection where each element com...
    编程 发布于2025-04-17
  • Python读取CSV文件UnicodeDecodeError终极解决方法
    Python读取CSV文件UnicodeDecodeError终极解决方法
    在试图使用已内置的CSV模块读取Python中时,CSV文件中的Unicode Decode Decode Decode Decode decode Error读取,您可能会遇到错误的错误:无法解码字节 在位置2-3中:截断\ uxxxxxxxx逃脱当CSV文件包含特殊字符或Unicode的路径逃...
    编程 发布于2025-04-17
  • Java为何无法创建泛型数组?
    Java为何无法创建泛型数组?
    通用阵列创建错误 arrayList [2]; JAVA报告了“通用数组创建”错误。为什么不允许这样做?答案:Create an Auxiliary Class:public static ArrayList<myObject>[] a = new ArrayList<myO...
    编程 发布于2025-04-17
  • Go web应用何时关闭数据库连接?
    Go web应用何时关闭数据库连接?
    在GO Web Applications中管理数据库连接很少,考虑以下简化的web应用程序代码:出现的问题:何时应在DB连接上调用Close()方法?,该特定方案将自动关闭程序时,该程序将在EXITS EXITS EXITS出现时自动关闭。但是,其他考虑因素可能保证手动处理。选项1:隐式关闭终止数...
    编程 发布于2025-04-17
  • 为什么堆叠的半透明盒子颜色会随顺序变化?
    为什么堆叠的半透明盒子颜色会随顺序变化?
    堆叠的semi-translucent boxes 将带有红色背景的层放置在蓝色背景的顶部时,眼睛可感知到底层的50%蓝色的组合,从顶层进行25%的红色。这是因为顶层的50%透明度允许底层的一半颜色显示出来。但是,当订单倒转时,顶部的蓝色背景在上面时,眼睛从底层遇到50%的红色组合,而蓝色则是蓝色...
    编程 发布于2025-04-17
  • 如何实时捕获和流媒体以进行聊天机器人命令执行?
    如何实时捕获和流媒体以进行聊天机器人命令执行?
    在开发能够执行命令的chatbots的领域中,实时从命令执行实时捕获Stdout,一个常见的需求是能够检索和显示标准输出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    编程 发布于2025-04-17
  • PHP阵列键值异常:了解07和08的好奇情况
    PHP阵列键值异常:了解07和08的好奇情况
    PHP数组键值问题,使用07&08 在给定数月的数组中,键值07和08呈现令人困惑的行为时,就会出现一个不寻常的问题。运行print_r($月)返回意外结果:键“ 07”丢失,而键“ 08”分配给了9月的值。此问题源于PHP对领先零的解释。当一个数字带有0(例如07或08)的前缀时,PHP将其...
    编程 发布于2025-04-17
  • 如何使用PHP将斑点(图像)正确插入MySQL?
    如何使用PHP将斑点(图像)正确插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call ...
    编程 发布于2025-04-17
  • 如何在Java的全屏独家模式下处理用户输入?
    如何在Java的全屏独家模式下处理用户输入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    编程 发布于2025-04-17
  • PHP SimpleXML解析带命名空间冒号的XML方法
    PHP SimpleXML解析带命名空间冒号的XML方法
    在php 很少,请使用该限制很大,很少有很高。例如:这种技术可确保可以通过遍历XML树和使用儿童()方法()方法的XML树和切换名称空间来访问名称空间内的元素。
    编程 发布于2025-04-17
  • Python不会对超范围子串切片报错的原因
    Python不会对超范围子串切片报错的原因
    在python中用索引切片范围:二重性和空序列索引单个元素不同,该元素会引起错误,切片在序列的边界之外没有。这种行为源于索引和切片之间的基本差异。索引一个序列,例如“示例” [3],返回一个项目。但是,切片序列(例如“示例” [3:4])返回项目的子序列。索引不存在的元素时,例如“示例” [9] ...
    编程 发布于2025-04-17
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, AttributeError: SomeClass...
    编程 发布于2025-04-17
  • 在Python中如何创建动态变量?
    在Python中如何创建动态变量?
    在Python 中,动态创建变量的功能可以是一种强大的工具,尤其是在使用复杂的数据结构或算法时,Dynamic Variable Creation的动态变量创建。 Python提供了几种创造性的方法来实现这一目标。利用dictionaries 一种有效的方法是利用字典。字典允许您动态创建密钥并分...
    编程 发布于2025-04-17
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    在java 中有效地替换多个substring,需要在需要替换一个字符串中的多个substring的情况下,很容易求助于重复应用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    编程 发布于2025-04-17
  • 我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    将我的加密库从mcrypt升级到openssl 问题:是否可以将我的加密库从McRypt升级到OpenSSL?如果是这样,如何?答案:是的,可以将您的Encryption库从McRypt升级到OpenSSL。可以使用openssl。附加说明: [openssl_decrypt()函数要求iv参...
    编程 发布于2025-04-17

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3