架構決策記錄:身份驗證同授權選項
網頁應用程式嘅身份驗證(authentication)同授權(authorization)係保障應用程式同服務存取安全嘅兩個關鍵概念。兩者都涉及用戶嘅身份,以及權限點樣授予,不過各有不同嘅重點:
- 身份驗證係核實用戶或者系統身份嘅過程。
- 授權係決定已通過驗證嘅用戶或者系統可以存取咩資源或者執行咩操作嘅過程。
而家我哋深入睇下你提及嘅具體協定同技術,佢哋喺現代網頁應用程式入面常用嚟管理身份驗證同授權。
1. OAuth(Open Authorization)
OAuth 係一個開放嘅授權標準。佢容許用戶授權第三方應用程式有限度存取自己嘅資源,而唔使分享自己嘅憑證。核心概念係委派存取。OAuth 經常用於用戶可以登入第三方服務(例如用 Google 登入)、而無須直接向第三方提供用戶名稱同密碼嘅情況。
- 流程:OAuth 通常採用**基於權杖(token)**嘅流程,由授權伺服器向第三方應用程式發出存取權杖。呢個權杖代表用戶嘅權限,應用程式用佢嚟從 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(Security Assertion Markup Language)
SAML 係一個較舊、基於 XML 嘅標準,用嚟喺各方之間交換身份驗證同授權數據,尤其係**單一登入(Single Sign-On,SSO)**嘅情境。佢主要用於企業環境,令用戶驗證一次就可以存取多個應用程式,而無須重新輸入憑證。
- 流程:用戶首先向身份提供者(IdP)驗證。IdP 產生一個已簽署嘅 SAML 斷言,包含用戶嘅身份同相關屬性。斷言會傳送畀服務提供者(SP),SP 用佢嚟授權存取應用程式。
- 例子:員工登入公司入口網站(IdP),之後自動登入電郵、CRM 等其他系統,而無須重新輸入憑證。驗證過程係基於 IdP 傳送嘅 SAML 斷言。
SAML 通常用於企業 SSO 方案,喺企業環境入面的網頁應用程式運作良好,不過同 OAuth/OIDC 比較,佢對流動裝置較不友善。
4. WS-Federation(Web Services Federation)
WS-Federation 係另一個用於**單一登入(SSO)**嘅協定,尤其用於以 Microsoft 為主嘅企業環境。佢屬於 **WS-*(Web Services)**規格系列,容許喺不同保安域(例如不同組織之間,或者不同服務之間)進行身份聯合。
- 流程:WS-Federation 容許**受信任嘅身份提供者(IdP)**驗證用戶,並發出權杖,供服務提供者用於授權。佢同 SAML 相似,不過經常用於高度依賴 Microsoft 技術嘅情境。
- 例子:用戶登入一個由 Microsoft Azure Active Directory(AD)託管嘅企業應用程式,佢嘅身份可以用嚟存取其他聯合服務,包括由第三方供應商託管嘅應用程式。
雖然 WS-Federation 喺好多現代網頁環境入面已經大致被 OAuth2.0 同 OpenID Connect 等較新嘅協定取代,但喺舊有系統入面仍然有使用,尤其係以 Microsoft 為中心嘅企業。
5. LDAP(Lightweight Directory Access Protocol)
LDAP 係一個用嚟存取同管理目錄服務嘅協定,通常用於儲存用戶憑證,並喺集中式目錄(通常稱為目錄服務)入面管理存取控制。LDAP 本身唔係專門處理身份驗證或者授權,而係用嚟儲存同擷取身份數據,再由呢啲流程使用。
- 身份驗證:LDAP 容許應用程式向目錄服務查詢憑證(例如密碼),從而驗證用戶。
- 授權:佢亦管理用戶角色同權限,幫助判斷用戶可否存取某些資源。
- 例子:好多企業用基於 LDAP 嘅目錄(例如 Active Directory)進行身份驗證同授權,尤其係喺 Windows 環境入面。
LDAP 對企業管理內部系統嘅用戶存取至關重要,不過喺現代網頁環境,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)。