What is Single Sign-On (SSO)?

什麼是單一登入(SSO)?它解決什麼問題?

前言

不少網站登入時都有關於「Single Sign-On」的選項,像是只要登入 Google 帳號,就可以橫跨不同服務如 YouTube、Gmail,從痛點了解 SSO 如何解決多個服務間登入造成的潛在問題與相關流程,打造更方便與安全的登入體驗。

了解問題點

當登入許多網站使用大量的帳號與密碼時,為了方便管理人們會傾向使用簡單好記的密碼或乾脆使用相同密碼,導致糟糕的體驗和潛在的資訊安全漏洞,SSO 出現即是為了達成「一次登入處處通行」的目的。

SSO 原理

SSO 建立在聯合身份(Federated Identity)的概念上,舉例:

B 公司和 A 公司簽了合作協議,所以只需要出示 A 公司的員工證就可以進入 B 公司的大樓,而不用再辦一張 B 公司的門禁卡。

了解相關定義

  • SAML
    • 服務提供者(Service Provider, SP):提供服務的一方,例如 Slack 或 Notion
    • 身份提供者(Identity provider, IdP):驗證使用者身份的一方,例如「使用 Google 帳戶登入」,則 Google 就是 IdP
  • OIDC
    • 依賴方(Relying Party, RP):一個需要驗證使用者身分的應用程式或服務
    • OpenID 提供者(OpenID Provider, OP):等於 IdP,充當用戶身份驗證的可信任第三方

了解 SSO 實作標準和協定

安全聲明標記語言 SAML

(Security Assertion Markup Language, SAML) 一種基於 XML 的標準。

A公司身份認證系統(Identity Provider)B公司系統(Service Provider)員工A公司身份認證系統(Identity Provider)B公司系統(Service Provider)員工員工已在A公司登入並持有有效的員工證(Session)基於合作協議,B公司信任A公司的身份認證員工現在可以使用B公司服務無需另外辦理B公司門禁卡alt[員工證有效][員工證無效]1. 嘗試存取B公司系統2. 重導向至A公司認證系統(SAML AuthnRequest)3. 攜帶A公司員工證到認證系統4. 驗證員工身份(檢查員工證有效性)5. 回傳SAML Response(包含員工身份資訊)6. 將SAML Response提交給B公司系統7. 驗證SAML Response(確認來自信任的A公司)8. 建立B公司系統的登入Session9. 成功存取B公司系統5. 認證失敗6. 回到B公司系統7. 拒絕存取

OIDC(OpenID Connect)

建立在 OAuth 2.0 之上,整合授權與驗證。相較於 SAML 使用 XML,OIDC 使用 JWT 格式的憑證。

Google(OpenID Provider)B公司系統(Relying Party)使用者Google(OpenID Provider)B公司系統(Relying Party)使用者RP 現在已確認使用者身份並建立本地 Sessionalt[驗證成功][驗證失敗]1. 嘗試存取 B 公司系統2. 導向至 Google 登入頁面(Authorization Request)3. 登入 Google 帳號4. 驗證身份 (帳號密碼、多因子驗證等)5. 回傳授權碼 (Authorization Code)6. 將授權碼傳回 B 公司系統7. 使用授權碼交換 Token(Access Token + ID Token)8. 簽發 Token (包含 ID Token)9. 驗證 ID Token (檢查簽章、有效期等)10. 登入成功,存取 B 公司服務5. 驗證失敗 (錯誤訊息)6. 返回 B 公司系統7. 拒絕存取

Kerberos

常用於內部網路環境,特別是在 Windows 網域(如 Active Directory)中廣泛部署。Kerberos 採用對稱金鑰加密方式,使用票證(Ticket)來證明身份,在企業內部網路能提供快速且安全的 SSO 體驗。

服務伺服器KDC(Key Distribution Center)使用者服務伺服器KDC(Key Distribution Center)使用者1. 登入並請求 TGT (輸入帳號密碼)2. 簽發 TGT (票證授權票)3. 使用 TGT 請求存取某服務4. 簽發 Service Ticket (服務票)5. 攜帶 Service Ticket 存取服務6. 驗證成功,允許存取

總結

  • SAML (2002):在企業環境(尤其是傳統 IT、內網應用)誕生,設計時以「瀏覽器為中心」的 Web 應用為主要場景。
  • OIDC (2014):延伸自 OAuth 2.0,專門針對「現代 Web 與 Mobile 應用」設計,考慮了 API 驅動、App、單頁應用(SPA)的需求。
  • Kerberos (1980s):主要用於企業內部網路,特別是在 Windows 網域(Active Directory) 廣泛部署。透過對稱金鑰與票證機制 提供快速、安全的 SSO 體驗,避免在網路上重複傳輸密碼。

Single Sign-On (SSO) 透過讓用戶只需使用一組帳號密碼,即可安全登入並存取多個不同的網站和服務,大幅提升使用的便利性與管理效率。

雖然使用者不需要為每個網站設定不同密碼,降低了因密碼重複或過於簡單而被攻擊的風險,但便利同時也帶來了風險:若 SSO 主帳號遭到入侵,攻擊者就可能取得所有關聯服務的存取權限。除此此外,SSO 系統本身因為集中管理認證,若發生故障,會產生單點故障問題,導致用戶無法登入任何服務

延伸閱讀