」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > SAML、OAuth 與 OpenID Connect

SAML、OAuth 與 OpenID Connect

發佈於2024-11-06
瀏覽:841

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

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<my...
    程式設計 發佈於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 fil...
    程式設計 發佈於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()函數要求...
    程式設計 發佈於2025-04-17

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3