Architecture Decision Record

Active theme: Light

← 決策記錄範例

架構決策記錄:身份認證與授權選項

Web 應用的身份認證(authentication)和授權(authorization)是保護應用和服務訪問安全的兩個關鍵概念。兩者都涉及使用者的身份以及許可權如何授予,但關注的方面不同:

  • 身份認證是驗證使用者或系統身份的過程。
  • 授權是確定已透過認證的使用者或系統可以訪問哪些資源或執行哪些操作的過程。

下面,讓我們深入瞭解你提到的具體通訊協定和技術,它們常用於現代 Web 應用中管理身份認證和授權。

1. OAuth(開放授權)

OAuth 是一種開放的授權標準。它允許使用者在不共享憑據的情況下,授予第三方應用對其資源的有限訪問許可權。其核心思想是委託訪問。OAuth 常用於使用者可以登入第三方服務(例如使用 Google 登入)而無需直接向第三方提供使用者名稱和密碼的場景。

  • 流程:OAuth 通常遵循基於令牌的流程,由授權伺服器向第三方應用頒發訪問令牌。該令牌代表使用者的許可權,應用使用它從 API 訪問使用者的資料或資源。
  • 範例:使用者使用其 Google 賬號登入某個第三方應用。Google 驗證使用者的身份,然後授予一個令牌,使第三方應用能夠訪問部分 Google 資料(例如 Google 日曆)。

OAuth 並不直接處理身份認證;它關注的是授予訪問許可權。對於身份認證,OAuth 通常與其他通訊協定(例如 OpenID Connect)搭配使用。

2. OpenID Connect(OIDC)

OpenID Connect(OIDC) 是構建在 OAuth 2.0 之上的身份層,在 OAuth 的授權能力之上增加了身份認證。本質上,OpenID Connect 擴充套件了 OAuth 以處理使用者身份認證,併為應用提供了驗證使用者身份的標準化方式。

  • 流程:當使用者使用 OpenID Connect 登入時,第三方應用會請求一個 ID 令牌(除 OAuth 訪問令牌之外)。ID 令牌包含有關使用者的資訊(例如使用者名稱、電子郵件和其他宣告)。這使應用能夠知道使用者是誰以及是否已透過認證。
  • 範例:使用你的 Google 賬號登入 Slack 等服務(Google 是 OpenID Connect 提供方),涉及透過 OpenID Connect 進行的身份認證,而 OAuth 則管理對你的 Google 資源的訪問。

OIDC 使第三方應用更容易認證使用者,同時仍然允許對這些應用可以訪問的資源進行細粒度控制。

3. SAML(安全斷言標記語言)

SAML 是一種較早的、基於 XML 的標準,用於在各方之間交換身份認證和授權資料,特別適用於**單點登入(SSO)**場景。它主要用於企業環境,使使用者只需認證一次即可訪問多個應用,而無需重新輸入憑據。

  • 流程:使用者首先向身份提供方(IdP)進行認證。IdP 生成一個已簽名的 SAML 斷言,其中包含使用者的身份和相關屬性。該斷言被髮送給服務提供方(SP),SP 使用它來授權對應用的訪問。
  • 範例:員工登入公司門戶(IdP),便自動登入到電子郵件、CRM 等其他系統,而無需重新輸入憑據。認證過程基於 IdP 傳送的 SAML 斷言。

SAML 常用於企業 SSO 解決方案,非常適合企業環境中的 Web 應用,但與 OAuth/OIDC 相比,它對移動端不太友好。

4. WS-Federation(Web 服務聯合)

WS-Federation 是另一種用於**單點登入(SSO)**的通訊協定,特別是在基於 Microsoft 的企業環境中。它是 **WS-*(Web 服務)**規範系列的一部分,允許跨不同安全域(例如不同組織之間或不同服務之間)進行身份聯合。

  • 流程:WS-Federation 允許**受信任的身份提供方(IdP)**對使用者進行認證,並頒發服務提供方可用於授權的令牌。它與 SAML 類似,但通常用於嚴重依賴 Microsoft 技術的場景。
  • 範例:使用者登入由 Microsoft Azure Active Directory(AD)託管的企業應用,其身份可用於訪問其他聯合服務,包括由第三方供應商託管的應用。

儘管在許多現代 Web 環境中,WS-Federation 已在很大程度上被 OAuth 2.0 和 OpenID Connect 等較新的通訊協定取代,但它仍用於遺留系統,尤其是在以 Microsoft 為中心的企業中。

5. LDAP(輕量級目錄訪問通訊協定)

LDAP 是一種用於訪問和管理目錄服務的通訊協定,常用於在集中式目錄(通常稱為目錄服務)中儲存使用者憑據並管理訪問控制。LDAP 本身並不專門用於身份認證或授權,而是用於儲存和檢索身份資料,這些資料隨後會用於上述流程。

  • 身份認證:LDAP 允許應用透過向目錄服務查詢憑據(如密碼)來認證使用者。
  • 授權:它還管理使用者角色和許可權,幫助確定使用者是否可以訪問某些資源。
  • 範例:許多企業使用基於 LDAP 的目錄(例如 Active Directory)進行身份認證和授權,尤其是在 Windows 環境中。

LDAP 對於企業管理跨內部系統的使用者訪問至關重要,但在現代 Web 環境中,LDAP 通常與 SAML 或 OAuth 等其他通訊協定整合,以實現更完整的身份管理。

6. 社交 SSO 提供方

Facebook、Google、Twitter、GitHub 等社交單點登入(SSO)提供方,允許使用者使用其社交媒體憑據登入第三方應用。這是一種基於 OAuth 的身份認證,其中第三方服務(例如 Google)充當身份提供方。

  • 流程:使用者點選「使用 Google 登入」(舉例)。應用重定向到 Google,使用者在那裡登入(如果尚未登入)。然後 Google 向第三方應用提供訪問令牌或 ID 令牌,可用於認證使用者並可能訪問其資料。
  • 範例:許多應用允許你使用 Google 或 Facebook 憑據登入。應用會在幕後使用 OAuth 或 OpenID Connect 來驗證你的身份,在某些情況下還會訪問某些社交媒體資料。

社交 SSO 是一種方便且被廣泛採用的認證方法,因為它減少了使用者的阻力,他們可能不想再建立一組使用者名稱和密碼。


差異總結:

  • OAuth:用於授權,允許第三方應用在不暴露憑據的情況下訪問使用者資料。
  • OpenID Connect:擴充套件 OAuth 以提供身份認證,使應用能夠驗證使用者身份。
  • SAML:基於 XML 的 SSO 通訊協定,常用於企業環境。
  • WS-Federation:Microsoft 特有的身份聯合通訊協定,用於遺留系統。
  • LDAP:用於查詢目錄服務以認證使用者和管理授權的通訊協定。
  • 社交 SSO 提供方:基於 OAuth 的系統(如 Google、Facebook),允許第三方應用使用使用者的社交媒體憑據認證使用者。

這些技術各有其優勢和使用場景,在現代應用中,你可能會看到它們被組合起來用於安全的不同方面(例如,用 OAuth/OIDC 進行 API 訪問,用 SAML 進行企業 SSO)。