OAuth 2.0(Open Authorization 2.0)授權框架入門介紹

老马啸西风發表於2024-04-03

擴充閱讀

OAuth 2.0-01-Overview

OAuth2-02-java 整合

OAuth2-03-springboot 整合

oauth2 是什麼?

OAuth 2.0(Open Authorization 2.0)是一種授權框架,允許第三方應用程式訪問使用者在另一個服務提供者上託管的資源,而無需共享使用者的憑據(例如使用者名稱和密碼)。

它已成為許多網路服務的標準授權協議,包括社交媒體平臺、雲端儲存服務、支付系統等。

OAuth 2.0的設計重點是簡化客戶端開發並提高安全性。

以下是OAuth 2.0的核心元件和工作流程:

核心元件:

  1. 資源所有者(Resource Owner):擁有受保護資源的使用者。該使用者授予客戶端對其資源的訪問許可權。

  2. 客戶端(Client):第三方應用程式,希望訪問資源所有者的受保護資源。它可以是網站、移動應用程式或其他型別的應用程式。

  3. 授權伺服器(Authorization Server):負責認證資源所有者並頒發訪問令牌給客戶端。這是OAuth 2.0流程的核心元件之一。

  4. 資源伺服器(Resource Server):託管受保護資源的伺服器。客戶端透過訪問令牌與資源伺服器通訊以訪問資源。

OAuth 2.0的工作流程:

  1. 客戶端註冊:客戶端向授權伺服器註冊,並提供其身份驗證資訊,如客戶端ID和客戶端金鑰。

  2. 授權請求:客戶端請求授權伺服器授權,以訪問資源所有者的受保護資源。

  3. 使用者身份驗證:授權伺服器驗證資源所有者的身份,並要求資源所有者授予客戶端請求的許可權。

  4. 授權授予:如果資源所有者同意授予客戶端請求的許可權,則授權伺服器生成授權碼或訪問令牌,並將其傳送回客戶端。

  5. 令牌頒發:客戶端收到授權碼或訪問令牌後,使用其私有金鑰向授權伺服器請求令牌。

  6. 訪問令牌使用:客戶端使用訪問令牌向資源伺服器請求受保護資源。資源伺服器驗證令牌,並根據其有效性決定是否授予對資源的訪問許可權。

  7. 訪問資源:如果訪問令牌有效且授權給客戶端訪問特定資源,則資源伺服器向客戶端提供所請求的資源。

OAuth 2.0的授權型別:

  1. 授權碼授權(Authorization Code Grant):用於Web應用程式,客戶端透過重定向將使用者導向授權伺服器,在授權後獲取授權碼,然後使用該授權碼交換訪問令牌。

  2. 隱式授權(Implicit Grant):用於移動和Web應用程式,直接將訪問令牌傳遞給客戶端,而不是透過授權碼交換。

  3. 密碼授權(Resource Owner Password Credentials Grant):使用者直接將其憑據(使用者名稱和密碼)提供給客戶端,客戶端使用這些憑據向授權伺服器請求訪問令牌。

  4. 客戶端憑證授權(Client Credentials Grant):適用於客戶端自身需要訪問資源的情況,而不是代表使用者。

  5. 重新整理令牌(Refresh Token):用於獲取新的訪問令牌,以便客戶端可以持續訪問受保護資源,而無需使用者重新登入。

OAuth 2.0是一個靈活且功能強大的授權框架,透過支援不同型別的客戶端和授權流程,使得開發者可以在不犧牲安全性的情況下實現對使用者資源的安全訪問。

為什麼 OAuth2.0?解決了什麼問題?

OAuth 2.0解決了許多網際網路服務中存在的安全和使用者體驗問題,主要包括以下方面:

  1. 使用者安全性: OAuth 2.0允許使用者授權第三方應用程式訪問其受保護的資源,而無需共享其憑據(例如使用者名稱和密碼)。這樣可以大大降低使用者的安全風險,因為使用者不必將其敏感憑據直接提供給第三方應用程式。

  2. 使用者體驗: OAuth 2.0透過簡化使用者授權過程,提供了更好的使用者體驗。相比傳統的使用者名稱和密碼驗證,OAuth 2.0使得使用者無需在每個第三方應用程式中輸入其憑據,而只需在授權伺服器上一次性授權即可。這大大簡化了使用者的操作流程,提高了使用者體驗。

  3. 授權管理: OAuth 2.0提供了靈活的授權機制,使得使用者能夠控制哪些第三方應用程式可以訪問其資源,以及可以訪問資源的範圍。使用者可以隨時撤銷對某個應用程式的訪問許可權,從而更好地管理其資料的安全性和隱私性。

  4. 客戶端安全性: OAuth 2.0透過使用訪問令牌而不是使用者憑據來保護第三方應用程式與授權伺服器之間的通訊。這降低了客戶端儲存使用者憑據的風險,並使得客戶端更容易實現安全性措施。

  5. 適應多種場景: OAuth 2.0提供了多種授權型別,適用於不同的應用場景,包括Web應用程式、移動應用程式、服務端到服務端通訊等。這使得OAuth 2.0成為了一個通用的授權框架,能夠滿足各種不同的需求。

總的來說,OAuth 2.0透過提供安全的授權機制和最佳化的使用者體驗,解決了許多傳統身份驗證方案存在的安全性和便利性問題,成為了網際網路服務中廣泛使用的標準授權協議。

OAuth 2.0 的互動圖

簡單的文字描述:

  +--------+                               +---------------+
  |        |--(A)- Authorization Request ->|               |
  |        |                               |               |
  |        |<-(B)-- Authorization Grant ---|               |
  |        |                               | Authorization |
  |        |--(C)----- Access Token ------>|     Server    |
  |        |                               |               |
  |        |<-(D)----- Access Token -------|               |
  |        |                               +---------------+
  |        |
  |        |                               +---------------+
  |        |--(E)----- Access Token ------>|               |
  | Client |                               |               |
  |        |<-(F)--- Protected Resource ---| Resource      |
  |        |                               |  Server       |
  |        |<-(G)----- Access Token -------|               |
  +--------+                               +---------------+

這個圖示了OAuth 2.0的基本互動過程:

  1. 客戶端(Client)向授權伺服器(Authorization Server)傳送授權請求(A)。

  2. 授權伺服器驗證使用者並向客戶端發放授權許可(Authorization Grant)(B)。

  3. 客戶端使用授權許可向授權伺服器請求訪問令牌(C)。

  4. 授權伺服器驗證併發放訪問令牌(D)。

  5. 客戶端使用訪問令牌向資源伺服器(Resource Server)請求受保護資源(E)。

  6. 資源伺服器驗證訪問令牌並提供受保護資源(F)。

  7. 客戶端可以透過重新整理令牌或重新授權等方式獲取新的訪問令牌(G)。

這是OAuth 2.0互動的基本流程,其中授權碼授權流程為例。

OAuth2.0 有哪些開源的優秀框架?給出介紹+網址

OAuth 2.0是一個廣泛應用的授權框架,因此有許多開源的優秀框架可以幫助開發者實現OAuth 2.0的功能。

以下是一些流行的OAuth 2.0框架以及它們的介紹和網址:

  1. Spring Security OAuth: Spring Security OAuth是Spring框架提供的一個模組,用於實現OAuth 2.0和OAuth 1.0a協議。它提供了可擴充套件的API,可以輕鬆地整合到Spring應用程式中。Spring Security OAuth支援各種授權流程和客戶端型別。

    • 網址:Spring Security OAuth
  2. OAuthlib: OAuthlib是一個功能強大的Python庫,用於實現OAuth 1.0和OAuth 2.0的服務端和客戶端。它提供了靈活的API,支援各種OAuth 2.0授權流程和客戶端型別,包括授權碼授權、隱式授權、密碼授權等。

    • 網址:OAuthlib
  3. Node OAuth2 Server: Node OAuth2 Server是一個基於Node.js的OAuth 2.0伺服器庫,用於實現OAuth 2.0的授權伺服器。它提供了簡單易用的API和中介軟體,可以輕鬆地整合到Node.js應用程式中,並支援各種OAuth 2.0授權流程。

    • 網址:Node OAuth2 Server
  4. Apache Oltu: Apache Oltu是一個開源的Java庫,用於實現OAuth 2.0和OAuth 1.0a的客戶端和服務端。它提供了簡單易用的API,支援各種OAuth 2.0授權流程和客戶端型別,包括授權碼授權、密碼授權、客戶端憑證授權等。

    • 網址:Apache Oltu
  5. DotNetOpenAuth: DotNetOpenAuth是一個用於.NET平臺的開源庫,用於實現OAuth 2.0和OAuth 1.0a的客戶端和服務端。它提供了靈活的API和易於整合的ASP.NET控制元件,可以幫助開發者輕鬆地實現OAuth 2.0的功能。

    • 網址:DotNetOpenAuth

這些開源框架提供了豐富的功能和靈活的API,可以幫助開發者快速實現OAuth 2.0的功能,並且可以根據具體需求進行定製和擴充套件。

OAuth2.0 學習網址

以下是OAuth 2.0的官方學習資料:

  1. OAuth 2.0 RFC 文件:OAuth 2.0的官方規範文件,定義了OAuth 2.0的工作流程、授權流程、令牌頒發等方面的規範。

    • RFC 6749 - OAuth 2.0 Authorization Framework
    • RFC 6750 - OAuth 2.0 Bearer Token Usage
  2. OAuth 2.0官方網站:OAuth 2.0的官方網站提供了規範文件、社群資源、實現庫等相關資訊。

    • OAuth 2.0
  3. OAuth 2.0示例程式碼:OAuth 2.0網站提供了各種語言的示例程式碼,包括Java、Python、Node.js等。

    • OAuth 2.0 示例程式碼
  4. OAuth 2.0規範GitHub Repo:OAuth 2.0規範的GitHub倉庫,包含規範文件、討論、貢獻指南等。

    • OAuth 2.0 Specification
  5. IETF OAuth Working Group:OAuth 2.0的工作組,負責維護和發展OAuth 2.0協議。

    • IETF OAuth Working Group
  6. OAuth 2.0 Wiki:OAuth 2.0的維基頁面,提供了更多關於OAuth 2.0的資訊、用例和示例。

    • OAuth 2.0 Wiki

以上資源提供了OAuth 2.0的官方規範、示例程式碼、社群討論等相關資訊,可以幫助你深入學習和理解OAuth 2.0協議。

相關文章