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

SAML、OAuth 與 OpenID Connect

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

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

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]刪除
最新教學 更多>
  • 如何在 PHP 中包含 CSS:詳細指南
    如何在 PHP 中包含 CSS:詳細指南
    在PHP 中包含CSS 檔案:綜合指南在進行Web 開發時,將CSS 樣式合併至PHP 程式碼中對於管理至關重要您的頁面的呈現。然而,眾所周知,使用 HTML 程式碼包含 CSS 檔案是標準方法。在本文中,我們將深入研究基於 PHP 的解決方案,幫助您了解如何將 CSS 檔案直接匯入 PHP 程式碼...
    程式設計 發佈於2024-11-06
  • 如何使用 JavaScript(不使用 jQuery)檢索 Div 標籤文字?
    如何使用 JavaScript(不使用 jQuery)檢索 Div 標籤文字?
    如何使用 JavaScript 檢索 Div 標籤文字(不使用 jQuery)要只使用 JavaScript 取得 div 元素的文字內容,還有 jQuery 的替代方案。 問題陳述:之前嘗試使用 document.getElementById('superman').value 檢...
    程式設計 發佈於2024-11-06
  • 如何計算 DOM 元素中的行數?
    如何計算 DOM 元素中的行數?
    計算DOM 元素中的行數可以決定DOM 元素中文字的行數,但這需要一些考慮元素的樣式和尺寸。 自動插入DOM文本中的自動換行符號並未直接在 DOM 本身中表示。 DOM 只包含原始文字內容。 根據元素高度計算行數但是,如果元素的高度取決於其內容,則可以估計行數行的高度除以字體行高。 var divH...
    程式設計 發佈於2024-11-06
  • 如何將 java.util.Date 轉換為 java.time 的 Instant、OffsetDateTime 或 ZonedDateTime?
    如何將 java.util.Date 轉換為 java.time 的 Instant、OffsetDateTime 或 ZonedDateTime?
    將java.util.Date 轉換為java.time 的Instant、OffsetDateTime 或ZonedDateTime隨著我們向現代java.time 框架遷移,了解如何將遺留java.util.Date 物件轉換為適當的java.time 類型至關重要。以下是等效項的概述:java...
    程式設計 發佈於2024-11-06
  • 高效的 React 開發:利用上下文和 Hook 進行無縫資料處理
    高效的 React 開發:利用上下文和 Hook 進行無縫資料處理
    介绍 React 的 Context API 允许您在应用程序中全局共享数据,而 Hooks 提供了一种无需类组件即可管理状态和副作用的方法。它们共同简化了数据处理并使您的代码更易于维护。在本文中,我们将深入研究 React Context 和 Hooks,提供详细的分步示例,帮助...
    程式設計 發佈於2024-11-06
  • 代理設計模式
    代理設計模式
    在我之前的博客中,我探索了处理对象创建机制的各种创作设计模式。现在,是时候深入研究结构设计模式,该模式重点关注如何组合对象和类以形成更大的结构,同时保持它们的灵活性和高效性。让我们从代理设计模式开始 JavaScript 中的代理设计模式 代理设计模式是一种结构设计模式,它提供一个...
    程式設計 發佈於2024-11-06
  • 您可以使用「src」屬性在外部 JavaScript 檔案中嵌入內嵌腳本嗎?
    您可以使用「src」屬性在外部 JavaScript 檔案中嵌入內嵌腳本嗎?
    您可以使用 SRC 屬性在外部 JavaScript 檔案中嵌入內嵌腳本嗎? 雖然 JavaScript 通常是使用外部腳本檔案包含的,出現一個常見問題:可以使用 src 屬性將內聯腳本合併到該外部檔案嗎? 根據HTML 4.01 規範:「腳本可以在SCRIPT 元素或在外部文件中如果未設定src ...
    程式設計 發佈於2024-11-06
  • 如何在 Go 中追蹤 HTTP POST 請求的進度?
    如何在 Go 中追蹤 HTTP POST 請求的進度?
    Go 中追蹤HTTP POST 請求的進度透過POST 請求發送大檔案和映像時,開發者經常面臨追蹤上傳進度的挑戰。本問題探討了一種可靠的方法來監控 Go 應用程式中此類請求的進度。 此問題建議手動開啟 TCP 連線並分塊發送 HTTP 請求。但是,此方法可能會遇到 HTTPS 網站的限制,並且不被認...
    程式設計 發佈於2024-11-06
  • 如何在 Java 中取得資料夾中的檔案名稱清單?
    如何在 Java 中取得資料夾中的檔案名稱清單?
    使用Java 獲取文件夾中的文件名獲取目錄中文件名列表的任務是各種環境中的常見需求編程場景。要在 Java 中實現此目的,有一個簡單的方法,即利用 File 類別。 程式碼方法:首先,使用所需的目錄路徑實例化File 物件:File folder = new File("your/path...
    程式設計 發佈於2024-11-06
  • 角管:綜合指南
    角管:綜合指南
    Angular 中的 Pipes 是简单的函数,用于在不修改底层数据的情况下转换模板中的数据。管道接收一个值,对其进行处理,然后返回格式化或转换后的输出。它们通常用于格式化日期、数字、字符串,甚至数组或对象。 它们允许您直接在视图中以更具可读性或相关性的格式格式化和显示数据,而无需更改底层数据模型。...
    程式設計 發佈於2024-11-06
  • Tailwind CSS 和深色模式
    Tailwind CSS 和深色模式
    在本文中,我們將探討如何在 Tailwind CSS 中實現深色模式。深色模式已成為流行的設計趨勢,因為它可以在低光環境下提供更好的使用者體驗並減輕眼睛疲勞。 Tailwind 可透過其內建實用程式輕鬆支援暗模式。 1. Tailwind 中的深色模式如何運作 Tailwind 提...
    程式設計 發佈於2024-11-06
  • 如何使用 CakePHP 的 Find 方法執行 JOIN 查詢?
    如何使用 CakePHP 的 Find 方法執行 JOIN 查詢?
    CakePHP Find 方法與 JOINCakePHP find 方法提供了一種從資料庫檢索資料的強大方法,包括連接表。本文示範了使用 CakePHP 的 find 方法執行 JOIN 查詢的兩種方法。 方法 1:利用模型關係此方法涉及定義模型之間的關係並使用可遏制的行為。考慮以下模型關係:cla...
    程式設計 發佈於2024-11-06
  • 如何在 Python 中重複使用生成器而不重新計算或儲存結果?
    如何在 Python 中重複使用生成器而不重新計算或儲存結果?
    透過重置在 Python 中重複使用生成器在 Python 中,生成器是用於迭代元素序列的強大工具。但是,一旦迭代開始,生成器就無法倒回。如果您需要多次重複使用生成器,這可能會帶來挑戰。 重複使用產生器的一個策略是再次重新運行生成器函數。這將從頭開始重新啟動生成過程。然而,如果生成器函數的計算成本很...
    程式設計 發佈於2024-11-06
  • 面向 JavaScript 開發人員的熱門 S 程式碼擴展
    面向 JavaScript 開發人員的熱門 S 程式碼擴展
    JavaScript 正在快速發展,圍繞它的工俱生態系統也在快速發展。 身為開發人員,您希望讓您的工作流程盡可能有效率且流暢。這就是 Visual Studio Code (VS Code) 的用武之地。 我精心挑選了 5 個 VS Code 擴展,它們將顯著增強您的 JavaScript 開發...
    程式設計 發佈於2024-11-06
  • 如何使用 HTML 輸出標籤來顯示計算結果。
    如何使用 HTML 輸出標籤來顯示計算結果。
    歡迎回來!我希望每個人都度過愉快的周末。今天,讓我們回到 HTML 標籤並專注於 標籤。 標籤是什麼? 標籤用於顯示計算結果。它是一個內聯元素,可以放置在 、 或其他內聯元素內。它通常用於顯示計算結果或即時顯示變數值。 閱讀完整文章,即時觀看並取得程式碼。 ...
    程式設計 發佈於2024-11-06

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

Copyright© 2022 湘ICP备2022001581号-3